Chip123 科技應用創新平台

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

作者: xiaoxianzai    時間: 2009-4-5 04:25 PM
標題: SFDR的仿真遇到的问题 请教
根据公式Fin/Fsample=Nwindows/Nrecord
' d$ C% P/ A( r9 P3 `9 Z我选取3 e; V% B+ L5 }1 T9 x4 `
Nrecord=4096 ' d- N( y- V6 \9 v
先取Fin=10MHz Fsample=250MHz
  Q" g; f2 v& M5 M# Y* d由此得出Nwindow=163.84因为Nwindow一般为奇数和质数
  j+ r5 K% [( w( v1 g. d! }1 J3 h故这里取Nwindow为163
9 d7 v/ }: t$ }7 h* J7 ^带入得到Fin=9.94873Mhz
' X' i; I2 ?8 j  _6 U在做sfdr的时候 先用理想的AD生成Fin的正弦输出数字信号然后输入到你设计的DA中 最后得到结果做FFT 得到频谱可以看出SFDR
0 T; T* }! y! X( G/ \7 ?! F+ N
; C# L$ x" j3 g7 \  Y9 H0 v这是一般的SFDR的仿真步骤。
4 N" ?" N6 j5 W& R- _- @( j! X  C) [  u: \. R  r  g4 ]4 f
我的问题是我用HSPICE先生成个频率为Fin=9.94873Mhz的正弦波然后想看看这个理想的正弦波的SFDR 9 V0 r) L: ]0 A% h$ g3 }9 X
于是我仿真了4n*4096(4n是因为Fsample为250Mhz)时间
& K8 e. n( r) L& V  x将得到后的4096个点做fft 可是波形如图不是很好 那么我想问问
; |& R! q" r! C  p+ W8 z3 f. o. [这个理想的正弦波的SFDR都不怎么好
; G  y7 z6 v7 ?- Y8 s那么把这个理想的正弦波经过AD再输入到DA中得到的正弦波他的SFDR 怎么会好呢?0 c, @+ a/ y! N2 d. w
是我理解错了吗?
我做fft的时候用的matlab程序大致如下:
: d0 _9 }7 b( f) K: F$ z将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'
) I% ]( q1 E2 {' B! r9 Lv1 v1 0 sin(0.28 0.28 f1)
: r+ N) y7 |) i/ ^; E8 E.tran 4n 16384n 3n1 }0 [( P9 u/ S+ A: E
.print v(v1)( d2 M$ e+ H  _4 s3 K
.end
( u; V3 M4 n$ p5 J( \# Y% O8 e然后把生成的数据v1从list里面取出来存到sin.txt里面' C9 H: Y6 Z8 [
然后打开MATLAB 程序如下
>> d=load('sin.txt');
% ], W$ I+ v3 U- q, u>> b=fft(d,4096);
- e, W2 @  `/ c" s>>  c=20*log10(abs(b));/ v- \6 k" Y! J( T: U+ e
i=1:4096;
: N% r% v; N! I. L$ \plot(i,c). Q3 ^9 w* P3 f" {0 i) [3 N9 M' Q

. z) W4 w# I8 I% W% D大大请教啦
作者: xiaoxianzai    時間: 2009-4-7 02:20 PM
感觉问题在这里
/ O$ a2 |8 ~  y- x我在matlab中编写了段sin函数的抽样曲线% v7 l7 s" L! g5 P5 Q2 W& M
7 G% r9 e$ ~# c# u
比如说看sin(4n)的点 然后在hspice中看相应的print出来的4n秒处的点结果发现不一致
. C/ B  c/ E6 u7 Q+ @/ X; g如下所示
& H% p4 ]* p$ R% y2 |T   MATLAB                         HSPICE! p" u0 a+ V- V3 k) f
1 58.870803651189036          58.8708037e-3 6 O2 ^6 _9 w+ h8 t7 _0 u, r5 w& J
2 603.5559419535714          599.7663787e-3 * V  M* f6 V4 Q
3 944.806046466878           934.7331225e-3 * ~7 T/ Q0 z/ b0 w+ d$ C% Q3 [
4 967.5990923602598          956.1967592e-3 3 F) u8 u- \# `  k2 V9 o( W
5 664.2524379112818          662.4251941e-3 ( o  W& M- q4 p0 B0 l; {  y5 q
6 137.01234168196848         136.5766324e-3 4 k% P) M% m/ @0 c( A3 ^$ @9 P
7 -436.40924067334225       -433.0983571e-3 6 w$ @0 Z0 c! s+ W
8 -862.734385977792         -861.6494438e-3 & ]: r# S2 @( ^4 p
9 -998.2656101847159        -997.6056075e-3
  K# e% B) Z% _9 A7 O+ {10 -797.3206537727073        -797.1222747e-3 8 ]8 o1 f6 |7 ?$ B' A" a$ W
11 -327.6301795616938        -324.6260505e-3 ' V- p# [6 \2 |. O# S
12 252.4915770151574          251.2462039e-3
4 y0 B4 I: R* H) T" G$ C3 n& X- p
, \- M/ A' w" v/ ~; z$ ?从表中可以看出hspice的同样的点处和matlab的有差别因此造成了频谱泄露 不过不知道怎么在hspice中修改才能精度好点
作者: monkeybad    時間: 2009-4-7 10:26 PM
感覺你的步驟跟觀念應該都沒錯 理論上用理想的正弦波得到的頻譜應該會很漂亮才對
( g# R( z1 T) L. l0 U跟MATLAB比較後同樣時間的值應該不會差這麼多才對
# I6 y1 K8 S/ ?8 p你要不要檢查一下你Hspice產生sin的頻率和理論算出來的頻率對不對呀 我看你Hspice是用參數去算的3 H. D) m2 j+ W3 |' q5 e
不知道這樣會不會有精度上的問題 當然這只是我初步的猜測啦
; X3 F; z6 {% t" z3 k' B/ Z3 K; \詳細原因可能還要再進一步檢查
作者: xiaoxianzai    時間: 2009-4-7 11:03 PM
谢谢版主的答复6 I- X. M4 E& e9 m1 o! Y
我试验了用频率取代刚才那些表达式 可是效果还是那样不大理想 于是我现在都开始怀疑hspice怎么出来的那么不准确
8 W4 h+ U0 N- p2 F  i3 ^5 s+ D版主可以把程序放进去跑跑32个点的 也是一样( c8 U% t; \' K, n% b1 ?
2 L$ K' p; Y  X. q2 P
fin=0.9375meg fsample=10meg
5 |* A1 w& U7 U3 F N=32 n=3
. d' J; C+ m9 n5 t+ f& S' B
& S% S% o: H* a- L% g
4 c2 T) b: m8 Q: |9 t% {" l6 c6 p% f+ n# k.param ff=10meg              ) A+ U7 b3 F7 F! h) i3 X( }
v1 v1 0 sin(0 1 0.9375meg )  % v% h1 o  j/ b' k
.tran 100n 3110n 10n         4 |) s" \7 _# }. i7 e: ~( q
.print v(v1)                 # @5 y" Q5 r6 S) {. D3 M
.end
作者: xiaoxianzai    時間: 2009-4-7 11:49 PM
这是部分输出点  
. ^3 I& I# P- N5 {* X; X5 G, H( J  [% f1 r# e! |
  time    voltage    ) u* x) g+ G6 p. z* Z
                    v1     ( I) Z1 l8 g/ M9 \. M/ U% \
   10.00000n     58.8708m  0 l5 F/ D9 ~* Y9 `" c
  110.00000n    594.2903m  
$ s4 d/ A3 Y  e# u3 \5 H  210.00000n    944.0395m  
0 z& h2 ]9 G' z* k% w7 w6 y3 _) a  310.00000n    960.2334m  ) ~  O5 g* e; x# z: D) }% J
  410.00000n    655.0623m    y& t6 F1 u0 t; _% M% Y3 J

2 ~1 R9 F1 u8 ~) T& I, @9 k* n我利用公式来计算 110n处的点 为 sin(2*pi*0.9375e6*110e-9)=0.6036  而hspice的为0.5942903; c7 X* R, z: \, O: _1 e. G
                 210n处        sin(2*pi*0.9375e6*210e-9)= 0.9448  而hspice的为0.944039
' z9 ^. G: S7 X: T这点的变化好像会影响到fft的波形
6 B8 O  H0 D, j' |1 q* C* w( o9 n6 H( F( x8 K7 v0 |" ^
[ 本帖最後由 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