Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 93621|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。' M+ @" C" O) _3 X( x5 {& l, A' N
謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,
1 g  P# e0 S* K; k要使用這個toolbox時,在hspice的.option中不能使用post=2.# D! e+ M0 E5 F0 R1 {
可以用2 e# x% k6 V4 U7 O
.option post1 g. h  D$ _8 y
或是
1 f. T# t! P. ]4 W' v+ p4 q9 E! Y.option post=1
2 _; `+ c5 d- P5 l, `  S- R, `但絶不能用: A- O" [1 k# C4 h. P, E0 {
.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
( b- T3 `0 q) n6 r( _( ~如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。) ?* @. b0 a) v5 C+ f0 |
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。7 R- U( R. C& @

) \8 k! r% Y+ [- v! K[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用
0 e7 J6 M5 T5 e( P! }. E就是直接用.print指令把你要量的電壓印出來0 W0 c' [( |( X( v) H% `- A! V
然後再用手動把印出來的資料copy起來) q( e. N5 D  H6 _0 \  o3 H
然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。% P7 G8 {' L) I, |( R5 g" c% x* |
" w7 ^+ w; F$ s, D! p4 E
謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program,
( H+ `9 Z* D6 ?6 a& j所以  只要將FFT後的資料  做一些轉換就可以唷!!
( \* B: Y9 S$ b0 _6 ^: a將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"+ G4 g6 m  f, e0 F1 O
就可以換算  SNDR 了!!
* j& q, c# ?. g8 w+ z1 jSNDR is Signal to (Noise + THD) ratio?
5#
 樓主| 發表於 2007-10-11 17:44:50 | 只看該作者
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
6#
發表於 2007-10-13 08:20:07 | 只看該作者
我以前作DAC的MATLAB部份程式
! T9 A0 }9 }7 n6 H" B2 ~" u我想,應該可以給你一些參考吧( Z  _$ ^) }7 _* k6 |0 Q# H
2 X7 q4 S0 `' G* N
% --------------Using minimum 4-term Blackman-harris Windows -------------
: Y- N) A* `' B9 L& B/ P) n; `- ~nb=1:1ts;% v) ^7 h( n1 [6 }1 Y
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
* b* ~! V% S  x) |; p) ~1 O) Owin_gain=sum(kb)/pts;
, f) E: }/ e+ X; [* `( |0 wkb=kb/win_gain;5 r' n" t( c" {. C9 l$ B# V. V. Q+ f

1 M. L) K/ `8 C# x7 T% --------------- Calculated fft --------------------------
" K2 {1 @' A+ e$ m1 {- ?. ?yb=kb.*x(ptsttfi);9 m# n6 E) ?7 Y! Z. i) w( W
yk=fft(yb);
& U5 l- P3 u. xfft_no=length(yk);* i1 ~5 G5 T! @( ^, ~' N4 j3 l
f=fs*(0:fft_no-1)/fft_no;
$ Q+ j5 \: T& B  XPyy=yk.*conj(yk)/((fft_no/2)^2);
0 _+ y& A2 y6 w$ i1 J  a- z( {6 K' p( J1 \8 K: U4 D
% ---------- Calculate THD ----------------------------5 o8 v) {% Y" x. ^* y( D& m, [; B% }
j=1;2 \: }" W; E, ]3 Q2 G! v
for i=1:1fft_no/2)  k8 _+ }& d1 K" O
    if (f(i) == (fi*j))
: i- B. Y: d6 e. ]8 e3 E6 O! M        HD(j)=Pyy(i);     %% find all harmonic distortion components. j0 s; A4 K) U
        j=j+1;
* Q- {/ x7 `4 L% i$ f' ~0 A    end
( C6 a6 W. M; x8 ^# H- ^2 kend9 o2 a0 W& r2 m( R) W3 q
P_hd=sum(HD(2:9));
9 l) M* i8 d1 ^* QTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal* j; @0 r. l1 S" m3 f8 V% m! C( m
fprintf('THD = %g dB\n',THD);/ u6 q; z3 I. N3 |

  Y7 }# d6 a4 I6 j" I* [. j0 ^9 e% ---------- Calculate SNR ----------------------------
  @3 j) R/ G: s4 c+ zfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));  f* U7 F! R& C# L. k
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);0 ?. i; z8 H6 h" h" L
span=max(round(fft_no/200),5);
. p6 A1 H' e, e5 j) dP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));* b* ~0 A( j+ L! L

7 x  r7 l2 d3 }$ J$ F2 dP_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
6 M: B; v* B1 \& sSNR1=10*log10(P_sig/P_noise1);
4 _3 R$ ]3 n3 M& d) W. V2 Ufprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
) m& B) o4 w- @! ?請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
+ g+ j7 F/ q- G" N; u. x1 C2 h: v2 q: V! ]
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:/ l! P0 c+ k# _* L& V! m
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"9 Y4 B$ G, G; H5 E" H0 t9 H, e8 g
內容為:
3 y+ U% v! E) X6 R& h7 [压缩文件共有三个文件:两个m文件和一个txt文件1 {2 Q% b3 {9 U( k  s( f% X8 z
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
7 p+ D2 e  V% j5 R希望大家喜欢!!
2 i9 U& ~" [1 s$ o. `: a: B& L2 r附件為:FFT.rar
9 ^. e, c7 s4 \6 a/ d6 C
! B5 y  \) N7 q( Z$ a  I我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
# x: ]1 Z8 W! j9 \3 S7 _* T& }6 c  e: {, H! ^  G) `$ \0 A
??? Undefined command/function 'AD10'.
4 G% t8 j! I: f  e( K" r# z$ W. a2 t# y4 k5 \' w5 ^4 e
Error in ==> spectra2 at 43
6 g" u; M  M' l4 u1 o5 `d0=round(AD10(start:stepstart+M*step-step),3)/1.8);  K7 M5 P' N1 S  a' g

. P  d  |# j; s1 o由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!- u+ u1 ~! p$ }" ~

! \" Z8 O, U7 _; v$ a∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
" Z# u* {1 _& w7 ~
- ]2 P# _2 `% r/ k0 I) R  G; ^% p[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:2 g. f4 j8 ?4 w, e' y5 I9 E& A# K
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
" x6 ~3 R' q, `- L9 l, z另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:6 X" i- q& B1 E) H* ?& ]
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!": c& C! m: p- M; o' H
內容為:
2 l4 v2 f* I7 d. ?2 @' \压缩文件共有三个文件:两个m文件和一个txt文件* b1 e  U& W; Z+ Q1 e! [/ Z
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
0 V& a8 }8 Z3 i' I0 q: E2 V希望大家喜欢!!
, g  @* b# e9 k+ J3 L附件為:FFT.rar* H3 e3 N% Q8 D8 v  H
" g6 l, S+ G1 u3 v" {0 o
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
4 ~5 s% j: R( I; z) }9 a
9 l7 z( V( P# x( J??? Undefined command/function 'AD10'.7 b/ R; k0 z9 F& k

  s6 {: p+ y3 Z$ l8 t, K0 NError in ==> spectra2 at 431 K$ ?% u/ U! {' n9 P
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);$ o# i% ?8 P+ L0 K; e
  L; c! F3 {1 E9 d( y3 N6 u
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????  y- N7 l9 E/ g7 z# D
附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式  y7 C* Q+ t+ Q* ~, ]
要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值7 F. Z* ^: z) j; G; \# Z
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算: U3 b6 g; I" F

/ u0 {2 S/ ~. u# k+ j; [9 o# k在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
4 T+ \4 K9 i/ L$ N; S
( N" ]1 M2 |, K我看不到你的附件檔,故而實在無法作出評論" t. q  F( t: P1 ~4 |) `, A4 I3 W+ {
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
3 {8 L1 C7 j- e) S. |; n從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????5 A* h4 m/ U# A: F
所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,$ n" }* h$ K4 l3 `
指令的寫法是否為:
/ I$ x+ S& L/ ]* G  F/ u/ d; k/ ^
& d0 G# z3 p* G.MEAS TRAN DIGOUT
" E7 N+ o$ z% J* C+TRIG  V (Dout)  VAL=0        RISE=29 `( H; x0 g( W: H" [1 g0 l
+TARG V (Dout)  VAL=3.2m  RISE=2
' f2 }: k6 |; R; i  @
- {. Q: h, V) p" M9 n8 \∼還請指教,謝謝∼8 J  L2 @5 ~4 e  l- Y( L# r

! p8 U: J8 P/ s另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:( w5 i8 R2 y. p& M$ m$ g

: Q; X( @0 ]! ]9 J% P; M6 K' hdigout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07; |2 h) ~7 e, b& Q' f# @8 L! _
' O# h* F$ a+ j
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?
4 L( F& G9 W4 ^- M, ^1 J6 C! }: I
& ?" [% _( `6 u" `[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔0 W, M0 v/ O4 B% v
故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料% k  r3 {* _4 x: k, s0 k% V
所以,請再檢查一下你的HSPICE檔案吧1 ^6 S+ H: ?' f5 m( k! C8 C+ X
$ W! U2 `$ U4 d
再來,你的.measure指令用法沒有問題) [8 \3 F; x4 A$ o
但,你的取樣點及時間似乎不對. z) ^, t" l7 g0 e3 X3 {# N7 G
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
, p2 W' D4 F- @! V- P4 f.MEAS TRAN DIGOUT" x$ k$ @" O' T! W
+TRIG  V (Dout)  VAL=0        RISE=25 S) ]5 d( }3 l
+TARG V (Dout)  VAL=3.2m      RISE=2
7 J  e- R3 c% R7 R/ o7 j4 g寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話: `, V- B0 w- V
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock( _( H+ R& k2 _# s
另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=24 T6 E* x& G9 a5 H& [* X; p
再者,如果是用.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程式。
2 N8 r$ Y* p) V$ I0 G" S  F! C/ j5 J0 U' B. j! o( {. j2 I3 L
∼感激不盡∼
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
/ G6 ~) M1 u2 T" n3 }) X8 A, P4 X" H8 S& m
; P8 p+ [7 `9 d0 ~* ~) {" J# w, h8 J  j.MEAS TRAN DIGOUT
4 m& b1 M7 M3 b7 D+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
  G9 Q6 K% Q9 I, c# B+TARG V (Dout)  VAL=0.976E-7               RISE=1
: \$ L- @: ]. V( G4 z: ?2 Q$ r! M, k* @0 f% M% B  @
∼還請指教∼
; X3 _& u7 J( d: l  O, a, U* U0 g+ ]4 A程式重試的結果,*.mt0檔案只出現:
* B. B9 C9 D( b4 ]2 Idigout           temper           alter#            - _: l: O3 s# G2 s) B) L
1.890e-12        25.0000           1.0000         
1 j& z. E& E5 i8 r, e3 \不知是否還需修改?9 n: D; ]2 p3 ^/ V1 ~8 w) I

2 C/ x+ ^- g- \( z$ K  ~& B6 n8 n[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題
; O* z. F: D! P你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息- v; [; e5 m: N& {3 F3 b5 t- h
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧" k# G4 B5 l& `% s" U: v1 B% p
# E* r3 }7 g. u4 P
再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock$ R4 L+ a- Z% i- B, a
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock) V) Y# I6 f7 Z- o
一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
& [# [! \3 v7 S8 k再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
8 d) Q$ v" H* h" y3 y2 s舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為4 m' ^! ]5 l' J8 z
.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
( f6 j/ Y$ \3 x, q.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us
5 y4 l3 P3 Y& d7 S.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us( M8 n  p' i- h1 a' f2 ]
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us
! i0 o' @$ r+ H8 P5 U# U3 k0 _" ^9 c3 ^+ C4 _0 b/ c
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us% a9 P  Q8 X* ~  L. A! |* _
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us, V5 [+ q  Q- Q
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
# R. c; F& S) c9 ?.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us' T0 m5 c" {1 h/ ~6 O

# t' |- L/ P! D我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code$ B; q. a$ |6 L9 ]
我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法/ D4 Z" [9 _4 \" ~- Y$ Q8 \
  n" w( n9 _& I& D4 j
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us5 p+ R% I1 x4 k, H  b
可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
1 @. o$ D! o: \4 b" M我大概講一下我的架構:1 j! v% o+ a' s  _0 A
我電路是使用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的指令寫出,指令如下:5 j  X. f2 v$ ^" `' P3 m
For Fs=10.24MHz:% t! B$ _* n% _; k
V0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7
$ v% U3 l. _& JV1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
0 ?8 [4 p+ i/ A: O0 PFor Fs=5.12MHz - z; h8 Z/ X1 Q' n
V0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7
7 K- W& L; {8 V  }V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
' _4 t2 \. ~* x6 f1 o) R: I3 ~  [另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。
1 Q& b( `' R- _+ f$ ^8 c如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:
  x  e4 Z* _5 p$ R/ `.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us. m: a2 ?, F' _! W  x$ ?
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us5 ^/ w; T+ v* E# B/ y. S7 @# F
然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?, W- w) X0 X; F, F( X
你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
) B2 x3 R5 A& B' T6 \& G1 K7 ^& K7 m' ~5 n. b* u5 K4 n4 n; M# O2 ?. Y
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
* p/ L1 V) E/ u( f8 V: S首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來$ N# U: U+ d! s+ |( M
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?+ v5 ~4 S$ X; Y

9 |2 o+ x. L' K4 K! o# s4 w再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪
% B3 Y& r* v, {1 E; Y% E8 ?$ X
* f8 A8 v- R3 K% U) LFFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要  U# A/ q$ Q* Y, u: ^. A+ j/ l
: E; l2 @) _9 S& w( U$ I
clear all
4 D; E' _  C/ hfid=fopen('dual_measure_rms.txt','w')
- W2 Z) y' m: B2 C( o9 R  Ufor M=1:1:10247 O' E4 H4 `3 Q% }) E" g' X7 V& l" ^0 t
       T=M-1;
0 x3 s7 a  d. T$ n( }8 @' U: n       from=(50*T)+45; %DUAL DAC measure time& D5 P% m; D* }  y# r/ o
       to=50+(50*T);
; _# t9 ?* X5 t# Y* x       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
1 ]+ O; ?0 t* j  a. W/ {end* ]$ x. h+ `2 e4 f" H) W3 t$ \( h$ N
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用) y- B! P6 U& d7 L6 j
這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧% K+ J( {, f0 q/ F; i2 v- I
這樣以後模擬FFT就非常方便了7 R5 J, M- `' l0 Y# e" y7 S
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間% V8 I8 Y4 x2 a% a2 I/ S
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧
% z0 [, g: u$ Q- A! ^5 ~只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?4 x1 e) o0 s7 ]  B
我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:
5 T2 Y* I+ S. z5 x, x因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
$ i" D; \+ [$ g( B. M4 T且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
5 w, v: ^6 ?8 e1 e; }5 H; M另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
* s6 ?& N: P& H% l0 p依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:1 ]1 y) _2 W! J0 a. e, V
clear all
* H6 E5 Z0 b( G+ u: M% cfid=fopen('sdm_out.txt','w')
- y5 v2 X) ~* c) qfor M=1:1:10244 f6 }* I# r& Y4 r$ i0 r: ^. H) D
    T=M-1;
1 l( E5 A: e9 p' G    AT=(0.1952*T)+1.026; %SDM measure time( f, a# r# s2 m' V0 v" @
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);0 e1 b1 w/ G% O+ `/ o1 T+ Y4 r
end
, ^6 V/ g: _# j' u: o/ q" |試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
5 k# p  C" \3 s# E想再請問的是:1 Z* v1 o# j8 B+ u
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:. B7 \6 O$ m, P1 B8 C
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM0 G8 T; v# M7 s- H2 z1 F
然後就可算出SNDR及SNR以及畫出圖形了嗎?$ z. }9 v: ]4 o" ]0 u2 B0 ^
請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 11:03 PM , Processed in 0.153520 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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