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 分量。

步骤拆解:

  1. 采集一条完整的浴盆曲线(BER vs 相位偏移);
  2. 分别取左侧和右侧的高 BER 尾巴段(通常 BER > 1e-8 的部分);
  3. 用 erfc 逆函数做线性拟合,得到 σ_left 和 σ_right;
  4. 左右拟合线中点之差 = DJpp;
  5. 如果 σ_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 知识框架总览

为了让你脑子里有个全局图,我画了一张流程图,把上面说的这些核心内容串起来。你把它当成一份速查卡就行:

抖动分量分离流程框架 抖动分量分离总体流程 总抖动 TJ 双高斯拟合法 频谱分析法 浴盆曲线采点 Q=f(QLM)拟合 采集长时域序列 FFT 频谱分析 输出:RJ(σ) + DJpp 注意:不能只依赖一元法, 最好双法交叉验证结果

4.6 实际操作的几个原则

我把这些年碰到的问题总结成三句话,你留着当备忘录:

  • 双高斯拟合法做预算,频谱分析法做排查。前者给你预算输入参数,后者帮你找到抖动从哪来的。
  • 分离结果要和眼图相互验证。如果算出来的 TJ 和眼图测到的眼宽差距很大,说明浴盆曲线数据可能有系统误差。
  • RJ 提取时,低 BER 区域必须够低。你想想看,如果原始数据只做到 1e-9,你强行外推到 1e-12,误差会很大。我以前在 5Gbps 速率上吃过这个亏,拟合出来的 σ 偏小 15%。

一个小技巧:如果你用双高斯拟合法发现左右眼的 σ 差比较大(超过 15%),那大概率存在 DCD 分量。这时候你把左右 σ 分别代入预算,最坏情况 σ_worst = max(σ_left, σ_right),保守一点没问题。

嗯,抖动分离这部分就聊到这儿。核心就是:你得知道自己面对的是哪种抖动,再用对工具。别再拿一个 TJ 值走天下了。