过滤器响应根据其顺序改变

信息处理 过滤器设计 Python
2022-02-23 08:59:30

我想为 60 Hz 噪声构建一个带阻滤波器。所以,我尝试使用巴特沃斯过滤器来实现这个规范。但是,当我选择8的顺序时,我得到了以下响应,这是有道理的。

8 阶滤波器响应

但是,当我选择 30 个订单时。我得到了这个奇怪的反应。这是为什么?

30 阶滤波器响应

分别获取 8 和 30 阶系数的代码如下所示

# fs = 200 b, a = signal.butter(8, [58 / (fs / 2), 62 / (fs / 2)], btype='bandstop') b, a = signal.butter(30, [58 / (fs / 2), 62 / (fs / 2)], btype='bandstop')

1个回答

30 的数量级太高了,特别是对于您想要的具有如此窄带的带阻滤波器。

您的滤波器将在频率 58 和 62 Hz 之间的一个非常小的半圆中有 15 个极点(以及负频率中的另外 15 个极点)。

您的a系数对应于 30 阶多项式,其中 30 个根对应于滤波器的极点。

请注意,任何微小的数值近似(您无法摆脱)都会改变所有根的位置。您很可能会在单位圆之外找到根(这会使您的过滤器不稳定)。

因此,高阶滤波器的难看频率响应是意料之中的。

根据经验,不要尝试实现 10 以上阶的 IIR 滤波器。