4. 抖动分量的分离方法与原理归纳总结
上一节我们把抖动分门别类理了一遍。但实际拿到示波器或误码仪测出来的总抖动 TJ,它是个大杂烩。你并不知道里面哪些是随机抖动 RJ、哪些是确定性抖动 DJ。所以这节要解决的核心问题就是:怎么把这些成分干净利落地拆开?
记得我刚入行时,总觉得只要测个总体抖动就完事。后来发现,不把分量拆开,你在做预算分配时就会很被动。比如一个 5Gbps 的背板,TJ 测出来 25ps,你觉得还不错。但实际 RJ 占了一大半,你根本没法做裕量补偿。所以,分离不是学术游戏,是工程必须做的功课。
4.1 为什么要做分量分离?
你想想看,不管是用双狄拉克模型算 BER,还是做链路预算,我们真正需要拿到的其实是两个东西:
- 随机抖动 RJ (σ)——服从高斯分布,无法根除,只能靠裕量兜底
- 确定性抖动 DJ (DJpp)——有界噪声,可以通过改善通道设计来压低
如果你不分离,直接拿 TJ@BER=1e-12 去算裕量,结果大概率要么过于悲观(浪费通道能力),要么过于乐观(芯片上不了量)。
核心结论:抖动分离不是学术游戏,是工程必须做的功课。目标就是提取 RJ(σ) 和 DJ(DJpp),用来代入双狄拉克公式预算。
4.2 方法一:双高斯拟合法(Q-Scale/浴盆曲线法)
这个方法在业界用得最广。我个人习惯先拿它打底。
原理很简单:你把眼图测得的 BER 对采样相位画出来,得到一条浴盆曲线。纵坐标是 BER 的对数,横坐标是采样相位偏移。然后将浴盆曲线的左边和右边分别用高斯函数的尾巴去拟合。
为什么会这样?因为总抖动在 BER 很低的时候,决定性的部分就是随机抖动的尾巴。拟合出的高斯标准差 σ 就是 RJ,而两条尾巴中点之间的偏移量就对应 DJ 分量。
步骤拆解:
- 采集一条完整的浴盆曲线(BER vs 相位偏移);
- 分别取左侧和右侧的高 BER 尾巴段(通常 BER > 1e-8 的部分);
- 用 erfc 逆函数做线性拟合,得到 σ_left 和 σ_right;
- 左右拟合线中点之差 = DJpp;
- 如果 σ_left ≈ σ_right,取平均值做 RJ(σ);否则说明存在 DCD 等不对称分量。
给我看一段最简单的拟合逻辑,大家体会一下:
import numpy as np
from scipy.optimize import curve_fit
def dual_dirac_fit(tau, logBER):
# tau: 采样相位偏移
# logBER: 对应的 log10(BER)
# 拟合贝尔尾巴 y = A - 0.5 * (tau - mu)^2 / sigma^2
def gaussian_tail(x, A, mu, sigma):
return A - 0.5 * ((x - mu) / sigma) ** 2
# 取左侧尾巴拟合
left_mask = tau < mu_guess
popt_left, _ = curve_fit(gaussian_tail, tau[left_mask], logBER[left_mask])
# 右侧同样操作
# DJpp = abs(mu_right - mu_left)
# RJ_sigma = (sigma_left + sigma_right)/2
我的经验:浴盆曲线的采样点数不能太少。很多朋友图省事只测 20 个点,拟合出来的 σ 偏差很大。建议至少扫 50–80 个相位点,尤其是低 BER 区域,点要密一些。
4.3 方法二:频谱分析法(频域分离)
双高斯拟合法依赖浴盆曲线,需要扫 BER。如果你手头没有误码仪,只有示波器,那可以考虑频域的方法。
基本原理:把测得的抖动时间序列做 FFT 变换,转到频域去看。
- 随机抖动 RJ 在频域表现为平坦的噪声基底;
- 确定性抖动 DJ 中的周期性分量(SJ,PJ)会表现为离散的谱线;
- DCD 和 BUJ 则对应低频段的有限能量分布。
你可以把白噪声基底的高度拿来反推 RJ 的 RMS 值,剩下的离散谱线能量总和就是 DJ 的 RMS。
实战操作要点:
- 采集至少 200K–1M 个 UI 的抖动数据,做 FFT 才有较好的频率分辨率;
- 先去除直流分量(抖动的均值);
- 识别并记录离散谱线的频率和幅度,用于判断 SJ/PJ 的来源(比如 150MHz 附近有尖峰,大概率是电源噪声耦合过来的);
- 基底求平均后,换算成 σ(RJ) = 基底RMS / 板宽折算系数。
记得我有次调一个 28Gbps 的背板,双高斯拟合怎么都对不上。后来从频谱里看到一个 250MHz 的尖峰,顺着查下去,原来是参考时钟的谐波串进了接收端。这种问题在浴盆曲线上看起来只是抖了一下尾巴,但频谱上一眼就看出来了。
4.4 两种方法的优缺点对比
| 对比维度 | 双高斯拟合法 (Q-Scale) | 频谱分析法 (FFT) |
|---|---|---|
| 依赖设备 | 误码仪或眼图采样示波器 | 实时示波器 + 数据分析软件 |
| 测量时间 | 较长(需要扫 BER 曲线) | 较短(一次捕获大量数据) |
| 能分离的子成分 | 仅得到 RJ(σ) 和 DJpp | 可识别 SJ、PJ、BUJ 的具体频率 |
| 对数据量要求 | 中(50+ 相位点) | 高(200K+ UI 数据) |
| 适用场景 | 合规性测试、BER 预算验证 | 抖动源定位、调试优化 |
曾经踩过的坑:双高斯拟合法隐含了一个假设——抖动可以用 Dual Dirac 模型表示。但这个模型在有大量高频确定性噪声(比如 100ps 以上的 BUJ)时,拟合出的 RJ 会偏大。所以我一般在 RJ 特别大时,会拿频谱分析交叉验证一下。
4.5 知识框架总览
为了让你脑子里有个全局图,我画了一张流程图,把上面说的这些核心内容串起来。你把它当成一份速查卡就行:
4.6 实际操作的几个原则
我把这些年碰到的问题总结成三句话,你留着当备忘录:
- 双高斯拟合法做预算,频谱分析法做排查。前者给你预算输入参数,后者帮你找到抖动从哪来的。
- 分离结果要和眼图相互验证。如果算出来的 TJ 和眼图测到的眼宽差距很大,说明浴盆曲线数据可能有系统误差。
- RJ 提取时,低 BER 区域必须够低。你想想看,如果原始数据只做到 1e-9,你强行外推到 1e-12,误差会很大。我以前在 5Gbps 速率上吃过这个亏,拟合出来的 σ 偏小 15%。
一个小技巧:如果你用双高斯拟合法发现左右眼的 σ 差比较大(超过 15%),那大概率存在 DCD 分量。这时候你把左右 σ 分别代入预算,最坏情况 σ_worst = max(σ_left, σ_right),保守一点没问题。
嗯,抖动分离这部分就聊到这儿。核心就是:你得知道自己面对的是哪种抖动,再用对工具。别再拿一个 TJ 值走天下了。