【问题标题】:Calculating the order of digital low pass butterworth filter计算数字低通巴特沃斯滤波器的阶数
【发布时间】:2018-09-24 08:13:34
【问题描述】:

我被要求使用具有以下规格的 MATLAB 设计一个数字低通巴特沃斯滤波器:

  1. 1.5 kHz 的截止频率
  2. 3 kHz 时 10 dB 阻带衰减
  3. 8 kHz 的采样频率

我计算出滤波器的阶数为 1.57。正如我们所知,我们需要限制这个值以确保过滤器满足规范。但是,在 matlab 中我使用的是

buttord()

此函数返回在这种情况下为 1 的最低顺序。那么如何返回最高顺序而不是返回最低顺序呢?

【问题讨论】:

    标签: matlab filtering signal-processing


    【解决方案1】:

    没有最高阶的巴特沃斯过滤器,因为任何大于或等于buttord 返回的结果的阶都可以满足规范。

    由于采样率为 8kHz,因此奈奎斯特频率为 4kHz。如果您假设 3dB 通带纹波(这是标准的),那么调用 buttord 我们得到

    Fn = 4000;
    Wp = 1500/Fn;
    Ws = 3000/Fn;
    Rp = 3;
    Rs = 10;
    ord = buttord(Wp, Ws, Rp, Rs)
    

    给出ord = 1。使用滤波器设计器,我们可以设计这样一个滤波器,我们看到确实存在一个符合规范的 1 阶巴特沃斯滤波器。

    如果您将过滤器导出到您的工作区(假设您保存到SOSG 变量中),那么您可以使用freqz 进行绘图,如下所示

    [b,a] = sos2tf(SOS,G);
    freqz(b,a,[],8000);
    

    如果你想使用butter 设计一个过滤器,那么你可以使用

    [n,Wn] = buttord(Wp, Ws, Rp, Rs);
    [b,a] = butter(n,Wn);
    freqz(b,a,[],8000);
    

    这会导致阻带开始处的衰减正好为 10dB,而通带处的衰减小于 3dB。

    【讨论】:

    • 谢谢,为什么我不能使用 butter() 和 freqz() 绘制这个过滤器响应?当我这样做时,我会得到一个空的地块。和相位响应。请尝试一下,谢谢
    • 已编辑。让我知道这是否有帮助。
    • 谢谢天才!
    • 但是空矩阵 [] 是如何解决问题而不是指定过滤器阶数 n 的呢?
    • 空矩阵只是freqz参数列表中的一个占位符。第三个参数指定用于生成绘图的样本数。我将其留空,让 MATLAB 决定使用多少样本。重申 freqz(b,a,n,fs) 中的 n 参数不是过滤顺序,它需要是大于 1 的任何整数。虽然更大的值会产生更准确的图。
    猜你喜欢
    • 2014-01-22
    • 2019-10-09
    • 1970-01-01
    • 2012-05-03
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多