在lowpass
的文档中,我发现了这个:
y = lowpass(x,wpass)
使用低通滤除输入信号x
具有归一化通带频率的滤波器,wpass
单位为π 辐射/采样。lowpass
使用带阻带的最小阶滤波器 衰减 60 dB,并补偿 滤波器。如果x
是矩阵,则该函数将筛选每一列 独立地。
y = lowpass(x,fpass,fs)
指定x
已在fs
赫兹的速率。 滤波器的通带频率fpass
赫。
但似乎第二个,y = lowpass(x,fpass,fs)
,并没有真正使用 Hz,因为它不会按fpass
过滤高于该频率的频率。
我如何使用第一个?如果我想要截止频率x
的低通滤波器,如何计算wpass
?我需要做wpass = x/samplerate
吗?我对那些弧度有点困惑。
归一化截止频率为
Wn = fc/(fs/2)
其中fc
是您想要的截止频率,fs
是采样率。2与奈奎斯特-香农定理有关,但我不希望有任何混淆。请注意,过滤器永远不会清晰。因此,它实际上不会在fc
时切断,但会抑制更高的频率。
为了实际控制滤镜的锐度,我建议直接设计滤镜: 例如butter
为您提供了一个巴特沃斯滤波器(或贝塞尔滤波器 - 不如巴特沃斯滤波器尖锐,但在< fc
时增益也更好,或切比雪夫滤波器,它更锐利,但在< fc
时引入增益振荡)。根据我的经验,通常应用四阶巴特沃兹滤波器。
[b,a] = butter(4,Wn);
sig_flt = filter(b,a,sig);
编辑:事实上,建议使用(如@LuisMendo指出的)
[z,p,k] = butter(4,Wn);
sos = zp2sos(z,p,k); % convert to zero-pole-gain filter parameter
sig_flt = sosfilt(sos,sig);
为避免数值错误:
通常,使用 [z,p,k] 语法来设计 IIR 滤波器。
(切比雪夫也是IIR滤波器)