如何在 matlabs 低通中定义频率



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滤波器)

相关内容

  • 没有找到相关文章

最新更新