Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 92996|回復: 74
打印 上一主題 下一主題

[問題求助] 如何將Hspice資料轉進MATLAB計算

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2007-10-4 22:57:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我現在在設計一個三角積分調變器(sigma delta modulator),電路完成後,我用Hspice做FFT(快速傅立葉轉換)求得SNDR(Signal to Noise plus distortion ratio),但我看其他論文秀出來的都是再經Matlab轉出來的圖形,請問,hspice要如何轉換成matlab畫出SNDR及DR(Dynamic Range)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
& c* A1 i3 T! ^  a' X+ L0 L% z謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,2 p3 @, }: S0 Y% r2 ~8 M8 _% a
要使用這個toolbox時,在hspice的.option中不能使用post=2.
; ?7 x9 d! M5 Y4 N可以用# t: z+ p& [: B' w! o+ ~
.option post3 O3 V+ ~0 T) k7 y4 l
或是
# A! S3 r. }) p.option post=1% h+ x! V: I& T- H0 {1 j  v
但絶不能用4 s( O# p5 I8 u9 E: f' E+ C( w, T9 V
.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:- z6 k9 M. S: e: H1 r1 t" _' s
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
8 X7 Z; Z3 ~4 Z: Y5 y6 ?3 \關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。0 E% i, t, [" ]7 U1 ~* B2 x6 z

( O- X# ?% H4 n) |! N2 R& b[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x

評分

參與人數 1感謝 +5 收起 理由
fechiu + 5 很給力!

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用
7 J3 ~' s7 W: z就是直接用.print指令把你要量的電壓印出來, y8 V& n( [: m, |
然後再用手動把印出來的資料copy起來
6 P( ~( y4 P) G7 C然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
& @6 |" ?; W/ M5 m  j! Y  c4 T$ M! [% M
謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program, 8 o, |  i: w. L2 W* ?
所以  只要將FFT後的資料  做一些轉換就可以唷!!
" ]" m+ d' s# M/ T0 a5 b將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"
/ o6 C6 J, T* ^$ N! u3 l& g: ~就可以換算  SNDR 了!!
/ K1 y7 n! D$ a- L) eSNDR is Signal to (Noise + THD) ratio?
5#
 樓主| 發表於 2007-10-11 17:44:50 | 只看該作者
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
6#
發表於 2007-10-13 08:20:07 | 只看該作者
我以前作DAC的MATLAB部份程式
9 a3 x  q. X/ I我想,應該可以給你一些參考吧1 T$ A/ }* B2 }* ^- U# U* W
9 e# C+ g% \/ T6 w* l
% --------------Using minimum 4-term Blackman-harris Windows -------------
  W9 K/ }# ]6 X' ynb=1:1ts;( ?1 d- c8 z; m, Z8 p* s
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
! k1 W/ z% L* B. |win_gain=sum(kb)/pts;
, l4 O! \5 \8 f2 y7 Y( M! qkb=kb/win_gain;
+ ^& P/ Q" N6 ~: G: P7 N6 V% [( F
% --------------- Calculated fft --------------------------# W, y2 C, h# y$ a; t; A: A. K
yb=kb.*x(ptsttfi);
- Y6 P* ]/ e* y9 [4 B5 Yyk=fft(yb);
1 F; f3 G! J4 L: D, Sfft_no=length(yk);
6 t* M* {. A8 jf=fs*(0:fft_no-1)/fft_no;
& u5 D4 m% P4 O" U, e# L/ }Pyy=yk.*conj(yk)/((fft_no/2)^2);
8 j0 P) y/ o+ S: y0 v+ s
' {; S( D# S, a% ---------- Calculate THD ----------------------------) a: R6 T; n: P5 u$ j
j=1;% H- V  Y0 F4 Q5 n
for i=1:1fft_no/2)# z" l; |* A+ j/ g! @$ l. [0 _
    if (f(i) == (fi*j))
( ]( E% T( ?6 l4 r9 f        HD(j)=Pyy(i);     %% find all harmonic distortion components" Q9 _8 m6 r1 U7 [$ \- ?
        j=j+1;6 g% u! e$ L% U: g0 O8 Q
    end1 q9 g6 ^9 m" H- E5 a* Y7 e
end
6 q+ G% B7 Q  ZP_hd=sum(HD(2:9));
0 X; J( [& {! h! C  zTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal2 t& ^/ [9 {( N9 K
fprintf('THD = %g dB\n',THD);
! _' k. N9 J5 s8 _4 n8 A  ^1 T# a( s, ]: L5 j! [& Y# A, ?7 K$ s2 D
% ---------- Calculate SNR ----------------------------
  P% o7 G8 {" e: v4 kfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
% {8 ~: _3 a: `$ [: jfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
& f% \  x$ L, ~* m: b0 Y5 {span=max(round(fft_no/200),5);
' h& q1 q7 b: `, S, L# }0 n' ^P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));9 {1 s2 T% h4 x& F2 T. [
) j" Y# ?! @6 k0 [6 W
P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
9 U9 {' M3 P  |4 ^: a2 iSNR1=10*log10(P_sig/P_noise1);
  }( H9 q) S3 D2 E  L" Jfprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
: k3 }1 B, t) f/ K# V, s請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。0 `$ u; O8 l3 g  E7 s- Y
  C+ H: X7 u% ^( C
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:6 j2 y7 t( j  J, V0 r- L; m0 z
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
. n; v3 x6 O$ S. `8 r, A8 Z+ w- ~內容為:
& ~7 e1 i4 D# B) O" [& G5 k压缩文件共有三个文件:两个m文件和一个txt文件) ], [4 z; J5 }! G: e
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
; j* F4 m# {5 v" R& s+ a, b) @& Y, B: _希望大家喜欢!! 2 h; ^8 V$ C8 I; v
附件為:FFT.rar
- S: v+ f: @- x( k4 Y  }
( A$ M: `) a& r我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
, a3 N: j+ R3 h
8 M: q( j) e& v' r  P, s??? Undefined command/function 'AD10'.
. U2 T6 c* v2 I1 I# U0 u4 Z8 Z. h4 \. K
Error in ==> spectra2 at 43! G1 n5 J, G/ ~, B+ ^: I* X7 P
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);
* Y5 P9 `" k+ ]0 z3 D1 l7 U2 m) G7 @  O9 N9 m/ G, W
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!& `! I) C1 m  m

: ^0 F/ I& j3 L∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
7 [1 y' V  e- w/ u# N6 e
4 J( j) l4 ^; @[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:6 Y) Q* p* o# b8 p0 f
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。 0 q' M& s) O9 Q
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:* B, x, `( \- D% C# z. C/ W8 X" e
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"7 `* W+ d, _' M. y6 A4 d0 `# A% \- l
內容為:! L3 E1 k3 ?' A  E3 g
压缩文件共有三个文件:两个m文件和一个txt文件
" d. ?$ h! V5 g% E3 V  Cspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。/ E3 j- p% V" v7 G0 l/ i8 L2 ^
希望大家喜欢!! - S$ g4 h1 V+ u0 o, n  U
附件為:FFT.rar
3 |! V! E" g/ D4 A8 k0 d& M
- x' T6 A9 L7 C+ O我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
8 Q" d5 A- \- K  G+ x/ W5 o+ t5 ~7 Q( m$ {- a) A/ X9 D4 n% g3 v  y
??? Undefined command/function 'AD10'.0 }# q7 X, p" Q3 n. i- }5 R

) ^0 C0 S9 c1 h  [" M( E* b: n5 K" _Error in ==> spectra2 at 43
- t3 B, U+ A' Id0=round(AD10(start:stepstart+M*step-step),3)/1.8);
- Z3 G* i8 K. W& T8 u' v
* W3 M) u, d& m- \由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
. f! `* u2 K. y% \1 P, u附上上帖的附件

評分

參與人數 1Chipcoin +2 收起 理由
chip123 + 2 可能是圖檔太大?縮小再試看看?

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式; [6 B, E& \' u; r3 A& j
要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值( ]3 w9 ~, _$ H/ N
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算
; M' P9 r5 c1 I5 c5 d$ l! |4 j' R
$ u( l2 W" V' T2 d( G/ D在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧: s% w2 e& m4 w3 {# {

0 }' l, R3 N( a: }. @# c我看不到你的附件檔,故而實在無法作出評論
: d8 I6 F" J) |6 O5 S: N) i" f+ a而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
$ M& `7 ]- v- V# D/ U2 u從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????# F4 T; x) I0 E- N' I8 M3 J
所以重新上傳附件

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x
12#
 樓主| 發表於 2007-10-16 17:02:11 | 只看該作者

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,: i  B" G, o& |+ f% C. Q) l# P
指令的寫法是否為:: R& e" ]* k0 y7 A0 s- E1 j
. Q' s9 m) X0 U3 f, G9 H: B2 @9 T7 s
.MEAS TRAN DIGOUT% S& P& x' n$ q- o+ t1 s
+TRIG  V (Dout)  VAL=0        RISE=2& B2 y+ Q! \1 K( G+ V
+TARG V (Dout)  VAL=3.2m  RISE=2$ i/ p. o% ?: }' P. H

+ e8 b) ]# i1 r! I8 v∼還請指教,謝謝∼$ w6 b  p6 r& e. q! W
: |5 h7 b  E& Z0 E
另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:9 d4 e4 S( {' t+ C
; _4 Q& P9 o+ ~! Z2 a
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
: }9 J' c0 ~* A8 O! C% j, T* q9 \9 O! A4 o9 |$ J4 f
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?& T  [  q& ^7 k8 l+ G
5 V" ~0 M# t: U
[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
6 @5 k6 f1 Y/ w: f9 l& K7 ]故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料' v( a3 p/ f6 ~; h+ D
所以,請再檢查一下你的HSPICE檔案吧8 ~  a* p. o! p5 l  j* B2 |
) j8 N6 z- m! j% y5 i# g
再來,你的.measure指令用法沒有問題
( m% ~: e6 X' P  z7 r3 n5 v但,你的取樣點及時間似乎不對) l' y# m) F0 x. n# i2 {( V, M( f
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
- ~! R- `8 N. U) v9 [.MEAS TRAN DIGOUT
0 F1 e. y) _; |+TRIG  V (Dout)  VAL=0        RISE=27 M+ A( h4 n, q7 S& E2 Z+ V
+TARG V (Dout)  VAL=3.2m      RISE=2
  S( o8 c* O3 C3 h* _4 L寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話6 E' w9 A; `6 K1 |' o; M5 f
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
$ i2 _* k9 H# o6 H+ ]另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2. k2 E' C9 n6 \8 B1 Z- y# ^
再者,如果是用.measure來計算digital code,那如果以rise edge作基準則應該用RISE=1,而不是RISE=2,這是很嚴重的錯誤,除非你的clock及取樣有delay 1個clock的作用在,如果是以fall edge則是FALL=1,若是以你RISE=2,那你取樣出來的digital code應該都是錯誤的
14#
 樓主| 發表於 2007-10-17 14:02:04 | 只看該作者

再次謝謝Finster的回復

再次謝謝Finster的回復,我會依照你的方法再重試一遍,另外在麻煩你幫我看看上傳的ADC Matlab程式。
) _9 L. f) B8 S0 [, {  s+ A8 D/ y  e+ A. t  l
∼感激不盡∼
15#
 樓主| 發表於 2007-10-18 23:59:51 | 只看該作者
再請問一下finster副版主,我有兩個非重疊的Clock,一個ON,另一個就為OFF,取樣頻率為5.12M,週期0.1952u sec,半週脈寬0.0976u sec,第一個clock延遲0.05u sec開始觸發,第二個Clock再經過半週0.0976u sec觸發,電路輸出點為Dout,.Measure指令的寫法是否為:2 b% S8 U/ K7 L# j
" B/ V) @" b  q! Y7 D& W: U6 i3 }) X8 A, P4 X" H8 S& m& U: D8 v9 p: v) n& U/ s
.MEAS TRAN DIGOUT
8 V9 t, N' t0 {: }2 |+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
; s: L" K9 N1 J4 m# I, a3 q+TARG V (Dout)  VAL=0.976E-7               RISE=1+ f1 k8 s- \- O! s& r) W' a
6 l/ _! y1 N2 p8 C' J0 |
∼還請指教∼! W2 P" o' M# a3 @7 F% y4 Y" R& j
程式重試的結果,*.mt0檔案只出現:
+ H* g: ^* ]9 f) I: Y: _- z/ ?" N% T7 qdigout           temper           alter#            
' J! W$ d5 F9 d1.890e-12        25.0000           1.0000         
6 ~! C/ y$ a' T不知是否還需修改?& h8 D+ `" f( g! G; ~. t
5 Y, L" b5 z; S9 x+ Z. a
[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題
  ~2 A- a7 z+ E7 x* S- z( D- n你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息9 n% D! W1 B; `0 d
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
" g0 L# O* ^1 }; [/ U; M7 U( I# k- Z
) v3 V9 w+ X, o6 v/ T6 |" j! O: ~; j再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock2 r7 e7 ]: ^3 ]' h
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
  e0 y4 c% [0 `9 q- z/ o一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
- ]1 J) Y( W6 H  K5 X6 M再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???$ W- j! t) x* B8 F1 q
舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為1 I2 ?# j9 A& T. u
.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
3 y$ O) n! k9 E% g.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us9 t2 k# ], D  A9 K
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us' J4 Z# A) ~/ q& j
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us
" s, a4 m( ~* j4 j* T( Z' |( i/ |+ j. o1 z7 C
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us
1 ?. n9 j! |5 [.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us/ `$ x3 u. G1 }: p3 ?
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us5 Z5 p1 A% T( H( u
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us  X+ b( J, p" @6 [/ l+ Y( Y
/ c; ~# e/ x; i& c
我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
! C! Z1 B  @5 g) K2 l我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法
2 W9 H& o7 R" \: t& z* y3 j$ S; S1 a0 y6 G+ y9 x% H) [
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
! T( H( z; j% }2 d( q; x可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。) o, Y% T  W; ^9 _/ i
我大概講一下我的架構:
! Z: N1 [3 ~! O, U8 f我電路是使用Switched-Current(SI)的架構,不同於Switched Capacitor(SC)的架構,最早設計是設定輸入頻率Fin=10KHz,取樣頻率為Fs=10.24MHz,頻寬40K,位元數為1-bit;由於我電路中有一個Op-Amp,因為OP-Amp頻寬限制的原因,在高頻時易產生非常大的諧波(harmonic)及雜訊(Noise),所以才降頻為輸入頻率Fin=5KHz,取樣頻率為Fs=5.12MHz,頻寬20K。電路中有兩個Clock(Φ1 & Φ2),Φ1 & Φ2是兩個Non-overlappind clock,由於尚在模擬階段,所以兩個clock的產生是使用hspice的指令寫出,指令如下:
' L; Q% F# a( @, _( I; S6 H1 KFor Fs=10.24MHz:2 P3 y) u* Y% C' G2 [
V0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7# P& m: M. L9 i
V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
* V2 J2 U" C9 S- \" A/ i6 DFor Fs=5.12MHz
1 y! i) p; [& `- @- ?V0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7" T  J$ G# ^# R1 H8 i- }% l5 P
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-72 `" z5 {/ b8 V9 t" T/ j
另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。% M3 l5 ~- X; }* M
如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:: }" o5 z# G$ L+ p" U6 \2 B
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us
; `$ o9 J# |4 v+ m& B/ r$ H( S& V% A.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us8 r& Q! U+ T1 Z- r
然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
5 R" n, O! u. G/ N" H你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!! j, k  U7 B6 g. b
- V  \3 w8 A# I# k# ]
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
" w- k) s4 J" n4 b* F9 H首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來
8 [8 t2 l* P. z1 E* W而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?* |" \, r4 k  L: A4 h

% K2 W1 A$ Q2 U- Y8 v; Z* {再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪+ }' k9 h2 ?! D& S9 @8 c6 h, ?7 M: e

3 X. F. h( o/ ]9 Z! WFFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要  ?2 J# M2 y; Q, s! b! p( I

. X6 t. ~( \5 t1 r8 I7 tclear all
1 _/ O& u# ?# t/ Lfid=fopen('dual_measure_rms.txt','w')
, _. u0 ~7 r  Y1 O9 Qfor M=1:1:1024& |6 q& T+ b9 G
       T=M-1;; ]. X3 w! h% t/ F. q1 P9 s
       from=(50*T)+45; %DUAL DAC measure time
! b# h7 P+ q1 i4 Z       to=50+(50*T);" i4 t# C  P' {4 H1 R$ \
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
/ N) Y# C; K; J* ?  _- Tend
6 N- _& v8 G" ?7 S" g, I( z) {MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用+ k( z! y$ e! i7 ?( ]: G: h( [
這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧
3 k0 i  S( q9 j/ l7 ^/ C這樣以後模擬FFT就非常方便了" a: F8 M4 P- M# F. f# t
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間; N- K4 S5 Q" y' q* L
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧( {- ]- s; V( f! ?$ C' h
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?# r9 S; g% ~# i+ p
我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:% X6 Q9 Z& e5 h" R* Y& n
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
; Y; l) O( H3 z* v' e且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
( g; B; b3 {7 x8 y8 r- L4 M0 q# ^另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。0 U! e1 j) c8 I, p% B  L' p, r7 Y4 C2 X/ j
依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:  w1 _, ^7 v: m/ J& z4 s! x  e: c" v
clear all
* f$ |6 E. e- L# }4 r, Lfid=fopen('sdm_out.txt','w')8 T2 M5 u5 @# H8 w0 D" p
for M=1:1:1024# j$ A" b8 R; k4 d; m9 r! E+ y
    T=M-1;
9 l; w" N% [5 h" `    AT=(0.1952*T)+1.026; %SDM measure time
2 k: q) V; Q1 \. V& J5 E4 C2 }    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);; o0 |4 v) F7 o2 z8 L1 N* [
end' s3 Z! _, G5 I3 r, s
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
- z  T9 d6 }7 R) K) T想再請問的是:
% G, V  T! Y# t+ u1 L" y( T+ u當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:
- _- \1 v7 h; tload sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM2 `; v/ Y3 U1 W0 Z  s" Q: V* A" k# G
然後就可算出SNDR及SNR以及畫出圖形了嗎?
  Y! ^0 |- D, s. F- O8 ~請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-5-6 12:51 PM , Processed in 0.139008 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表