第 10 章 自适应滤波 / Adaptive Filtering

8.1 为什么需要自适应滤波

经典 FIR/IIR 滤波器的设计前提是已知信号的统计特性——截止频率、通带纹波、阻带衰减等参数在设计阶段就已确定。然而在真实通信系统中,这一前提常常不成立:

  • 时变信道 (Time-Varying Channel):移动通信中,多径衰落信道冲激响应随终端运动、环境变化而持续演变。
  • 未知环境 (Unknown Environment):声学回声路径取决于房间几何与温度,无法预先精确建模。
  • 非平稳信号 (Non-Stationary Signal):干扰信号的频率和功率可能随时改变。

自适应滤波器 (Adaptive Filter) 的核心思想是:不预设滤波器系数,而是利用输入信号与期望响应实时调整系数,使滤波器自动逼近最优解

graph LR
    A["输入 x[n]"] --> B["自适应滤波器
w[n]"] B --> C["输出 y[n]"] D["期望 d[n]"] --> E["误差 e[n] = d[n] - y[n]"] C --> E E -->|"反馈调整"| B style B fill:#1a1a2e,color:#ffffff style E fill:#16213e,color:#ffffff

8.2 维纳滤波器 / Wiener Filter

8.2.1 MMSE 准则

维纳滤波器是自适应滤波的理论基准——它给出了均方误差 (Mean Square Error, MSE) 意义下的最优线性滤波器。

定义代价函数:

$$J(\mathbf{w}) = E\left[|e[n]|^2\right] = E\left[|d[n] - \mathbf{w}^H \mathbf{x}[n]|^2\right]$$

其中 $\mathbf{x}[n] = [x[n], x[n-1], \ldots, x[n-M+1]]^T$ 为输入向量,$\mathbf{w}$ 为 $M \times 1$ 系数向量。

8.2.2 最优解

对 $J(\mathbf{w})$ 求导并令其为零,得到 Wiener-Hopf 方程

$$\nabla J = -2\mathbf{p} + 2\mathbf{R}\mathbf{w} = 0$$

最优解为:

$$\boxed{\mathbf{w}_o = \mathbf{R}^{-1}\mathbf{p}}$$

其中:

  • $\mathbf{R} = E[\mathbf{x}[n]\mathbf{x}^H[n]]$ —— 输入自相关矩阵 (Autocorrelation Matrix)
  • $\mathbf{p} = E[\mathbf{x}[n]d^*[n]]$ —— 输入与期望的互相关向量 (Cross-correlation Vector)

最小均方误差为:

$$J_{\min} = \sigma_d^2 - \mathbf{p}^H\mathbf{R}^{-1}\mathbf{p}$$

工程问题:直接求解 $\mathbf{w}_o$ 需要计算 $\mathbf{R}^{-1}$,计算复杂度为 $O(M^3)$,且要求信号统计特性已知(通常不现实)。因此需要迭代算法来在线逼近最优解。

8.3 LMS 算法 / Least Mean Squares

8.3.1 梯度下降的随机近似

最陡下降法 (Steepest Descent) 的迭代公式为:

$$\mathbf{w}[n+1] = \mathbf{w}[n] - \frac{\mu}{2}\nabla J(\mathbf{w}[n])$$

LMS 的关键贡献:用瞬时梯度代替统计梯度,即用单次样本近似期望值:

$$\hat{\nabla} J = -2,e[n],\mathbf{x}[n]$$

代入得到 LMS 迭代公式:

$$\boxed{\mathbf{w}[n+1] = \mathbf{w}[n] + \mu \cdot e[n] \cdot \mathbf{x}[n]}$$

其中误差 $e[n] = d[n] - \mathbf{w}^H[n]\mathbf{x}[n]$,$\mu$ 为步长参数 (Step Size)。

8.3.2 步长参数 $\mu$ 的选择

步长 $\mu$ 是 LMS 最关键的设计参数,控制着稳定性、收敛速度与稳态误差三者的平衡。

稳定性条件(充分条件):

$$0 < \mu < \frac{2}{M \cdot \sigma_x^2}$$

其中 $M$ 为滤波器阶数,$\sigma_x^2$ 为输入信号功率。工程实践中常用 $\lambda_{\max}$($\mathbf{R}$ 最大特征值)表示为:

$$0 < \mu < \frac{2}{\lambda_{\max}}$$

权衡关系

参数大 $\mu$小 $\mu$
收敛速度
稳态误差 (Misadjustment)
跟踪能力(时变环境)
稳定性风险

8.3.3 LMS 伪代码

1
2
3
4
5
6
7
初始化: w[0] = 0 (M×1 向量), 选择 μ
for n = 0, 1, 2, ... do
    x_vec = [x[n], x[n-1], ..., x[n-M+1]]^T
    y[n]   = w[n]^H · x_vec
    e[n]   = d[n] - y[n]
    w[n+1] = w[n] + μ · e[n] · x_vec
end for

计算复杂度:每次迭代 $O(M)$ 次乘加,非常适合实时嵌入式实现。

8.4 NLMS 算法 / Normalized LMS

8.4.1 动机

LMS 的收敛性能高度依赖输入功率 $\sigma_x^2$。当输入信号功率波动较大时(如语音信号),固定步长难以兼顾不同功率段的收敛需求。

8.4.2 归一化步长

NLMS 将步长归一化为输入向量功率的倒数:

$$\boxed{\mathbf{w}[n+1] = \mathbf{w}[n] + \frac{\tilde{\mu}}{|\mathbf{x}[n]|^2 + \delta} \cdot e[n] \cdot \mathbf{x}[n]}$$

其中:

  • $\tilde{\mu}$ 为归一化步长,通常 $0 < \tilde{\mu} < 2$
  • $\delta$ 为正则化常数,防止 $|\mathbf{x}[n]|^2 \to 0$ 时除零

优势:收敛速度对输入功率不敏感,是回声消除等应用的首选算法。

1
2
3
4
5
6
7
8
初始化: w[0] = 0, 选择 μ̃, δ
for n = 0, 1, 2, ... do
    x_vec = [x[n], x[n-1], ..., x[n-M+1]]^T
    y[n]  = w[n]^H · x_vec
    e[n]  = d[n] - y[n]
    norm  = x_vec^H · x_vec + δ
    w[n+1] = w[n] + (μ̃ / norm) · e[n] · x_vec
end for

8.5 RLS 算法 / Recursive Least Squares

8.5.1 指数加权最小二乘

RLS 直接在线求解加权最小二乘问题,代价函数为:

$$J_{RLS}[n] = \sum_{i=0}^{n} \lambda^{n-i} |d[i] - \mathbf{w}^H\mathbf{x}[i]|^2$$

其中 $\lambda$($0 \ll \lambda \leq 1$)为遗忘因子 (Forgetting Factor),使新数据权重更大,适应非平稳环境。

8.5.2 迭代公式

利用矩阵求逆引理 (Matrix Inversion Lemma),避免每次直接求逆:

$$\mathbf{k}[n] = \frac{\lambda^{-1}\mathbf{P}[n-1]\mathbf{x}[n]}{1 + \lambda^{-1}\mathbf{x}^H[n]\mathbf{P}[n-1]\mathbf{x}[n]}$$

$$e[n] = d[n] - \mathbf{w}^H[n-1]\mathbf{x}[n]$$

$$\mathbf{w}[n] = \mathbf{w}[n-1] + \mathbf{k}[n] \cdot e[n]$$

$$\mathbf{P}[n] = \lambda^{-1}\mathbf{P}[n-1] - \lambda^{-1}\mathbf{k}[n]\mathbf{x}^H[n]\mathbf{P}[n-1]$$

8.5.3 与 LMS 的对比

特性LMSRLS
收敛速度慢(与特征值扩散度相关)快(约 $2M$ 次迭代)
计算复杂度$O(M)$$O(M^2)$
稳态误差中等较低
数值稳定性需注意 $\mathbf{P}$ 正定性
适用场景计算资源受限快速跟踪要求高
1
2
3
4
5
6
7
8
初始化: w[0] = 0, P[0] = δ⁻¹·I (δ 为小正数), 选择 λ
for n = 0, 1, 2, ... do
    x_vec = [x[n], x[n-1], ..., x[n-M+1]]^T
    e[n]  = d[n] - w[n-1]^H · x_vec
    k[n]  = (λ⁻¹ · P[n-1] · x_vec) / (1 + λ⁻¹ · x_vec^H · P[n-1] · x_vec)
    w[n]  = w[n-1] + k[n] · e[n]
    P[n]  = λ⁻¹ · P[n-1] - λ⁻¹ · k[n] · x_vec^H · P[n-1]
end for
graph TD
    A["算法选择"] --> B{"计算资源充足?"}
    B -->|"是"| C{"收敛速度要求高?"}
    B -->|"否"| D["LMS / NLMS"]
    C -->|"是"| E["RLS"]
    C -->|"否"| D
    D --> F{"输入功率波动?"}
    F -->|"是"| G["NLMS"]
    F -->|"否"| H["LMS"]
    style A fill:#0f3460,color:#ffffff
    style E fill:#e94560,color:#ffffff
    style G fill:#533483,color:#ffffff
    style H fill:#16213e,color:#ffffff

8.6 四种经典配置

自适应滤波器的强大之处在于,同一算法框架可应用于不同的信号连接拓扑,形成四种经典配置。

graph TB
    subgraph A["系统辨识"]
        direction LR
        A1["x[n]"] --> A2["未知系统 H(z)"] --> A3["d[n]"]
        A1 --> A4["自适应滤波器"] --> A5["y[n]"]
        A3 --> A6["e[n]=d-y"]
        A5 --> A6
    end
    subgraph B["逆建模"]
        direction LR
        B1["x[n]"] --> B2["未知系统 H(z)"] --> B3["x[n]+噪声"]
        B3 --> B4["自适应滤波器"] --> B5["y[n]≈x[n]"]
    end
    style A fill:#1a1a2e,color:#ffffff
    style B fill:#1a1a2e,color:#ffffff

8.6.1 系统辨识 (System Identification)

目标:用自适应滤波器建模未知系统。

  • 输入 $x[n]$ 同时送入未知系统和自适应滤波器
  • 期望 $d[n]$ 为未知系统输出(含噪声)
  • 收敛后 $\mathbf{w} \approx$ 未知系统的冲激响应

应用:信道探测、声学回声路径估计、工业过程建模。

8.6.2 逆建模 / 均衡 (Inverse Modeling / Equalization)

目标:构造未知系统的逆系统,补偿失真。

  • 期望 $d[n]$ 为原始发送信号(训练序列)
  • 自适应滤波器学习信道的逆滤波器
  • 收敛后级联响应近似单位冲激

应用:信道均衡 (Channel Equalization)、去卷积 (Deconvolution)。

8.6.3 噪声消除 (Noise Cancellation)

目标:从含噪信号中消除噪声分量。

  • 主通道:$d[n] = s[n] + n[n]$(信号 + 噪声)
  • 参考通道:$x[n]$ 为与 $n[n]$ 相关的噪声参考
  • 自适应滤波器学习从参考噪声到主通道噪声的映射
  • 误差输出 $e[n] \approx s[n]$

关键前提:参考信号 $x[n]$ 与噪声 $n[n]$ 相关,但与信号 $s[n]$ 不相关。

8.6.4 预测 (Prediction)

目标:预测信号未来值。

  • 输入 $x[n]$ 为信号的延迟版本
  • 期望 $d[n]$ 为当前信号值
  • 收敛后输出 $y[n]$ 为最佳线性预测

应用:线性预测编码 (LPC)、频谱估计、信号检测。

8.7 工程应用

8.7.1 声学回声消除 (Acoustic Echo Cancellation, AEC)

在免提通话中,扬声器的输出经房间反射后被麦克风拾取,形成回声。AEC 的核心是系统辨识配置:

graph LR
    A["远端信号 x[n]"] --> B["扬声器"]
    B --> C["房间声学
回声路径 h[n]"] C --> D["麦克风
d[n]=s[n]+echo"] A --> E["自适应滤波器
ŵ[n]"] E --> F["ŷ[n]"] D --> G["e[n]=d-ŷ≈s[n]"] F --> G style E fill:#e94560,color:#ffffff style G fill:#0f3460,color:#ffffff

工程要点

  • 典型滤波器阶数 $M$:128–1024(取决于房间混响时间)
  • 算法选择:NLMS(最常用),结合双端通话检测 (Double-Talk Detection) 防止近端语音干扰自适应
  • 挑战:回声路径时变(人走动、门开关),需要持续跟踪

8.7.2 信道均衡 (Channel Equalization)

数字通信中,信道多径效应导致码间干扰 (Inter-Symbol Interference, ISI)。自适应均衡器通过逆建模配置消除 ISI。

工作流程

  1. 训练阶段:发送已知训练序列 (Training Sequence),均衡器利用 LMS/RLS 快速收敛
  2. 跟踪阶段:切换到判决引导模式 (Decision-Directed Mode),用均衡器输出判决值代替训练序列作为期望

典型参数

  • 均衡器阶数:与信道延迟扩展成正比
  • 步长:训练阶段较大加速收敛,跟踪阶段较小降低误码
  • 4G/5G 系统中常与 OFDM 结合,频域均衡简化为逐子载波复数乘法

8.7.3 主动降噪 (Active Noise Control, ANC)

ANC 通过产生反相声波来抵消环境噪声,本质是前馈 + 反馈的自适应控制结构。

前馈 ANC (Feedforward)

  • 参考传声器拾取上游噪声 $x[n]$
  • 自适应滤波器计算抵消信号 $y[n] = -\hat{h}[n] * x[n]$
  • 误差传声器验证残余噪声 $e[n]$

反馈 ANC (Feedback)

  • 仅使用误差传声器信号
  • 自适应滤波器同时估计噪声和次级通道
  • 结构更简单但稳定性设计更复杂

实际产品:降噪耳机(如 AirPods Pro、Sony WH-1000XM 系列)中 ANC 滤波器阶数约 64–256,采用改进的 Filtered-x LMS (FxLMS) 算法处理次级通道延迟。

8.8 小结

算法核心思想复杂度收敛速度适用场景
WienerMMSE 最优解$O(M^3)$(离线)理论基准
LMS随机梯度下降$O(M)$资源受限、平稳环境
NLMS功率归一化 LMS$O(M)$中等回声消除、功率波动
RLS递推最小二乘$O(M^2)$快速跟踪、高精度

自适应滤波是 DSP 中理论与实践结合最紧密的方向之一。理解 LMS 的简洁性、NLMS 的鲁棒性、RLS 的快速性,以及四种配置拓扑的灵活应用,是解决实际信号处理问题的基础。

进一步阅读

  • Haykin, S. Adaptive Filter Theory, 5th ed.
  • Widrow, B. & Stearns, S. D. Adaptive Signal Processing
  • ITU-T G.168 — 数字网络回声消除器标准