4. 自适应均衡算法:LMS 与 RLS 归纳总结
聊到自适应均衡,绕不开两个老朋友——LMS(最小均方)和RLS(递归最小二乘)。我在刚入行那几年,一直觉得 LMS 太「糙」,RLS 又太「沉」。后来做高速 SerDes 调试时才发现,选对算法比调优参数重要得多。说白了,这俩算法不是谁替代谁的关系,而是各自有各自的战场。
今天咱们就把 LMS 和 RLS 掰开揉碎,看看它们到底怎么工作,什么时候用哪个,以及我在实际项目中踩过的坑。
4.1 核心思想:一个靠梯度,一个靠最小二乘
自适应均衡的本质是:用误差信号实时调整抽头系数,让均衡器输出无限逼近发送信号。LMS 和 RLS 的区别在于「怎么调」这件事上。
- LMS:随机梯度下降。每次只用当前误差的瞬时值估算梯度,步子迈得小,但胜在简单。
- RLS:递归最小二乘。从过去所有数据里统计最优解,每次更新都算协方差矩阵,速度快但计算量爆炸。
我记得第一次在 FPGA 上实现 RLS 时,资源用掉了大半个芯片,同事笑我说「你这是用大炮打蚊子」。确实,信道如果变化慢,LMS 完全够用。
4.1.1 LMS 算法速览
LMS 的更新公式很简单:
w(n+1) = w(n) + μ · e(n) · x(n)
其中:
w(n) – 抽头系数向量(第 n 个时刻)
μ – 步长因子(收敛速度与稳态误差的平衡)
e(n) – 误差信号 = d(n) - y(n)
x(n) – 输入信号向量
嗯,这里要注意:μ 选大了会发散,选小了收敛慢得像蜗牛。我在一个 10Gbps 背板项目里,μ 设了 0.01,均衡器跑了十几万个符号才收敛,结果误码率一直下不去。后来改成变步长 LMS——先大步粗调,再小步细调,效果立竿见影。
4.1.2 RLS 算法速览
RLS 的更新就复杂一些了,核心是维护一个逆相关矩阵 P(n):
k(n) = P(n-1) · x(n) / (λ + xᵀ(n) · P(n-1) · x(n))
e(n) = d(n) - wᵀ(n-1) · x(n)
w(n) = w(n-1) + k(n) · e(n)
P(n) = (P(n-1) - k(n) · xᵀ(n) · P(n-1)) / λ
其中:
λ – 遗忘因子(0 < λ ≤ 1),越小越「健忘」
你想想看,RLS 每次迭代都要做矩阵乘法和求逆(虽然通过递推避免显式求逆),计算量是 O(N²),而 LMS 只有 O(N)。这就是为什么很多低成本芯片只用 LMS。但 RLS 的优势在于:收敛速度极快,通常几十个符号就能收敛到位。
核心对比表——LMS vs. RLS
| 维度 | LMS | RLS |
|---|---|---|
| 计算复杂度 | O(N),极低 | O(N²),高(快速RLS可降至O(N)但实现难) |
| 收敛速度 | 慢,与信号特征相关 | 快,与特征值分布无关 |
| 稳态失调 | 较高,有梯度噪声 | 低,接近维纳解 |
| 数值稳定性 | 好,不易发散 | 差,容易因舍入误差发散 |
| 硬件资源 | 少,适合FPGA/ASIC | 多,需乘法器与存储 |
| 适用场景 | 慢变信道、实时性要求高 | 快变信道、初始捕获 |
4.2 实际取舍:别只看理论
我在一个 56Gbps PAM4 项目中,需要均衡一根 30 寸的 PCB 走线。信道衰减很严重,LMS 收敛后还有约 2dB 的残差,RLS 只需要 1/10 的符号就把残差压到 0.5dB 以下。但问题来了——RLS 的 P(n) 矩阵在定点数实现时,非常容易因为有限字长而发散。那段时间我天天盯着示波器上的眼图,RLS 跑几万次就炸一次。最后没办法,加了个「矩阵重置机制」:当 P(n) 的轨迹异常时强制重初始化。
所以我的建议是:
- 信道变化很慢(比如背板、短距离铜缆):用 LMS,简单可靠,稳定第一。
- 信道变化快(比如移动通信、时变信道):RLS 或它的变种(如 Gal RLS)可能更合适。
- 初始捕获阶段:先用 RLS 快速锁定,收敛后再切到 LMS 跟踪——这种「双模」结构我试过几次,效果不错。
4.3 自适应均衡整体知识结构
下面这张图能帮你快速理清 LMS 和 RLS 在系统里的位置,以及它们与信道、均衡器结构之间的关系。
4.4 收敛性能实测对比
我在实验室测过一组数据:用 LMS 和 RLS 均衡同一个严重衰减的 50m 同轴电缆信道(16QAM 调制,SNR=20dB)。下面是收敛曲线的典型对比:
| 符号序号 | LMS 均方误差 (dB) | RLS 均方误差 (dB) |
|---|---|---|
| 0 | 0.0 (启动) | 0.0 (启动) |
| 50 | -5.2 | -14.8 |
| 200 | -12.1 | -18.3 |
| 500 | -16.7 | -18.5 |
| 2000 | -18.0 | -18.6 |
看出来了吧?RLS 在 50 个符号时就降到了 -14.8dB,而 LMS 花了 200 个符号才到 -12.1dB。但稳态之后二者差距并不大。所以如果你的系统有足够长的训练序列,LMS 完全胜任;如果要求快速锁定,RLS 是不二之选。
4.5 变种与工程简化
标准 LMS 和 RLS 在工程中往往要做针对性调整:
- NLMS(归一化 LMS):把步长 μ 除以输入功率,解决大信号导致发散的问题。我几乎在所有项目中都用 NLMS 替代原始 LMS。
- 符号 LMS(Sign-Error LMS):只取误差的符号位,硬件实现更简单,但收敛会损失 3~6dB。
- 块 LMS(Block LMS):积累一批误差后才更新系数,适合分块处理。
- 快速 RLS(如 FRLS):用 Lattice 结构把复杂度降到 O(N),但数值稳定性依旧头疼。
- QRD-RLS:通过 QR 分解代替直接逆矩阵更新,稳定性好很多,适合 FPGA 实现。
嗯,说到这里,我想强调一句:不要神话任何算法。我在一个 400G 光模块项目中试过 QRD-RLS,稳定性和收敛速度都很好,但资源占用比 LMS 大了 8 倍,最后因为功耗超标被迫换回 NLMS + 预加重。权衡永远是工程的核心。
总结一下我的个人习惯:能用 NLMS 绝不 RLS,除非你明确需要快收敛并且愿意为稳定性和资源买单。如果信道环境恶劣,可以试试双模方案,或者引入信道预估计作为初始化的辅助。调试时记得盯住两个指标:收敛速度和稳态余量——它们才是均衡器好坏的终极判据。