第3章 信号模型与信道建模基础
做均衡器绕不开信道模型。说白了,你得先知道信号是怎么被折腾的,才能想怎么把它拉回来。我入行那会儿,直接用理想信道仿真,结果板子调通后眼图惨不忍睹——后来才明白,模型没建对,均衡系数全是白费。
信道模型分类
信道模型按复杂程度大致分这几类,我平时做工程预研时常用的就是下面几种:
| 模型类型 | 特点 | 应用场景 |
|---|---|---|
| AWGN | 只加白噪声,无多径 | 极限性能评估 |
| 多径衰落 | 多个到达路径,有延迟扩展 | 无线/有线互连 |
| 频率选择性 | 信道带宽内增益变化 | PCIe Gen5 长通道 |
| 时变信道 | 参数随时间变化 | 移动通信、高速场景 |
你想想看,Gen5 均衡器最头疼的就是频率选择性衰落。信道越长、速率越高,反射越严重,单靠一个抽头根本压不住。
基带等效信号模型
实际系统里我们处理的是基带复包络。发送信号 s(t) 经过信道冲激响应 h(t),再加上噪声 n(t),接收信号就是:
r(t) = s(t) * h(t) + n(t)
这里 * 表示卷积。离散化之后,采样得到 r[k],就是均衡器的输入。
我个人习惯 用复基带建模,因为能统一处理I/Q两路。有一次客户反馈眼图闭了,我换成复基带模型一跑,立马定位到是I/Q失衡导致的。
抽头延迟线模型(TDL)
工程里最常用的就是抽头延迟线模型。把信道切成若干段,每段一个系数,多径就体现在不同延迟的抽头上。
- 确定符号周期
T和采样间隔Ts(通常是 T/2 或 T/4) - 设定最大延迟扩展
τ_max - 计算抽头数
L = floor(τ_max / Ts) + 1 - 每个抽头赋复系数,代表幅度和相位
小提示: 我建议 TDL 的抽头数不要超过 32 个,否则均衡器的收敛速度会变慢。Gen5 均衡器一般用 8~16 个前馈抽头就够了。
分数间隔采样与均衡器关系
为什么用分数间隔(Fractionally Spaced, FSE)?因为符号间隔采样容易遇到频谱折叠,噪声会混进来。FSE 用 T/2 或 T/4 采样,可以避免这个问题。
# 生成一个简单的多径信道
import numpy as np
Ts = 1e-12 / 2 # T/2 分数间隔
delays = [0, 3, 7, 12] # 单位:采样点
gains = [1.0, -0.3, 0.1, 0.05]
h = np.zeros(16)
for d, g in zip(delays, gains):
h[d] = g
print(h)
这段代码生成一个16抽头的信道,第一个抽头是主径,后面是多径反射。我调试时经常先这么造一个信道,然后看均衡器能不能把后三个抽头压下去。
注意: 分数间隔采样会带来额外的计算量。我曾经把采样率设成 T/4,结果 FPGA 资源不够,被迫降回 T/2。平衡好精度和实现成本,才是实战真需求。
实战中的信道建模注意事项
- 测量数据优先: 用 VNA 实测 S 参数,转成时域脉冲响应。仿真模型只能参考,实测才是金标准。
- 噪声功率要匹配: 根据接收机噪声系数设置 SNR,别用太理想的噪声值。
- 考虑非线性: 如果 TX/RX 有非线性,均衡器很难补偿,需要在信道模型里加一个幅度压缩。
下图展示了从发送信号到接收信号的建模流程,以及均衡器作用点:
把模型建好,均衡器的系数更新才能对症下药。下一刀怎么切?我会用这个模型去跑 LMS 算法,看看收敛曲线是不是合理。