第 6 章 滤波器结构 / Filter Structures
6.1 为什么关心实现结构?
理论上,一个传递函数 $H(z)$ 无论用哪种结构实现,在无限精度下输出完全相同。但实际硬件或嵌入式平台使用**有限字长(Finite Wordlength)**运算,不同结构在以下方面表现截然不同:
| 维度 | 影响 |
|---|---|
| 数值精度 | 舍入噪声(Round-off Noise)累积程度不同 |
| 稳定性 | 极点对系数量化的敏感度不同 |
| 计算量 | 乘法器/加法器/延迟单元数量不同 |
| 并行性 | 是否易于流水线化或并行化 |
| 模块性 | 是否便于系数调谐与参数复用 |
工程铁律:同样的 $H(z)$,选错结构可能导致滤波器在定点 DSP 上震荡、溢出或信噪比严重劣化。
flowchart TD
A[传递函数 H(z)] --> B{选择实现结构}
B -->|FIR| C[直接型 / 级联型 / 多相 / 频域采样]
B -->|IIR| D[直接I/II型 / 级联SOS / 并联型]
B -->|特殊需求| E[格型 Lattice]
C --> F[评估: 精度 · 稳定性 · 计算量]
D --> F
E --> F
F --> G[目标平台实现]
style B fill:#2d3748,stroke:#e2e8f0,color:#fff
style F fill:#2d3748,stroke:#e2e8f0,color:#fff
6.2 FIR 滤波器结构
FIR(Finite Impulse Response)的传递函数:
$$H(z) = \sum_{n=0}^{N-1} h[n] , z^{-n}$$
只有零点、没有极点(除原点),因此绝对稳定。
6.2.1 直接型(Direct Form)
也称横截型(Transversal Structure),是 FIR 最自然的实现:
$$y[n] = \sum_{k=0}^{N-1} h[k] , x[n-k]$$
| |
- 需要 $N$ 个乘法器、$N-1$ 个加法器、$N-1$ 个延迟单元
- 结构简单,适合系数对称时利用线性相位特性减半乘法量
6.2.2 级联型(Cascade Form)
将 $H(z)$ 分解为二阶节的乘积:
$$H(z) = \prod_{k=1}^{M} (b_{k0} + b_{k1}z^{-1} + b_{k2}z^{-2})$$
每个二阶节(Second-Order Section)独立实现,适合需要分别调谐零点位置的场合。FIR 级联型在工程中不如 IIR 级联型常用,因为 FIR 的直接型本身已经足够稳定。
6.2.3 多相分解(Polyphase Decomposition)
将滤波器系数按 $M$ 组抽取:
$$H(z) = \sum_{m=0}^{M-1} z^{-m} E_m(z^M)$$
其中 $E_m(z) = \sum_k h[kM+m] , z^{-k}$ 为多相分量(Polyphase Component)。
多相结构的威力在于:先滤波再抽取,避免计算被丢弃的样点。在采样率转换(Sample Rate Conversion)中,计算量可降为原来的 $1/M$。
| |
6.2.4 频域采样结构(Frequency Sampling Structure)
利用 DFT 系数表示 FIR:
$$H(z) = \frac{1-z^{-N}}{N} \sum_{k=0}^{N-1} \frac{H[k]}{1 - W_N^{-k} z^{-1}}$$
结构为梳状滤波器(Comb Filter) $\frac{1-z^{-N}}{N}$ 与 $N$ 个一阶谐振器的并联组合。适合窄带滤波器——大部分 $H[k]=0$,可省去对应支路,大幅减少计算量。
6.3 IIR 滤波器结构
IIR(Infinite Impulse Response)含极点,传递函数:
$$H(z) = \frac{\sum_{k=0}^{M} b_k z^{-k}}{1 - \sum_{k=1}^{N} a_k z^{-k}}$$
6.3.1 直接 I 型(Direct Form I)
分子分母分别用独立的延迟线实现:
$$y[n] = \sum_{k=0}^{M} b_k x[n-k] + \sum_{k=1}^{N} a_k y[n-k]$$
需要 $M+N$ 个延迟单元(两组延迟线),硬件效率低,且高阶时对系数量化极其敏感。
6.3.2 直接 II 型 / 标准型(Direct Form II / Canonical Form)
利用线性系统交换律,将两条延迟线合并为一条:
$$w[n] = x[n] + \sum_{k=1}^{N} a_k w[n-k]$$ $$y[n] = \sum_{k=0}^{M} b_k w[n-k]$$
仅需 $\max(M,N)$ 个延迟单元,是最节省存储器的直接实现。
| |
工程提示:转置直接 II 型(Transposed Direct Form II)在定点实现中,舍入噪声经过的路径更短,通常是单个二阶节的最佳选择。
6.3.3 级联型 — 二阶节 / Biquad / SOS
工程中最常用的 IIR 结构。 将高阶传递函数分解为若干二阶节(Second-Order Sections, SOS)的级联:
$$H(z) = G \prod_{k=1}^{K} \frac{b_{k0} + b_{k1}z^{-1} + b_{k2}z^{-2}}{1 - a_{k1}z^{-1} - a_{k2}z^{-2}}$$
每个 SOS 用转置直接 II 型实现:
| |
为什么级联型更好? 见 §6.4。
6.3.4 并联型(Parallel Form)
将 $H(z)$ 部分分式展开为二阶节之和:
$$H(z) = C + \sum_{k=1}^{K} \frac{e_{k0} + e_{k1}z^{-1}}{1 - a_{k1}z^{-1} - a_{k2}z^{-2}}$$
各支路并行计算,天然适合多核/DSP 多 MAC 单元。此外,每个支路独立工作,量化误差不会在支路间传播。
flowchart LR
X[x[n]] --> S1["SOS₁"]
X --> S2["SOS₂"]
X --> S3["SOS₃"]
S1 --> Sigma["∑"]
S2 --> Sigma
S3 --> Sigma
Sigma --> Y[y[n]]
style X fill:#2d3748,stroke:#e2e8f0,color:#fff
style Sigma fill:#2d3748,stroke:#e2e8f0,color:#fff
style Y fill:#2d3748,stroke:#e2e8f0,color:#fff
6.4 有限字长效应 / Finite Wordlength Effects
定点 DSP(如 TI C2000、ARM Cortex-M)中,所有运算在有限位宽下进行,引入三类核心问题。
6.4.1 量化噪声(Quantization Noise)
模拟信号经 ADC 量化为 $B$ 位,引入量化误差 $e[n]$,建模为均匀白噪声:
$$\sigma_e^2 = \frac{\Delta^2}{12} = \frac{2^{-2B}}{12}$$
每增加 1 位,信噪比提升约 6 dB。
6.4.2 系数量化(Coefficient Quantization)
将理想浮点系数 ${a_k, b_k}$ 量化为 $B$ 位定点值,零极点位置偏移。高阶直接型中,极点密度高的区域(如窄带低通滤波器)偏移尤为严重——可能导致极点移出单位圆,系统失稳。
6.4.3 为什么级联型更鲁棒?
| 特性 | 直接型(高阶) | 级联型(SOS) |
|---|---|---|
| 极点敏感度 | 全部极点耦合,量化误差相互叠加 | 每节仅 2 个极点,独立控制 |
| 稳定性裕度 | 高阶系数量化可能导致极点逸出 | 每节极点可单独验证稳定性 |
| 舍入噪声增益 | 噪声经全阶传递函数放大 | 每节噪声仅经后续节放大 |
| 动态范围 | 中间信号可能溢出 | 可逐节做 Scaling |
极点敏感度的数学直觉:$N$ 阶直接型中,每个系数变化 $\Delta a_k$ 影响所有 $N$ 个极点;级联型中每个系数仅影响本节的 2 个极点。敏感度正比于 $|H(z)|$ 在极点处的值,高阶直接型该值极大。
Scaling 策略:级联型可在每节之间插入缩放因子 $s_k$,使中间信号不超过动态范围,同时保持整体增益不变:
$$H(z) = G \prod_{k=1}^{K} \frac{1}{s_k} \cdot s_k \cdot H_k(z)$$
实际中常用 $L_1$ 范数或 $L_\infty$ 范数缩放:$s_k = |h_k[n]|_1$。
6.5 格型结构 / Lattice Structures
格型结构具有模块化、数值稳定、适合自适应滤波等独特优势,在语音编码(如 GSM 的 LPC)、线性预测和自适应滤波中广泛应用。
6.5.1 FIR 格型(全零点格型)
由反射系数(Reflection Coefficients)$k_m$ 定义,$m = 1, 2, \ldots, N-1$:
$$f_m[n] = f_{m-1}[n] + k_m , b_{m-1}[n-1]$$ $$b_m[n] = k_m , f_{m-1}[n] + b_{m-1}[n-1]$$
其中 $f_m$ 为前向预测误差,$b_m$ 为后向预测误差。$|k_m| < 1$ 保证稳定性。
flowchart LR
subgraph "Stage m"
FM1["f_(m-1)"] --> PLUS["+"]
BM1["b_(m-1)[n-1]"] --> K1["× k_m"] --> PLUS
FM1 --> K2["× k_m"] --> PLUS2["+"]
BM1 --> PLUS2
PLUS --> FM["f_m"]
PLUS2 --> BM["b_m"]
end
style PLUS fill:#2d3748,stroke:#e2e8f0,color:#fff
style PLUS2 fill:#2d3748,stroke:#e2e8f0,color:#fff
6.5.2 IIR 格型(零极点格型)
在 FIR 格型基础上增加梯形(Ladder)部分实现极点:
$$y[n] = f_0[n] = x[n] + \sum_{m=1}^{N} v_m , b_{m-1}[n-1]$$
反射系数 $k_m$ 控制极点,梯形系数 $v_m$ 控制零点。只要 $|k_m| < 1$,系统稳定——稳定性的检验退化为检查 $|k_m|$ 是否小于 1,这是格型结构的核心优势。
6.5.3 反射系数的获取
从直接型系数到反射系数的转换通过 Levinson-Durbin 递归完成:
| |
反射系数又称为 PARCOR 系数(Partial Correlation),在线性预测编码(LPC)中用于语音的压缩与合成。
6.6 工程选择指南
flowchart TD
Q1{FIR 还是 IIR?}
Q1 -->|FIR| Q2{要求线性相位?}
Q1 -->|IIR| Q4{阶数 > 4?}
Q2 -->|是| A1[直接型 / 线性相位对称结构]
Q2 -->|否 / 采样率转换| A2[多相分解]
Q4 -->|是| A3[级联 Biquad SOS + 逐节 Scaling]
Q4 -->|否| A4[转置直接II型 单节]
Q5{自适应 / 语音编码?} -->|是| A5[格型 Lattice]
Q5 -->|多核并行| A6[并联型 Parallel]
style Q1 fill:#1a365d,stroke:#e2e8f0,color:#fff
style Q4 fill:#1a365d,stroke:#e2e8f0,color:#fff
快速决策表
| 应用场景 | 推荐结构 | 理由 |
|---|---|---|
| 通用 FIR | 直接型(线性相位) | 简单,可利用对称性减半乘法 |
| 抽取/插值 | 多相分解 | 计算量降至 $1/M$ |
| 通用 IIR | 级联 Biquad | 量化鲁棒,逐节可调 |
| 多核 DSP | 并联型 | 天然并行 |
| 自适应滤波 | 格型 | 反射系数实时更新,稳定可判 |
| 定点嵌入式 IIR | 级联 Biquad + Scaling | 防溢出、低敏感度 |
实践建议
- 永远不要用高阶直接型 IIR——即使浮点仿真通过,定点实现大概率出问题
- 级联型 Section 排序有讲究:将极点对量化敏感的节放在前面,减少噪声经后续节放大
- 零极点配对:每个 SOS 中将距离最近的零极点配对,最小化系数量化影响
- Scaling 不可省略:定点级联实现必须逐节缩放,$L_2$ 范数缩放是工程常用折中
- 验证方法:在目标位宽下仿真,检查:(a) 极点是否仍在单位圆内;(b) 空闲信道输出是否接近零;(c) 频率响应偏差是否可接受
本章小结
滤波器实现结构是将数学传递函数映射到工程硬件/软件的关键桥梁。同样的 $H(z)$,不同结构在有限字长下的表现差异巨大:
- FIR 天然稳定,结构选择主要考虑计算效率(多相分解用于采样率转换)
- IIR 结构选择直接影响数值稳定性——级联 Biquad 是工程默认选择
- 格型结构在自适应和语音编码领域不可替代
- 有限字长效应是理论设计与实际实现之间的鸿沟,级联型通过极点解耦和逐节缩放提供了最好的鲁棒性
“The difference between theory and practice is that in theory there is no difference, but in practice there is.” — 在 DSP 实现中,这句话从未如此真实。