SFDR的仿真遇到的问题 请教
我选取
Nrecord=4096
先取Fin=10MHz Fsample=250MHz
由此得出Nwindow=163.84
因为Nwindow一般为奇数和质数
故这里取Nwindow为163
带入得到Fin=9.94873Mhz
在做sfdr的时候 先用理想的AD生成Fin的正弦输出数字信号然后输入到你设计的DA中 最后得到结果做FFT 得到频谱可以看出SFDR
这是一般的SFDR的仿真步骤。
我的问题是我用HSPICE先生成个频率为Fin=9.94873Mhz的正弦波然后想看看这个理想的正弦波的SFDR
于是我仿真了4n*4096(4n是因为Fsample为250Mhz)时间
将得到后的4096个点做fft 可是波形如图不是很好 那么我想问问
这个理想的正弦波的SFDR都不怎么好
那么把这个理想的正弦波经过AD再输入到DA中得到的正弦波他的SFDR 怎么会好呢?
是我理解错了吗?
我做fft的时候用的matlab程序大致如下:
将4096个点导入到matlab中的a中 然后b=fft(a,4096)然后db=20*log10(abs(b)) plot(db)
这是HSPICE语句
.param ff=250megf1='163*ff/4096'
v1 v1 0 sin(0.28 0.28 f1)
.tran 4n 16384n 3n
.print v(v1)
.end
然后把生成的数据v1从list里面取出来存到sin.txt里面
然后打开MATLAB 程序如下
>> d=load('sin.txt');
>> b=fft(d,4096);
>> c=20*log10(abs(b));
i=1:4096;
plot(i,c)
高手指教下呀
你的频点都计算对了,感觉像是正弦波精度(或者仿真精度)的问题
这是我的spice程序
fin=0.9375meg fsample=10meg
N=32 n=3
.param ff=10meg
v1 v1 0 sin(0 1 0.9375meg )
.tran 100n 3110n 10n
.print v(v1)
.end
这是部分输出点
timevoltage
v1
10.00000n58.8708m
110.00000n594.2903m
210.00000n944.0395m
310.00000n960.2334m
410.00000n655.0623m
我利用公式来计算 110n处的点 为 sin(2*pi*0.9375e6*110e-9)=0.6036而hspice的为0.5942903
210n处sin(2*pi*0.9375e6*210e-9)= 0.9448而hspice的为0.944039
这点的变化好像会影响到fft的波形
原始短消息: 是呀 我也感觉是精度的问题 怎么在hspice中设置呢
我好久都没有用过hspice做仿真了,你看看hspice手册吧
你的谐波和噪底都很大,应该是精度的问题,这里包括仿真数据的精度和fft计算的精度问题,但是使用matlab做的fft的精度都很高,所以你的精度应该是在仿真出的数据上有问题。
/////////////////////////////////////////////////
这是HSPICE语句
.param ff=250megf1='163*ff/4096'
v1 v1 0 sin(0.28 0.28 f1)
.tran 4n 16384n 3n
.print v(v1)
.end
///////////////////////////////////////////////////
个人觉得你这里有两个可能会影响到fft的结果。
一是hspice仿真精度
二是你的步长太小,在做fft你采样出来的数据点上与理想的正弦波误差太大(就是说你在这些数据点所对应的时间点上是没有被hspice仿真到,而这些数据点上的值都是由相邻的点线性计算出来的,因为你的步长很大,所以由相邻的点线性计算出来的数据值与真实值会有很大的误差,这个情况你如果放大仿真波形也可以看到)
感谢楼上的回答
我再仔细看会hspcie手册
你说的步长太大 是指.tran 4n
之中的4n吗 我设置到了0.01n 结果有改善还是不理想而且数据输出量太大啦
我也感觉是我所抽样的点是旁边的点线性模拟出来的 不大准确 可是不知道怎么能得精确的点
最后还是感谢
1111111
做出来精度很差的原因是在于
.tran 4n 16384n 3n错了
正确是:.tran 4n 16387n 3n(注意差别)
因为你是从3n后记录数据,所以你的仿真时间应该是16384n+3n
code:
.param ff=250megf1='163*ff/4096'
.option post
v1 v1 0 sin(0.75 0.75 f1)
.tran 4n 16387n 3n
.fft v(v1)
.print v(v1)
.end
great
bucuo
就算这样 从图中可以看出SFDR也只有60db
而输入是理想的正弦波 不应该这么低的
10# xiaoxianzai
谢谢了