Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 97591|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
# n7 a0 z! d( K! H' V" p! M8 y謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,
% L" l# h/ t/ L3 M! y+ s, P! {要使用這個toolbox時,在hspice的.option中不能使用post=2.
8 O* l2 F" d8 J/ R$ ~  I; }# b可以用9 i* H2 j2 V0 Z/ d. ~8 q4 W
.option post
4 i9 d( H& K9 j7 f& w4 q或是
5 k4 ?; D% s, r( F9 F+ c.option post=1
& B9 B. ?! q2 K  E但絶不能用3 j, l( y& f% n, q. ?. ~
.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
% p& m4 m+ U  h4 z如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
: K! p! H5 w$ p5 G關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。3 E. k) `6 H& d8 Y- E, j$ d6 \& b

) m1 Z# e2 S2 v5 e$ Z[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用; z! N9 y% u; s, ]9 U
就是直接用.print指令把你要量的電壓印出來
- Y% S& t; Q7 C1 ?( ?$ l然後再用手動把印出來的資料copy起來, |- n' C" p, f
然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
) }! D! p* \9 o" J: Z0 Y# G2 z, p5 c' J6 ?2 Q0 s  V
謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program,
( ^$ }& p+ V1 W所以  只要將FFT後的資料  做一些轉換就可以唷!!, k; v3 p6 ^/ }! B. R. s; H
將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"3 I9 t+ P3 A- ~4 t+ Z3 y! a
就可以換算  SNDR 了!!
; x' Z1 w( k: k! O9 ], z( _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部份程式& }1 F9 R# D1 A# O+ V$ T
我想,應該可以給你一些參考吧; }" N5 a6 ^& D' o

! X3 p2 y4 t( Z% w0 a0 p$ ?: M3 d1 A% --------------Using minimum 4-term Blackman-harris Windows -------------
1 o3 R( K6 j5 P: b2 c3 k0 gnb=1:1ts;
5 x8 [. k" [% Z' E0 \$ g  Bkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));! O* G2 c4 Q, P- |7 u: P& f7 z
win_gain=sum(kb)/pts;
/ F& \- X* @3 `kb=kb/win_gain;
' d3 Y, Z; d) P, @6 t" b# }: E# d7 H
% --------------- Calculated fft --------------------------
9 \# g2 n9 R0 [0 Myb=kb.*x(ptsttfi);3 M: a  f7 s- `  s3 `
yk=fft(yb);- I; ?* T$ |/ W8 `
fft_no=length(yk);4 p+ a* a: S2 h: ~$ V
f=fs*(0:fft_no-1)/fft_no;6 w7 ~/ E, |1 f+ }3 o
Pyy=yk.*conj(yk)/((fft_no/2)^2);
% ?0 }4 L% F0 \: |% b  U$ y8 t% G0 x8 l; F1 l; c
% ---------- Calculate THD ----------------------------9 @( N% V) _, \! V, \+ S
j=1;4 x( V2 i6 l7 A8 m9 N  @+ e, z! V# j
for i=1:1fft_no/2)
, c' t& v4 W5 ~* n    if (f(i) == (fi*j))
; o. e- B( p" @, J  H: {; V6 T        HD(j)=Pyy(i);     %% find all harmonic distortion components
! n+ C6 C1 U% k) p0 R2 Q        j=j+1;
$ b  s3 A. ~. @" V2 @& `9 F3 o    end8 L0 b9 L% \+ a2 h( G
end
6 w4 k4 P( K) X6 L# tP_hd=sum(HD(2:9));
% g7 B  t3 ^# n& Q# j  LTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
: X; C* B" Z5 Y$ B  d; o8 [$ L2 Afprintf('THD = %g dB\n',THD);- |' i0 j( Q/ @# D) E% g4 h- u
% N* h7 P: u( F2 U1 v2 ^$ J- {
% ---------- Calculate SNR ----------------------------
# N1 y8 F  p2 t5 b* \fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));, k: p8 L7 Q* d4 _
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);+ G" O- B2 V+ X5 r5 ?: y0 e
span=max(round(fft_no/200),5);
" n' [+ }4 c3 v/ M4 f) A$ ^" BP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));& I  C2 q6 e5 j8 V* j2 u; s
6 q% s9 G7 C5 n' W  s5 P
P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
6 H5 Q$ v/ Y0 O! QSNR1=10*log10(P_sig/P_noise1);
9 U' o$ z, G  vfprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
3 y6 O- f, V0 F" f1 X請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
! k  |0 v) C( k. n7 D: ?7 m. f
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
' e3 U; E* J, {" w  k$ r5 l"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
5 |7 Z; R5 b! f+ X& k; n, R& p內容為:
! f' {, }- O" B, ]压缩文件共有三个文件:两个m文件和一个txt文件2 O1 m+ q! l1 R2 ]
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
+ d/ l9 `* v/ E  }: z% _希望大家喜欢!!
3 p$ _- D" x: j附件為:FFT.rar0 x8 ^- B7 s9 u
& F) X, c4 n  V# [2 [+ ^" B1 p
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
0 z2 x9 H& t0 h/ |8 R! Z) |4 A' y0 z9 c9 n
??? Undefined command/function 'AD10'.9 f$ X  [0 \# l1 {8 e
5 U, S" A  ]% Y) e  q
Error in ==> spectra2 at 432 k; a3 H* D( R' m8 w" o- \- i- d) g  S
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);
* ?6 R4 o# @( u
6 m& `( I2 w9 g# \由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
$ h  @, ~) T; t7 |) q
. h) ]( c0 F" P∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
8 R$ O+ c& k( H$ p) T
0 v* G0 Y8 l" d1 [# w3 q; L* \[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:9 S# L, Q" J3 A% V4 B6 M) Y, j: W
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
; y1 {+ A" B/ A8 \  s- K6 ^# F9 E" P另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
: W6 K0 B% x  \' M$ y$ E"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"; W0 h4 J' D3 B# Q+ ]  S
內容為:% o' p( W5 h, r- i
压缩文件共有三个文件:两个m文件和一个txt文件5 W3 Q/ R$ F) t. r3 V" Y) i( U
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。" [; r& S; d* ]8 ?1 B3 O' h8 H
希望大家喜欢!!
% Z7 }% k" t" _3 v1 V附件為:FFT.rar
: H2 t- D) H5 t0 O) i 1 l& V6 s9 D# J. E5 }3 e1 V: d
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:$ w5 F0 G. S* h

0 r6 Z" c, b. |) T, x# B( \% r# Q, w??? Undefined command/function 'AD10'.( N6 Y. [3 `% t
" o) H, e& i& p* Z
Error in ==> spectra2 at 43
1 G, X, D4 O2 ]- r% ~' td0=round(AD10(start:stepstart+M*step-step),3)/1.8);
: ^& L8 i+ g) R0 H3 [& l# Y6 F
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
0 ^. }6 D2 b* X附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式1 \- R/ o% g5 _; Z# l
要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值2 ~9 R: Q* e% x* B
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算
  n' K4 V$ }- i* R1 V: k' P7 @  x4 j. I7 [) q6 n/ }7 S+ k
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧: |/ t4 o9 ?( b7 s

2 e; T+ }! K" o2 r; R; L6 w# F我看不到你的附件檔,故而實在無法作出評論# @0 Q, W2 V( \% W% J. S  |
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??( E3 W( s' k8 ?$ |
從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????
# ^) V& d! [% _. j9 A/ w所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,
' Q4 u& Q+ ]+ S$ P9 x指令的寫法是否為:/ c1 _% H' Z3 x. D6 R

7 _7 _3 w" D: i' |.MEAS TRAN DIGOUT
1 y+ D1 |8 Y( w/ w' r* T3 y9 |+TRIG  V (Dout)  VAL=0        RISE=2
+ t. g" Z5 d& b8 I0 W+TARG V (Dout)  VAL=3.2m  RISE=2
# i* E2 r0 s% {* j  S# a1 s+ L
% s1 `! K0 e- f) c6 ]∼還請指教,謝謝∼
. W' M3 {& a7 i1 O/ S( t; ~; r" q$ u
另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
, n1 g0 V) ^: S- M- c) F# o1 C5 I' Y
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
5 _2 o% `/ }9 ?+ l* q
% U, K; }% l) k) s& L4 wHspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?8 ~$ Y( w& @5 S' ~4 a8 `

+ @* _% u' u. T2 f& o1 s# E' `[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
7 U* q: p  I- P+ G/ a; J9 @故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
2 B5 \) x! r, Y8 a: u4 j: u所以,請再檢查一下你的HSPICE檔案吧/ B$ L! g" ?/ w) N
# Q) `3 N( R; B
再來,你的.measure指令用法沒有問題, Q) h& H0 ~+ G3 @1 a7 J6 p
但,你的取樣點及時間似乎不對
* R5 y( |7 H$ r3 c# j你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:- Z4 V. E6 h0 Z" z6 G5 d
.MEAS TRAN DIGOUT
! B9 D; Z. A$ _+ A+TRIG  V (Dout)  VAL=0        RISE=2
' }0 h/ m+ }6 s5 s  Q+TARG V (Dout)  VAL=3.2m      RISE=2$ I7 a% t: J1 t5 B" m
寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
2 F  H  _6 b; _那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
8 h' w$ ]+ Q5 u5 N: ~6 z另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=26 [2 [( e' t7 h5 R
再者,如果是用.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程式。
1 N/ l) U. q3 L3 v4 g
( S& h0 s( h9 u) D, c# {∼感激不盡∼
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
; K* K4 s, q8 v7 Y9 x# T& a! B3 }) X8 A, P4 X" H8 S& m
. E& L7 _$ T, f) g+ |) s( w0 s; q.MEAS TRAN DIGOUT& `' x  Q4 t9 x: p$ U8 q: ]9 f2 p& W
+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
6 [! K$ t0 _8 J. a' J. p( \+TARG V (Dout)  VAL=0.976E-7               RISE=1  j6 G* x4 ^6 a8 r

$ {. g9 V& Z3 _( E1 ]! S∼還請指教∼
# a8 Y' B  e6 a8 `/ w/ C; u程式重試的結果,*.mt0檔案只出現:
$ q% Z/ q; v8 Ldigout           temper           alter#            
" l* [+ {5 n# o7 ^2 u1.890e-12        25.0000           1.0000         ) L" z/ T1 x% ]" M3 Q
不知是否還需修改?: H  a6 a2 f# \& @" c) g" E) O
- |$ @3 B3 }1 U% y
[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題
8 i% ^( G. Q: M$ P5 @+ t: F你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息7 i5 w% G. p. k# P5 H% J/ c
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
5 R# e1 F) V! l# A4 K
9 _# ?% Y1 F7 H  e$ l再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock
' d8 Z5 Z1 q4 X2 w但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
, x8 s4 L. o3 v' ^' }( E( y一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
: S* Y( m7 i* P; f: F& u4 C再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
+ D  G- J0 u0 _1 M$ C$ |舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為# X) i1 W: C. ^' c; _
.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us( B, L: z( L/ I3 J  C( U2 z
.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us
- C* q. a) T; X2 v# A0 P. b2 m! U8 J.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us, J" H; b; ]% m
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us1 E# ?0 E8 y. y$ x% H* s
! Z# A( h" B1 j% w; z" G
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us
7 [& j# l  A- ^# f4 j.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us
% }, l3 L; a& W( `0 Z7 D- e' c1 a.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us. _  s. o0 R& y) z
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us- M) f' @0 h+ B( V

, Z5 U* G1 C( ]: ^7 L/ e- ?我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
, q/ i4 M- a) u9 G# z我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法
) Y7 X+ n: A, y* G6 x9 Q6 b0 U: k6 u+ j! ^$ D0 O# g
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us6 u% m/ D2 U, I% B6 w% @
可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
  L  s0 M8 d9 k1 w) [我大概講一下我的架構:
4 q2 f2 r+ h) u) M: R& V5 x我電路是使用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的指令寫出,指令如下:/ D7 f2 R* U0 q, g& V/ }
For Fs=10.24MHz:
& H2 q- v& z' A) ~: @# m+ pV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-72 k& m1 O( x! u1 F$ V4 t% G3 F! k
V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
7 X$ M: D* C# D! t6 f5 c5 ZFor Fs=5.12MHz ( H! R/ F5 s9 T
V0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7' ?. j6 _: ^" j
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7' T$ g9 K# k; _  s/ L) b( G
另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。
4 C- U4 x! G( L, f/ m如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:
  t5 q/ w) `5 J7 |2 C.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us
4 L# |0 a* T* w9 _3 S2 a) F  j.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
% u" I6 [$ ]  s& M然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?. `- c/ p6 I! [0 s$ E, P" ]
你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
% Q( A& K! K! i) }& ?9 h9 j% S% O6 v8 t# D
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
8 P- ~( U! Y2 w- t5 x首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來0 C. V- ]4 S: X) K% o- ~' V' C
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?  X, ^: Y( n" _/ K* y3 |* U/ ~% R

9 b( w; u5 P. p7 o再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪! I7 u, D0 P2 G; X( n3 c% M* m& P
1 j8 ^0 }: t6 R0 m/ H4 b, v
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要# I  L# a' i5 [' B+ W

+ r' ~4 d2 G& b2 G; Iclear all
. t6 ?& g9 l9 X) z" Bfid=fopen('dual_measure_rms.txt','w'); q9 l6 R7 b4 Y( E6 Z
for M=1:1:1024
% k) o/ g! O, E       T=M-1;9 @) o% d# }/ Q9 ]* ?' Y; Y$ G
       from=(50*T)+45; %DUAL DAC measure time! D0 f9 i$ ?8 o( q8 U, s
       to=50+(50*T);
4 |/ t7 U1 h/ ~" ?       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
: |6 ?. r- d/ K; ]; cend* C" f+ H; s4 @9 I- v4 b
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
8 L7 Y2 T3 U2 O$ J- \9 _( G+ }這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧- K' N# P" Y! I+ A- j8 d0 e% k
這樣以後模擬FFT就非常方便了
+ J# i: X8 t" T; l* ^, E看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間. K9 a) C# X6 Z: f3 t
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧
9 Z" Z7 L# _2 n: q* ?只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?3 J+ x3 W5 j! L' ^
我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:1 }' C9 D) }+ L5 F
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
9 T# v0 `$ @" Q  J: Y) O: Q# D6 K  N) b且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
3 A2 M0 v' d+ S3 k+ Y7 t8 v0 I另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。: u: a, V) |. M; O/ k
依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:. @9 L0 t% @+ Z/ y' E' U2 V
clear all, G! H# ^7 w* ]3 p' c3 S# R0 V
fid=fopen('sdm_out.txt','w')! L6 }8 z2 O3 A: W! j
for M=1:1:1024
9 q% G7 P9 V$ y    T=M-1;
* N* S6 r( l! r. S) l    AT=(0.1952*T)+1.026; %SDM measure time
+ l+ C) T% ?$ u$ s8 Z9 I    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);; \4 P0 C+ J% ^/ y
end4 ]4 u9 {2 S0 B4 t) W& F' j
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
% T, i6 I; ?/ ~9 F5 s想再請問的是:& l# ]* y9 q  ]2 _9 D
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:
0 ~" l7 y( L: \5 f3 bload sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
: c; J. O' n6 T# h+ y! f- k1 Y4 l5 L然後就可算出SNDR及SNR以及畫出圖形了嗎?9 E+ ?7 ]; Y7 l6 S
請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-12-26 09:12 AM , Processed in 0.217012 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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