DAC SFDR仿真问题
1、对DAC进行SFDR仿真,将频率位FIN的Vsin信号输入verilogA模型的ADC,将ADC输出座位DAC的输入,其中采样频率为FS,假设输入频率为1M采样频率为20M,然后得到DAC还原的Vsin‘信号,将Vsin’的所有点导入matlab做分析得到的SFDR是不是最准确的?这样获得的数据太多了,如果对每一个台阶再采样一个点,这样输出曲线就变得较为光滑,这样的数据会偏离实际值太多。这样对不对?
2、论坛中说Fin=(M/N)Fs,其中需要M为质数,N位2的n次方。具体是什么意思?
3、论文中输入频率100M采样频率400M时候的sfdr是**db,4倍的采样率,输入信号每个周期只能被采4个点,还原出来的波形岂不是非常的不精确?
请前辈多多指点!
自己顶一下前辈们多多指教
1.DAC输出的信号还是要经过等间隔采样的,一个周期采样整数K个点,再做FFT。这里主要考虑DAC seelling 过程(glitch,slew,BW);其实你会发觉当K大到某个值得时候FFT的结果基本不变,这个值就是经济合理的值。
2.FIN=(M/N)*fs ; M/N互质主要是保证仿真N个data才重复。做FFT时,只需采样N个周期的K*N个点,K为每个周期的整数采样点;这样就不需要加窗函数,信号只有一个tone. 加窗函数的缺点是主tone扩展,计算起来比较麻烦。FFT对N的值也是有要求的N大到某个值时SNR结果才基本不变,是为经济合理的值。再回到上面的问题如果M/N不互质,则采样的N个周期的值必定会出现重复。对于仿真重复的值并不会增加仿真精度。
3.奈奎斯特率以下的输入信号仿真都是有必要的,坚持上面的原则即可,比如100M输入信号100M可以微调,比如257/1024*100M,这样保证1024周期重复。
非常感谢前辈的解惑 (2)M和N分别指什么,您说的N是指对输入信号的采样周期数,那么M呢?
有贴将M解释为输入信号的周期数量,N为对输入信号的采样次数:
“在加激励时,需要满足Fin=(M/N)*Fs,其中Fin是正弦激励的频率,Fs是采样时钟的频率,N是你做fft的采样点数(可以取为2^10),M为采样时间内输入信号的周期数(最好为奇数)。比如:你是12位200M采样的DAC,如果你要仿真输入频率1M时的情况,则可以Fs=200MHz,N=1024,M=5,Fin=0.9765625MHz。采样时间为5.12us。最后用WaveScan查看输出波形时,将波形文件导出,再用Matlab做dft,Matlab程序见附件(将后缀名改为.m)。
需要注意的是:为了方便做dft,在Cadence ADE中选择tran仿真时,仿真时间可选为5.3us(大于采样时间),同时点击options,在跳出的窗口 Transient Options中 将OUTPUT PARAMETERS/strobeperiod设为0.05ns,最后在Matlab做dft时,将前面不稳定的0-0.18us截取,留下稳定的0.18us-5.3us。
http://bbs.eetop.cn/thread-239649-1-1.html”
这其中的解释N是对输入信号的采样点数即最终DAC的输出的台阶数,在DAC输出的N=1024个台阶中做了间隔0.05ns的数据采样。然后把所得到的数据做FFT分析,点数包括舍弃的应该有1024*100个,是不是这个意思?而不是首先解释的最终做FFT的点数只有N=1024个点。
如果引号中的方法得到的点数,可能不是输入信号周期的整数倍,这样做的FFT分析会不会有频谱泄露的问题,一些matlab函数中要求做分析的点数构成的信号时输入信号的整数倍?
还有贴回复说:需要输入信号尽量使DAC能够输出所有的码,动态参数仿真也需要这样吗? 他的回答是什么意思呢?
“看你的仿真结果图片,貌似你并没有run 完所有的 digital code ,(即从0000.......(14个0)到1111.....(14个1))而且你的仿真信号周期只有一个。这种情况下.你的DAC退化成为一个低位的DAc. 更加本质上来讲,由于你的LSB并不等于FS/(2^14-1),导致了结果的量化噪声变大。当然得到的SNR结果远远小于6.02*14+1.72的理想结果。呵呵,ENOB也显示了这一趋势。 另外,仿真的时候使用COS信号作为输出,会产生偶数次的谐波。我的一些建议,也是通常的做法。用一个16为的理想ADC输出作为你DAC的输入码。ADC的输入端为一个SIN信号。你可以选择run一个完整的SIn周期,此时ADC时钟高一些,也可以选择run很多sin周期,ADC时钟可以相对较低。 这两种方式同样要消耗挺长的时间,但是高位的DAC验证就是这样,木有办法。两外,适当的选取输入时钟周期和数据采样周期,避免频谱泄露。(貌似你的图没有这方面的问题)http://bbs.eetop.cn/thread-344771-1-1.html”
谢谢你
.FIN=(M/N)*fs ; M/N互质主要是保证仿真N个data才重复。做FFT时,只需采样N个周期的K*N个点,K为每个周期的整数采样点;这样就不需要加窗函数,信号只有一个tone. 加窗函数的缺点是主tone扩展,计算起来比较麻烦。FFT对N的值也是有要求的N大到某个值时SNR结果才基本不变,是为经济合理的值。再回到上面的问题如果M/N不互质,则采样的N个周期的值必定会出现重复。对于仿真重复的值并不会增加仿真精度。
谢谢前辈的解惑
(2)中N是采样的周期个数?那M是什么呢?有人解释M是Fin输入周期的个数,N位采样的点数,即DAC输出的台阶数。将DAC输出信号采样再做分析,做分析时需要数据是输入信号的整数倍,这个获得的数据应该不会是整数倍吧?
“在加激励时,需要满足Fin=(M/N)*Fs,其中Fin是正弦激励的频率,Fs是采样时钟的频率,N是你做fft的采样点数(可以取为2^10),M为采样时间内输入信号的周期数(最好为奇数)。比如:你是12位200M采样的DAC,如果你要仿真输入频率1M时的情况,则可以Fs=200MHz,N=1024,M=5,Fin=0.9765625MHz。采样时间为5.12us。最后用WaveScan查看输出波形时,将波形文件导出,再用Matlab做dft,Matlab程序见附件(将后缀名改为.m)。
需要注意的是:为了方便做dft,在Cadence ADE中选择tran仿真时,仿真时间可选为5.3us(大于采样时间),同时点击options,在跳出的窗口 Transient Options中 将OUTPUT PARAMETERS/strobeperiod设为0.05ns,最后在Matlab做dft时,将前面不稳定的0-0.18us截取,留下稳定的0.18us-5.3us。”
我的回复怎么显示不出来?
感谢前辈的解惑 2中公式M和N分别指的是什么呢?
有人将M认为是输入信号的周期个数,N应该是对输入信号的采样点数吧?
"在加激励时,需要满足Fin=(M/N)*Fs,其中Fin是正弦激励的频率,Fs是采样时钟的频率,N是你做fft的采样点数(可以取为2^10),M为采样时间内输入信号的周期数(最好为奇数)。比如:你是12位200M采样的DAC,如果你要仿真输入频率1M时的情况,则可以Fs=200MHz,N=1024,M=5,Fin=0.9765625MHz。采样时间为5.12us。
最后用WaveScan查看输出波形时,将波形文件导出,再用Matlab做dft,Matlab程序见附件(将后缀名改为.m)。
需要注意的是:为了方便做dft,在Cadence ADE中选择tran仿真时,仿真时间可选为5.3us(大于采样时间),同时点击options,在跳出的窗口 Transient Options中 将OUTPUT PARAMETERS/strobeperiod设为0.05ns,最后在Matlab做dft时,将前面不稳定的0-0.18us截取,留下稳定的0.18us-5.3us。"
M/N* fs=Fin,M是N个采样点的输入信号出现的周期数。N为输出点不重复的最少采样点。仿真时要剔除开始的不稳定点,因为电路的需要时间响应的。
学习了
感謝3樓與4樓詳細的說明...
我之前没仿真过DAC,现在老板让我设计一个10bit的DAC,刚刚将电路搭建完,用的是Cadence仿真,不怎么会用Verilog A ,直接用计数器产生输入,不知道可行否?
我之前没仿真过DAC,现在老板让我设计一个10bit的DAC,刚刚将电路搭建完,用的是Cadence仿真,不怎么会用Verilog A ,直接用计数器产生输入,不知道可行否?
我想问问你 这样仿真 仿真时间长不长?大概有多少?我也是这样做的 但发现仿真用的时间太长了
O(∩_∩)O谢谢