计算数字低通巴特沃斯滤波器的阶数

Calculating the order of digital low pass butterworth filter

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

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

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

buttord()

此函数 return 是本例中的最低阶。那么如何 return 最高阶而不是 return 最低阶呢?

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