第 5 章 IIR 滤波器 / IIR Filters
5.1 IIR 滤波器的定义
IIR(Infinite Impulse Response,无限冲激响应)滤波器的核心特征是输出不仅依赖当前和过去的输入,还依赖过去的输出——即存在反馈回路。一旦激励消失,反馈机制使冲激响应理论上可以无限延续。
差分方程
IIR 滤波器的一般差分方程 (Difference Equation) 为:
$$y[n] = \sum_{k=0}^{M} b_k , x[n-k] - \sum_{k=1}^{N} a_k , y[n-k]$$
其中 $b_k$ 为前馈系数 (feedforward coefficients),$a_k$ 为反馈系数 (feedback coefficients),$M$ 和 $N$ 分别为分子和分母的阶数。
系统函数
对差分方程做 $z$ 变换,得到系统函数 (System Function):
$$H(z) = \frac{\sum_{k=0}^{M} b_k , z^{-k}}{1 + \sum_{k=1}^{N} a_k , z^{-k}} = \frac{B(z)}{A(z)}$$
$A(z)$ 的根构成系统的极点 (Poles)。系统稳定的充要条件是:所有极点位于单位圆内部($|p_k| < 1$)。
graph LR
X["x[n]"] -->|"b₀"| SUM["Σ"]
X -->|"b₁·z⁻¹"| SUM
Y["y[n]"] -->|"a₁·z⁻¹"| SUM2["-Σ"]
SUM2 --> SUM
SUM --> Y
style X fill:#2d5a88,color:#fff
style Y fill:#2d5a88,color:#fff
style SUM fill:#4a7c59,color:#fff
style SUM2 fill:#8b4513,color:#fff
5.2 IIR 与 FIR 对比
| 特性 | FIR | IIR |
|---|---|---|
| 冲激响应长度 | 有限($N$ 点) | 理论上无限 |
| 线性相位 (Linear Phase) | ✅ 可精确实现 | ❌ 一般非线性 |
| 稳定性 | 天然 BIBO 稳定 | 需确保极点在单位圆内 |
| 实现相同指标的阶数 | 较高 | 较低 |
| 系数量化敏感度 | 较低 | 较高(极点位置敏感) |
| 设计方法 | 窗函数法、等波纹最优法 | 模拟原型法 |
工程取舍:IIR 以非线性相位为代价换取更低阶数和更少计算量。在语音处理、生物信号等对相位要求不严的场景中,IIR 常是首选;而在数据通信、图像处理等要求线性相位的场景中,FIR 更合适。
5.3 模拟原型设计法
IIR 数字滤波器的主流设计路线是间接法:
- 先设计满足指标要求的模拟滤波器($s$ 域)
- 通过映射变换将 $H_a(s)$ 转换为 $H(z)$($z$ 域)
为什么要绕道模拟域? 因为模拟滤波器的设计理论(Butterworth, Chebyshev 等)在 20 世纪已高度成熟,有封闭公式和设计表格可直接使用。而直接在数字域逼近任意幅度响应是一个困难得多的数学问题。
graph TD
A["数字滤波器指标
ωp, ωs, Ap, As"] -->|"频率预畸变"| B["模拟指标
Ωp, Ωs"]
B --> C["设计模拟原型
Ha(s)"]
C -->|"双线性变换"| D["数字滤波器
H(z)"]
style A fill:#2d5a88,color:#fff
style B fill:#4a7c59,color:#fff
style C fill:#4a7c59,color:#fff
style D fill:#2d5a88,color:#fff
5.4 模拟低通滤波器原型
5.4.1 Butterworth(巴特沃斯 / 最平坦滤波器)
幅度响应:
$$|H_a(j\Omega)|^2 = \frac{1}{1 + \left(\frac{\Omega}{\Omega_c}\right)^{2N}}$$
特点:通带内单调下降,无波纹;过渡带最宽;在截止频率 $\Omega_c$ 处衰减恒为 $-3$ dB。
5.4.2 Chebyshev Type I(切比雪夫 I 型)
$$|H_a(j\Omega)|^2 = \frac{1}{1 + \varepsilon^2 , T_N^2!\left(\frac{\Omega}{\Omega_p}\right)}$$
其中 $T_N(\cdot)$ 为 $N$ 阶切比雪夫多项式。特点:通带内等波纹 (Equipripple),阻带单调下降。同指标下阶数低于 Butterworth。
5.4.3 Chebyshev Type II(切比雪夫 II 型 / 逆切比雪夫)
$$|H_a(j\Omega)|^2 = \frac{1}{1 + \left[\varepsilon^2 , T_N^2!\left(\frac{\Omega_s}{\Omega}\right)\right]^{-1}}$$
特点:通带单调下降,阻带等波纹。
5.4.4 Elliptic(椭圆滤波器 / Cauer 滤波器)
$$|H_a(j\Omega)|^2 = \frac{1}{1 + \varepsilon^2 , R_N^2!\left(\frac{\Omega}{\Omega_p}\right)}$$
其中 $R_N(\cdot)$ 为椭圆有理函数。特点:通带和阻带均等波纹,在四种原型中阶数最低,但过渡带特性最复杂。
原型对比
| 原型 | 通带 | 阻带 | 同指标阶数 | 过渡带陡度 |
|---|---|---|---|---|
| Butterworth | 单调 | 单调 | 最高 | 最缓 |
| Chebyshev I | 等波纹 | 单调 | 中等 | 中等 |
| Chebyshev II | 单调 | 等波纹 | 中等 | 中等 |
| Elliptic | 等波纹 | 等波纹 | 最低 | 最陡 |
工程建议:如果对波纹不敏感,优先选 Elliptic(最低阶数 = 最低计算量);如果需要平滑的通带响应,选 Butterworth。
5.5 双线性变换法
基本原理
双线性变换 (Bilinear Transform) 将 $s$ 平面映射到 $z$ 平面:
$$s = \frac{2}{T} \cdot \frac{z - 1}{z + 1}$$
其中 $T$ 为采样周期。该映射是一对一的,整个虚轴 $j\Omega$ 映射到单位圆,从根本上避免了脉冲响应不变法 (Impulse Invariance) 的频谱混叠问题。
频率预畸变 (Frequency Prewarping)
双线性变换引入了频率轴的非线性映射:
$$\Omega = \frac{2}{T} \tan!\left(\frac{\omega}{2}\right)$$
这意味着数字频率 $\omega$ 和模拟频率 $\Omega$ 之间不是线性关系。设计时必须先将数字指标"预畸变"到模拟频率,再设计模拟原型,这样经双线性变换映射回来的频率恰好落在目标位置。
| |
为什么需要预畸变? 若直接用数字指标对应的线性模拟频率设计原型,经双线性变换后截止频率会发生偏移。预畸变通过"提前反向补偿"抵消这一非线性畸变。
5.6 IIR 滤波器的实现结构
同一种 $H(z)$ 可以用不同的信号流图 (Signal Flow Graph) 实现,数值性能差异显著。
5.6.1 直接 I 型 (Direct Form I)
分别实现 $B(z)$ 和 $1/A(z)$,需要 $M+N$ 个延迟单元。
5.6.2 直接 II 型 (Direct Form II / Canonical Form)
将 $B(z)$ 和 $1/A(z)$ 共享延迟单元,仅需 $\max(M, N)$ 个延迟单元。
问题:直接型将所有极点集中在一个高阶多项式中,系数量化误差可能导致极点漂移出单位圆——尤其在高阶时极不稳定。
5.6.3 级联型 (Cascade / Second-Order Sections)
将 $H(z)$ 分解为多个二阶节 (Biquad / SOS) 的级联:
$$H(z) = \prod_{i=1}^{K} \frac{b_{0i} + b_{1i} z^{-1} + b_{2i} z^{-2}}{1 + a_{1i} z^{-1} + a_{2i} z^{-2}}$$
优势:每个二阶节仅含一对共轭极点,系数量化敏感度大幅降低;可独立调整增益。
5.6.4 并联型 (Parallel Form)
将 $H(z)$ 部分分式展开为二阶节之和:
$$H(z) = C + \sum_{i=1}^{K} \frac{b_{0i} + b_{1i} z^{-1}}{1 + a_{1i} z^{-1} + a_{2i} z^{-2}}$$
优势:各支路并行计算,适合硬件实现;量化噪声各支路独立。
结构对比
| 结构 | 延迟单元 | 量化敏感度 | 工程推荐 |
|---|---|---|---|
| 直接 I/II 型 | 少 | 高(高阶危险) | 仅低阶可用 |
| 级联型 (SOS) | 中 | 低 | ✅ 最常用 |
| 并联型 | 中 | 低 | 适合并行硬件 |
工程实践:绝大多数 DSP 库(MATLAB、SciPy)默认以级联二阶节 (SOS) 形式输出 IIR 滤波器系数。
5.7 工程应用
5.7.1 典型设计流程
graph TD
A["确定滤波器指标
通带/阻带频率、衰减"] --> B["选择原型
Butterworth / Chebyshev / Elliptic"]
B --> C["调用 scipy.signal 设计函数"]
C --> D["转换为 SOS 形式"]
D --> E["用 sosfilt 或 lfilter 滤波"]
E --> F["验证频响与稳定性"]
style A fill:#2d5a88,color:#fff
style B fill:#4a7c59,color:#fff
style C fill:#4a7c59,color:#fff
style D fill:#4a7c59,color:#fff
style E fill:#2d5a88,color:#fff
style F fill:#8b4513,color:#fff
5.7.2 Python 示例
| |
5.7.3 关键 API 速查
| 函数 | 用途 |
|---|---|
signal.butter(N, Wn) | Butterworth 滤波器设计 |
signal.cheby1(N, rp, Wn) | Chebyshev I 型 |
signal.cheby2(N, rs, Wn) | Chebyshev II 型 |
signal.ellip(N, rp, rs, Wn) | 椭圆滤波器 |
signal.buttord(wp, ws, …) | 自动计算 Butterworth 阶数 |
signal.iirfilter(N, Wp, …) | 通用 IIR 设计接口 |
signal.sosfilt(sos, x) | SOS 级联滤波(推荐) |
signal.sosfreqz(sos) | SOS 频率响应 |
signal.sos2zpk(sos) | SOS → 零极点增益(稳定性验证) |
⚠️ 重要:始终使用
output='sos'并配合sosfilt()而非lfilter(b, a, x)。直接型传递函数在高阶时可能因浮点精度导致不稳定。
5.8 本章小结
- IIR 滤波器通过反馈实现无限冲激响应,以较低阶数实现陡峭过渡带,但一般不具备线性相位。
- 设计主流路线为模拟原型法:选择原型(Butterworth / Chebyshev / Elliptic)→ 频率预畸变 → 双线性变换。
- 双线性变换的频率预畸变是保证截止频率准确的关键步骤。
- 实现结构中,级联二阶节 (SOS) 是工程上最稳定、最推荐的形式。
- 工程实践中,始终验证极点位置($|p| < 1$),优先使用
sosfilt而非直接型lfilter。
下一章:FIR 滤波器设计