ADPLL Matlab 仿真脚本集

本书(Brandonisio & Kennedy)附录 A 提供了完整的 ADPLL Simulink 行为模型 Matlab 代码,涵盖机器精度基线、有限分辨率加 Dither、一阶噪声整形 TDC 三种场景,以及相位噪声提取与 Jitter 建模脚本。所有代码均可从 http://cas.tyndall.ie/ 下载。


总览

编号脚本名称功能描述章节
List. 8.1 (A.1)机器精度 ADPLL 模型TDC/DCO 均为无限精度,建立理想相噪基线Ch.4, §4.9
List. 8.2 (A.2)有限分辨率 TDC + Dither含 10 ps TDC 量化 + 白 Dither,开关控制Ch.4, §4.10
List. 8.3 (A.3)一阶噪声整形 TDCGRO-TDC 行为模型(ΣΔ 调制器实现),无 DitherCh.4, §4.11
List. A.4含相位噪声的正弦波生成带 Jitter 的振荡信号(单极点和双极点滤波)Ch.7, §7.2
List. A.5幅度 vs 相位偏差 PSD 对比比较信号 PSD 与相位偏差 PSD 的镜像关系Ch.7, §7.3
List. A.6理想正弦波 PSD无噪声正弦信号的功率谱密度(基线参考)Ch.7, §7.3
—Jitter Extraction线性插值过零点检测 → 相位偏差 → JitterCh.7, §7.4

List. 8.1 — 机器精度 TDC/DCO ADPLL 模型

文件名:对应书中提供的第一个完整 ADPLL Simulink 脚本

核心参数(来自 PLL Design Assistant):

参数值说明
参考频率 10 MHz采样频率
输出频率 1 GHzN = 100
零点频率 22 kHz—
极点频率 173.4 kHz—
二阶 Butterworth + Extra PoleType-II三阶系统
7.272e10PLL Design Assistant 参数
10 MHz/VVCO 增益(映射)
采样数~0.4s @ 10 MHz

TDC 配置:

  • resTDC = 1e-19(机器精度,量化误差可忽略)
  • 标准量化:outTDC(n) = resTDC * floor(tin(n)/resTDC)

DCO 配置:

  • LC-tank 模型:$$c = 10\text{pF}, l = 100\text{nH}
- `kdcoequivalent = -l/(2*sqrt((l*c)^3))` - `resDCO = 1e-20`(机器精度电容分辨率) **数字滤波器**(双线性变换 s→z): - 零点+积分器(Zero + Integrator):`H(z) = (B + A*z^(-1)) / (1 + C*z^(-1))` - 额外极点(Extra Pole):`H(z) = (Bextra + Aextra*z^(-1)) / (1 + Cextra*z^(-1))` - 积分器(Integrator):频率→相位转换 **DCO 附加噪声**(-130 dBc/Hz @ 1 MHz): - `noise_var = (foff^2)/(kv^2) * 10^(noise_at_foff/10)` - 白噪声方差 $$\sigma^2 = \text{noise\_var} / T_s

输出:

  • 相位噪声曲线(pwelch 估计,16 segments)
  • 解析预测叠加验证(分 TDC 量化、DCO 输入噪声、DCO 量化三通道)

List. 8.2 — 有限分辨率 TDC + Dither ADPLL 模型

与 List. 8.1 的区别:

项目List. 8.1List. 8.2
TDC 分辨率1e-19 s(机器精度)10 ps(有限)
TDC Dither无可开关白 Dither
DCO Dither无可开关 DCO Dither
应用场景理想基线实际精度评估

TDC Dither 实现:

  • 开关变量 swichTDCdtr(=1 开启,=0 关闭)
  • Dither 信号:(1/3) * randn()(三西格玛 = 1 个 LSB)
  • 注入方式:tin(n) = tin(n) + resTDC * dither(n)
  • 注:文中 Dither 的 3σ = 1 LSB 的设定使白噪声近似等效为均匀分布 dither

DCO Dither 实现(仅限电容分辨率):

  • 开关变量 swichDCOdtr
  • 在 deltaC_q 中加入 ditherDCO(n) = floor(8*rand-4)(整数 -4~3 的均匀 dither)
  • 加到 resDCO 的倍数上:resDCO * (floor(deltaC/resDCO) + ditherDCO(n))

核心结论:

  • 无 Dither 时:解析预测(白噪声近似)与仿真结果不匹配(ΣΔ 调制器产生 tone)
  • 加 Dither 后:预测与仿真高度吻合,白噪声近似有效
  • 解析预测需同时计入 TDC 量化噪声和 TDC 附加 dither 噪声

List. 8.3 — 一阶噪声整形 TDC ADPLL 模型

与 List. 8.2 的区别:

项目List. 8.2List. 8.3
TDC 类型零阶(量化器)一阶噪声整形(ΣΔ)
TDC Dither支持关闭(swichTDCdtr=0)
TDC 核心操作floor()ΣΔ 调制器循环

TDC 核心代码(一阶 ΣΔ 调制器实现):

InputSigmaDelta = tin(n) / resTDC;
outTDC(n) = resTDC * floor(InputSigmaDelta + eq(n-1));
eq(n) = (InputSigmaDelta + eq(n-1)) - floor(InputSigmaDelta + eq(n-1));

噪声整形效果:

  • TDC 量化噪声 PSD 乘以 (一阶高通整形)
  • 带内相噪相比零阶 TDC 降低 24 dB(@ Hz,参见 Ch.4 定量结论)
  • 解析预测公式包含噪声整形传递函数:.*(2-2*cos(w))

仿真参数:

  • num_segments = 32(相比 List. 8.1/8.2 的 16,分段更多以降低估计方差)
  • 稳态偏移 SteadyStateOffset = 1e5

Appendix A.2 — 相位噪声分析与提取脚本

List. A.4 — 含相位噪声的正弦波生成

方法:Kundert 方法

Jitter 生成(两级滤波):

  1. 第一级:白高斯 → 单极点滤波器(极点在 fsval/100),生成低频相位噪声
  2. 第二级:白高斯 → 单极点滤波器(极点在 fsval/10000),生成更低频率分量
  3. 组合:jitter = 0.01 * (0.01*cumsum(jitterFilteredNew) + 0.01*jitterFiltered)
    • 累积和实现 频谱
    • 未滤波分量实现 频谱

含噪信号:

sinSignalNoisy = sin(2*pi*(1/period).*time + jitter);

核心参数:

  • period = 2^9(512 采样/周期)
  • ThreeSigma = period/20(Jitter 幅值约为周期的 5%)
  • nsamples = 2^23(~8M 采样)

List. A.5 — PSD 对比脚本

功能:在同一图上绘制信号 PSD 和相位偏差 PSD

PSD 镜像关系(Kundert 理论):

  • 信号 PSD()在载波频率 两侧对称
  • 相位偏差 PSD()仅在单边出现
  • 关系:(小相位偏差近似)

实现:

  • 对 jitter 信号进行 pwelch 估计
  • 频率轴重新映射到载波偏移:fJitter = fJitter + 1/period
  • 生成 PSD 镜像:PSDphaseComponentMirror = temp(end:-1:1)

List. A.6 — 理想正弦波 PSD(基线)

osc = sin(2*pi*(1/period)*time);
[PSDoutweltsch, wappo] = pwelch(osc, hannWindow);
PSDoutweltsch = pi * PSDoutweltsch;

用途:作为无噪声参考,与 List. A.4/A.5 的结果对比。

Jitter 提取流程(线性插值法)

  1. 过零点检测:
    • 找到相邻采样从负到正的过零点
    • 记录每个上升沿附近的负/正采样索引
  2. 线性插值:
    te = xb - (xb-xa)/(yb-ya) * yb
    
    其中 xa/xb 为时间,ya/yb 为信号幅值
  3. 理想过零点:
    teideal = period * (1:1:length(te));
  4. 时间偏差:
    deltaT = teideal - te;
  5. 相位偏差:
    deltaPhi = 2*pi * deltaT ./ period;

代码结构通用模式

所有 ADPLL 仿真脚本遵循统一结构:

1. 参数初始化(PLL Design Assistant 参数)
2. 变量预分配(zeros 初始化)
3. 滤波器系数计算(双线性变换,符号表达式)
4. DCO 附加噪声生成(指定 dBc/Hz @ 偏移频率)
5. 主循环(N samples):
   a. 频率→相位转换(积分器)
   b. TDC 量化(零阶/一阶 ΣΔ + 可选 Dither)
   c. 数字滤波器(Zero+Integrator → Extra Pole → Gain)
   d. DCO LC-tank 模型(电容量化 → 频率控制 → 相位累加)
6. 稳态提取(去除暂态样本)
7. 相位噪声计算(pwelch PSD)
8. 解析预测(频域传递函数计算)
9. 绘图

参考