Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 98994|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
, j9 A, \7 [: j3 n# J謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,) d4 ^3 j: o2 [1 G* @. R! Y
要使用這個toolbox時,在hspice的.option中不能使用post=2.
* V0 e  S2 S6 I" ~可以用- k$ h9 M! U3 z: q1 y3 ]0 d9 {
.option post
3 A. c: Q/ `8 `5 j或是0 |% |7 U. x* P  c
.option post=1; h( d5 p7 \4 L: A+ w& y
但絶不能用
8 F7 @) l8 Z, D* P.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
7 r8 V4 {! w5 a8 p# _' l如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。5 @) [) ]: I) ^5 `& k# m" J5 a
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
& R* D/ S+ |6 ^/ {/ Y; |
2 I: R. d- }* Z7 F+ l# [[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用  w! @3 Y. S$ O8 ]1 {
就是直接用.print指令把你要量的電壓印出來6 d# J+ t% e2 s3 F' U( q
然後再用手動把印出來的資料copy起來
- Z- B/ _: G. T' {) T5 P: a然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。& o. k* y1 `4 Z1 W6 r! e' \

/ H- I1 z" w" }1 C/ V6 [$ F' T謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program, ( ]% O! c% J5 z% h0 l
所以  只要將FFT後的資料  做一些轉換就可以唷!!
  b( _6 `, v& A9 d5 O3 Q5 _6 w4 w將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"$ u7 c$ S2 ^, S! [2 c$ i' M
就可以換算  SNDR 了!!7 L/ x- P: [' ?5 L- E# }
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部份程式
! p- D; T- Y' W7 R+ X) S( R我想,應該可以給你一些參考吧
# M) w" [! q1 x0 [6 B
5 ]1 N% y) T# }4 Q: w% --------------Using minimum 4-term Blackman-harris Windows -------------
8 X* D0 t/ Y! X) Jnb=1:1ts;
/ M  K# m/ j( l- [# ykb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
' S& }( x5 z, gwin_gain=sum(kb)/pts;7 v# ~$ }1 m! @4 l/ d
kb=kb/win_gain;
% \# P( ]3 T* j& f8 ]( I8 ?* z
1 x' F# G; w! d" P% --------------- Calculated fft --------------------------$ u% `- A  N  b2 Q9 ?) D" H2 s
yb=kb.*x(ptsttfi);, l* p8 l* F" P% \% w# v  j& p% e
yk=fft(yb);  _* C& r+ r6 p8 `
fft_no=length(yk);2 v5 {4 \/ w* A* }8 u( F( i
f=fs*(0:fft_no-1)/fft_no;
* X1 t5 I$ o6 O* sPyy=yk.*conj(yk)/((fft_no/2)^2);9 M2 w, {+ L' l

! ~/ m& w8 i( w/ y/ u% ---------- Calculate THD ----------------------------
9 U2 Q+ O) X( G8 N8 K  V' {j=1;  k. Q" U. n1 j$ B, n8 p
for i=1:1fft_no/2)' E6 M* f- O) s/ j% H5 Q" a( }
    if (f(i) == (fi*j))
1 Y; Z# @, K+ x        HD(j)=Pyy(i);     %% find all harmonic distortion components2 o" w0 c/ o/ K% D* s; ?. y
        j=j+1;
" f. O1 m+ ?( q: |8 g$ }% g& [( q    end! U: s, Y& t& \+ U
end
# o! v3 K+ s* h6 Q8 _! a, \5 J. d2 RP_hd=sum(HD(2:9));  f: G# d# x. v* H. y6 y
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
0 W2 B6 ?  x5 z' f0 |" Xfprintf('THD = %g dB\n',THD);, M( T1 s# @8 J

2 l1 e$ l% W; T6 `" i. k  M3 S; z% ---------- Calculate SNR ----------------------------6 J" u: l: h2 h4 u( V' H  w9 O
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));! q8 e! m% P' Z$ h1 w. ?8 X; h
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
* R% r& Y% l+ g; H3 r1 D% J- Espan=max(round(fft_no/200),5);* |! {: R( y% F; w& b
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));* s7 s: z) K' M& D* B7 l- y

. y: I+ v6 T& }% D# @( QP_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
$ l) L4 W, V9 ^' GSNR1=10*log10(P_sig/P_noise1);
% A$ H% H/ R% W( I/ m6 xfprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:' {* ^# p9 i6 F0 k4 R$ m! o
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
2 a2 `+ M: m6 G8 }* m
- M! m/ S, }+ T2 g& ~另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:/ N/ |5 h4 I$ Z2 q" V
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
3 p0 B, |8 S+ B" R7 _內容為:
3 V$ }, ~( x4 U0 R/ w5 y压缩文件共有三个文件:两个m文件和一个txt文件
3 Q  E8 G$ G! n9 Z) Tspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。1 e/ d8 }: p- p" g: _. X8 }' K+ \. G" D
希望大家喜欢!!
+ E  J4 t2 q. A4 `9 R" f附件為:FFT.rar+ `0 K6 p! r$ [" }" l9 e4 S
( x! }; N5 n# |! S3 E/ F# h5 Y3 N
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
' M0 A$ c6 ^0 Q# o; G
" }7 x9 ]9 ?4 \2 x  u: J4 E??? Undefined command/function 'AD10'.6 c6 y) ?, ?( E& M2 B
" N) d8 o1 o( L$ V. I( {8 W* w
Error in ==> spectra2 at 43
5 B, C% ?7 H0 F3 Q+ ^& D$ n$ jd0=round(AD10(start:stepstart+M*step-step),3)/1.8);: \3 O5 U: e- U2 ?+ s

+ [4 C% i: g( a6 n& r" [  T! T由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!4 f" y; h& F1 w0 s! X
7 o8 V9 p; l8 G/ B- b' p
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
+ L  e# `. d. M
7 I: y" J, C2 X: Y* }$ {( ^- {[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
7 |  w- v* j2 U: C" l請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。   D' |( B  w7 W
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
( r4 G/ G; J& ]! M/ z9 F# T"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"" C7 P8 O3 z8 [2 B- b) S' r
內容為:
9 d: l- r- w  K6 _. m压缩文件共有三个文件:两个m文件和一个txt文件3 F0 i6 b4 u2 c1 I3 E6 v
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
6 z! D: \8 p; }; @希望大家喜欢!! ) f! N3 Y9 L8 t# X+ @
附件為:FFT.rar
. A0 z8 U9 I/ M4 w
' `' V  n) H- p" ^4 Z我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
/ ?1 j8 i1 E& U! B, i% y
- x8 y. }: \+ q$ v4 O??? Undefined command/function 'AD10'.9 k* E7 w5 q2 t, a9 d
* ]& d  A4 @! Y9 Y& t
Error in ==> spectra2 at 43
; B! q6 C# `4 T" ld0=round(AD10(start:stepstart+M*step-step),3)/1.8);
2 I. O8 ]  J* j5 E
1 `; `! V  \* A. w7 `! E3 O由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????  O, L7 G1 }8 N& p+ y
附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式
' C' b; X# L9 A- w/ @要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值
" K5 H  o( r0 f, a9 t故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算" X/ P, W# v" F, C

2 U9 }9 y, y, }  `  F9 O在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧$ z  r- r2 |2 S1 d5 \: ~& Q3 m

' k3 n' e9 m0 W/ A我看不到你的附件檔,故而實在無法作出評論
. [: @4 b- I9 C: \* b5 U2 `而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
/ h. {  t" C+ A$ p% _7 [) t6 i+ R8 G7 ]從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????
2 d( r3 J& \( D6 q所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,
: U9 y( I4 B2 Y, b7 ~( U指令的寫法是否為:% |4 E8 V! f# `& O7 J6 F
2 x$ D( k' j2 U+ T1 o  h
.MEAS TRAN DIGOUT0 m# G$ [# Y) }7 k' q6 Q( M/ X
+TRIG  V (Dout)  VAL=0        RISE=2
' U, y0 a: ^5 s! j+TARG V (Dout)  VAL=3.2m  RISE=2( Q9 o: n) T# E* ]9 y

  A  V% A4 x- U$ k∼還請指教,謝謝∼
- _. G3 v% @/ o+ p  k0 b6 Z
7 U' [9 n& E: P, N另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:5 J5 m. m+ o1 ?  s" i8 y

3 |0 w2 Q, r# Q- H$ x% j# r! F2 jdigout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
2 }* ~3 B; t; z6 Q/ X* p7 A' H' r# ^5 ], e% |2 R* N; ~
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?+ Y* r2 ~# s7 a$ W2 s# J
/ k) {8 |0 I1 a* y' g4 `  Z
[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔3 p6 |5 m) B. z$ `1 [6 x. y3 v, h2 `
故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料; ^( v! y. `4 S6 Q/ T8 _
所以,請再檢查一下你的HSPICE檔案吧7 Y8 N7 g/ H$ f( v4 T- E  x
* s. o, W7 |, o7 n# E
再來,你的.measure指令用法沒有問題; c& F( y3 V+ O4 C4 Y
但,你的取樣點及時間似乎不對, I; _1 I4 T5 L! u
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:* Q& T4 R# e# h- c4 `
.MEAS TRAN DIGOUT2 I- Y* D3 ~- Q6 |4 D
+TRIG  V (Dout)  VAL=0        RISE=2. A" f, n1 W- G5 g
+TARG V (Dout)  VAL=3.2m      RISE=2
' T# M7 o( i* F& l寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
& o. r: E, z! d1 g- D5 x+ d那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
) H1 w  H$ l2 [) X另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=26 i& k/ f; Z% h$ c; B8 v
再者,如果是用.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程式。. n; S; O: h; a5 D

  G9 p: U$ q, Z7 d/ E0 {  ?∼感激不盡∼
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
' l7 T3 R+ R4 H1 D: j! i5 M4 _3 }) X8 A, P4 X" H8 S& m1 Y" a7 ?7 |1 K! G4 R" O$ d
.MEAS TRAN DIGOUT
/ r  P9 @2 o! Z+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f: D7 v9 w% ^$ O2 J; o) k7 t
+TARG V (Dout)  VAL=0.976E-7               RISE=1  s! O, |. ]+ v4 H7 x* Z

, m* a- M- |) ]4 L  I1 W( G∼還請指教∼
6 n1 l' g/ v* V9 y5 e) l+ x: z9 Q! u程式重試的結果,*.mt0檔案只出現:
, V$ d( Z+ F* L. l" i  B. ?: ]) {digout           temper           alter#            + D5 ~9 S3 S. L$ ^2 [
1.890e-12        25.0000           1.0000         0 K2 ]' O) a6 |" S' a
不知是否還需修改?
1 d$ E" G- j6 E) g3 K+ S5 L# P
; n8 S- n" C3 q+ |1 c9 A[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題+ S+ h3 q5 T# O; Z  R
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息
2 L5 m8 v6 @& D% t所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
0 E, J) @  O% j) L; i: a4 X8 o, F4 O2 s& y* m
再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock' {2 b9 J) N- |& k' b$ o  T
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
" O+ M& V2 r8 H- W一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)* E& ?# @' X" D4 {# M, S! A% Q
再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
" o2 i9 Y# k7 l/ X; t舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
! ]% f5 z% O% F' b.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
3 p: E0 w' Q- m  z: R.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us
$ v0 C/ Z( N! b" `( e8 Z, [' s.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us% Q8 B  c' k5 A- Y, Z, x
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us& X4 d( ]! T! K3 z1 h

& o1 J/ M3 `5 L4 [. V.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us
6 G# n, d8 s+ J.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us
1 J! p1 D" R9 `& H.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
2 k4 v5 m" x; D.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us- x/ O6 a- |( l) w

$ p# m2 c1 M2 d. w& R我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code9 y  O% A! f' Z8 n8 p7 A
我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法# I3 w6 T: q3 ?, y% d, r
% i# G- e2 o8 {$ m- w
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
  v; R" x) P# O9 J/ S* Y, O可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。$ N% A% O7 |. i7 P
我大概講一下我的架構:# M. j) h2 h! s) e7 A0 ?
我電路是使用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的指令寫出,指令如下:
- u; {0 {! G/ v' |& `For Fs=10.24MHz:
/ q/ g( n3 O0 S% ~V0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7# N* l) x' z0 W: G2 l$ p
V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7, I  u% ]" Q' Z$ Y7 a: i$ L
For Fs=5.12MHz
' `8 B; U6 E8 j* r: N& s9 S$ rV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7
( o6 [# u* u$ K8 z2 A( O# A! y% hV1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-75 }1 i% t7 q4 P2 J( s* E
另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。
7 j( R' l; f+ P- g! X& t如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:: v$ T7 m  x) T
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us$ A' }+ \4 ?$ y: F, U
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
, j* B3 k0 }. P5 B然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
/ I0 j% A/ z2 F; T5 I4 \2 y你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!  y0 x7 H# G4 a! T# K8 w" N# K( i9 S
: l: Y: K4 f8 u/ x7 W3 n6 e
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方' J$ N* T. C# t$ |2 G) [3 _5 \
首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來
) m" O7 F% Q( [" u: Q而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?
9 e1 B  f2 c+ E; p" a2 q, G- F( c9 T
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪
2 K4 A' ~5 d' k  t! g$ {/ j1 V0 c8 n8 n
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要8 R9 ^. ~" M5 X5 Q- _
6 V6 Q+ `1 a, [4 Y* R! ^
clear all
2 Y) j  }# J! @7 r$ |fid=fopen('dual_measure_rms.txt','w')
8 W( Q9 m5 x" B- J7 s  u5 nfor M=1:1:1024
3 h- T+ z! U8 Y5 Z       T=M-1;# C* Y& ^( s% m- g; h! o$ O
       from=(50*T)+45; %DUAL DAC measure time
# [+ _6 v& B, q7 m3 n% d4 r+ f# w       to=50+(50*T);6 S' r+ Y# y9 b6 A
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
2 q. c& [$ @$ j% P" vend
% y  Q9 K5 A" x" B' hMATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
  i; q: p; s+ u  A; e這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧" H# t$ J3 L3 E% o8 C( I/ [# x
這樣以後模擬FFT就非常方便了+ l) C- Z, ~, k0 T
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間
/ t3 |7 m5 w( Z( d' s然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧2 f% v; L( g' t: g+ Q
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
2 x7 R- s. K7 T% F% B3 Q& [我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:
3 q: u) z4 o7 z0 G因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
/ u+ A; `# ^8 n# ^8 |& J4 s且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
4 b* Y: w! R& W8 h8 x. i" N# B另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
! h% V7 p' y/ P  c# j' x依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:$ z( H! i1 f+ @$ u
clear all2 e& [0 `5 P! Q2 a( b  |8 @# g0 [+ o
fid=fopen('sdm_out.txt','w')
& l# n. O: k3 w6 N  r5 vfor M=1:1:1024
& ~4 h- Y% W2 ]! G$ d* {    T=M-1;
# |+ `5 o7 Q( n% K    AT=(0.1952*T)+1.026; %SDM measure time
% v; G8 L6 n5 k& S6 E& n- j    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);8 @6 N/ }0 H" T7 f$ g
end
4 l3 Y' |6 M5 r( I$ h; f試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
$ d* l$ h# A! J想再請問的是:
# ~) _. G3 Q; n, t; D( B! Z5 h當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:- Y$ I0 Y. s4 E; z7 X* h2 @; I
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
+ m( c* b7 y% A然後就可算出SNDR及SNR以及畫出圖形了嗎?
' Y* ]' c9 ^: F, f# E. c請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-19 06:46 AM , Processed in 0.209012 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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