You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

级联数字滤波:如何合并各滤波器的传递函数系数?

级联滤波器传递函数系数的合并方法

理论上的正确操作

当两个滤波器级联时,总传递函数是两个滤波器传递函数的乘积。假设:

  • Butterworth滤波器的传递函数为 $H_1(z) = \frac{b_1(z)}{a_1(z)}$,其中 $b_1$ 是分子系数,$a_1$ 是分母系数
  • Chebyshev II滤波器的传递函数为 $H_2(z) = \frac{b_2(z)}{a_2(z)}$,其中 $b_2$ 是分子系数,$a_2$ 是分母系数

那么级联后的总传递函数为:
$$H(z) = H_1(z) \times H_2(z) = \frac{b_1(z) \times b_2(z)}{a_1(z) \times a_2(z)}$$

这里的多项式乘法,对应系数序列的卷积操作——因为两个多项式相乘的结果系数,本质就是两个系数序列的卷积。所以正确的合并方式是:

  • 总分子系数:conv(b1, b2)
  • 总分母系数:conv(a1, a2)

关于“相乘和卷积结果相似”的解释

你看到的幅度响应相似只是巧合,原因可能是:

  • 滤波器阶数较低,直接系数相乘(错误操作)的结果在可视化精度下和卷积结果差异不明显
  • 幅度响应的可视化范围或分辨率不足以展示两种操作的细微差异

举个简单例子:如果b1是[1 2],b2是[3 4],卷积结果是[3 10 8](对应多项式3+10z+8z²),而直接相乘得到[3 8](对应3+8z),两者的传递函数完全不同,只是低阶小范围的幅度响应可能看起来接近,但理论上是错误的。

Matlab实操示例

假设已经通过butter()和cheby2()得到了两组系数b1,a1和b2,a2,合并代码如下:

% 合并级联滤波器的系数
b_total = conv(b1, b2);
a_total = conv(a1, a2);

% 验证幅度响应
freqz(b_total, a_total);

内容的提问来源于stack exchange,提问作者tehgankerer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:17:41