
[1][2][3]锁相环MATLAB仿真及相位噪声拟合建模
最近在折腾锁相环设计,发现手头这几个版本的Matlab相位噪声拟合仿真代码真的香。特别是第三
版那个带自动参数优化的脚本,直接把环路滤波器参数和VCO灵敏度打包成结构体,跑起来那叫一个丝滑。
贴段核心循环给大家品品:
```matlab
for iter = 1:50
phase_err = mod(vco_phase - ref_phase, 2*pi);
cp_current = kp * phase_err + ki * cumsum(phase_err);
vco_phase = vco_phase + kvco * (cp_current + noise_samples);
% 这段的mod操作处理相位卷绕简直神来之笔
end
```
注意看第3行的cumsum,这个积分项处理得比之前版本暴力循环优雅多了。之前有个老版本在20kHz
偏移处总是出现毛刺,后来发现是噪声注入点位置不对——得在电荷泵输出后、环路滤波器前加噪声源才符
合实际物理模型。
说到稳定性仿真,必须安利这个带自动伯德图标注的脚本。跑完直接标出相位裕度数值不说,还能
用拖拽交互改参数。看这段画图代码:
```matlab
bode(sys,'r',omega_range);
phase_margin = 180 + angle(evalfr(sys,1j*wc));
text(wc, -10, ['PM=',num2str(phase_margin,'%.1f°')],...
'Color','#FF4500','FontSize',12);
```
重点在evalfr函数的使用,直接提取穿越频率处的相位信息。之前有个版本用频响数据遍历查找,
速度慢不说,遇到剧烈变化的曲线还容易翻车。
最近在搞的2.4G小数分频Simulink模型有点东西。Delta-Sigma调制器的阶数和分频比动态调整是
关键,分享个模型截图里的参数设置:
```
SigmaDelta_Order = 3;
Frac_Resolution = 24;
Divider_N = fix(2.4e9/50e6);