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
.end
9 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& G
plot(i,c)
$ a) \6 ]6 {7 Q
2 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* f
T 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! k
5 664.2524379112818 662.4251941e-3
7 d3 Z+ ]4 |+ ]8 Q
6 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 m
9 -998.2656101847159 -997.6056075e-3
8 t, n$ O' o1 q
10 -797.3206537727073 -797.1222747e-3
( A/ `: S8 i7 P( v5 C$ ^; Z
11 -327.6301795616938 -324.6260505e-3
( K6 N- }( Z f U# e+ J
12 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 a
fin=0.9375meg fsample=10meg
! k! {& D+ I6 o7 s* \% K% M
N=32 n=3
4 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.5942903
5 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