Chip123 科技應用創新平台

標題: 如何將Hspice資料轉進MATLAB計算 [打印本頁]

作者: 緣緣    時間: 2007-10-4 10:57 PM
標題: 如何將Hspice資料轉進MATLAB計算
我現在在設計一個三角積分調變器(sigma delta modulator),電路完成後,我用Hspice做FFT(快速傅立葉轉換)求得SNDR(Signal to Noise plus distortion ratio),但我看其他論文秀出來的都是再經Matlab轉出來的圖形,請問,hspice要如何轉換成matlab畫出SNDR及DR(Dynamic Range)?包含方法及指令,愈詳細愈好。拜託有高手能相告。" m, s1 `" y" ?# t
謝謝!
作者: monkeybad    時間: 2007-10-5 06:42 PM
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用3 g, @" L! z+ w+ m' {; s
就是直接用.print指令把你要量的電壓印出來
) ]7 A9 I& r5 }3 W8 P6 \! q( D然後再用手動把印出來的資料copy起來* p+ a/ q( ]* d6 P
然後貼在Matlab程式上面 然後就可以做FFT了
作者: 緣緣    時間: 2007-10-5 09:39 PM
標題: 謝謝版主回復
謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
- J2 o( J0 g0 s6 ?" i; O2 k9 }8 f. w! r- Y
謝謝!
作者: sjhor    時間: 2007-10-8 09:40 AM
Matlab 有 fft 的  program, " A" T" m, E, ]! j
所以  只要將FFT後的資料  做一些轉換就可以唷!!' F/ R$ }: g5 D6 X7 ^9 I) [; |
將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"+ l+ A2 \2 s4 F9 Q6 E+ E5 d
就可以換算  SNDR 了!!$ _2 n% p$ h4 E: ?7 T1 j/ D
SNDR is Signal to (Noise + THD) ratio?
作者: 緣緣    時間: 2007-10-11 05:44 PM
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
作者: finster    時間: 2007-10-13 08:20 AM
我以前作DAC的MATLAB部份程式
; d; i9 o9 I4 I& k/ h我想,應該可以給你一些參考吧
" _& P! o8 I1 K& i) Y' x# h' s0 G
% --------------Using minimum 4-term Blackman-harris Windows -------------
, `+ ~& o4 n/ |& z# g* n+ jnb=1:1ts;! {& a$ [. |4 n% _) w" k
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
" D* L9 G) m+ b- m+ A0 {1 Swin_gain=sum(kb)/pts;% S# ^; d6 P+ J/ R' ^
kb=kb/win_gain;
6 h8 l: w4 l* S6 q" R% ?
- e1 _+ v; A  L% --------------- Calculated fft --------------------------
8 v( ]' M' f# T& D% |, oyb=kb.*x(ptsttfi);
/ P+ I5 ^- u% P# Qyk=fft(yb);
& Y" d/ s' C; T- G% O8 Ufft_no=length(yk);
) ^' p5 z+ D2 p# s- R6 r; E0 yf=fs*(0:fft_no-1)/fft_no;$ w/ J9 {# N  C. V5 q: {
Pyy=yk.*conj(yk)/((fft_no/2)^2);
+ N0 e6 x; J# j8 I# ^1 |5 ^* C3 r- ], v( y6 r- i" C+ q
% ---------- Calculate THD ----------------------------" w& T/ q/ a9 K4 l9 e9 F5 [2 @
j=1;
# w' o$ q$ W) p/ [7 J$ Vfor i=1:1fft_no/2). {' w- N6 d) y9 E
    if (f(i) == (fi*j))9 g$ f& n0 d3 q# X! v7 G5 [
        HD(j)=Pyy(i);     %% find all harmonic distortion components
1 `: A: x3 }1 n9 m        j=j+1;
7 F* E1 x1 b8 m  l+ u% t    end
% c+ h% ]* \: d+ j1 F8 Pend
/ x. g% y. o+ p3 pP_hd=sum(HD(2:9));
: I  X6 Q+ ]1 K4 ^THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
* Q( Y' G) A- |8 E9 I3 n3 r- W7 hfprintf('THD = %g dB\n',THD);$ f& A1 M2 i, Y; A

) T8 k# G3 N5 a1 ]- Z% ---------- Calculate SNR ----------------------------
8 E# I9 c% ~3 w7 E# m9 W( |fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));2 u5 f; o* N) [3 U. T0 k: S$ u& H
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
7 Y6 b2 b2 \$ [9 j* w; z- rspan=max(round(fft_no/200),5);  x$ e/ A7 W1 c2 F9 s( G
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));* D0 e9 T9 w  p) c$ J5 j4 V  y* @
* `# b' o# h  D2 U
P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
. l+ v2 w; L* f" H0 ASNR1=10*log10(P_sig/P_noise1);
$ N( S( x; J% I" Bfprintf('SNR = %g dB\n',SNR1);
作者: 緣緣    時間: 2007-10-15 07:34 PM
標題: 謝謝副版主回復
謝謝finster副版主回復,想再請問一下:6 t% X: x$ m! l. V. U3 b+ I
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。: I2 p0 ^6 v$ {

% \- t3 x2 t; i9 \) t& F另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:6 X7 F4 I& x* w# c: L
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
. d4 j) U6 F1 f5 A內容為:# y$ U. s- k/ H- ?- f3 t+ E  k
压缩文件共有三个文件:两个m文件和一个txt文件
9 l* x1 l) J) U  [! hspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。8 z( h; U3 b6 j( ?( Q) I
希望大家喜欢!! - n! e6 Q$ v% M6 e4 a
附件為:FFT.rar7 k+ a# I3 c1 m' t4 M4 x3 ^$ D

  |- f& ]$ D7 C% t7 ~4 U" S我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
5 y) q4 W! L! z  Z  o0 G8 c" a
??? Undefined command/function 'AD10'.
/ V5 I% d$ u) L4 d2 |, S$ `! }
8 h/ q: E/ I$ L8 m% h3 EError in ==> spectra2 at 43) A; |" d- p5 p( Y+ [
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);
! I; ?0 [+ J, n) n5 F! l
5 I( I- m! g* J' k4 N由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!2 W# R6 H" C  X- x) q0 P

# k, D9 X; ^6 t5 `, t∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
' z* Y1 m1 v4 \! H8 e% e9 e6 [+ a! A/ X% O) j6 k5 l
[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
作者: 緣緣    時間: 2007-10-15 08:54 PM
標題: 謝謝副版主回復
謝謝finster副版主回復,想再請問一下:5 p/ ?3 E" F3 n! T, Y
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
$ |) e8 d6 r# |" A! E3 L另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
0 A; @) |1 A9 d9 W$ a"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
& y& @& ]* t# f+ R" |內容為:/ E9 o& R8 V8 i0 V! }; r
压缩文件共有三个文件:两个m文件和一个txt文件
4 V% N/ q: v* ~7 F. vspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。( S  h% p# K/ Y$ D) Y* q
希望大家喜欢!! - z  y1 c2 f5 q
附件為:FFT.rar$ ^; B8 l+ {+ Y1 q( y3 u+ i
2 a: a* a7 M. v
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:: R0 C: a' J1 i4 K; Z% Y3 J7 o0 W

( S# |, F6 s% |$ W??? Undefined command/function 'AD10'.% X% t4 t/ ^! [& O; t9 e8 }

' C8 n0 y7 I9 T+ gError in ==> spectra2 at 436 I* T0 T/ ^  Y" w7 a+ a
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);5 l2 P1 M0 M) B' M2 r2 [7 g

/ ~0 y9 x, Z$ ?1 m由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
作者: 緣緣    時間: 2007-10-15 10:18 PM
標題: 增加附件
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????3 _+ P  {; R, @( B+ B: b& h- K
附上上帖的附件
作者: finster    時間: 2007-10-15 10:31 PM
在回答你的問題前我先稍微解說一下我的MATLAB程式
( Q3 _* U. P4 ~1 J2 v3 H  j1 P要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值1 z* B, N1 [8 Z) a. U" l
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算, p* O4 d0 P6 e; V4 K2 R
& J" F! Y2 \7 C0 Z( @
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧, j8 K& E+ Y$ J) |5 A7 l, M

3 i( }3 w4 v  o7 ?* r我看不到你的附件檔,故而實在無法作出評論4 b" W( Z4 a% J. k$ C$ T- u
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??  G8 ?) @$ l1 s- H5 ?3 x+ c+ N
從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
作者: 緣緣    時間: 2007-10-16 03:54 PM
由於之前一直出現Internet Explorer無法連線訊息~???????
& [. Y# o* j; g* W) q/ K' f所以重新上傳附件
作者: 緣緣    時間: 2007-10-16 05:02 PM
標題: 有關hspice .measure指令寫法
再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,
& L' p5 R) o$ z7 Y指令的寫法是否為:
3 g9 E) N' O; @% m
" c9 r6 O! S9 {1 J% W, t; `. {; T.MEAS TRAN DIGOUT
9 x3 ?4 N  v: r. B/ v: j4 E+TRIG  V (Dout)  VAL=0        RISE=26 }* l1 U: S1 V: V. v) |
+TARG V (Dout)  VAL=3.2m  RISE=2
7 o& G  ?& B. n, e/ ~4 h: Y% X  m9 M0 u: Y# Y7 z3 G* a$ g& X2 h! D
∼還請指教,謝謝∼  r+ A8 Q9 ?# ]* ^& n
% }. e9 Q8 d; K1 Y, |8 ^
另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:8 X. G" R0 K( t4 M* h6 n
7 I; c( p: u& z0 c* m+ V+ p
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07  r" h! J6 {8 b$ N5 r% E
- U8 L7 U# A+ Y: d* y( X
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?  P  _- C1 P- B8 ]  V0 y3 B

6 X  w  |3 E& r, _8 G[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
作者: finster    時間: 2007-10-16 11:08 PM
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔1 Z+ x1 x7 O' @, q
故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料& Z3 t9 g; d3 k8 O& {  T$ o
所以,請再檢查一下你的HSPICE檔案吧$ d' Q( C6 g8 M  n; i) t
) \# _0 C4 Z/ v
再來,你的.measure指令用法沒有問題
# t  ?  W. N  y% y9 E; D但,你的取樣點及時間似乎不對( u# |( o, t! U: K
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
2 P5 [( x; g, e) x6 b.MEAS TRAN DIGOUT
8 T0 u1 ], ~  I6 r- S4 G1 @& f4 I! [& t+TRIG  V (Dout)  VAL=0        RISE=2
4 [" z" K- i$ \+TARG V (Dout)  VAL=3.2m      RISE=2% ?3 W! Z$ R: z$ U3 k' A% y% a$ M
寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話5 n. u3 E: m2 e. s9 I
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock$ F0 A/ p/ e' o- F, r% z7 V
另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2
- C" g  n9 c5 q; F, n0 v# E3 G  M再者,如果是用.measure來計算digital code,那如果以rise edge作基準則應該用RISE=1,而不是RISE=2,這是很嚴重的錯誤,除非你的clock及取樣有delay 1個clock的作用在,如果是以fall edge則是FALL=1,若是以你RISE=2,那你取樣出來的digital code應該都是錯誤的
作者: 緣緣    時間: 2007-10-17 02:02 PM
標題: 再次謝謝Finster的回復
再次謝謝Finster的回復,我會依照你的方法再重試一遍,另外在麻煩你幫我看看上傳的ADC Matlab程式。8 o% ^1 i' Y3 M/ H
& z# T4 {' o- i3 P- T/ E
∼感激不盡∼
作者: 緣緣    時間: 2007-10-18 11:59 PM
再請問一下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) i9 I/ l( X) V
3 }) X8 A, P4 X" H8 S& m
2 Z1 T: V# R" h) L! S.MEAS TRAN DIGOUT! N: L& \1 X* N  ?" [
+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
8 u1 I8 f3 e) @6 s+TARG V (Dout)  VAL=0.976E-7               RISE=15 L- P5 P5 b9 a* J1 X" x

0 |* U4 n  N, J, ?6 ?' x- J∼還請指教∼
5 M$ V: f; L; f$ w程式重試的結果,*.mt0檔案只出現:
" H( N$ ~9 U: c+ Fdigout           temper           alter#            ' ~% K( K5 g# R7 B$ y! O% B. j
1.890e-12        25.0000           1.0000         # R7 R4 Y9 i  f( o  [
不知是否還需修改?
$ A' d0 p. e6 ?  n0 M* R
7 c) Y6 v' U& j+ g) L* Y[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
作者: finster    時間: 2007-10-19 01:58 AM
先回答第一個問題
/ e0 s) \, O6 V. ~2 |0 V你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息1 s% {7 N9 [; Y* d, k4 @! e9 G' Z
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
4 X$ g1 ^: y0 c+ ]- l$ N3 w; e1 \8 a3 m; L% j! n& j& _& o
再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock
6 p  B3 c; t8 d  M- n但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock' q5 N! J3 {: F! c  e2 }: ~
一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit); `. G5 K$ o$ c0 i  s
再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???- ~, E. w9 A6 m6 R5 F
舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
/ N: ^- Y. G  n2 {.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
/ K2 R4 v; A+ W2 [" R# Y.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us4 s# f( ~/ P6 F& D6 q, s# H
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us
& i. A$ J. z, t8 b.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us- I5 s9 B0 ~" ]' A; Q

( {' G! j, P. {7 K6 @, k.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us  Y9 e4 z* [# x7 Q
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us+ F# z  m- v8 o) C3 c
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us! Q) h" \) n7 r1 T1 {
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us8 ^1 I9 l$ ~3 i6 f9 O
; M* B# _- D. f$ K, ~7 y
我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code  W6 ?$ P% B9 b% x; t3 m9 Y4 O
我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法: j, j$ H" M0 X9 S& E/ y
0 f3 _& V! c' Z
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us- ]2 c, ^' L) ]) y8 I
可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
作者: 緣緣    時間: 2007-11-8 03:00 PM
標題: 謝謝finster副版主的詳細解說
再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。8 w: V: L* c7 P8 R
我大概講一下我的架構:
2 O# P' w  J7 _* Q1 B5 z我電路是使用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的指令寫出,指令如下:
: M8 Q' F& I' y+ x/ t$ J; L  Q  ?For Fs=10.24MHz:4 I- H1 x2 D5 N$ l0 A
V0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7
0 I  U5 L0 ]' K# xV1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7+ T, \1 Z+ S" G0 A: T# f
For Fs=5.12MHz
: Z; {$ j% u/ n; eV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7; @" ^, p! u6 U/ y. ~" P2 y, n4 b
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
6 G2 G% F7 t  q9 W+ Y另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。% p! R! J. |  L& M
如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:0 X0 K0 i; R2 Q+ @' k$ n
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us" f& V* d4 U: U; M& G; I9 O2 X
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
2 |8 H& P8 D9 L* a2 U- U' w: d然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
' Y9 p) {* F* a/ E8 `你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
+ l4 _; o3 b; B+ D; M/ e$ m; k7 I. A4 p5 Z, N, p% ~
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
作者: finster    時間: 2007-11-12 02:06 AM
看了一下你的說明,覺得有些奇怪的地方- R/ ?! Z) L2 ]) y
首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來
0 `/ I1 ^  B" \4 q( ~+ q而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?6 h; c/ e- c! D

- E1 p9 K6 r2 x" x( |6 B再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪
0 `6 J: ]& m7 U0 b) Z$ M: p1 x9 {) s$ O2 F+ }! _
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要
7 c. T, w# x7 @2 f, k; u
: R' k$ T9 L' z7 h  {! cclear all3 I' Q1 Q# t+ m
fid=fopen('dual_measure_rms.txt','w')
$ F* s9 H7 V7 xfor M=1:1:1024
9 _) p! ~: \% ]4 K; `' b% H       T=M-1;
# M3 `. c! O3 B: G" O       from=(50*T)+45; %DUAL DAC measure time! i) b) Y7 V' o& u8 S
       to=50+(50*T);
0 V  y) v3 X& v4 N2 b. U! O" v* `       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
! f8 J# w' D% Z7 x; eend- ^5 c1 l5 L: d5 x! |
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用! t9 I) A2 N0 W8 x3 S: ^, r4 d
這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
作者: monkeybad    時間: 2007-11-12 12:02 PM
感謝Finster提供一個非常實用的小技巧
5 y( J! e0 q+ n4 [" x這樣以後模擬FFT就非常方便了9 R6 f" L) @9 a* \$ s  u
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間. g* J* ?5 A5 T7 a( o  T5 V
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧) @1 d% ~% O$ w  I8 _) Q
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
作者: 緣緣    時間: 2007-11-13 03:58 PM
標題: 再次感謝Finster的詳細解說
首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?8 @; w) ?; _. \; Z% Q' S
我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:
* {+ x9 C6 `, `! q. q4 R* B9 {2 j& O因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。. ], G5 B9 c! S% L) o7 ^' K# {
且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
$ v2 _' a1 @& d; Z3 ~4 e, a另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。1 ?4 b9 O5 u( P
依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
" q% R6 [1 v9 P" n9 F1 w5 Dclear all: k$ V% M! G8 H
fid=fopen('sdm_out.txt','w')
) f0 b) E7 b/ S7 ]8 Ofor M=1:1:1024
4 T2 q, C8 {) T$ L# r2 S    T=M-1;2 Q% @! e- e7 V) C' H) g
    AT=(0.1952*T)+1.026; %SDM measure time5 u7 F: T4 q4 g6 V, ?5 `/ A
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
6 f1 |2 w- e8 Rend
5 I4 V# E4 w) F7 r& o試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。0 v! v- q. Z9 C) D& J( F; e
想再請問的是:
4 ^* N! {$ {% k  q8 [( t當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:& `& G0 ?; t5 C" B5 m2 Q
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
' C2 c% l7 d6 ~# P然後就可算出SNDR及SNR以及畫出圖形了嗎?+ g# \; ~3 Y0 f) i9 q( ]
請指教∼
作者: finster    時間: 2007-11-14 06:03 AM
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
) {+ v! W# H; h4 y( N; c所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
, d& g9 T! R0 e+ j
, {8 X3 o* A- _6 ]1 D& _* Y9 t( j至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了. i$ r2 |0 C" N9 s
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久3 x* {5 P, O9 o2 S$ I3 O
2 }2 d8 M8 W! l4 H$ s
至於另外個問題,我的回答是,對的
; s: }1 W+ ]5 O+ E0 }  g但,要先把一些參數改成你們自己的規格才行
作者: monkeybad    時間: 2007-11-14 05:04 PM
我補充一下
5 Z  @$ m+ l) g. t: {4 D緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣3 r. @2 S. _, ]1 s* ^) [4 z5 m2 }
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了0 z! V  x& ~, f  k
至少我模擬起來也是這樣1 _; R2 n! c! M! b/ J) h
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
. R1 q& T# l" `5 F6 I9 M) X$ ^所以我想取樣點很多應該是正常的吧
作者: 緣緣    時間: 2007-11-26 04:38 PM
標題: 非常謝謝finster副版主的詳細解說與monkeybad版主的指導
再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
' L' p7 n& P7 F* _/ U6 l. E說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。; @* ~; O- x) {+ {$ A* h% ~2 [
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。
) S8 d  y! r; [在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
: g- U* U. G# l) H2 t此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
8 w. \+ I$ m; g. {% f% b- m7 ~9 q7 h∼謝謝!∼
作者: 緣緣    時間: 2007-11-28 09:24 PM
標題: 請問finster副版主有關程式問題
請問finster副版主:
( ~% T* l) P5 j$ l2 K$ \我依照你提供的程式,修改成我的規格後,程式修改如下:- L  }4 E& x2 M; @
% --------------The number of FFT -------------
; ?2 s. o7 `0 D3 Afin=5;% *KHz
5 V7 v4 M  x- |; `fs=5120; % *KHz/ U- b* k# v' ?4 a
cycle=1; % cycle = 2^N ; N = 0~5
, w$ \( V* D  w. O! j4 C. \M=round(cycle*fs/fin);
9 W6 R6 I; P" y" N# b; A2 }% --------------Load the binary code -------------
, [! P! ^  Y' }; f/ Eload sdm_out.txt -ascii
6 M* }. \8 B4 z, V' vstart = 1;7 r9 H& R8 x' L# ]2 ^1 n; u" V
step  = 1;
$ p% O1 i0 l8 H2 v%ADC
% \4 A$ L) V) ]0 Lx=sdm_out(start:step:M);0 I- T9 d) D  \% M& f% T$ ^
% --------------Using minimum 4-term Blackman-harris Windows -------------4 L0 k" A" M$ u+ J
ptst = 1;- K& v" n) L! Q6 }5 @+ u! a
ptfi = M;
* P6 W  g5 J2 dpts = M;
9 A3 e4 z% ^3 M1 v$ L
nb=1:1ts;
, z! C" o* F' Pkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
/ [! @6 ]9 p1 H: awin_gain=sum(kb)/pts;1 }0 ]9 y6 D4 D) N) G$ W3 g- U
kb=kb/win_gain;9 u' N4 p% ]+ c# T  [* l9 F
% --------------- Calculated fft --------------------------
  _1 C) R. R: Cyb=kb.*x(ptsttfi);4 m$ K( Q: V9 I' T+ _
yk=fft(yb);
. h( q8 J0 n8 }/ |fft_no=length(yk);
$ z5 w/ T( u$ Ff=fs*(0:fft_no-1)/fft_no;# y3 }: Q, w2 K* t5 c* c
Pyy=yk.*conj(yk)/((fft_no/2)^2);' ]6 _& ^; `9 h& b1 R8 u) U
% ---------- Calculate THD ----------------------------: S& @0 A& n' k* `* t
j=1;
2 Z7 k: Z5 D( V2 [for i=1:1fft_no/2)
2 A3 K* v2 Z& n, E( h/ y    if (f(i) == (fi*j))  
" k5 ]4 _  _: K9 `5 K        HD(j)=Pyy(i);     %% find all harmonic distortion components
4 |0 |& B4 N" i+ g2 X        j=j+1;
) m9 u  V( @% v9 [6 E& t    end; z& p' \$ |, X1 U) ~4 S
end
, Y# j5 p2 v5 {% C# GP_hd=sum(HD(2:9));
/ U" t2 n5 X; Q0 kTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;! ]$ K9 {) U' Y( [$ c1 A
fprintf('THD = %g dB\n',THD);
$ r7 v7 U; a4 Z! r4 Q! I% ---------- Calculate SNR ----------------------------1 Y7 m. T$ h: V5 I/ r2 X/ x
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
1 X/ M. M6 D; f4 U' W" ufundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
& k( D1 i  G' Aspan=max(round(fft_no/200),5);3 j' A' K  N2 v! ~, B+ s5 @
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
6 b, i- \: P3 v4 m4 GP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;3 T" q& O) B+ {0 o( d
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
* U/ I3 e* h6 A- p7 ]
SNR=10*log10(P_sig/P_noise);6 M/ S: z0 N% y# {
SNDR=10*log10(P_sig/P_noise_hd);' g6 F6 g; \3 r$ l+ F& F
fprintf('SNR = %g dB\n',SNR);
& M8 D9 G8 K% ], S# Lfprintf('SNDR = %g dB\n',SNDR);% M* [: d+ L1 B: U% b
$ }+ s2 f! }/ w" B4 U) J
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
7 E" ~$ V: Y- A, J7 V3 a??? Error using ==> times; [- F  Q( n7 L7 H+ ?& c3 S/ [
Matrix dimensions must agree.

" z: B4 E' F( v, c" G7 e1 C
4 @! W8 B* U* k5 s* x' v( QError in ==> sndrtest at 21
: G  I. y7 Y: M- o" B" \$ yyb=kb.*x(ptsttfi);

' M. y! O& u$ G! M  X; M* @6 d; g/ R2 k# X, ?; k" s" `
因x函數是我自行定義的,可否幫我看看要如何修改?! f3 `" G- J$ l  g+ q, i
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
# v1 B9 N' K3 D  l1 x+ ~除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。2 x) ~2 ^; {0 c  b) g3 H
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
" z9 c( j- h$ j以上麻煩finster副版主賜教。
作者: finster    時間: 2007-11-30 12:54 AM
我看了一下你的MATLAB程式,發覺到有一個地方有問題
6 B8 d8 R3 ?  n" V! [那就是你設ptst和ptfi是同一個值是不對的/ r8 t# O( D( D9 V( K: e9 ^
ptst是計算fft開始的值+ u/ W. g& ^% C
而ptfi則是計算fft的range,如8~519,total則為512點
6 Z$ J" ?: ^+ ]故而你在執行MATLAB程式時就會出現錯誤# {  b- m- i4 K* ?- \

: V( M) k! |/ K  A6 I. ]0 A0 |我看了一下你的MATLAB程式,基本上沒有多大問題
4 K0 t, ?5 c, y0 A0 Q. D: h$ S不過,要小心計算THD的值和範圍
2 z* R- m: q- e% V- y因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤) x/ r+ `+ N' [
' U! }/ U$ E% E8 {. o
最後,計算noise有好幾種定義方式
* L8 O/ s! w" B" U原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
+ F5 Z* x# Y8 U1 g我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
- s* f1 e# H6 {# P8 o5 K5 o6 L因為目前在計算noise上並沒有很統一的說詞,故而,只要解釋的合理即可
作者: 緣緣    時間: 2007-12-2 06:25 PM
標題: 感謝finster的解說
感謝finster的解說,我解釋一下你的回復,我程式中ptst是設1,但我的ptfi是設ptfi=M=round(cycle*fs/fin)=1024,所以並不是同樣數值,取1024是因為我有1024筆資料,還是說我這樣的寫法不對?* r! u+ f+ Q* a, [4 E$ f5 w2 |
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。$ K7 v3 k; i" A3 Z! O
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?9 V# h; H1 |# L7 U. Z1 c8 Z
謝謝!
作者: finster    時間: 2007-12-2 09:33 PM
我想,你可能有點誤解了我的意思了
) ]- Z  H! B$ A7 ]" }" o, G0 J- o' K! F. f我列出我當初寫ptst和ptfi的式子關係式0 [7 E, r6 O, K
ptst=2^3;          % calculated fft of start point
$ b5 n- u5 Z) v9 n3 Xpts=2^9;           % calculated fft of end point
3 [, d7 p8 x8 p$ vptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
5 p4 R; _  Q# b7 w: h因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值: W8 W# m0 z1 s$ M
如此一來才能夠取到足夠運算fft的值; n& A% h  m3 q8 B$ E+ S% G" K
  {3 {! @8 Z  z% {4 z( Q7 U
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值$ w8 g- J2 E7 w
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
: G% r! M& i* N: q
% u; {3 t- @1 w/ N) ]如果對於要設的參數仍有問題  v- P! k, C7 [. Q" i% |3 V/ @
我可以把我最原始的程式寄給你參考
! t# g) H% B: A/ N* a
. ^& {* V/ U% Z" T8 g[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]
作者: 緣緣    時間: 2007-12-3 12:16 PM
標題: 謝謝finster的指導
謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:" M9 C1 H3 g! H! B
??? Error using ==> times
" Z, d- G8 U# X" d' N6 Q" L: JMatrix dimensions must agree.8 K; W' O5 k- M- V1 [# j

) F7 o  {( y" Z; D, `Error in ==> sndrtest at 26- |, w' X, D  S5 W9 x1 e
yb=kb.*x(ptst:ptfi);* z  V& e4 t# E8 T3 e/ Q5 N6 e5 r
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。8 ?) L* ?' B3 [
∼感激不盡∼. Q" O* y( s" p2 A1 ^" Y5 l( P
ps.我的E-mail address我會以短消息傳給你,謝謝!
作者: liuyj610    時間: 2008-3-23 03:06 PM
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?! W% g& A( h; u8 c
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
作者: winnie22    時間: 2008-3-24 12:18 PM
請問一下  M- |) b. J6 }1 g
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??% I5 `' L6 d, J  n0 ?8 ?2 |
因為沒有MATLAB請問HPICE可以直接做嗎??
% d, |& p5 g% G+ `4 ?6 s3 G/ c ' ~& X, p* ?0 N3 H; w
請各位做過ADC的高手幫忙回覆..
作者: finster    時間: 2008-3-24 01:21 PM
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體3 U6 ?% [8 o9 ]+ v' J# w6 ?
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬# E: k! l+ p3 a1 g6 b& d5 \+ l
但,在業界,個人的建議是,還是要跑HSPICE會比較保險, M( z; Z! l) X1 Q3 j
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算( l& Y+ y! o( z
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易) b, u) p& F& w- f) y3 [* f
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
作者: 盧志良    時間: 2008-4-23 10:59 PM
標題: Hspice轉進matlab
請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?' i1 |% C& O: a4 T1 L  u; |7 r& ]
                請各位了解的高手幫忙,謝謝.
作者: 緣緣    時間: 2008-4-24 04:16 PM
標題: 回復 32# 的帖子
請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?# s  r: i$ Q  U7 g% n
還是要將hspice模擬出來的數據,然後使用matlab做分析?
作者: 盧志良    時間: 2008-4-28 11:34 AM
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
作者: 盧志良    時間: 2008-4-28 12:18 PM
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析7 h, g, O# H8 S  D" E3 X
請各位高手幫忙,謝謝.
作者: 緣緣    時間: 2008-4-28 05:19 PM
志良你好:: s6 d0 S2 H& ~6 D# B3 v
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
8 n2 x. C" n0 s5 J8 W1 O% z. K+ I關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
" b4 E! ?, `; T8 S9 O0 @. n! @* K( |0 b9 E, M' m- \
[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]
作者: 盧志良    時間: 2008-4-29 12:53 PM
請問一下,第一個問題我看完附件後,第三個步驟還是不太懂,是要先把hspice的波形檔放到hspice toolbox裡面嗎?那在matlab裡要怎樣叫出波形檔呢?
作者: 緣緣    時間: 2008-4-29 02:03 PM
標題: 回復 37# 的帖子
1.首先你跑完hspice會產生一個*.tr0的檔案。; [# @+ d& R" ^5 t+ B9 ?+ J) U
2.然後開啟matlab軟體。
7 r0 |: u: G  ]& m: Q  N7 H3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。, k, R! h9 e3 a! P! B& g
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
- w9 z% n$ C% s2 r8 F9 M$ p5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
作者: 盧志良    時間: 2008-4-29 04:17 PM
請問結構x是什麼意思呢?) L4 g% {" x6 K0 p. @: f

" \- Q. k' U( serror in hs_allocate_sf: unexpected values in block1 header
7 W- f* P& N9 x??? One or more output arguments not assigned during call to 'loadsig'.: E, a( Y5 |1 m0 H
這是怎樣的錯誤呢?
作者: 緣緣    時間: 2008-4-30 01:42 PM
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
  K3 m. I8 `5 q) G( Q第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
作者: 盧志良    時間: 2008-4-30 03:10 PM
請問一下,輸入X=loadsig('xxx.tr0')這個指令是把hspice的*.tr0的檔案在matlab裡面叫出來嗎?9 n9 R- n: {) z1 U, D$ |6 @
那如果我想把這個檔案叫到我在matlab模擬出來的波形裡面,是要怎麼弄呢?
9 F) e; `7 y6 O還有就是進入到目錄 ~/matlab/toolbox/Hspice Toolbox,執行命令mex loadsig.c。這個是要怎麼執行阿?
作者: 盧志良    時間: 2008-5-1 02:01 PM
********************************************************
# T* C$ ^8 P- R/ _( x# d& y( ]               Hspice Toolbox for Matlab- V( M9 P% n: p4 L7 v) H
written by Michael Perrott (http://www-mtl.mit.edu/~perrott)6 }8 _& B) S% \9 \7 H  ^, S
   while at Silicon Laboratories (http://www.silabs.com)
2 s2 `/ z, f$ c7 i     Copyright (C) 1999 by Silicon Laboratories, Inc.
1 J% }/ V# c" \5 P+ R) P9 W; w, q' q     This software is distributed under the terms of
8 b3 \& Q2 E2 A4 X       the GNU Public License (see the COPYING file) d7 d5 I' {# t8 X' E! t
  for more details), and comes with no warranty or support
& g, e7 [0 P) w  x1 [*********************************************************
7 F+ f# W. d9 Z3 F+ u$ d
: n3 a7 N8 P  Q8 E8 y??? Error:  file can't be opened
" u3 x* |  ]. p* i3 X, Q; J7 ]/ t. O% p
Error in ==> C:\MATLAB6p5p1\toolbox\hspicetoolbox\loadsig.dll
5 K$ \$ _, y- j' T" u- O/ G0 A, _縁缘大大請問你,這是怎樣的錯誤呢?怎麼解決?謝謝.
作者: 盧志良    時間: 2008-5-1 02:30 PM
縁缘大大請問你,我的hspice模擬出來沒有.tro檔耶,只有.sto檔而已.那這樣還可以在matlab裡面叫出波型嗎?
作者: jerwei    時間: 2008-5-1 05:43 PM
原帖由 盧志良 於 2008-5-1 02:30 PM 發表 $ g( G6 t8 Q9 I, {8 J. X
縁缘大大請問你,我的hspice模擬出來沒有.tro檔耶,只有.sto檔而已.那這樣還可以在matlab裡面叫出波型嗎?
# D+ r6 _3 S; P& B4 i3 u
; I) r* y5 H* a) I, B6 w/ C! _; v, L
tr0是spice的你執行transient simulation後的記錄檔
' T6 a) X3 b6 E  a1 x* o! [/ ?若是你沒有tr0則你可能沒辦法將transient的結果滙入到matlab# d% X8 K/ W9 S2 i" L
有錯請指正,thx
作者: 緣緣    時間: 2008-5-2 05:57 PM
正如jerwei所說,需要有*.tr0檔案才可由matlab叫出波形,你沒有*.tr0檔案是因為你沒有在hspice 執行transient simulation(暫態分析),一般指令的寫法為:0 v: k( Y. [3 V/ X# k9 Z
.TRAN  0.1E-12(取點間隔)   0.81E-3(結束時間)  START= 0E-6(開始時間)
6 h. W+ G' W& M  [. `你可以看一些hspice指令的書來瞭解涵意。只要你有下這個指令,在輸出檔就會有*.tr0的檔案。
作者: jwtsai    時間: 2008-5-13 09:53 PM
幫忙補充一下,6 e9 H+ c7 H& ?) z" n
要使用這個toolbox時,在hspice的.option中不能使用post=2., [- C3 @: u/ \0 Q: j
可以用- x4 z. Y  y1 Z& W5 A
.option post
5 R; s7 S5 B. s3 a& I) Q2 A0 z9 m或是
4 ]  L8 v( Y" C2 t.option post=10 ~& M! x. x8 g; G: N) m8 i
但絶不能用2 h4 d& B7 [2 @" a: g* ?
.option post=2
作者: simon_ncku    時間: 2008-5-19 10:43 AM
請問或是版主副或是其他人& ]2 \; x5 J7 n/ V6 a% V
我將 緣緣的MATLAB程式 放進去跑有是出現ERROR耶
6 m/ U9 p2 J8 d! w) }& |- Q它出現& A- A9 c) A* }  c) H) B5 R
??? Error using ==> run
3 _$ F7 G$ W- N' ^/ QError using ==> times
+ `* t# N) B# X5 u" [Matrix dimensions must agree.
3 R" t4 N0 P, M0 ?8 y) Z$ T附件是CO下來的0 `5 A# [) |. ]7 B' y- u: Z4 U" ?. x; l
請各位先進指教
2 _3 G/ @( a1 I, ?) j% I: ^0 m: }THANKS.
作者: simon_ncku    時間: 2008-5-19 07:41 PM
標題: 回復 45# 的帖子
緣緣大大是否可跟妳要MATLAB  分析FFT等一些動態參數的程式
0 P/ s  r, n# Z* |' f% q/ {謝謝
作者: 阿茶先生    時間: 2008-8-9 10:07 PM
@口@ 不好意思,小弟到MATLAB的網頁中找不到Hspice Toolbox載點哩...0 x2 T8 V2 c( @

* Q- `/ e3 S3 I" I! z不知道有哪位好心人士可以提供載點呢??* o5 J2 |; l4 u" H4 g. W1 ~
5 U: v" y3 X0 G6 Z0 x
感謝不盡喔!
作者: yoyo20701    時間: 2008-10-3 02:10 PM
多謝大大的解答~~小弟大概瞭解一點~~~謝謝你喔~~~大大~~~~~
作者: yoyo20701    時間: 2008-10-3 02:10 PM
多謝大大的解答~~小弟大概瞭解一點~~~謝謝你喔~~~大大~~~~~
作者: pandera    時間: 2009-3-18 09:06 PM
標題: 謝謝大家回覆
剛剛試了第一個方法 覺得不是很方便7 Y5 _, V0 M1 J- w5 O* ]7 b* Z0 W
後面的辦法用起比較ok: i  J4 G! h$ j9 w8 R4 S7 `; w2 _' e( f
這樣我的模擬結果就比較好看了 謝謝
作者: e2000    時間: 2009-4-8 01:46 AM
怎麼感覺很繁雜的樣子,看來這方法還需要多點解釋,我也很困擾到底要怎樣利用hspice的值放進matlab裡面
作者: caroff    時間: 2009-5-13 06:02 PM
不好意思,有個問題想請教各位前輩。
5 q( q& S; `' C/ n( t+ h) l, y如果由hspice使用.fft得到一個spectrum,
. f4 W8 O6 N- d  A/ G& Z那我該從何得到這個spectrum的data呢?!
1 s# I2 z/ P$ M8 T; T9 v( f因為我要利用這spectrum去計算SNR,不知該如何用?謝謝!!
作者: s13571357    時間: 2009-5-14 09:47 AM
可以問一下嗎??
0 P) w  g9 }& u  q) w當我現在有一時間t=0:0.01:60(表示時間是0~60  而每0.01分析一次), @: B- B, n8 M$ A- p; t
另外每一時間對應到相對的電壓值
- l9 Q: \* g- x% a* A* B但是電壓值和時間不能寫成一方程式- t$ X8 p  a2 K
我現在想要用MATLAB做FFT8 G3 i3 u! }# q- y; V$ E
把時間軸轉成頻率. g8 k+ ?! G# b, w
去看他的輸出直) V- M/ I: D# X. y+ Z! ^
我該如何使用MATLAB呢??& |( G  x6 w3 J6 Y! O3 y/ p- u
MATLAB新手
作者: sky987    時間: 2009-5-19 01:40 PM
他們跑 32k 16k點 應該是在量測的數據
; Y, ?3 P) q8 t! e1 {5 X+ p% J4 t8 f" [  f: v; w
模擬的時候不用跑那麼多點   這樣太花時間了
作者: kuohsi    時間: 2009-5-21 05:45 PM
請問若用.meas指令# e: {% C( C/ F+ p( Z4 @4 ~
將VOUT取65536點的指令要如何寫?
作者: iamsailing    時間: 2009-5-26 09:18 AM
緣緣網友以及版主:
$ |1 o/ a  l& `我的問題如下:
$ u1 d9 M5 _  M3 g7 T2 _我用HSPICE 仿真了一個2-bit flash ADC
6 e+ Y% @  A0 Z4 h# l/ T- X# h  o利用spice explorer中的理想D/A工具,
/ K; m9 U$ y) G0 v6 {) [可將2-bit flash ADC的輸出數字信號,通過該D/A重構爲模擬信號
( F, B# Y& Z" [! B: H# U並導出數據,如附件ADC_DAC_out.txt所示
8 i- Q# D2 d' ]+ K該文件中第一列爲時間信號(X軸),第二列爲重構後模擬信號的幅度# x2 h4 c/ M  }2 ?
在matlab中如何用load語句將這樣一個兩維的數據導入: G$ R; C( r/ ]
我現在需要用matlab對該信號進行FFT處理,並計算THD,SNR,SNDR' g4 x$ \- S) Z6 E4 y3 P  L
我的fin=56640625Hz,fs=2e+9Hz,打算做1024個點的FFT& ~6 O3 t- q3 O4 o  g- B9 Y
ADC_DAC_out.txt中數據的時間是從11ns----523ns
" D7 u, N) ^# v5 x) j! k因爲11ns+1/fs=523ns0 F% m( c- x, H6 L1 v- l
附件中fft_yuanyuan.m文件是我將網站上你的matlab程序複制下來了
6 n( t, C, `* ~# l3 ]6 t但�面有些部分我不明白,我用“?”標出了
: I( C- l% ~& }6 M* B9 f( w1 p; j/ H* Q* R; v
謝謝你。
5 N6 Q$ t! u, u  `+ h6 k3 e
2 C1 v* j4 t8 q' r' B[ 本帖最後由 iamsailing 於 2009-5-26 09:24 AM 編輯 ]
作者: kuohsi    時間: 2009-6-1 04:02 PM
iamsailing:
3 L+ L) T. r3 n# P/ ~你取點應該是11ns+1024*(1/fs)=11ns+1024 / 2G=0.523us
2 v! y* N- m9 _* f所以你HSPICE要下.tran 50n 0.523us
# o# ]& X, y% J.tran 的step要是1/fs才對
作者: 異星人    時間: 2009-6-4 10:16 PM
我有個問題啊
& a! T9 m  u* D: T8 T, A
" Q4 g1 Q  g# u  M是論壇上的表情問題
% ~% X6 }) \1 U
) B  }  j& l* J" s   這些程式碼都穿插的表情符號0 p5 C* Z7 x0 b0 u  `" |
/ z' S9 m8 x  s  F1 l
無法解讀啊
作者: 異星人    時間: 2009-6-4 10:16 PM
我有個問題啊# [# I, Y' H* o. k

5 {- F3 T1 v2 R3 R9 F( Y! ]/ O5 r/ ?是論壇上的表情問題
$ N' n3 ~8 _, C2 G
7 `' e& V; Q+ j0 y) [   這些程式碼都穿插的表情符號
. `5 G/ w9 o3 B, Q  w5 b: g- p
1 v5 l* O: {0 v0 x2 ^& K) w: i1 Y無法解讀啊
作者: kimwin107    時間: 2009-7-27 08:44 PM
感恩..請多多指導..即所謂無分享就無成長..為又努力不懈地汲取他人經驗,才能更精進.!
作者: pkf690801    時間: 2010-3-18 04:42 AM
我需要這個頁面內的付加檔...為什麼都不能下載呢?
作者: mayluli1981    時間: 2010-4-13 05:22 PM
版主 請問依下能給下載hspice toolbox的網址?偶在網路都找無1 o! D$ L/ \6 X2 t/ p
我是新手  我要把Hspice 的AC及 TRAN 圖用matlab顯示出來而已6 X8 V' U4 U2 G* N' H- z
沒有hspice toolbox好像不行ㄟ
* l/ A; \  G/ S- f感謝
作者: s13571357    時間: 2010-4-21 02:15 PM
請問一下
4 M& e/ J/ {( U, khspice toolbox主要是用來和maltlab溝通嗎" K  v8 Q4 Y2 o4 d1 `4 o5 H
哪裡可以找到相關的資料呢
作者: lqlcug    時間: 2010-4-22 09:28 AM
楼上很多牛人,这里斗胆谈谈我的处理方式。  [0 q4 z* U2 ]2 L( U
1.将Hspice的仿真结果正确的输出,用到了一个interp=1的设置,它可以选择你想要的数据点输出;
+ Q# t" B* T1 c- M1 f. G2.采用Hspicetoolbox将hspice仿真结果导入到Matlab,然后处理的方式就非常的自由了,比较典型的处理方法可以参考MAXIM公司的设计笔记,楼上已经有人贴出,还可以采用Matlab将数据先处理到workplace区域,然后采用simulink,借助SDtoolbox来计算SNR。
作者: rokin    時間: 2010-4-23 02:35 PM
首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下, ...
& d' R) ^9 R2 ?! L, `' q- m. F+ Y緣緣 發表於 2007-11-13 03:58 PM

) O% `# k6 C2 V& `. ^4 Z6 s5 d# ~7 W( m
1 S: l' v. Z$ }
+ A" b* z- e. m( t; t  請教版主及緣緣
4 x6 H5 f( I8 y4 u1 z' n* _/ D6 w對於給matlab計算FFT之前,) u. b$ N0 ~  H+ ]9 ?
.meas 指令對輸出要取均方根值嗎?
/ X" M. g. H' I! s& j4 z: p1 M或者直接取值就可以了?
作者: juro0827    時間: 2010-9-27 01:37 PM
WOW
5 o: a5 N( x! y6 r正在找此相關資料!!& ]( O0 a  t  y) F
LUCKY!
作者: wwm101    時間: 2011-3-18 10:14 AM
finster 版主相当强大啊,受教了,谢谢
作者: killer7788    時間: 2011-10-4 04:40 PM
回復 58# iamsailing
: F$ b* L6 R* q* a. X- }
, ~9 w' {8 O7 v% \' }" W! P7 e. z$ D# y. f. z8 L
    可以請問一下, SPICE EXPLORER 中的 D to A converter 是如何使用, 因為我所做的ADC 的輸出是一個序列或並列波形輸出, 案OK後好像沒什麼反應, 也不會像你的TXT檔一樣
作者: david_chen    時間: 2011-10-6 08:40 AM
來這裡看到很多高手精闢的講解* U; ^2 q0 L% h5 Z; E
受益良多  謝謝囉
作者: chivv    時間: 2012-6-21 12:45 PM
感謝版主回覆 % R0 t/ Y+ N* e
正在找這方面相關的訊息
+ x' a3 R( c( q. ~6 @" |1 ~讚!
作者: poiuzxcverty    時間: 2013-3-2 03:34 PM
謝謝各位大大分享,小弟受用了
作者: jghn    時間: 2013-3-28 02:50 AM
謝謝大大的分享!  7 \6 [+ O6 \+ ^2 M9 X
- W4 P; y. x, ~9 X* z1 u6 B
真是受用無窮




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2