Matlab计算把振荡器相位噪声转换为时间抖动
简介
本文内容参考ADI官网《将振荡器相位噪声转换为时间抖动》文章。
为实现ADC采样的高信噪比(SNR), ADC的孔径抖动必须很低。为了避免降低ADC的性能,必须采用抖动极低的采样时钟,因为总抖动等于转换器内部孔径抖动与外部采样时钟抖动的方和根。然而,用于产生采样时钟的振荡器常常用相位噪声而非时间抖动来描述特性。本文的目的就是提出一种简单的方法来将振荡器相位噪声转换为时间抖动,并通过Matlab编程计算时钟抖动,跟SiTime官网时钟抖动参数进行对比,验证计算的正确性。
一、相位噪声定义
首先明确几个定义。下图所示为一个非理想振荡器(即时域中存在抖动,对应于频域中的相位噪声)的典型输出频谱。频谱显示,1Hz带宽内的噪声功率与频率成函数关系。相位噪声定义为额定频率偏移fm下的1Hz带宽内的噪声与频率fo下的振荡器信号幅度之比。
通常用单边带相位噪声来描述振荡器的特性,如图3的相位噪声(dBc/Hz)与频率偏移fm的关系曲线所示,其中频率轴采用对数刻度。注意,实际的曲线由多个区域拟合而成,各区域的斜率为1/fx, x = 0对应于“白色”相位噪声区域(斜率 = 0 dB/10倍), x = 1对应于“闪烁”相位噪声区域(斜率 = –20 dB/10倍)还存在x = 2、 3、 4的区域,这些区域依次出现,愈来愈接近载波频率。下图为振荡器相位噪声(dBc/Hz)与频率偏移的关系。
可知,振荡器通常用相位噪声来描述性能,但为了将相位噪声与ADC的性能关联起来,必须将相位噪声转换为抖动。为将该曲线与现代ADC应用关联起来,选择100MHz的振荡器频率(采样频率)以便于讨论,典型曲线如下图所示。请注意,相位噪声曲线由多条线段拟合而成,各线段的端点由数据点定义。
二、将相位噪声转换为抖动
计算等效rms抖动的第一步是获得目标频率范围(即曲线区域A)内的积分相位噪声功率。该曲线被分为多个独立区域(A1、 A2、 A3、 A4),各区域由两个数据点定义。一般而言,假设振荡器与ADC输入端之间无滤波,则积分频率范围的上限应为采样频率的2倍,这近似于ADC采样时钟输入的带宽。
积分频率范围下限的选择也需要一定的斟酌。理论上,它应尽可能低,以便获得真实的rms抖动。但实际上,制造商一般不会给出偏移频率小于10Hz时的振荡器特性,不过这在计算中已经能够得出足够精度的结果。多数情况下,如果提供了100Hz时的特性,则选择100Hz作为积分频率下限是合理的。否则,可以使用1kHz或10kHz数据点。还应考虑, “近载波”相位噪声会影响系统的频谱分辨率,而宽带噪声则会影响整体系统信噪比。最明智的方法或许是按照下文所述对各区域分别积分,并检查各区域的抖动贡献幅度。如果使用晶体振荡器,则低频贡献与宽带贡献相比,可能可以忽略不计。其它类型的振荡器在低频区域可能具有相当大的抖动贡献,必须确定其对整体系统频率分辨率的重要性。各区域的积分产生个别功率比,然后将各功率比相加,并转换回dBc。一旦知道积分相位噪声功率,便可通过下式计算rms相位抖动。
代码如下:
clc;
clear all;
close all;
fo = 20e6;
P1 = -102; % -102dBc/Hz,10Hz
F1 = 10; % 10Hz
P2 = -120; % -127dBc/Hz,100Hz
F2 = 100; % 100Hz
P3 = -142; % -142dBc/Hz,1KHz
F3 = 1e3; % 1KHz
P4 = -147; % -147dBc/Hz,10KHz
F4 = 10e3; % 10KHz
P5 = -148; % -148dBc/Hz,100KHz
F5 = 100e3; % 100KHz
P6 = -162; % -162dBc/Hz,1MHz
F6 = 1e6; % 1MHz
P7 = -163; % -163dBc/Hz,5MHz
F7 = 5e6; % 5MHz
A1 = (P1+P2)/2 + 10*log10(F2-F1);
A2 = (P2+P3)/2 + 10*log10(F3-F2);
A3 = (P3+P4)/2 + 10*log10(F4-F3);
A4 = (P4+P5)/2 + 10*log10(F5-F4);
A5 = (P5+P6)/2 + 10*log10(F6-F5);
A6 = (P6+P7)/2 + 10*log10(F7-F6);
J1 = sqrt(2*10^(A1/10))/(2*pi*fo)*10^15;
J2 = sqrt(2*10^(A2/10))/(2*pi*fo)*10^15;
J3 = sqrt(2*10^(A3/10))/(2*pi*fo)*10^15;
J4 = sqrt(2*10^(A4/10))/(2*pi*fo)*10^15;
J5 = sqrt(2*10^(A5/10))/(2*pi*fo)*10^15;
J6 = sqrt(2*10^(A6/10))/(2*pi*fo)*10^15;
jitterRMS1 = sqrt(J4^2+J5^2+J6^2); % 时间(fs)
jitterRMS2 = sqrt(J1^2+J2^2+J3^2+J4^2 + J5^2); % 时间(fs)
fprintf('Integration Bandwidth(12KHz~5MHz) jitterRMS = %5.2f(fs)\r\n',jitterRMS1);
fprintf('Integration Bandwidth(10Hz~5MHz) jitterRMS = %5.2f(fs)\r\n',jitterRMS2);
运行程序,计算结果如下所示。
Integration Bandwidth(12KHz~5MHz) jitterRMS = 291.21(fs)
Integration Bandwidth(10Hz~5MHz) jitterRMS = 399.95(fs)
上述晶振使用SiTime厂家型号为SiT5156为参数进行计算。官方网站评估(可以登录SiTime的官方网站进行评估)的结果如下图右上角所示,为289fs。
积分频率从12KHz~5MHz,Matlab计算抖动为291fs,跟官方评估的289fs基本一致。
总结
可以使用该方式把晶振的相位噪声转化为抖动,用来评估时钟抖动对ADC采集SNR影响,评估晶振指标是否可以满足ADC采样要求。