计算数字低通butterworth滤波器的顺序

时间:2018-04-13 22:31:54

标签: matlab filtering signal-processing

我被要求使用MATLAB设计数字低通butterworth滤波器,具有以下规格:

  1. 截止频率为1.5 kHz
  2. 3 kHz时的10 dB阻带衰减
  3. 采样频率为8 kHz
  4. 我已计算出滤波器的顺序为1.57。我们知道我们需要将此值设置为确保过滤器满足规范。但是,在matlab我正在使用

    buttord()
    

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

1 个答案:

答案 0 :(得分:3)

没有最高阶的butterworth过滤器,因为任何大于或等于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 butterworth滤波器。

enter image description here

如果您将过滤器导出到工作区(假设您已保存到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。

enter image description here