Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 93652|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。: }9 W! y, z, i/ r  l3 V1 p6 F
謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,/ N4 x2 h, L% z- v
要使用這個toolbox時,在hspice的.option中不能使用post=2.
8 v4 C+ D# I0 N可以用
- a: `  G8 e( R! J* J& I0 ~" ^.option post
( k3 P1 i. p, J$ {% ^2 w! o或是2 b+ D; M3 I. @3 S  J
.option post=1
* w1 W- a8 ?4 l* ~+ I/ r3 t但絶不能用" e  B5 Q6 D+ c1 t. r0 J% d
.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
* N! ?- M) M# r. ^$ i# H& J. u如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
9 h8 Q3 z8 l, s4 @( c9 v) O關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
9 R' y1 Y) f1 O# O, n6 _$ m7 {( {. h* z; _/ U0 s
[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用/ E$ U! o! u- ?5 m
就是直接用.print指令把你要量的電壓印出來
1 b; }2 O/ c, k9 h; n$ v. z  p然後再用手動把印出來的資料copy起來
' _, V2 _- L2 ]然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。2 B7 F7 t0 N# T. g, @6 X
) t1 Y6 G  t5 O7 M6 \! Z1 j* J' x
謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program,
, |5 ~3 E. R/ \, ]5 u$ ~3 ~所以  只要將FFT後的資料  做一些轉換就可以唷!!
1 r7 L0 v3 F" M" @8 d( ^: j, t/ j/ @將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"8 u# ^) C  ?7 T) f1 j2 K' x
就可以換算  SNDR 了!!
  P' U" {8 ^# K6 r8 \6 lSNDR is Signal to (Noise + THD) ratio?
5#
 樓主| 發表於 2007-10-11 17:44:50 | 只看該作者
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
6#
發表於 2007-10-13 08:20:07 | 只看該作者
我以前作DAC的MATLAB部份程式" i/ U" o& M2 P* l7 X
我想,應該可以給你一些參考吧! M" A  V7 H- x+ [4 [! o' {6 c1 H
5 m0 ~2 _0 t4 I9 m$ c4 |0 e/ |
% --------------Using minimum 4-term Blackman-harris Windows -------------( \5 M+ ^" A1 C1 h. y# R
nb=1:1ts;7 i2 I1 S6 T9 I  p
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
$ n8 P8 s0 Z$ R% V8 gwin_gain=sum(kb)/pts;% f$ D( g6 `1 g. ]7 w7 q
kb=kb/win_gain;3 A7 @) T) s. f* B

- Q7 M% R/ `5 a# y0 _8 l% --------------- Calculated fft --------------------------; G3 ^6 Q2 K4 \) |3 h
yb=kb.*x(ptsttfi);
7 r2 @0 @% |, w$ Ryk=fft(yb);
3 p( {2 A! w  Offt_no=length(yk);. ]$ m. O9 W/ A9 P; n
f=fs*(0:fft_no-1)/fft_no;8 Q& |$ m) H' e$ k
Pyy=yk.*conj(yk)/((fft_no/2)^2);
$ U. ]# F5 d' {5 i9 W" O  R5 d
% ~4 `5 \: K# x% ---------- Calculate THD ----------------------------
8 j* G+ ^: Q3 L: s' [j=1;: g! z+ E% S3 V" x3 E& Q
for i=1:1fft_no/2)
) M' i* q% K2 [$ F  e  x, A- ?    if (f(i) == (fi*j)). N% S! y# M6 s9 C
        HD(j)=Pyy(i);     %% find all harmonic distortion components
5 O* w8 }1 [3 I7 o: y, w5 W0 C        j=j+1;' R4 I6 W& r3 E" ^: \+ b* y7 r
    end1 y9 L( P& S) ?- c0 T5 ]
end( u% x0 h$ p, X; a  I9 X4 r" O
P_hd=sum(HD(2:9));% r8 ~, j& ?: @; k0 E
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal  ?# M8 L9 P" k7 H$ P, M; k! N+ G: R) ?
fprintf('THD = %g dB\n',THD);
) D- z7 D* {$ ?/ r* T# b( }) Q1 v- u# X; r9 `" Q4 F+ s8 ~4 w
% ---------- Calculate SNR ----------------------------
$ ?9 I3 Y( n* g7 t  }fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
$ L7 b: _5 [8 g" Q; Mfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);( s! E2 D1 a' ]& j# F
span=max(round(fft_no/200),5);6 A( U0 j( m7 V, h% ^
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));) A  n7 v5 P  O) \
- T" g/ m& P0 k5 U
P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;9 W5 R1 \: a$ F; a% A% c" w
SNR1=10*log10(P_sig/P_noise1);7 I8 Z1 H; W4 o% U
fprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
/ `- t' M4 E4 ~2 ^, \! A請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
2 q# w+ r1 J5 Q$ O! K' b
9 V3 g% B8 Y& ^3 ]0 F$ n- v另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
  f6 l$ @" h, k9 `) B; p"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
6 V, E7 C0 o8 V: G9 e0 Z0 @# F內容為:2 q- ^: n& s9 N. K
压缩文件共有三个文件:两个m文件和一个txt文件
4 L& _( a; B; \5 x* gspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
( H0 p6 Y8 N: T* {希望大家喜欢!! . H8 t1 W2 z! Z; {
附件為:FFT.rar
  j9 u, V$ |. @0 x, H+ Y4 N
; K* j( W5 d0 L; W) w$ 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卻顯示以下的錯誤訊息:
! e) s0 T" c. T- i6 D% I
! W4 ^. u( R  G- a# U??? Undefined command/function 'AD10'.
+ R# ~2 `; j9 e
0 ^( ?! y4 h- Z4 BError in ==> spectra2 at 43
' ^# Q7 o. M. I# Pd0=round(AD10(start:stepstart+M*step-step),3)/1.8);
; }8 W1 a$ n! ~8 |+ p2 [! E( c  @, B% B
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!( v4 X' Z! n# B- i/ {1 V

, P2 Q. l& Q: r$ D9 w( R8 H8 r6 T* ]∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~??????? 5 w, Z4 `+ S9 m- Y' Y

5 _% b5 o! ]* D! t: F[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:: v0 u# a3 T" ?. ~. t  \
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
- S2 L& I  z: t) e1 Y另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
) {( }& Y7 K0 U- h$ ?% z"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"5 K) K1 W) J! M# O) U/ K
內容為:
! H/ _9 R% ^5 }: A% Q: s/ }9 |压缩文件共有三个文件:两个m文件和一个txt文件
0 L$ @/ z! o9 t7 h5 Z- Vspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。8 m; {; i$ w2 j$ {; B
希望大家喜欢!!
5 D/ p* h  y: |4 Y6 j" {附件為:FFT.rar. R& l! K4 Q4 y6 o3 n

- b7 {; K- N9 o5 G3 Y5 s8 F% O3 V, Q我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:* }7 i  r! [0 D1 X

, s; C$ h* \! P0 n& g1 Q??? Undefined command/function 'AD10'.
9 x% }3 G/ C  f& h' _' q' C+ }/ J, P+ y( R) ~, i4 {
Error in ==> spectra2 at 43+ k0 J8 f- F! L
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);; A+ h9 k; `, o: S1 ?, D

! ~% h4 J+ E# G  i: N( y* o) T1 B由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????" l6 ^4 i: c$ y
附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式
/ f  q8 Z* m' m& b" a要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值
9 ?/ s" @, }0 y" E: r! E/ V( R故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算
/ D" d* v9 w. L5 O9 r3 l
; |8 u: f, N: \* H7 a! C在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
. z0 p3 I1 F! S0 q0 S& M* K4 ^, ~. e5 A( [
我看不到你的附件檔,故而實在無法作出評論
8 U  z) Y4 k; `* }而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
& h- R, S* o' Q從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????' n0 \/ F* `+ Y# G% j& ?  s
所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,0 c" g0 Z4 ?( I& o  X* m1 h
指令的寫法是否為:. H+ C" x& t4 V+ X9 a& M7 X9 d* M* K
) T1 k% [3 r( A, ^- `6 j* o* H( b
.MEAS TRAN DIGOUT% ]. ]' W( A5 \1 Q/ V
+TRIG  V (Dout)  VAL=0        RISE=2
4 U1 Q) F; _# v/ R3 Y# K; d8 }+TARG V (Dout)  VAL=3.2m  RISE=2+ {0 T& r2 w. F! W4 t1 W

0 c4 b" `" N( N, n/ C∼還請指教,謝謝∼
8 ^5 B% |, e8 \+ T2 s5 s) Z
" Y5 Q/ s0 W8 W8 F1 y! b- g. V0 L另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
: W: Q* u- B& p) p6 U, A7 j/ A' _
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-079 j! `0 d; K$ X

: A( A* k  X0 y" t3 QHspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?9 F* t" g! k: U& r
) G. R5 g/ U8 R9 }$ d1 ?
[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
  X. c, j+ Z3 {% Q1 F, ^* X9 b故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
, A' D% A2 g7 N" F4 [9 Y: z: ?* W) ?所以,請再檢查一下你的HSPICE檔案吧
0 I7 Z0 `- j. b5 U( X3 N- i/ Z
9 y4 ^  z- @0 H0 ^再來,你的.measure指令用法沒有問題, ?: R! W. ~: U
但,你的取樣點及時間似乎不對* Y# k: p0 d, [: V- M5 F# r+ ~6 `0 q. h
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
/ V8 f; b& }" Y% b( R( F" r" L.MEAS TRAN DIGOUT+ o7 ~6 }7 L" l' T! r" ?
+TRIG  V (Dout)  VAL=0        RISE=25 q2 E# ~0 q6 P4 r  e2 Q! P
+TARG V (Dout)  VAL=3.2m      RISE=2
0 |# W# C3 X' G6 w, F3 _! p寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
5 D, _4 a$ X. ^* {% P' n那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock3 Y2 b, N" {6 Z+ t* l
另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2% [& ~# k/ ?( w) i0 R5 n' g
再者,如果是用.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程式。
" T; h7 c1 @6 p* z. l5 I% y* T" o9 b' Q% ]
∼感激不盡∼
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
' ~* `$ O+ p  \! U6 a/ g4 }3 }) X8 A, P4 X" H8 S& m( ~8 `, H8 \4 d% e$ c, b
.MEAS TRAN DIGOUT
1 S; [' x3 S% z+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f/ ?7 t' C, s9 }
+TARG V (Dout)  VAL=0.976E-7               RISE=1
8 }+ E; P4 J, a3 d3 S$ I/ v) c6 b( r' O, [' B
∼還請指教∼
+ K( S" P2 }5 k8 x4 t2 e. `程式重試的結果,*.mt0檔案只出現:
) l9 Y, l; R/ x4 |digout           temper           alter#            7 {8 P/ Y. F* U3 }* D' p7 E/ y; H, [
1.890e-12        25.0000           1.0000         
. {% P0 o( p% C6 u* q不知是否還需修改?
7 `' A0 @$ j/ X" P' V, R% U0 ^5 q- x5 p
[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題& n7 a6 `: l! @% V* h
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息5 M' p- E! U6 P2 k6 j2 V' Q
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
/ r& `/ j) A+ c: r8 t
# L0 e/ |, i$ P4 V3 \再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock
3 R/ ^0 z0 A/ V: s/ S  m( P0 K8 W但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
: U+ \* W# m+ @! s一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
  R- g0 Y+ s( v1 R5 z; `$ Q4 [& r& t再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
# B/ b1 z* v2 l$ }' ?) F: m' l舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
& y# h( _% `. C.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
1 f% z0 g# Z% m: u9 K9 u; d! o+ x6 ].MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us2 w; L0 i$ a4 ?9 g
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us+ I& r% m" x: _5 c% q, R
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us3 U& Q# x4 D9 H4 \8 D' ?7 H

( u' y9 z$ S2 I9 y6 P: p.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us' |5 r3 u' B( L
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us5 l+ U8 ~. w0 c5 a% P- {8 R
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us* R, C4 U0 I+ a# G, Y, a* }
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us/ z! w' S; k9 h' U# G1 R8 @

, e8 v+ N* D8 q我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code/ u5 E) |+ i2 F* R7 `4 G- k
我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法
8 R9 F) M. Y) v: _" Z
% O/ l; `& l2 w1 _0 g' t8 K  e最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
8 |; [1 G( }0 ~可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
+ O, |; I3 ?: A9 ]我大概講一下我的架構:! |/ c# H6 g5 a, S% H" s
我電路是使用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的指令寫出,指令如下:
7 V: }4 `! |. {. \; @* Y, LFor Fs=10.24MHz:$ D/ z. Q& v: a7 E. e0 q4 S6 ]: q5 w
V0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7% E, D) b+ ]# h
V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
( ]* A# U/ h) j8 o2 jFor Fs=5.12MHz
$ g& \# [. I& F! d* M/ HV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7
% t- `" j+ S- Y- E5 ?7 ~V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7$ A8 @* l. i" M9 `6 W8 g! P: t
另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。- N! g3 u, `; P$ O
如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:9 w- \$ t! Y, p3 E
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us
+ u1 Y) y0 T$ u( o.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
! j/ t& B: Q; M3 P+ |/ y& b+ _然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
& k' ^7 n, B/ U5 x你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
. n" D# [( H' T
# D! m" S5 w7 o3 k- M2 ~1 Y* x. t[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
' E: ]+ C, i0 X首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來, \: k  j3 n1 y0 \. W
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?8 [3 s, K2 R2 o3 i, r
/ b8 Q3 Q2 e" S
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪6 w9 o0 A6 T8 X+ o4 x; ^
0 n+ M$ A' ~$ Q% E7 [1 b
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要7 [# B" M- {4 n2 i. o" g0 n
7 t6 {2 X7 s' R4 G; A
clear all
: u) L  X) d- k+ ]( x# hfid=fopen('dual_measure_rms.txt','w'). }0 y; z# b' o4 a9 m) d7 N, O8 j/ s
for M=1:1:1024$ }) `: K; m) k+ K
       T=M-1;
7 Y- |& Q+ @- y. ?& e6 S! t0 w" O       from=(50*T)+45; %DUAL DAC measure time5 ~9 U) A  R0 y  A+ Q& x3 }4 U% R
       to=50+(50*T);' t8 p: L+ j" a+ |( i4 a7 g# x( F
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);+ o! G4 O8 u6 N. V  R7 j
end9 P+ \, a, D2 x5 m2 n
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
' V: ?! b4 R: J4 K這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧4 i2 c4 r" ]( [: K7 N4 @
這樣以後模擬FFT就非常方便了
- p" O# I# t- V看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間$ h( O2 f  a$ U  x
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧
2 }! U. r: j4 w只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
: ]. y/ h  E' t9 h/ v我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:
. A* E  }( t7 O( L% ^4 E( s因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
0 }* Y3 ?( }" N3 K/ }3 f, V且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。* }% K9 j3 P' A& F
另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
: N+ g% ~, V# w3 C, g" S: [, D3 F. E依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:8 h1 R! Z: ~" X/ D  [. |
clear all
* Z! C# c7 E; \: c/ V3 g4 Zfid=fopen('sdm_out.txt','w')
' @: w. Q4 I4 L' \9 @2 sfor M=1:1:1024
8 ^' c! j1 S. q8 A/ [1 v4 v    T=M-1;/ h) `2 T; g' q- G$ p( b
    AT=(0.1952*T)+1.026; %SDM measure time
; r  s- e5 [* w6 R, o/ f9 ~    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
8 J  j8 F" r* kend! ~7 g5 s* o% F9 @0 Q
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
: S, t3 H. L0 t8 q5 `$ T想再請問的是:3 a) N9 L& x2 a7 _7 e3 c
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:
# S; R1 i* |! hload sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM/ |" L" x, v! h8 D$ a
然後就可算出SNDR及SNR以及畫出圖形了嗎?
$ J- N$ K- a; v2 X( t7 H8 e請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-17 01:38 PM , Processed in 0.159520 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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