virtuoso快速傅里叶变换仿真
本文最后更新于:2026年8月5日 晚上
傅里叶仿真的注意事项
1. 相干采样
在Virtuoso中进行频谱分析,核心是进行FFT(快速傅里叶变换)设置。这通常是在完成瞬态仿真(tran) 后,对输出的时域波形进行后处理。
为了获得准确的频谱,最关键的一步是实现相干采样 (Coherent Sampling),以避免频谱泄露。
相干采样要求输入信号频率 (fin)、采样频率 (fs) 和采样点数 (N) 满足以下关系:
- N:FFT点数,通常取2的幂,如1024、2048。
- M:质数,代表在
N个采样点中包含的输入信号完整周期数。
简单来说,就是确保你的采样窗口恰好截取了整数个周期的信号波形。
起始时间 (Start Time) 和结束时间 (Stop Time)满足:
【举个例子】:
假设我瞬态仿真得到的波形基波频率为$300\text{Hz}$,于是$f_{in}=300\text{Hz}$
virtuoso默认采样点数是1024个点,我们通常需要设置的是起始时间 (Start Time) 和结束时间 (Stop Time)
首先确定$M$,通常为质数,通常可以取1、3、5、7。由于输入信号基频为300,因此此处可以取3,即可计算得到$\text{Stop Time}-\text{Start Time}=\frac{3}{300}=10ms$
若波形存在启动时间,则$\text{Start Time}$应大于启动时间,则整个tran仿真的时间应该大于$\text{Stop Time}$
比如波形从开始建立到稳定的时间为$500\mu s$,则可以设置$\text{Start Time}=1ms$,设置$\text{Stop Time}=\text{Start Time}+10ms=11ms$,tran总仿真时长设置为$12ms$
同时可以计算得到$f_s=102.4k\text{Hz}$
为满足奈奎斯特采样定理,可观测信号频率只能是采样频率的一半,因此我们FFT之后看到的频谱图横坐标(即频率)能看到的最大值为$f_s/2=51.2k\text{Hz}$
2. 具体操作
【第一步】:瞬态仿真 (Transient Simulation) 设置
在设置瞬态仿真时,就需要为后续的FFT分析做准备。
- 仿真时间 (Stop Time):至少保证电路进入稳定状态后,还有足够时间采集
N个点。一个常用的公式是:仿真总时间 >= 启动时间 + N / fs。 - 仿真步长 (Step):步长应足够小,以满足奈奎斯特采样定理,并准确捕捉信号细节。一般建议步长小于
1/(2·fs)。
【第二步】:调用频谱分析工具 (Spectrum/FFT)
仿真完成后,在波形窗口 (Waveform Window) 中,通过菜单栏 Measurements -> Spectrum 来打开设置对话框。
【第三步】:关键参数配置
这是整个频谱分析的核心,每个参数都直接影响结果。
Input Wave Type: 选择Time Domain Waveform。FFT Input Method: 推荐选择Calculate Sample Frequency。- 这种方式下,你需要指定FFT分析的起始时间 (
Start Time) 和结束时间 (Stop Time),系统会自动算出采样频率。 Start Time:至关重要,必须避开电路启动时的暂态过程,选择电路已稳定后的时间点。例如,可从1ms开始。Stop Time:计算公式为Start Time + M / fin,以满足相干采样。
- 这种方式下,你需要指定FFT分析的起始时间 (
Sample Count/Number of Samples: 设置FFT点数N,通常为1024、2048等2的幂。Window Type(窗函数):Rectangular(矩形窗):适用于信号周期完美对齐(相干采样)的情况。对于Nyquist速率ADC,推荐使用此窗。Hanning(汉宁窗):能有效抑制频谱泄露,适用于非相干采样或Sigma-Delta调制器等。
Start/End Freq: 设置你关注的频率分析范围。可以点击S按钮,让它与你的Start/Stop Time自动同步。Harmonics: 设置想要观察或用于计算THD的谐波次数,通常设置为3到7次即可。如果波形实现不明显,则设置7次足矣,7次以上计算出来的THD和计算7次的差别不大。Signal Bins: 这个参数与窗函数有关,通常保留默认值即可。
【第四步】:生成频谱图与分析
完成所有设置后,点击 Plot 按钮,即可生成频谱图。在频谱图上可以直接读出基波、各次谐波以及噪底的功率值,用于后续计算THD、SINAD、SFDR等动态参数。
3. 注意事项
较为精确设置初始时间和结束时间:如果选取不合适,则可能出现以下情况。
例如,希望观察
fin=300Hz,选取M=7、N=1024,计算Stop Time-Start Time=23.333ms,但是你设置的Stop Time-Start Time=23ms,则实际观测到频率为fin = 7/23ms = 304.3Hz,和300Hz有所偏差。关于
M(信号周期数)的选择:M必须为质数,通常取3、5、7。采样点数并非越多越好:过高的采样点数(如16384)可能导致样本间差异过小,反而影响FFT结果的有效性。
如何包含噪声:如果需要分析包含噪声的频谱,需在电路或输入信号中引入噪声源。常规的瞬态仿真本身不包含器件噪声。
常见问题排查:
- THD计算结果为0:检查
Harmonics是否设置正确,或电路是否过于理想化。 - 频谱泄露严重:检查
Start/Stop Time的设置是否严格满足相干采样条件。 - SNR大于SNDR:这通常意味着仿真或FFT设置存在问题,因为SNDR = SNR + THD,理论上SNDR应大于SNR。
- THD计算结果为0:检查
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!