Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 93616|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。6 \- v. n* B+ ?$ c, c
謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,
- W3 ]' n4 A7 ~8 B( |要使用這個toolbox時,在hspice的.option中不能使用post=2.
' O+ V9 \! q0 u8 t可以用1 K  }0 z, K, k
.option post' |% t; a9 z. v1 T$ s, O. X7 b
或是% L/ d2 v) u2 t6 D  i; r% h
.option post=17 ~1 I4 z/ J% B3 f9 G
但絶不能用
; a  d+ g; J1 R  t4 S+ n.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:) y0 [! K- R+ f. I4 x# B4 u' @
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
2 g1 \# @) |3 Z關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。. _: v) ^# h+ ~! h, o( ], o& N5 f# z

) H4 L1 C4 B/ `, I( }; p[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用, T* B2 V) w; B8 m3 L' v& e
就是直接用.print指令把你要量的電壓印出來. }, i9 G0 w/ t9 t% D
然後再用手動把印出來的資料copy起來! h9 A8 M7 G4 O5 `+ y8 z
然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。6 l# G  p; |# [# H7 E9 c
: |# U" ?: A. A* T7 w$ R2 y
謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program, : n/ p  J" r$ D; O' C! g
所以  只要將FFT後的資料  做一些轉換就可以唷!!' R6 b4 i( N0 s9 \) {7 e
將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"- N& {  G2 _# Q7 m" D& a
就可以換算  SNDR 了!!  o# n$ s( a5 K) @
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部份程式6 ^5 l/ F8 I3 T# k3 e" z. t& c! u
我想,應該可以給你一些參考吧
1 x# L7 \" i- S% @1 f$ Z7 _& R2 e0 o% \/ M1 C4 D5 P7 V- p
% --------------Using minimum 4-term Blackman-harris Windows -------------
) K% q% {$ b1 U4 T' unb=1:1ts;' j1 G7 G/ i' _: k3 H
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
1 b( ^8 X6 |# r! ^! M% |- k) c9 dwin_gain=sum(kb)/pts;3 {, |+ \7 q( L$ V
kb=kb/win_gain;
* V. H2 p3 x" F* d
, n0 ^- D( c) w2 p% @/ j+ p% --------------- Calculated fft --------------------------
) Y. N; n: A* |! R" @yb=kb.*x(ptsttfi);
0 o% h; s+ |5 W9 a$ S5 Z( Dyk=fft(yb);
! U2 {6 F4 x$ ^( j2 J5 vfft_no=length(yk);" d4 }; F6 M, n1 w
f=fs*(0:fft_no-1)/fft_no;/ H# L! h: {5 M, f
Pyy=yk.*conj(yk)/((fft_no/2)^2);. |9 q7 {) E/ R7 U5 F
. g$ y+ v9 `7 G3 Z. R: r2 G  k+ ^( t
% ---------- Calculate THD ----------------------------
6 [9 O8 P! L# l* G; |j=1;
8 L4 }$ O" a1 a$ u9 Jfor i=1:1fft_no/2)
3 Q, s: Q# j; ?% m, O    if (f(i) == (fi*j))# H: O: z) r# B5 t8 a" z
        HD(j)=Pyy(i);     %% find all harmonic distortion components
1 \* u5 ]! N  Q" o3 [/ N- e% N4 ~1 A        j=j+1;
8 Q! O6 P; ^1 N, s: d    end
, s7 G, m/ X) v$ uend) j$ [7 j  g: A( g' r9 U
P_hd=sum(HD(2:9));6 V; D/ C7 V4 T& x
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
; g/ f0 I/ X; E* b6 Kfprintf('THD = %g dB\n',THD);  J' k9 G0 P% B

6 \" [1 s; Y( T5 z% ---------- Calculate SNR ----------------------------
7 s  f- i; E0 |. `7 q& wfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
# J* S( X$ ]4 kfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
8 X  o! Y% K1 @span=max(round(fft_no/200),5);
  t# j. k, B0 A9 F& CP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));) Y5 w8 |3 h( N: W% t

5 \+ }/ u: t6 b9 D# O! s0 lP_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
% T: F: ?& T8 {, m: E$ c% P- c4 rSNR1=10*log10(P_sig/P_noise1);
, G! R' j" l6 x  H- C/ Tfprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
" W* w6 _+ w/ ^: S' W! x請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
, {: b+ N: R% M: N* Z& s3 v: J! C% O1 V
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:/ B; r$ q" r9 p9 f) l: N8 V/ y
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
! u$ F! X1 Y3 \4 A+ f) R' O內容為:3 p" w$ V$ Q# J
压缩文件共有三个文件:两个m文件和一个txt文件
  b- d: t4 ~% c- c' }: P0 |3 }spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。' n; w+ d8 U" ]0 P
希望大家喜欢!!
' A. l% E; O. f: m附件為:FFT.rar( A" ^- k3 T* L6 k+ k

4 u' R( }" M; @  S" D1 [& z2 x我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:( r- O+ B9 F8 a  @. J$ s$ Z
8 W7 l/ l+ n1 A6 }" C/ X) q
??? Undefined command/function 'AD10'.
  d& Q( {2 c3 J0 q* {! m0 {  @
' F. K/ R/ T: v2 R- D$ J8 ?8 eError in ==> spectra2 at 43
3 R/ T8 a! k) {9 Td0=round(AD10(start:stepstart+M*step-step),3)/1.8);
/ @7 R- c1 R. @# R! w2 }& j3 y" x! ?& ?- {* \5 ]
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!0 {- Z2 n" M( E) |, T* U4 w
  q1 m. y) L. q" l; G
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~??????? 1 r8 E- U9 @, s& y& C3 q( h

, q3 E$ x! t! x% n5 p( w- z6 ^[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:; R( M; k2 P% }2 a* P1 V
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
8 O- |( x/ x; [, i另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
0 |: l% [: c6 Z/ u, u% G$ L! b"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
2 J9 ~$ l3 `: M3 w' o內容為:
+ i# T( }% q; }$ E/ f压缩文件共有三个文件:两个m文件和一个txt文件1 s) J. T& t7 B
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。& F1 Q9 K# K9 t4 N& ^
希望大家喜欢!!
9 V2 o' ]# Y/ V附件為:FFT.rar
* f. q; d9 v. `* d  P* l/ g 0 [4 T, J* D( D5 B! W( e
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:( C$ M) W, v! u7 y8 e

- {) B) H0 t0 p1 ^( t' W??? Undefined command/function 'AD10'.: U# i- ]0 Z# @8 ~% k8 ?

9 B. a9 B2 |5 |! ]Error in ==> spectra2 at 43
3 A. i, u: K9 c$ a/ t& Sd0=round(AD10(start:stepstart+M*step-step),3)/1.8);  P2 b; r5 C* D( ]$ `5 o. r/ y
. G% l$ Y3 v) c* P8 V6 j: }; ?
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????$ A+ _$ r  w* I3 }4 j5 ?
附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式
; ?3 `1 ~3 N2 [' b1 V' d要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值
  q  d  i: b- `; N$ S, K故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算2 O% C7 D/ z, }- Y! }$ I( a; v
! ]! ]' d. T1 P1 b0 e2 F. ^, }/ e
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧/ r5 t$ S6 B7 M' i& A" M
7 i/ H% y. E( m7 E; f! O
我看不到你的附件檔,故而實在無法作出評論
9 Y* m7 F0 j5 Z3 {! P4 |' m: s而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??0 P7 Q4 N) Y( P3 d
從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????
8 n8 }, [) o$ A+ v& R8 ]所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,
  j) x7 H: g8 D: O- w* G指令的寫法是否為:- C6 V) q* n8 j6 {

  a- {5 U  |3 I, K& ^- x  g8 }.MEAS TRAN DIGOUT
: F. O( Q. w( `0 e" |+TRIG  V (Dout)  VAL=0        RISE=2
+ \' L$ w" o# T" _! `4 I3 {+TARG V (Dout)  VAL=3.2m  RISE=2
: s% A( U5 [7 `7 G
9 Z3 l& _8 }4 D∼還請指教,謝謝∼
3 a0 j! N6 P: I
/ _3 b0 k! \6 G1 e另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
$ T4 v# z, q" x6 d, T# O. i0 i% n: l$ j; d8 K/ N, v
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
  x- ?; d$ U7 S  f  v0 U" _& x2 d5 a( N
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?
9 c4 f+ K1 G2 ?8 l
5 K# P# D% \1 F, Q* T[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
% @0 I' K+ x+ j故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
7 p7 G) O) U2 e1 b% n, a所以,請再檢查一下你的HSPICE檔案吧, S5 D) I3 j6 r* f* P6 G! Y
0 r+ @! \' Z! r0 Y" g  |
再來,你的.measure指令用法沒有問題
. j3 f: Q. u2 c& |: e. Q7 w; O8 I但,你的取樣點及時間似乎不對7 z4 P6 G) _6 h: E: a3 p
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
8 D0 q' m9 c2 {  g.MEAS TRAN DIGOUT9 H0 D7 Y$ p0 R2 ~7 z
+TRIG  V (Dout)  VAL=0        RISE=2
+ `7 T6 A; m$ e# N+TARG V (Dout)  VAL=3.2m      RISE=2- T2 Y4 I. I$ w' l) _
寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話6 e  Y- d) J( b8 F! U/ l
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
$ }& I2 c  P6 D3 ^6 A8 G另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2/ r% _+ N  P: s
再者,如果是用.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程式。( U+ ]' ?+ `4 ?( n/ u5 P

, X1 D, u  Q9 c9 [6 k2 \∼感激不盡∼
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
& `& ^' S4 R8 l: O  B) x0 |3 }) X8 A, P4 X" H8 S& m6 X) K8 {1 A; K: ]. {1 j! M
.MEAS TRAN DIGOUT. j/ h' g3 [7 i" ?# ~  O1 s* W
+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f, x9 a& w( I  H7 H8 i2 M5 z
+TARG V (Dout)  VAL=0.976E-7               RISE=1
% h8 {# h3 u( p- ^( Y" d8 U8 r
3 c( e+ p- }7 E/ _, i∼還請指教∼. h3 G7 b/ @0 w- R- a2 f
程式重試的結果,*.mt0檔案只出現:$ w! C3 G' B% d8 G: J# w  o
digout           temper           alter#            
7 i. |: t+ |# H3 @% A0 V* w' P1.890e-12        25.0000           1.0000         5 X$ I8 P6 p' y
不知是否還需修改?
7 _, V3 l8 `1 n( T$ O* Y
+ y& D" j6 |% B5 y  I9 o. t[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題- W" G* f) h8 U; {/ K  x
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息
4 U, u) G3 k8 ?( t; O所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
  A: H2 c5 ~& E" p5 f, N
; K% a1 W' H9 U- v5 Q+ X3 C. y; `再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock% n! U- A2 ?& I+ K: s
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock0 f( I9 o9 v! ~! w9 ^3 |
一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
& N* n* O  v. W. J8 c再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???* L4 ?; f' D4 g1 |; M
舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
2 ^; {2 p* O9 a, D  V.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
) e; c4 y0 V# x! x8 {& w.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us" p* M* G2 @, F: Q! r; C3 h& Y( q% ~
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us9 q3 t- c0 L- V4 C$ K" @
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us
  H3 C( R( V4 I% c) ~4 b# f9 M
1 f  u# M: f( Y# e- q.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us
$ v' S/ X9 R2 N# ~  W. b: J.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us, j9 p; w# L. J& `
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
1 z& @7 e! ?$ ~) i! y4 a.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
; _1 ?$ L6 O/ W  A0 g7 p
$ o( T( q8 g; H0 o- M8 e0 ^2 F1 x0 u我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
9 p) ?1 {+ O7 N+ k$ Q我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法7 y- j) H: b& s, p- i/ u
4 Z! M; {/ w; f! C& I; ~
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
( e4 s+ L" K' j. R可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
6 K+ n/ e- l5 e3 B  V" l我大概講一下我的架構:; L. a4 e" v" M& |3 U
我電路是使用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的指令寫出,指令如下:
6 ^7 C1 ]7 T0 x+ t" Z' I9 ]4 cFor Fs=10.24MHz:
" D! Q2 m$ n2 A$ uV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-79 D# t7 x9 n9 o- B% A) H
V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
! K$ J7 F+ v# V7 jFor Fs=5.12MHz
- {8 L0 B' d2 ZV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7# f+ ]5 u- Y; u2 o9 w
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
% v7 {0 C" Z2 q% _7 I2 n  g另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。( W0 V; Z' k+ ]" w7 a2 N9 a: ^
如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:- c. |; b! S; B# @
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us
  I' X' S& p. A! B( M! f.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us+ q  b, S& E# k0 c9 X; d
然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
* O2 T' s8 N3 H2 y4 K; c+ K4 b. z9 X你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
7 h) m2 _* a( ^2 e/ G2 H$ g5 w4 K" K: ]) l7 f
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
. k& l1 E' \! g8 P首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來
# |6 i0 q/ Z* X4 I  M2 n* Q, ~而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?. _6 U, U; p" m' M

5 m. A# Y  @: o/ q# S再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪) N4 N+ Q/ }' k  z8 z4 P  _

9 P+ r! p4 O. KFFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要( N, K+ G- [! j& i% X. z
5 c) n: N6 [7 f! D
clear all5 S/ V+ I' ^* c
fid=fopen('dual_measure_rms.txt','w')) w+ l6 l  q' q* U6 r3 C( a2 j9 t
for M=1:1:1024
; X  _4 t4 w' ~3 v' O' l       T=M-1;6 z/ B" u6 g- ~9 \
       from=(50*T)+45; %DUAL DAC measure time6 n* }6 a# U* k# a
       to=50+(50*T);9 D% p' r6 L* g% b/ V
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
0 \' B$ U" ]+ v: P' J( e8 Lend4 [2 v' E/ r% m2 ~  A0 W! I
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
$ d% J4 Y1 w2 K7 c4 C; Y; @6 V這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧
0 r0 }) X% e/ k' t8 @' ]; Q這樣以後模擬FFT就非常方便了4 m/ S$ T2 ]) ?" K7 W4 V" j
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間
+ `% O3 R+ j% d! s  [然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧
3 a; U/ L; N# J" a0 q4 F: ]+ H只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?! Y& w0 J- g9 m" F& y
我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:
* t$ }1 L9 K# F8 o1 j9 a1 U) b因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。0 s  M1 X3 I9 X4 ^  g; ^/ j7 Q, g
且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。0 Q  ]) O0 t- h8 I
另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
+ p; X& d1 O) l" z: y$ E( k. m1 ]依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
' x$ P5 [* y" l  x4 vclear all* }/ |1 P/ o4 W
fid=fopen('sdm_out.txt','w')% b) o" Y- o: |0 e5 g# j4 r3 B
for M=1:1:1024
1 s) [4 \4 \+ h. c    T=M-1;( g9 i+ ?' w* {& o3 E/ S. r& ^
    AT=(0.1952*T)+1.026; %SDM measure time1 I" D$ X9 J+ P  n1 E: w5 m: s; C. @
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
( S; x. b/ L& ^  o& K5 G0 B( ^end
* v8 L$ V& A' A8 k, w試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
8 Z' O% u" |, D4 G, `, W9 |& X想再請問的是:( R- e2 y) D9 D( f% u5 M/ ?" Q8 D
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:5 ?' e6 M5 c* V, [- C
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
% K6 v$ H( U- ]! n; p然後就可算出SNDR及SNR以及畫出圖形了嗎?
# I3 S8 ]) T# t- j1 p/ p請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 09:08 PM , Processed in 0.152520 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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