根据fs、采样点数N和希望观察到的fin大小来确定输入信号周期数M(满足相干采样),M也代表了输入信号在fft的第几个bin上。做FFT要注意相干采样,以及采样时间要是输入信号周期的整数M倍
仿真时设置输入频率为 7/64*100MHz,而非10Mhz(这样会泄露,前一个值才是符合相干采样下的fs)。设置FFT的起止时间时注意设置起始时间跳过初始的一段时间。
我们希望看到开关电路在输入信号频率为2.4Ghz下的FFT情况,设置fs=100Mhz和采样点数为1024,那么可以计算出信号周期数M=fin/fsN=491(取最近的一个质数)。那么输入频率实际应该fin’=491/10245G=2.397Ghz。
电路如下:
设置如下:
FFT设置如下:起始时间为5u,跳过初始的一段时间;结束时间为起始时间+1024*Ts;自动计算出来采样频率为5Ghz。因为M=491,总的bin数是1024,但有一半是虚频无意义,所以实际图中bin数是512,所以输入信号bin会靠最右,频率为2.397Ghz,幅值为-6.3dB(因为输出峰峰值为0.967V,幅度为0.4835V)。
查看谐波情况:由于是差分结构,偶次谐波影响很小,将Harmonics=2,即将二次谐波来计算THD,可以看到二次谐波失真很小。
设置Harmonics=3,即将二、三次谐波来计算THD,THD的计算方式是将所考虑的谐波能量/输入信号的能量,在dB单位下就是谐波能量-输入能量=-51.125dB。图中计算值和自动计算值差不多。
设置参数介绍如下:
Input Wave Type:设置输入波形类型为Time Domain Waveform
FFT Input Method:设置自动计算采样频率、计算FFT的开始或结束时间。选择Calculate Sample Frequency,需要指定start and stop time(注意要相干采样,所以(StopTime - StartTime)=质数*输入信号周期,若总仿真时间已经符合相干采样就设置为整个仿真运行时间),那么自动计算Sample Frequency = SampleCount/(StopTime - StartTime);选择Calculate Start Time,需要指定stop time, sample count/frequency,那么StartTime= StopTime - SampleCount/SampleFreq。Calculate stop Time也是类似。 注意采样点数通常为2的幂。
Window Type:其中一些窗口类型会增加信号的幅度。 这有助于区分信号中的噪声。当周期数为整数时,可以使用矩形窗口类型。 但是,如果您要模拟 sigma-delta 调制器,则即使 StartTime 和 EndTime 之间出现整数个周期,也可以使用 Hanning 而不是 Rectangular。对于奈奎斯特速率转换器,请使用矩形窗口。 对于 Delta-Sigma 转换器,即使 startTime 和 endTime 之间出现整数个周期,也请使用 Cosine2 (Hanning) 窗口而不是矩形窗口。
Start/End Freq:指定指标计算时(而非FFT的频率范围)的频率范围的下限和上限,若要将开始和结束频率值与指定的开始和停止时间同步,请单击 S 按钮。如果是噪声整形的ADC,结束频率应该设置在ADC带宽。 注意即使修改标计算时的频率范围,左侧仍然显示的是FFT图像的频率范围。默认的上限频率为Fs/2。
Signal Bins:当您选择窗口类型时,此字段显示所选窗口类型的默认箱数。您可以将信号箱的数量增加到采样数量的一半。默认情况下,此字段显示零以指示矩形窗口类型。Signal Bins的值指定了将FFT 波形的输入信号或谐波信号两侧相邻的信号bins数量,这些信号会被算为输入信号或谐波信号的一部分,所以增加Signal Bins并非一定会增加SNR等指标的表现。Hanning、Hamming、Cosine2 窗口的信号箱为 1。 Blackman、ExtCosBell、Kaiser、Cosine4 信号箱的信号箱为 2。 HalfCycleSine、Half3CycleSine、HalfCycleSine3、Half6CycleSine、HalfCycleSine6、Parzen 信号箱的信号箱为 3。 Bins 用于计算总信号功率、P_Noise 和 P_ Distortion。startBin 和 endBin 值是从起始频率和结束频率获得的。 如果更改信号箱的数量,输出部分中的测量值也会更改。 例如,如果更改信号箱的值,信号功率和噪声功率也会更改。 这也会改变 SINAD 和 ENOB 值。
Peak Sat. Level:指定 FFT 波形的峰值饱和电平。 在计算指标之前,FFT 的幅度除以Peak Sat. Level。 峰值饱和电平是忽略任何直流偏移并用于 ENOB 计算的满量程跨度。 Peak Sat. Level或 ADC跨度是ADC可以转换的最大幅度。 例如,**如果 ADC 的输入电压范围为 [-500mV, 500mV],则 Peak Sat. 电平为 500mV。**若不指定Peak Sat. Level,则输入0代表Peak Sat. Level=1。感觉是用来根据输入信号大小来归一化FFT图像的。
Harmonics:指定要绘制的波形的谐波数量。 例如,如果该变量为 n,其中 n 应大于 1 并且基频为谐波 1,则在计算谐波功率时将考虑 n 个谐波,用于计算谐波功率。例如,要计算总谐波失真 (THD),如果将谐波值设置为 n,其中 n 大于 1,并且基频(输入信号频率)为谐波 1,则用于计算 THD 的谐波数量为 2,… .,n. 如果n=3,则使用2次和3次谐波来计算THD。若设置为1,则计算的THD=0%。
Analysis Type:将分析类型指定为信号分析或噪声分析。 根据您选择的分析类型,将计算测量值并将其显示在“输出”部分中。 如果您只想使用频域波形中的噪声作为输入,请选择“噪声分析”。 但是,如果您想同时使用频域波形中的信号和噪声作为输入,请选择“信号分析”。
Outputs里的指标计算见help文档
参考:https://zhuanlan.zhihu.com/p/609893152
参考:https://www.edaboard.com/threads/spectrum-cadence-for-adc-sndr-measurement-issues.396380/
对于连续时间的波形进行fft:设置trans-Options-Output-strobeperiod或trans-Options-Time Step-maxstep的值更小,例如1p,应该会使FFT的计算结果更准确,才能减少插值的影响。因为根据FFT窗口下面的warning “Signal: ’ vin’ : The signal x-axis vector values are not uniformely distributed. Data was interpolalated, which would create numerical noise and differences. To remove these errors, use uniform raw data points.”若将strobeperiod设为1/Sample Frequency发现FFT的图像特别顺滑,若仍然有这样的warning,可以进一步设小些。 FFT时通常仿真步长需要小于该采样间隔一半,一定要小于,注意仿真现象是否符合常理,不然还要继续减小步长!!
对于离散值作FFT,例如对开关电路的输出端fft,需要卡好fft采样时间和开关的保持态(hold,断开开关时),保持一致。
下面以对vsin进行fft为例说明步长对结果的影响:
设置maxstep=1p后对输入正弦信号源做FFT,ENOB=35bit;
不设置时位数只有8bit。