Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 93646|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
  Q4 o0 d1 s- ]( B7 `- ~謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,$ m% {" q5 j6 d3 f; e
要使用這個toolbox時,在hspice的.option中不能使用post=2.
2 H0 l" ]# M1 ]$ v& U& S( |, y可以用
. V, X9 C) ]' ~# L$ J; Z.option post
& _& v% @9 ?2 S4 n或是
0 z9 D' h/ A! X4 J- w! @4 |.option post=1
4 D- ^. R! v  V但絶不能用
( ?1 I' i4 W* ^4 a. N/ h& ~.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
8 H4 i: L) q: s9 q# V, ^  h' |7 O如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。6 U/ f3 p* B& L2 ]- h6 ?. ~. ?
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。- }9 ~2 I, ^2 e; a: {
* D4 k! ?- [4 p3 U4 \% K: p
[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用0 H/ u7 s+ C% z3 M3 U
就是直接用.print指令把你要量的電壓印出來
3 }$ ^3 P, u; x3 j* A然後再用手動把印出來的資料copy起來2 Q+ }6 U' r/ o" ]/ B3 A
然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
0 L0 C4 {. S- F" f: p: h& L; V0 V9 R* Q4 n* u0 h6 Q& T
謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program,
2 k! u) v0 [4 K* B所以  只要將FFT後的資料  做一些轉換就可以唷!!3 C# o3 z8 |1 H
將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"! y  W* S% \1 Y( L% n% x2 Q+ k
就可以換算  SNDR 了!!
: K6 P4 r# e; H" y  ?5 |SNDR is Signal to (Noise + THD) ratio?
5#
 樓主| 發表於 2007-10-11 17:44:50 | 只看該作者
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
6#
發表於 2007-10-13 08:20:07 | 只看該作者
我以前作DAC的MATLAB部份程式/ Q) J  p# |) S  a$ O
我想,應該可以給你一些參考吧% A2 n5 T5 K& X0 D) k& G3 N2 ^; |' O

4 o# W* V- ]3 a- I% {$ h4 u% --------------Using minimum 4-term Blackman-harris Windows -------------
& G% R+ g4 K- q9 s+ n4 [nb=1:1ts;
# L# \2 g! k+ {: G+ U! kkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));3 [4 P( W* P4 Q- Z( H
win_gain=sum(kb)/pts;: J# w- q/ w& R& Y7 E& g+ `  h1 a
kb=kb/win_gain;
7 G: Q4 [+ Y, `" m/ k$ O+ e
; k* M" `% G. K+ C* D% --------------- Calculated fft --------------------------4 g2 y  A6 m3 Y! m
yb=kb.*x(ptsttfi);
; o# `3 E# p0 Y. R8 \0 ~yk=fft(yb);
$ m7 N/ U7 n- `fft_no=length(yk);9 ]. f1 ^% ^0 w2 ^2 d: v4 t
f=fs*(0:fft_no-1)/fft_no;
$ d& w8 _- i3 _2 j# f) @5 Y1 p6 nPyy=yk.*conj(yk)/((fft_no/2)^2);5 x  C. `4 l4 u, z; ~  T
, c  W7 Y. Q5 Q
% ---------- Calculate THD ----------------------------
4 p9 X0 x6 ~5 m& Y% Q% E+ Ej=1;
1 j) t. ^( a( n+ ?6 j5 P% Pfor i=1:1fft_no/2)
0 ]* f& f1 t( c( g# x    if (f(i) == (fi*j))8 F4 P: f) L6 d; w1 S
        HD(j)=Pyy(i);     %% find all harmonic distortion components3 [. b/ m7 _4 t8 d. N
        j=j+1;
& |6 ~& ?  \8 F% p- ]! B9 `    end! R( q% K1 K+ S6 Y0 u. e# O
end8 @. b( T6 N2 G1 \3 L
P_hd=sum(HD(2:9));
# z4 x* ^+ b# j. y0 k* b0 DTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
) _/ O6 A6 W3 ]" t4 s+ @4 p: Dfprintf('THD = %g dB\n',THD);6 i/ p% R, Q( g: s. }
& C3 H, ~: i8 }3 W, x7 |
% ---------- Calculate SNR ----------------------------
$ s6 a) t) \/ Ffundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
, w) f) j( \" L8 T3 h8 Afundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
# h) O5 f( E9 Sspan=max(round(fft_no/200),5);
- L: s  X9 [% R) r' ]9 mP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));5 z6 a9 ?& y: s8 v/ M

0 x1 \9 B4 C8 C$ uP_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
4 D1 |) T" [2 x- wSNR1=10*log10(P_sig/P_noise1);
- ]! i5 S5 ^! G0 Ufprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
" M# A' p) q% ?3 r$ F  l% _1 ?請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。  A# B& Z" j4 V% T6 X7 {- v

2 W( ?# ~0 j4 _$ I+ y另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:8 f  t( G' C2 \9 ^. r5 F
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
) X+ k0 h# A2 Q6 Q0 a. x. h內容為:# b* c% D0 i( {+ u/ u# }+ b
压缩文件共有三个文件:两个m文件和一个txt文件
3 f" {/ E- f6 c% E- m, Q: bspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。/ h2 n3 ]1 V2 P$ M6 p* \- ~# Q9 m4 C
希望大家喜欢!! ; e6 }+ }0 Z: i! K, \# A! V, z
附件為:FFT.rar, [5 m- G2 x" H9 I/ v0 J2 e+ h* \
. r& e, @, G( Q  ]: l
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:/ E' j( D: Q7 z. }+ Z8 S

. B2 C$ [, U9 X! E/ M/ y' Q  M??? Undefined command/function 'AD10'.
& ~$ s, S" s2 P6 Y% s' K$ Q1 O; \
) X1 V- \7 E! U  c% m& ?Error in ==> spectra2 at 43
& W# C: g7 i0 _/ R' X7 z& Id0=round(AD10(start:stepstart+M*step-step),3)/1.8);
; w$ M! \5 ~# N8 L1 D2 k2 v
' e7 A0 A" ~! ^, p7 x由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
! e! c- j3 ~0 N% y
" O  ~! P4 ^/ A∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~??????? ! K8 @4 T+ H' Z* s( h  d

( U, N6 f. S/ I: ?7 x2 m[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:; r# \+ P- A$ ?- k/ G  {$ _
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
- ~9 B' K" T1 p1 D6 q1 B: w另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
* [6 R8 z! @7 v/ G4 y' f"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
; a0 X* K: Y" K$ b, d內容為:
/ [4 N  U; L* M, m0 D  H压缩文件共有三个文件:两个m文件和一个txt文件
3 C$ d: w4 E7 d+ J& uspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。- e8 V$ I% F% A0 H- q- G
希望大家喜欢!! 7 p) Z  A9 n! n. ^% Y" z  X4 K) k
附件為:FFT.rar
$ o, b: s7 J- d7 w: ~ + h; a/ y$ j. [! n( Z! c2 Y5 k
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:/ S8 A5 ~, {; r# `, i) y

& h2 p* X" [4 V$ t# j. m??? Undefined command/function 'AD10'.) l7 \8 J1 B; r

7 K  f0 ^6 t* v9 }Error in ==> spectra2 at 43  ^+ j) `1 P3 C4 b) \5 l
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);+ p$ Q7 \" ^3 p
' J! {- Y! a- t# y% P* Z* y5 M( o
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
" v6 L# d; L2 S: R0 @( y附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式
1 }9 C% e7 `! J; x* Y0 A要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值( ]: ^( m8 I. n' ^# k
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算$ y' U" b9 d" z0 `7 ^

" t2 D. r- Q4 C1 ~在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
2 u* c8 \$ _1 x
! t6 {; K) x# N8 u0 o* O5 u我看不到你的附件檔,故而實在無法作出評論
7 N0 U0 P& J6 y# `& |2 v" v/ Y而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
1 x/ g' D+ H9 O, v從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????; |8 _' b* A+ F
所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,! U! [& z; ^. ^$ L
指令的寫法是否為:
2 w. u$ q7 z( x: O! a) E9 S3 `  \
.MEAS TRAN DIGOUT' H) C3 G; A: A
+TRIG  V (Dout)  VAL=0        RISE=2( t7 n7 d$ N- M. A& Q" Q! h# F
+TARG V (Dout)  VAL=3.2m  RISE=2
/ {3 b. B: F6 y8 k" U; K6 i" d) K% ~  j. ^: ?
∼還請指教,謝謝∼3 c; b6 m  J+ F; h

# ?3 T* T6 V+ S& l' O8 y另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:# f* p4 L* h. i3 F3 g3 H% q- t
. p* K1 }1 v( b  f
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07& L) O$ k8 T1 d7 ?0 q$ B
9 D! S/ Y; A' C- U! L" K
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?
/ x3 t9 y/ w0 {5 k9 k- n3 o5 ~1 A6 n) A
[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
8 z$ _5 @* r1 o( d" A! a8 _故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料9 J* P, F5 J# L6 B  W; z! \
所以,請再檢查一下你的HSPICE檔案吧" m% e5 [) R: ]. Z+ e; k, e( }2 [5 s

- m+ H) F* k+ D再來,你的.measure指令用法沒有問題
5 U; k0 n' ~( c4 J% {' ^但,你的取樣點及時間似乎不對
- Y0 c  F; S& _+ y( |; g0 m你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:& p( @2 A4 G$ T3 N2 X/ b! b8 n
.MEAS TRAN DIGOUT
/ J, W2 Z% H/ G" R+TRIG  V (Dout)  VAL=0        RISE=2# R* y" p7 x7 q3 Y% Q. E! `8 Z
+TARG V (Dout)  VAL=3.2m      RISE=2
' t* V+ k2 t- B" i寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
1 X2 G; b+ V# o& H8 a5 C那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
# J  u8 Y; A9 _$ g' G另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2
: _$ W  I+ Q* b# N# J7 m再者,如果是用.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程式。
7 s8 @; y& d' H! A
& x# I. J+ w- q6 ?6 @# Z∼感激不盡∼
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
0 a/ s( Q/ G# J9 O$ `( d3 }) X8 A, P4 X" H8 S& m
7 t# Q8 |0 s" }( w$ J3 X+ \/ [.MEAS TRAN DIGOUT
2 a+ s" H% O$ n& }6 o* ]+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f0 f) ~+ ^5 j+ \; q
+TARG V (Dout)  VAL=0.976E-7               RISE=1
( }/ k9 A# Z+ u. }- j5 R! u% p- \  W* b; p
∼還請指教∼
9 a9 K: s- D0 b  T' L: @程式重試的結果,*.mt0檔案只出現:+ W0 @2 ^7 d8 g5 ]4 |
digout           temper           alter#            % q: L) B. g$ S, ^- M
1.890e-12        25.0000           1.0000         " k2 w' F& I6 g/ a  @) M
不知是否還需修改?
: B! G, g3 ?) j9 o, X& l" e' N3 J
6 S  @$ d! ]) ?. d. d3 w; E) W[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題
" S' x/ |; V$ l  K8 Y8 U你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息, s! \4 ]! K0 b  Q. N8 D
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧; n4 b3 Z8 h! Y1 d# l& {$ ?" a
* k# O9 M1 c& B2 v
再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock  {+ T, v1 V# w+ O' a3 N* ~
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
/ E. B% k, M/ s9 d. X一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
  W& \7 b0 j5 m/ R9 d再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???' C4 R0 `+ g2 p! {2 \! I
舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
/ E+ P. _: N3 |+ f+ [9 Q.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us; _# X. m' O# T0 u3 ?2 O
.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us+ v6 Q8 P0 ]+ k& `
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us
! a" R3 ~# V4 A! C9 m2 R* P0 }! @.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us
' x  \5 P7 d+ K% P4 M! n) J' N% m8 k' {2 T4 l: ^$ Y2 X
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us: U! t" q0 O- P* p/ s: \. v8 L# k% y/ l
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us+ n9 e4 d0 Q4 h' A  o3 |
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
2 |# ~- E- h1 ~$ f) c.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us& j9 L1 M( k* F2 P6 V
" C/ |+ W# S' B) I  o
我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
" x( G8 E, c, u' \$ [4 v) C2 d我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法, B, m3 Y! p7 T- S7 u/ y; Q+ V
# ^# |) K3 @7 ]& J3 b0 c
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
  y  y* H6 j5 w可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。6 p6 J; w8 @& Z* D
我大概講一下我的架構:
. N2 j3 s1 O& m* m$ y我電路是使用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的指令寫出,指令如下:4 H: q, T1 d& m5 ~! d
For Fs=10.24MHz:
* j  `3 z/ x- @& c. h# D* RV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-77 z- b  S2 R0 v' w+ k
V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
/ r0 `" `" N; _4 hFor Fs=5.12MHz & H1 s) U1 c- P
V0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-73 N3 B6 {3 Q9 a( ~9 I1 m
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-78 q  b. B& P4 b% {& w
另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。
. Y/ `6 |9 w: D2 [如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:
! W0 B. t. O/ ~; y! V& o.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us# x  y) p0 e, P8 h+ o5 ^
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
8 C0 T) ^0 ~3 t然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?7 W3 }. @% O- M1 C2 [
你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
  @- b9 x  M8 V% H, Y. L& d
) W7 U! `6 f4 J% O# j' [; k' L% {[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
# C) {: G0 s3 |" c0 T: q! E首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來
$ E) b0 N% }6 Q9 ], l而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?
4 Z# q: ]/ u8 k. s9 v
( Y  V4 t/ N$ g再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪
, _8 g7 {5 y. }- x' a2 ^+ v
$ a3 E: F% m. h- p% yFFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要
4 a% }" J2 I2 ]( L9 S2 K% D1 e# r2 _  m# G
clear all
* w+ t# H0 P. d3 T5 l5 H& }fid=fopen('dual_measure_rms.txt','w')3 b* O& n! K1 c! z
for M=1:1:1024' D7 H2 i* T9 b- Z
       T=M-1;
" Y' g6 f) f' F' h8 }. t! Y       from=(50*T)+45; %DUAL DAC measure time
) m, V. Z& L, ^/ B1 t# ~* D       to=50+(50*T);- t; e/ Y$ }6 E/ O! ]0 p
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
. d4 {* r2 N6 g- Dend+ |7 G* z- h* A! E
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
6 g3 \, ]6 d1 [這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧
7 E2 ]- T$ i: b$ ]% J, A  D這樣以後模擬FFT就非常方便了" B3 @! f1 V" [) f0 S# @3 i3 K: D( Z
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間) q: c& e9 r8 G8 y
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧
" r. }# b' ]( E& i4 D" b# m. d只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?/ P1 \7 v. Q! b' W' `! ?" m% v7 p
我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:$ b. N& K8 R, s( {3 w. K
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
$ L0 C. J5 @6 H( ~6 @且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。  Z& a& X* o3 q0 ~
另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。" T4 C& {. i9 [0 s
依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
+ b& `9 Z5 r( |3 b. D/ p2 }7 Kclear all2 I- Z# _, e$ j1 `- l7 k+ H! z
fid=fopen('sdm_out.txt','w')# G! h; O1 L3 u) L4 `& a/ X4 M
for M=1:1:1024
/ U( P5 s- q/ h# t8 h    T=M-1;
$ j3 v1 k6 K$ ?+ }3 U1 P& l* i    AT=(0.1952*T)+1.026; %SDM measure time4 l; S: D1 O" y7 S
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
. A6 a& S: S/ i# @end
2 m4 V0 |& d7 w1 G3 V試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
1 Z: m! Y# b4 T( F  y想再請問的是:
! @+ K" x" e! S+ Z當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:  }" {5 @* w5 t
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
, c. S$ H% Y4 y: U9 L) {2 c然後就可算出SNDR及SNR以及畫出圖形了嗎?4 }7 {$ q) @7 c, S* g" ~; x( B
請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-17 11:53 AM , Processed in 0.187523 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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