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) | 一阶噪声整形 TDC | GRO-TDC 行为模型(ΣΔ 调制器实现),无 Dither | Ch.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 | 线性插值过零点检测 → 相位偏差 → Jitter | Ch.7, §7.4 |
List. 8.1 — 机器精度 TDC/DCO ADPLL 模型
文件名:对应书中提供的第一个完整 ADPLL Simulink 脚本
核心参数(来自 PLL Design Assistant):
| 参数 | 值 | 说明 |
|---|---|---|
| 参考频率 | 10 MHz | 采样频率 |
| 输出频率 | 1 GHz | N = 100 |
| 零点频率 | 22 kHz | — |
| 极点频率 | 173.4 kHz | — |
| 二阶 Butterworth + Extra Pole | Type-II | 三阶系统 |
| 7.272e10 | PLL Design Assistant 参数 | |
| 10 MHz/V | VCO 增益(映射) | |
| 采样数 | ~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}
输出:
- 相位噪声曲线(
pwelch估计,16 segments) - 解析预测叠加验证(分 TDC 量化、DCO 输入噪声、DCO 量化三通道)
List. 8.2 — 有限分辨率 TDC + Dither ADPLL 模型
与 List. 8.1 的区别:
| 项目 | List. 8.1 | List. 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.2 | List. 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 生成(两级滤波):
- 第一级:白高斯 → 单极点滤波器(极点在
fsval/100),生成低频相位噪声 - 第二级:白高斯 → 单极点滤波器(极点在
fsval/10000),生成更低频率分量 - 组合:
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 提取流程(线性插值法)
- 过零点检测:
- 找到相邻采样从负到正的过零点
- 记录每个上升沿附近的负/正采样索引
- 线性插值:
其中 xa/xb 为时间,ya/yb 为信号幅值te = xb - (xb-xa)/(yb-ya) * yb - 理想过零点:
teideal = period * (1:1:length(te)); - 时间偏差:
deltaT = teideal - te; - 相位偏差:
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. 绘图
参考
- Brandonisio Noise-Shaping ADPLLs 深度解析 — 来源页
- ADPLL相位噪声解析预测 — Ch.4 概念页,对应仿真模型的理论推导
- 相位噪声建模与Matlab提取 — Ch.7 概念页,相位噪声提取流程
- ADPLL高效事件驱动建模 — Ch.6 概念页,事件驱动仿真方法
- PLL Design Assistant (Perrott) — 参数设计工具
- Kundert, K. “Predicting the Phase Noise and Jitter of PLL-Based Frequency Synthesizers.” Designers’ Guide, 2006.