Chip123 科技應用創新平台

標題: SFDR的仿真遇到的问题 请教 [打印本頁]

作者: xiaoxianzai    時間: 2009-4-5 04:25 PM
標題: SFDR的仿真遇到的问题 请教
根据公式Fin/Fsample=Nwindows/Nrecord: ~6 T2 r& H# L0 r9 ~0 v
我选取& `- ?/ C/ K2 F6 f) E8 ^
Nrecord=4096
3 Q+ _7 P, H) Q/ w先取Fin=10MHz Fsample=250MHz
' W% U, O: a" q" {由此得出Nwindow=163.84因为Nwindow一般为奇数和质数
( M& G+ A" E# Y2 p) ^. G故这里取Nwindow为163 ' U/ S+ _! [# C
带入得到Fin=9.94873Mhz
% T; O% h% b5 _8 Z/ k5 z在做sfdr的时候 先用理想的AD生成Fin的正弦输出数字信号然后输入到你设计的DA中 最后得到结果做FFT 得到频谱可以看出SFDR
9 S8 j/ B( @# q+ ^: ~5 M2 Z5 F, N5 C, G8 E6 o
这是一般的SFDR的仿真步骤。
/ m& r; A2 D5 h, f& ^% y
# G+ X3 s. [$ J3 F2 c. j' X我的问题是我用HSPICE先生成个频率为Fin=9.94873Mhz的正弦波然后想看看这个理想的正弦波的SFDR
8 }1 ~& S  m1 I) R+ b' J于是我仿真了4n*4096(4n是因为Fsample为250Mhz)时间
' W  b( r, R0 A将得到后的4096个点做fft 可是波形如图不是很好 那么我想问问
' W8 M5 ^7 d+ J2 h- i& h7 v: F1 w这个理想的正弦波的SFDR都不怎么好8 @. S; k5 d4 v1 r, A" x6 |, R7 v: p
那么把这个理想的正弦波经过AD再输入到DA中得到的正弦波他的SFDR 怎么会好呢?
- Z5 ~6 M) E3 b. N是我理解错了吗?
我做fft的时候用的matlab程序大致如下:
. n7 z) L; Y7 Z* e将4096个点导入到matlab中的a中 然后b=fft(a,4096)然后db=20*log10(abs(b)) plot(db)

作者: xiaoxianzai    時間: 2009-4-6 09:45 PM
这是HSPICE语句.param ff=250meg  f1='163*ff/4096'
( n& _/ Z0 `6 y7 B0 N3 x5 {v1 v1 0 sin(0.28 0.28 f1)
& k+ h* [+ z2 z- h- ]& J.tran 4n 16384n 3n
9 `- `/ R8 o' }* n6 ^+ |" E.print v(v1)
" T  z5 U9 V. B3 Z+ I.end9 B# Q" B0 x3 u  C2 [0 c" J& M
然后把生成的数据v1从list里面取出来存到sin.txt里面
7 l) T* ]/ v7 e6 U+ L  X# i然后打开MATLAB 程序如下
>> d=load('sin.txt');* J& m; T6 v) j. ^( ~
>> b=fft(d,4096);9 p5 }8 b5 e/ V' c
>>  c=20*log10(abs(b));
" j% b" p0 P5 ?( B) G# [9 }i=1:4096;
( m2 x5 t5 `. k/ M( P* x# b& Gplot(i,c)
$ a) \6 ]6 {7 Q2 y0 v" I0 P3 h3 j& Z4 E. j
大大请教啦
作者: xiaoxianzai    時間: 2009-4-7 02:20 PM
感觉问题在这里 * _6 ~! ]' l  p) `( {  [2 h2 Q
我在matlab中编写了段sin函数的抽样曲线
+ ]" T. T4 W- D
/ {0 n4 a( H4 z( Z比如说看sin(4n)的点 然后在hspice中看相应的print出来的4n秒处的点结果发现不一致 - Q% Q0 \! \" u% D
如下所示
" ]; N+ w: w/ r6 |$ V# u" t% T) I. X* fT   MATLAB                         HSPICE" M1 B/ H( t6 S: y5 [4 A( G
1 58.870803651189036          58.8708037e-3 0 u1 V: H/ O: t/ v/ h2 O! J
2 603.5559419535714          599.7663787e-3 : O9 M% I6 j$ ~* g3 s5 @
3 944.806046466878           934.7331225e-3 : J& E1 d9 B9 Y; r
4 967.5990923602598          956.1967592e-3
# ~7 W6 a. c" v+ v. m1 F) s1 t! k5 664.2524379112818          662.4251941e-3
7 d3 Z+ ]4 |+ ]8 Q6 137.01234168196848         136.5766324e-3
- X( l* f% D" S" `# L) {7 -436.40924067334225       -433.0983571e-3 2 q" {* R6 ~4 S9 C0 W$ J! z
8 -862.734385977792         -861.6494438e-3
  r. O; W/ D, b' L. I2 e; _+ b  K" _6 m9 -998.2656101847159        -997.6056075e-3
8 t, n$ O' o1 q10 -797.3206537727073        -797.1222747e-3 ( A/ `: S8 i7 P( v5 C$ ^; Z
11 -327.6301795616938        -324.6260505e-3
( K6 N- }( Z  f  U# e+ J12 252.4915770151574          251.2462039e-3
+ Z6 S& M$ c2 G0 p4 ^
' C/ _5 c' |  M! H从表中可以看出hspice的同样的点处和matlab的有差别因此造成了频谱泄露 不过不知道怎么在hspice中修改才能精度好点
作者: monkeybad    時間: 2009-4-7 10:26 PM
感覺你的步驟跟觀念應該都沒錯 理論上用理想的正弦波得到的頻譜應該會很漂亮才對
3 E0 \! B& w1 b, m跟MATLAB比較後同樣時間的值應該不會差這麼多才對
. i: g$ Y. h1 `* \1 u8 x$ I: l6 {你要不要檢查一下你Hspice產生sin的頻率和理論算出來的頻率對不對呀 我看你Hspice是用參數去算的
5 J3 m" z9 k  B* y, T: N- |( t不知道這樣會不會有精度上的問題 當然這只是我初步的猜測啦
$ Z" t; h- P, h詳細原因可能還要再進一步檢查
作者: xiaoxianzai    時間: 2009-4-7 11:03 PM
谢谢版主的答复5 x9 A0 e9 c) r) f
我试验了用频率取代刚才那些表达式 可是效果还是那样不大理想 于是我现在都开始怀疑hspice怎么出来的那么不准确
3 n! f6 j2 b) \版主可以把程序放进去跑跑32个点的 也是一样
$ c4 H( X8 d; t4 d% \- k
" ]3 t- J+ I+ Q) [* N% a4 a2 g6 P6 afin=0.9375meg fsample=10meg
! k! {& D+ I6 o7 s* \% K% M N=32 n=34 M) h0 i/ n8 p+ M# J) N2 i. v

3 f* c5 R& @# J; j- `* J& }% }; K
/ B0 t$ g! H( t% m.param ff=10meg              # ?/ s1 O" b: O# g
v1 v1 0 sin(0 1 0.9375meg )  * b# @- O% p& |- T" ], X
.tran 100n 3110n 10n         
- r: y( {; B$ W$ H8 i- H" u.print v(v1)                 , Q! ]# W3 E9 v$ F! N6 v
.end
作者: xiaoxianzai    時間: 2009-4-7 11:49 PM
这是部分输出点  ) A5 X7 x) f1 @* I
# l6 a6 K' C, _8 C
  time    voltage    $ M. n; P6 W2 ^3 n( Y! N' l5 q" \
                    v1     ( u9 ?! x' u6 V: A8 v; M
   10.00000n     58.8708m  
) S4 v% a8 F- d+ p4 D  110.00000n    594.2903m  
& U( s: }+ H. Z# _7 ?1 u1 L  210.00000n    944.0395m  " g) p7 v1 r) y
  310.00000n    960.2334m  
4 b" W  w6 l% b% T6 Z# E  B* P7 M  410.00000n    655.0623m  * P: J8 F' g: y3 Q8 g, Y
& I! g. O( F' S
我利用公式来计算 110n处的点 为 sin(2*pi*0.9375e6*110e-9)=0.6036  而hspice的为0.59429035 s1 l$ S" i( ?$ c3 w; c
                 210n处        sin(2*pi*0.9375e6*210e-9)= 0.9448  而hspice的为0.944039 6 z$ u; \: o, e" d. \; @
这点的变化好像会影响到fft的波形
- j; o7 B8 l' \8 @! |* t' y9 k7 d2 s2 w# @% h( B) `
[ 本帖最後由 xiaoxianzai 於 2009-4-8 12:05 AM 編輯 ]
作者: qw101    時間: 2009-4-9 05:10 PM
我認為用MATLAB 產生digital code可能會比較好,因為hspice版本不同跑出來的值也會不同,(MATLAB我不知道),而且看你用MATLAB的sfdr比hspice好,當然用好ㄧ點的程式去測你的電路,這樣debug也比較容易,問題是誰能教我sinwave digital code 怎麼寫(用MATLAB)。
作者: xiaoxianzai    時間: 2009-4-9 07:07 PM
標題: 回復 7# 的帖子
关键的问题是你最后虽然用matlab可以产生理想的digital code  可是 你最后要分析的output还是从hspice仿真抽样出的 不能避免跳过hspice这一步呀




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2