【问题标题】:How is the frequency defined in matlabs lowpassmatlab低通中的频率是如何定义的
【发布时间】:2020-04-17 08:10:17
【问题描述】:

documentation on lowpass我发现了这个:

y = lowpass(x,wpass) 使用低通滤波器过滤输入信号x 具有归一化通带频率wpass 的滤波器,以 π 为单位 弧度/样本。 lowpass 使用带阻带的最小阶滤波器 60分贝的衰减和补偿由引入的延迟 筛选。如果x 是矩阵,则函数过滤每一列 独立。

y = lowpass(x,fpass,fs) 指定 x 已在 fs 赫兹的速率。 fpass 是滤波器的通带频率 赫兹。

但似乎第二个 y = lowpass(x,fpass,fs) 并没有真正使用 Hz,因为它不会过滤高于 fpass 规定的频率。

如何使用第一个?如果我想要一个截止频率为x 的低通滤波器,我该如何计算wpass?我需要做wpass = x/samplerate吗?我对那些弧度有点困惑。

【问题讨论】:

    标签: matlab filter lowpass-filter


    【解决方案1】:

    归一化的截止频率为

    Wn = fc/(fs/2)
    

    其中fc 是您想要的截止频率,fs 是采样率。 2 与 Nyquist-Shannon-theorem 有关,但我不想混淆。请注意,过滤器从不锐利。所以它实际上不会在fc 处被切断,但它会抑制更高的频率。

    要实际控制滤镜的锐度,我建议直接设计滤镜: 例如butter 为您提供 Butterworth 滤波器(或 Bessel 滤波器 - 不如 Butterworth 锐利,但在 < fcChebyshev 处也有更好的增益> 滤波器,它更锐利但在< fc 处引入了增益振荡)。根据我的经验,通常会应用四阶 Butterworth 过滤器。

    [b,a] = butter(4,Wn);
    sig_flt = filter(b,a,sig);
    

    编辑:事实上,使用的是recommended(正如@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滤波器)

    【讨论】:

    • 对于butter,最好避免使用b,a 输出并改用z,p,k,以避免出现数值不稳定问题。见here
    • @LuisMendo 谢谢!我不知道这个。我今天学到的一件事 =)
    猜你喜欢
    • 2010-12-01
    • 2012-08-19
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2013-12-29
    相关资源
    最近更新 更多