Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 93551|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。/ m/ J" n0 c+ \2 |7 i  N( X% @
謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,8 m7 X0 d7 L2 r) O
要使用這個toolbox時,在hspice的.option中不能使用post=2.
1 f8 R- b! k  T: e, e/ ]可以用
4 o, O$ N1 l  L( T.option post( U4 _; ?3 ~7 w  c/ x2 S
或是. S; d1 o4 m- h  X* ~. \
.option post=1
1 U& L+ E" B1 ~0 N: [3 @) x但絶不能用
. n( `. I! i3 U5 j.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
4 W+ d2 U4 j, W" |如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
/ |/ S$ r: C* j2 |  x8 E3 r關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
& H' T! Z" r6 ?  x2 f
# K! T; _* E  l7 F2 M7 ~4 g# o[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用1 R( k: ~7 o: h# d0 G& [# T
就是直接用.print指令把你要量的電壓印出來
* J" Y6 D: F& C' v. E4 k: F然後再用手動把印出來的資料copy起來' Y1 G6 V% S' @* \$ a$ u" k; O
然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
+ J' R  f" R: g8 C. y3 K* d7 L- E
謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program, ' U. ?! F6 e4 H* Y( G
所以  只要將FFT後的資料  做一些轉換就可以唷!!
, Z" j8 H4 l/ {% ^  L將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"9 a: y# B3 U( k1 O7 `
就可以換算  SNDR 了!!
. t& r3 `6 A0 x2 c- H5 GSNDR is Signal to (Noise + THD) ratio?
5#
 樓主| 發表於 2007-10-11 17:44:50 | 只看該作者
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
6#
發表於 2007-10-13 08:20:07 | 只看該作者
我以前作DAC的MATLAB部份程式4 D, w5 m/ h! `, x3 m
我想,應該可以給你一些參考吧/ Y$ o( H. x2 y9 K! `! Y( z/ |6 X& H
7 n4 T% D1 ^4 E  t
% --------------Using minimum 4-term Blackman-harris Windows -------------
( Y1 u  o* g% d6 ?( t: K: h. B, ^nb=1:1ts;
( x$ M  v+ K7 u( N- k1 r. tkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));+ _* @& b# F1 K3 A$ ~1 `, _
win_gain=sum(kb)/pts;- k8 z9 {# i+ ^# k/ M
kb=kb/win_gain;
2 f+ \: j& C) ]. g  @; C- Y
3 I: i2 K: T8 G& @+ O8 @% --------------- Calculated fft --------------------------7 t1 K1 q5 m# C- \9 P  `8 n$ n" n2 [
yb=kb.*x(ptsttfi);
' [2 w; W; T; b' c1 E1 byk=fft(yb);
7 d# \, O7 D* t" C" t) q+ a% Wfft_no=length(yk);) B" e3 E  y9 N& o. H2 k; J  j
f=fs*(0:fft_no-1)/fft_no;
( C% p- [. B7 V- KPyy=yk.*conj(yk)/((fft_no/2)^2);
' J* R* W6 Y& q7 [% V' c# d! p# M
% ---------- Calculate THD ----------------------------
( s& j3 e! [- Z3 n; Qj=1;' S6 D9 |; H0 e
for i=1:1fft_no/2)9 y& b. \0 X" X
    if (f(i) == (fi*j))
5 p* e! x  R' y2 r  w6 O$ h4 w        HD(j)=Pyy(i);     %% find all harmonic distortion components5 s7 m! e$ n* b' U2 n% \6 g9 [9 p8 }. s
        j=j+1;7 D1 b% q' u0 {9 j  h
    end
2 i0 }# s4 q/ E* \5 A9 u9 ^, r4 Eend! e5 s) J$ X, m4 b" E+ g) @
P_hd=sum(HD(2:9));
% ?, \" ?) x) ]0 M, [/ A& KTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal! E* |$ O+ I& N3 ~
fprintf('THD = %g dB\n',THD);/ h' z% a3 M6 Z- x+ j) \% r6 m

- p+ e4 a1 k6 d6 }3 |/ [% ---------- Calculate SNR ----------------------------. t' s! D3 ?7 g
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
" z# ^  Z+ D1 q7 c5 afundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
' [4 O0 Q3 q9 M7 L5 gspan=max(round(fft_no/200),5);/ u: g/ [+ a; H% [$ @
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
) _8 ^1 m) F! u; @; x4 Q: D' Q- h  a2 R' c& V5 K; O) |
P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
- j; x$ P5 `6 x1 i2 {SNR1=10*log10(P_sig/P_noise1);
4 e; r3 c* P3 R5 `$ Yfprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
6 j( T* u1 R- E$ g請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。# v7 F( O: t7 X& c" w1 G

( p3 W  C! r7 L另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
# y7 W. w$ ~0 g2 E# V"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
* Z) R6 a6 M6 n, D6 s0 `內容為:7 A8 O3 O  m; x  }! z& {9 S
压缩文件共有三个文件:两个m文件和一个txt文件7 ^+ w8 R8 o: i/ A  n$ D* }$ z6 ?
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
7 ^$ D% Z$ \8 O1 o1 e& k& |希望大家喜欢!!
, y5 g; V# _# k# J' E& D附件為:FFT.rar5 x4 r$ b0 v; K

) `2 s1 x  d0 U  l2 [+ g我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
: a) I( l5 |2 J* i6 _0 A+ C4 |" b, l, A! ?: p# b
??? Undefined command/function 'AD10'.3 m2 i% e; [+ b- Q: G; J

1 {" t! x4 z. D0 i2 g" x$ W2 {Error in ==> spectra2 at 43
, ~$ [4 |2 |* kd0=round(AD10(start:stepstart+M*step-step),3)/1.8);
! g6 T1 E2 m( T
6 _2 e8 d( J8 _) L/ H( H2 x+ f+ W# {由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
  m9 a4 ^' Q( D8 j5 x5 d7 u
9 T9 _1 i0 f5 v( s4 |: [* Z0 {5 ], r" B∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
0 T% F* `; W+ T
  c( j! H  |* o  D# ~8 f+ ^[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
) E5 N7 w2 x3 I; L) c& S請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。 ( I& _/ S) P  k
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:9 }5 N' f) ?, P
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"' v" G/ i0 s/ _! ~3 Q
內容為:9 _* |  L0 c9 N" W
压缩文件共有三个文件:两个m文件和一个txt文件9 w9 l5 X2 K% M8 n% I) ?: O
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。' d5 l' t7 r- v* Q1 A+ z) j
希望大家喜欢!! ; m+ U4 {. E1 B. D5 E) Y
附件為:FFT.rar6 |. U, t( s+ s; N

: Q7 ]9 Y3 d; x我根據他的說明修改他的程式變為如附件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 n6 N, x; ], X9 |1 f( M
0 Q4 v7 O3 o- X' P6 p& Z( Q, B
??? Undefined command/function 'AD10'.
1 Q" y& Z1 `. e! V% K
. E4 z9 _# d" m5 ^% W2 o- ZError in ==> spectra2 at 43
2 h* }! F" l9 cd0=round(AD10(start:stepstart+M*step-step),3)/1.8);
1 \, m, q& K) M0 a2 \0 y) ]8 j- _8 L/ q/ j0 u
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????6 w$ }+ ?2 J/ f* K5 _5 v; K4 [
附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式6 ~2 z: K0 f: ]( _1 g* K, M) U
要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值7 V" ?$ }& M" B2 I" j* c
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算& ~+ Q8 a& V/ E1 k0 Y" k; j. I# g! a# q
' A0 e" w' [0 I
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
2 K' m1 ]+ g- @+ J7 v) h/ V0 [  W7 S, W7 w( `& u
我看不到你的附件檔,故而實在無法作出評論
: {2 P( }/ p* `/ E而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??* O4 z' M% E# y* N: Q: @3 r0 j
從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????& ~  w* C7 ]( [0 V3 O7 j/ v
所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,
; _- N. @* D- m; l指令的寫法是否為:8 t% _$ o# @% a
4 a; n- M/ L, g7 P) K0 G8 \
.MEAS TRAN DIGOUT2 W+ R1 E/ Y+ D) Q+ Y
+TRIG  V (Dout)  VAL=0        RISE=2* w, M  b7 v% F1 a+ l8 E
+TARG V (Dout)  VAL=3.2m  RISE=2
& A9 Y/ K% G8 a& b: Q3 K) L" H+ U/ N
∼還請指教,謝謝∼
& Q% c" ^8 }5 X1 o0 D3 _; t) M% `; r" n
另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
* H# j( j1 \. a. ~8 ?  U0 p/ g* M: v" R
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
9 O3 j- U8 z$ k) D  R
6 S0 J- R$ e% BHspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?6 y  p9 n- _4 H  x, U' r/ ?) d6 p
: h; X5 u. U8 {4 Q) @
[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔3 G) H" U! l: b3 ~, ]$ D( u* G! W. p
故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
  P1 I  Y8 o% Q% R4 o, E所以,請再檢查一下你的HSPICE檔案吧
! F2 l: [+ S  l; H  ^9 A& e$ W- z8 s% N# V3 p$ x
再來,你的.measure指令用法沒有問題
! h8 h3 @( i- a9 X# p但,你的取樣點及時間似乎不對$ u, a: I: t8 u3 j3 [9 S
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
5 _; F6 A% z2 d8 S" V.MEAS TRAN DIGOUT
$ [8 |! S8 H2 B; d+TRIG  V (Dout)  VAL=0        RISE=26 s3 _7 |. F; G3 Q& r& Q
+TARG V (Dout)  VAL=3.2m      RISE=2
- g# f4 V2 e; L! r& e* I4 P2 Q1 w寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話/ A2 A. R& ?+ S( I9 I  v# ]
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
5 L; B6 l+ h, l6 I6 @7 S另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2' B9 @) N5 X+ F$ `7 o7 |; D
再者,如果是用.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程式。
+ d- Q) j( P: W5 m! O
0 Y' T2 `, J8 h5 ^8 U5 B∼感激不盡∼
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
7 S+ Z. B# G) i. g2 l3 }) X8 A, P4 X" H8 S& m$ E5 n# r" z  D% F7 `
.MEAS TRAN DIGOUT
+ P. ?7 {: d, }( A& o2 d1 m+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
/ R. D1 a1 v6 q! t2 A; Z+TARG V (Dout)  VAL=0.976E-7               RISE=1
% g7 v4 {4 v3 ?; x2 r1 }) N2 Y" @# U- S7 ^) W
∼還請指教∼7 g( U& p' ^" v' q2 X0 ]* ^
程式重試的結果,*.mt0檔案只出現:; U, f1 o# v/ [: n1 f$ [7 l
digout           temper           alter#            7 a( b/ J% D! ]& c7 N4 p
1.890e-12        25.0000           1.0000         ( F  [; D3 d! T4 D- P. C) P
不知是否還需修改?
2 R. |3 `0 a- K+ z0 g( s% A: D8 K, `. u1 ^0 m& s# }7 H% C
[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題# k* O) e' d+ a- I1 ^& H2 y+ p
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息& i; ]- v1 m9 ?5 e
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧6 `" t  P0 F3 d- c' l

% w' n% D1 m+ n/ x1 e) u再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock! f. H' n0 q  L
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
  b1 l. D$ W2 T9 h6 H# r一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)* p# g; P9 W4 u! \4 N- H% a
再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???& F+ d! Z' x7 h1 F/ [& d" z' Q
舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為6 }9 j1 f' U1 s7 p! |, i
.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
: s' s( o6 l5 p2 Q7 `.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us0 q' V8 x9 }# X; Y3 q7 ~8 d8 v! i
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us
& {7 D  w/ q: P' W.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us
7 e$ u, Y1 d) M' X1 E+ T/ A
8 `! `" |" M) I.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us
; M# \, y8 Y  c( P5 A.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us
$ g, p: ]) v( w0 T.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
5 \8 n9 _' R2 R$ ^, B.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us' Y( Q2 J% G! u* i' X

  E6 e/ z6 ^: ?! `# ~. d我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
* }1 b1 `) q- b. j我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法" ^# ?8 y* A) I/ B3 j- E9 n6 s
" c8 E  m. T$ n. A- D3 ^
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us  W$ S: N; n6 H$ b, m
可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
  D3 \4 F5 ]; f: L我大概講一下我的架構:+ _% C7 {5 J" J& Y7 @% v( a; R( _/ @
我電路是使用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的指令寫出,指令如下:0 @1 ~" t% o. n! u9 M" ]1 T
For Fs=10.24MHz:
8 O$ U1 {! _/ O8 e, `0 `2 D7 ~/ SV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7
! ~; C8 l! h* F2 P" JV1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7! i1 P6 T7 [  T! K& b! }+ T
For Fs=5.12MHz
# c5 I' f; O3 ~6 BV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7
5 I6 D5 s6 ~4 y$ ~, ]" v9 h- S# O6 sV1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
, d" M* Y0 I9 O# _4 i! b9 U7 S' i另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。
  l6 a% G5 e( s" {( S如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:5 R( l, W- g+ m" F" E: K3 N* Q' X: ]
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us
8 @% _* N0 M7 r" V* L1 W( M+ ~.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
+ l+ b, M9 h3 y3 k" x8 |; S5 k然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?- l4 {! K  q$ _3 X9 ^; h
你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
$ k% p; E. w- I& |
% _0 q9 e8 n3 k+ Z! C; ~  {" f[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
5 o+ o5 ?5 }# c* w7 f# k" U首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來
% L6 F  y) G8 Z, L& ^3 l而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?
' x! T+ T! l" }' a9 u9 @- o" B2 ^/ `. p7 }5 h8 b. H+ B1 ^% V; g2 W' J  @
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪. D+ O  p0 M/ F% x

) }: y- v( m1 I; `8 kFFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要
6 m1 x1 o- Q5 f/ H5 X' v( W% ~! K
5 e% R/ [9 W4 U) qclear all0 @/ S, k5 e" L" o; i6 f! I& E
fid=fopen('dual_measure_rms.txt','w')0 r5 B2 J3 e* Q" z2 S( Y7 M
for M=1:1:1024
. Y8 G0 b2 R8 t3 t9 l       T=M-1;2 |/ K/ o" ~" K( k
       from=(50*T)+45; %DUAL DAC measure time
  `! g/ |* D+ _- ?2 \       to=50+(50*T);
2 p* G9 D* G% v       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);$ p, O2 b* r! A
end
/ T6 s' g& x+ G1 r8 u- bMATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
% r+ o5 H9 m9 A; h# x這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧! ?& l; t6 f+ j4 J' G
這樣以後模擬FFT就非常方便了
8 f2 `0 T8 @# O- I看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間4 E: O6 t; x  L! v' r" H
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧3 [& u2 y7 s5 b
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?- Y  E% f# k6 Q: W" m" `
我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:
* y* _( S( i, f/ S8 c3 [  W因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。: y* R) R: F# U
且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
* ^: C9 `: ^+ @; Z" p1 a% ?# F另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。7 \$ A" [! W0 `0 v% W( `
依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
% H, g7 R# z; }7 Pclear all% \$ o" l' P% t0 q+ n7 v6 [
fid=fopen('sdm_out.txt','w')
/ n& k( V* \2 ?3 @8 Wfor M=1:1:1024* H2 p" h( w' d2 Y; I0 n
    T=M-1;
& K: S' x3 W, i" k/ h. K9 d    AT=(0.1952*T)+1.026; %SDM measure time  c. e9 ?$ q, x
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);6 C! V" ^/ D% r  P
end7 B; Y3 B( L' A2 h' q3 P
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
1 M2 ~- G. G5 q0 e; a$ ^# M# g想再請問的是:  X8 J" h  e- {6 u
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:
1 V- h, L8 ~( i& l* z# fload sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
/ `% r- l' n7 J. ?7 S" A$ h然後就可算出SNDR及SNR以及畫出圖形了嗎?
% b1 l* N* c* S請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-13 11:32 AM , Processed in 0.159020 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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