线性均衡器(LE)原理——从时域到实战

线性均衡器,说白了就是一个有限长冲激响应(FIR)滤波器。它的任务很简单:用一串可调的抽头系数,把信道畸变后的信号“掰直”。我当年刚接触SerDes时,总觉得这东西太简单了——不就是几个乘法加一个累加嘛?直到在实际链路里看到残余ISI把眼图完全闭上,才明白系数更新才是灵魂,结构只是骨架。

你想想看,高速信号经过PCB走线、连接器、线缆,肯定会发生反射、损耗、码间干扰(ISI)。LE的作用就是反向构造一个逆滤波器,尽量恢复发送端的波形。

LE的核心数学模型

线性均衡器在时域上可以写成:

y[n] = Σ (w[k] * x[n - k])   , k = 0, 1, ..., N-1
  • x[n] — 接收端采样后的信号
  • w[k] — 抽头系数(就是我们要更新的主角)
  • y[n] — 均衡后的输出
  • N — 抽头总数

其实它就是一个横截滤波器(Transversal Filter)。每个抽头对应一个延时版本,然后加权求和。为什么叫线性?因为它对输入信号做的操作全是线性运算——没有取值、没有比较器、没有判决反馈。好处是数学上分析简单,稳定性好。坏处呢?我后面会讲。

关键参数:抽头数、步长、收敛速度

做LE设计,你至少得盯住这三个数。我习惯先列个表,方便和算法工程师对齐:

参数物理含义常见范围我踩过的坑
抽头数 N滤波器能记忆的符号个数8~64(Gen5常用16~32)抽头太少,长尾ISI压不住;抽头太多,收敛变慢、功耗涨
步长 μ每次系数调整的“脚步”大小2-6 ~ 2-12曾经在一次实验室联调中,μ设成了2-4,均衡器直接发散,眼图变成一坨
收敛时间从启动到稳定所需的符号数几千到几十万符号收敛太慢会导致链路训练超时,我在某个项目里被迫加了加速启动逻辑

实战小建议:步长和抽头数是联动的。N越大,μ通常要更小才能保证收敛。你可以先固定N=16,μ=2-8,观察误差下降曲线,再微调。

基于LMS的系数更新——最常用的方法

最小均方算法(LMS)是LE系数的“训练教练”。它的核心思想很简单:用当前输出与期望值之间的误差,沿着梯度方向调整系数。更新公式长这样:

error[n] = d[n] - y[n]            // d[n] 是期望值(通常来自训练序列或判决器)
w[k] = w[k] + 2 * μ * error[n] * x[n-k]   // 每个抽头各自更新

重点:更新公式里的 2 来自均方误差对系数的求导。你不必纠结,直接用就好。如果你用定点实现,记得留意乘法溢出。

为什么LMS在实际芯片里用得最多?因为它不需要矩阵求逆、不依赖复杂的统计假设,硬件实现只需要几个乘法器和累加器。我参与的第一个Gen5项目,接收端LE就是基于LMS实现的——200MHz时钟下,每个符号周期要完成N个乘加运算,对时序和面积的压力都不小。

LE的频域视角——你可能会忽略的坑

说了半天时域,咱也聊聊频域。LE的传递函数其实就是抽头系数的离散傅里叶变换:

H(z) = Σ w[k] * z-k

理想情况下,我们希望 H(z) ≈ 1 / Channel(z),也就是信道的逆滤波器。但实际信道可能有零点靠近单位圆,导致逆滤波器增益极大,把噪声也放大了——这就是LE的“噪声增强”问题。

避坑指南:我曾经在设计一个长距离背板链路时,发现LE抽头系数在某个频点出现了很大的尖峰,导致高频噪声被放大,误码率反而上升。解决办法是给LMS的代价函数加一个“泄漏因子”(leakage),防止系数无限制增长。

LE vs DFE vs FFE——何时该选谁?

在Gen5均衡化流程里,LE通常是第一级。它和后面几级(DFE、FFE)分工不同。我做了个快速对照:

类型优点缺点典型位置
LE(线性均衡器)结构简单、无错误传播噪声增强、对非线性失真无能为力接收前端,预均衡
DFE(判决反馈均衡器)无噪声增强,能抑制长尾ISI有错误传播,需要正确判决LE后面,处理残留ISI
FFE(前馈均衡器)可放在发送端或接收端功耗较高,对时钟要求严发送端预加重或接收端前端

你留意到没有?LE虽然是“线性”的,但在实际系统里它往往是非线性的起点——因为它输出的误差信号会驱动后续DFE的判决。所以LE做得好不好,直接影响整个均衡链路。

一张图看懂LE的核心流程

下面这个结构图概括了LE的数据流和系数更新回路。注意:误差不是直接反馈到输出,而是经过梯度计算后再修正系数。

线性均衡器(LE)核心流程 输入信号 x[n] Z⁻¹ Z⁻¹ Z⁻¹ … Z⁻¹ w₀ w₁ w₂ … wₙ₋₁ × × × × Σ 输出 y[n] e[n] = d[n] - y[n] 系数更新:wₖ += 2μ·e[n]·x[n-k] 注意:误差 e[n] 同时参与 所有抽头系数的更新

实战中必须警惕的两个细节

  1. 定点化精度:LE系数在FPGA/ASIC里通常用定点数(比如Q1.7、Q0.8)。步长μ如果太小,更新会被舍入误差淹没。我曾经因为μ设成2-16,在FPGA上跑了半小时系数纹丝不动……后来发现是被截断了。
  2. 训练序列 vs 盲均衡:Gen5链路开始时一般会发已知的训练序列(pattern),让LE收敛。盲均衡(如CMA)也可以,但收敛更慢,而且可能锁在错误的最优解上。我的建议是训练模式用LMS,跟踪模式用DD-LMS(判决导向)。

好了,这一章的内容就是这些。LE虽然经典,但吃透它才能在复杂均衡链路里做出正确判断。你如果有项目经验,不妨回想一下——你的LE参数是怎么定下来的?