在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 9855|回复: 12

SFDR的仿真遇到的问题 请教

[复制链接]
发表于 2009-4-5 00:41:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
根据公式Fin/Fsample=Nwindows/Nrecord
我选取
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)
1.jpg
 楼主| 发表于 2009-4-6 21:48:30 | 显示全部楼层
这是HSPICE语句
.param ff=250meg  f1='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)

高手指教下呀
发表于 2009-4-7 19:48:29 | 显示全部楼层
你的频点都计算对了,感觉像是正弦波精度(或者仿真精度)的问题
 楼主| 发表于 2009-4-8 00:09:19 | 显示全部楼层
这是我的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
这是部分输出点  

  time    voltage   
                    v1     
   10.00000n     58.8708m  
  110.00000n    594.2903m  
  210.00000n    944.0395m  
  310.00000n    960.2334m  
  410.00000n    655.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的波形
333.jpg
发表于 2009-4-8 10:43:25 | 显示全部楼层
原始短消息: 是呀 我也感觉是精度的问题 怎么在hspice中设置呢


怎么设置呢  qq274630217


我好久都没有用过hspice做仿真了,你看看hspice手册吧
你的谐波和噪底都很大,应该是精度的问题,这里包括仿真数据的精度和fft计算的精度问题,但是使用matlab做的fft的精度都很高,所以你的精度应该是在仿真出的数据上有问题。
/////////////////////////////////////////////////
这是HSPICE语句
.param ff=250meg  f1='163*ff/4096'
v1 v1 0 sin(0.28 0.28 f1)
.tran 4n 16384n 3n
.print v(v1)
.end
///////////////////////////////////////////////////
个人觉得你这里有两个可能会影响到fft的结果。
一是hspice仿真精度
二是你的步长太小,在做fft你采样出来的数据点上与理想的正弦波误差太大(就是说你在这些数据点所对应的时间点上是没有被hspice仿真到,而这些数据点上的值都是由相邻的点线性计算出来的,因为你的步长很大,所以由相邻的点线性计算出来的数据值与真实值会有很大的误差,这个情况你如果放大仿真波形也可以看到)

[ 本帖最后由 tayo134 于 2009-4-8 10:45 编辑 ]
 楼主| 发表于 2009-4-8 11:05:39 | 显示全部楼层
感谢楼上的回答
我再仔细看会hspcie手册
你说的步长太大 是指.tran 4n
之中的4n吗 我设置到了0.01n 结果有改善还是不理想  而且数据输出量太大啦
我也感觉是我所抽样的点是旁边的点线性模拟出来的 不大准确 可是不知道怎么能得精确的点
最后还是感谢
发表于 2009-9-16 19:10:08 | 显示全部楼层

1111111

做出来精度很差的原因是在于
.tran 4n 16384n 3n  错了

正确是:.tran 4n 16387n 3n  (注意差别)
因为你是从3n后记录数据,所以你的仿真时间应该是16384n+3n

code:
.param ff=250meg  f1='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
未命名.JPG
发表于 2009-9-16 19:19:37 | 显示全部楼层
great
发表于 2009-9-18 22:49:35 | 显示全部楼层
bucuo
 楼主| 发表于 2009-9-20 21:42:25 | 显示全部楼层


原帖由 woaijoyce 于 2009-9-16 19:10 发表 做出来精度很差的原因是在于 .tran 4n 16384n 3n 错了 正确是:.tran 4n 16387n 3n (注意差别) 因为你是从3n后记录数据,所以你的仿真时间应该是16384n+3n code: .param ff=250meg f1='163*ff/4096' .opt ...


就算这样 从图中可以看出SFDR也只有60db  
而输入是理想的正弦波 不应该这么低的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 03:00 , Processed in 0.034700 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表