Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 93181|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。) y* U" g0 q8 A' l0 F( w( O/ T
謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,
3 T, `9 E! z" k, b2 ]- k要使用這個toolbox時,在hspice的.option中不能使用post=2.1 e1 h3 n. [4 ~4 R: S, T
可以用
' ?# Z  c. O2 O$ h, A.option post
2 |5 D; Y( J! M; T+ q或是
% ]  h& K3 w( E( d& y' _# k.option post=1
. m2 F/ R8 L5 o但絶不能用2 x' u: T$ C) ?8 {. {
.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:6 A2 P; z2 W' l+ L" c0 Z
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
) {3 ~* T: n8 q; A9 j" w- }關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
4 @1 [8 S4 F9 m5 D6 c! \" h5 `1 f5 X4 q+ v: J/ u
[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用
) t; A# g" m) M; e4 I( H4 K. v' |就是直接用.print指令把你要量的電壓印出來- f0 M* ?2 P8 n# w: T5 F* S# v
然後再用手動把印出來的資料copy起來" {( S( S' J6 A$ v% ~, ]
然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
. l0 g* T9 d6 H( W2 u4 L, i) d4 E) K, W
謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program, 5 G9 B3 s2 X6 k: R8 W3 V; U
所以  只要將FFT後的資料  做一些轉換就可以唷!!
, ~8 i/ q7 W2 f4 J: j$ R! e將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"
2 M$ m1 _% o9 @7 U: y, ^0 w" f就可以換算  SNDR 了!!& V% H- I2 c+ {0 j* w4 G
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部份程式
0 U' O- r! v) M( _# u/ D% p我想,應該可以給你一些參考吧8 X" o3 z! J) J) C: ~6 V

: j! D' t1 V+ |, t% --------------Using minimum 4-term Blackman-harris Windows -------------
( w7 f- w& ?% m, H1 H3 a* B) Jnb=1:1ts;" f) N$ S: T' z4 ^& i3 K* p& F
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));) X- J$ S' k. Y( v
win_gain=sum(kb)/pts;
/ c% ^- W3 n* q5 i. Q  Tkb=kb/win_gain;4 t  t: o- ~) T/ m% a2 ^0 G; m" x
) P1 t4 h$ b3 q, e4 A
% --------------- Calculated fft --------------------------3 D: R) P0 T& a! u$ I  H
yb=kb.*x(ptsttfi);
: T/ j$ I4 G/ G# \yk=fft(yb);
  V9 }- O  T; n$ T- X2 }7 Ifft_no=length(yk);0 ?/ c+ T  ?6 n% X  A
f=fs*(0:fft_no-1)/fft_no;
  R1 n, j4 D- K% Z+ Q2 v; Y6 dPyy=yk.*conj(yk)/((fft_no/2)^2);- b/ D2 B7 t9 @  z# L2 [
+ F- ~' E3 Q% u) S% t' p3 r( u" E
% ---------- Calculate THD ----------------------------
+ T( X( n4 O6 O; R' z9 `" yj=1;
: o) e" g  v. Z/ ?for i=1:1fft_no/2)
+ s" _& }: R! \    if (f(i) == (fi*j))9 }% N5 y3 ]' a0 H9 W
        HD(j)=Pyy(i);     %% find all harmonic distortion components
4 }# t7 q( q3 O* i" O        j=j+1;) G! B% w7 H% Q4 z, l0 f5 g
    end6 x2 }" b. ]4 D2 t" y
end7 I3 J" e% }, W2 j% p& l0 o2 {
P_hd=sum(HD(2:9));
% {8 x( R, h- I  Z. CTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
* T$ i$ w- p) ^! E9 h1 s3 ]fprintf('THD = %g dB\n',THD);4 @0 N" m3 H8 @0 o) A
# T1 r) \" H; F
% ---------- Calculate SNR ----------------------------0 L1 x6 h: J: {* ^# V
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));2 }5 H' T( c; x/ o; _4 t
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
- ^3 x" T! g4 ~+ W* Z+ hspan=max(round(fft_no/200),5);' A  D  T2 D, d2 Y# m
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));$ w6 B2 D# H+ K0 a5 i" {6 N

8 n2 q) i4 R% c5 `P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;- m( C0 _8 n) x/ _5 B% r4 t
SNR1=10*log10(P_sig/P_noise1);) T  I1 H7 x' o7 B8 T+ N7 M
fprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:3 B& w. H# Y* G0 _, M
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
0 S9 }) g/ R; l, Z% m  n6 ]7 T0 T+ P2 Q2 H$ b' z4 v' P
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:: Y$ E8 L5 W& e# Q3 q. ?( l
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
; _1 w: n; X* F5 |7 i內容為:
! m; M2 n/ e+ Z" t# h压缩文件共有三个文件:两个m文件和一个txt文件
- [  h0 n. I% o1 a( E! i% _8 w5 U4 qspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。. l2 l2 ?8 T3 O' V) {# Q
希望大家喜欢!! + C' M& X" ~, [/ V
附件為:FFT.rar
8 ]2 ]0 C. i( L4 m
- c$ [. q/ Q% @; \+ F' 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卻顯示以下的錯誤訊息:
9 ^" H/ I" f) D  R* P6 g
- O- a; [# O: M* O??? Undefined command/function 'AD10'.( ^0 h' g! o6 c7 R
, w6 J/ S$ V: {" [- l/ ]
Error in ==> spectra2 at 43+ i( g$ Z4 A2 [, G3 u
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);
" U" s& |; E" r4 p4 o" f5 q6 C+ u' y1 a  [9 a: Z8 w  z% u+ x
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!; Y% M4 Y6 n" D! T! s* K) l$ C! ^
/ P2 Q$ R' u" o4 _
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~??????? & Q7 Z. ]2 X2 _7 i$ [# u2 S

& M8 p% k2 w' D) b[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:  n6 ~  o8 N/ w% J4 b- b
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。 ! m& F: f5 p" j) d
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
) Y5 p* F. Q( s( J, X3 \4 ]"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!". Y9 i; W; I1 s4 J8 L, Z* ]) u
內容為:: a: m2 A1 d# h" ]& n% K
压缩文件共有三个文件:两个m文件和一个txt文件
$ j, F: f0 e. |, ?5 lspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。" j, R4 |& @. y2 i0 r( v; d+ o" I, a
希望大家喜欢!! # x5 o# y' @( R
附件為:FFT.rar
6 b: `: n$ m* a, i& \ ; O" \( L& H) q. G0 ^6 j* y
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
8 v6 K' ~7 w" M5 E
+ @+ \6 M+ [, n6 q7 A2 v??? Undefined command/function 'AD10'.
$ X! O0 Y7 U% o0 K1 |
6 P/ B; x; t  m4 M0 dError in ==> spectra2 at 43
! H0 }4 j; ]$ J; G# S7 \1 rd0=round(AD10(start:stepstart+M*step-step),3)/1.8);
( X, ^& h' l- q4 [  z& f1 s
+ A6 `) k* j9 }4 F由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????/ f+ m9 R/ @6 g+ c& q+ `. a3 _% A
附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式  |$ F1 e, ~# ~* A$ O/ P
要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值
) F+ ~" R3 _9 i) m8 h' o& i故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算
6 U: W' _& K% |/ p9 V; N5 F; }/ k9 x* `5 v" X! y8 s+ G
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧! ^1 D$ ~6 m5 s6 e

9 }1 n3 _0 X2 v. K: G' W' s我看不到你的附件檔,故而實在無法作出評論* Q+ [3 O5 X% m5 I* p6 s3 N) w3 G
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??1 Z" r2 p: l) n9 b
從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????1 M6 P+ T( O" w& s0 a' X
所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,) @; i6 W! K5 W; ~0 w+ O' ~
指令的寫法是否為:
- i7 f# H6 h: N8 z& {0 q- M$ n. ?& |- z& S+ r! D8 P
.MEAS TRAN DIGOUT
! Z2 k  n9 p2 Y/ H/ z0 p4 Y$ f+TRIG  V (Dout)  VAL=0        RISE=2
* U# ^7 A% N1 l% L+TARG V (Dout)  VAL=3.2m  RISE=2! h/ N5 |( |& N

8 ]' o  O7 Y# Y" d3 Q( H4 p, {∼還請指教,謝謝∼
% t' a/ ~% M. H; a9 p" _  O% |1 Z- C6 f
另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
" V, F+ z4 k. F* g$ T6 Z
+ L# E4 a  f5 s) `2 Qdigout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
" o2 a2 Q4 E7 _& h3 o  d' s
" V& J5 x, R1 _, a2 V/ a' `Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?" g* y! m5 d% M. l" {1 o7 }

. g/ B, m( @9 o$ y[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
2 q( {1 u- l( B1 G+ d6 s故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
$ U/ j: j+ T! G1 R, N0 G  I所以,請再檢查一下你的HSPICE檔案吧$ U) p" F. w4 A

/ I& i( \9 i2 A' m7 e1 o再來,你的.measure指令用法沒有問題4 z% z9 f5 ~% H2 ]) |) b
但,你的取樣點及時間似乎不對
! ?% G2 b0 [* V你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:1 P" G* A2 o- z
.MEAS TRAN DIGOUT, w* o- V- c- `  D
+TRIG  V (Dout)  VAL=0        RISE=2; j2 M& B- Z8 J2 @6 k9 G/ M
+TARG V (Dout)  VAL=3.2m      RISE=2
6 s9 o: g) L  j寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
. L+ J* d0 E5 [4 n( a那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
) b- Y& C/ r5 R' E& k5 V另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2
4 \' p  p5 E% @/ g. b$ }9 {再者,如果是用.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程式。
# k- `4 n8 U' t5 U: W- L3 r+ k+ o4 F6 U0 i9 \8 R: d" 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  M! I2 H5 j( |7 z0 b
3 }) X8 A, P4 X" H8 S& m
- i. `+ Z! c: q! C3 }.MEAS TRAN DIGOUT3 R; `3 l( i! _5 z2 [
+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
8 E; O& d- \  h  b, G+TARG V (Dout)  VAL=0.976E-7               RISE=1
9 ~! D) H8 s" j; T$ |9 F
& {; c) N6 H0 A$ f2 `6 r∼還請指教∼# O& L) P: c) ?% J
程式重試的結果,*.mt0檔案只出現:
- T! F  @+ U9 R& zdigout           temper           alter#            
; f, h" X% b! T: g+ v1.890e-12        25.0000           1.0000         . h3 z% E" g' K3 k4 r
不知是否還需修改?1 N* F+ h* j2 c. \3 A/ j! A

8 R; ?; @" Q  B& _3 J& I% i& r' V[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題
. m- V2 F9 K3 y& u你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息! \' O* r3 M% M7 t, y$ }9 c" W1 G
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧4 q3 Z; h% ~: W8 b& Y* M: e

; w0 G: o4 Q0 ?) i再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock
) e$ s8 S5 ~! w但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock+ ~2 h  W; B& _2 h
一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)3 F- y! c, V8 L/ J, J$ S: G$ _
再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???4 }9 T) h* q  Y! W
舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
2 ~) e* w5 e5 p, i.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us% g/ k8 [/ X. p9 u5 j/ ?9 G8 E6 X
.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us
- k" k- T0 v. X( w2 D.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us
4 M9 L- _9 ]- n.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us- k$ f& a/ A+ w% F1 X

0 O- b8 n4 h; e: b.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us8 h' `3 B5 H6 u: a* e: k- |) @
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us
! S6 S% k0 k, k6 N- E.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
1 U, y% f" F1 ]$ C) P9 s.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
! I7 f# Y( w6 ~) Y, e  H2 t2 C( ]- @( n) n9 {: k9 C/ a
我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
- ]6 y3 L5 Z4 z, E我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法: Q3 {% {" V% W6 a( V4 Z$ T4 O
- T  o9 C8 S/ H* v1 b- S
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
7 L* d$ I* X# E# P# z6 i! d可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
; M& W  R3 g! v% x# w. }3 e  i我大概講一下我的架構:
' n2 p. K' o; P- H我電路是使用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的指令寫出,指令如下:/ Y6 r% C3 P. \0 b
For Fs=10.24MHz:
7 y: O" J) ?: R! I: G6 y" [" }V0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7$ w  `; u1 J, c% e9 h$ W
V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-73 W2 H% ]3 x/ K6 W% T2 X
For Fs=5.12MHz
) u% R2 u; o  |* aV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7. X2 Z5 u( X8 q9 V7 t7 S
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
" y3 |  ]" X6 S' }/ c, H; l另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。, i  _& R7 r8 V) |8 l# G% \
如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:
  A: x4 g% ]# H4 j.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us& n0 ^. _* I  Z1 v  u
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
$ d! P: X( E& c6 ]( R8 h然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?& n5 Z; t  {! B6 r: r  |
你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!& S: N% L5 b8 v& j) A

% z4 O* n: p) E0 D/ i5 l4 z8 q[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
( G* \0 W  a2 r# W首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來- A8 e. V4 m$ u& R
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?' L: a; V0 n4 Q6 d
( B7 s/ K' ~! m; v
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪
$ H: E# ]' Y  q  w7 \* I( v
' `. F* I' c# m( X" d$ A& {6 _- E" kFFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要) R; k  {: \5 A6 A) ~( W$ M
) u! U- \" m5 q! p1 j: r) x& p' Q! T
clear all# p. @# A) k( p+ E
fid=fopen('dual_measure_rms.txt','w')& M! u) i$ R% s
for M=1:1:1024
3 ?& H% v0 W  j, t# [, }: G1 c- W       T=M-1;
9 U7 t; K: {3 F5 t       from=(50*T)+45; %DUAL DAC measure time
3 f. U) J. f  i$ K. e& {       to=50+(50*T);; M5 H6 l- S& u4 C
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);) N* ?+ E) ^  c( c
end
$ \. X9 f! b4 D! U9 y. lMATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用: T2 t1 l. U0 M% R
這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧
, G  q3 Y& M! \這樣以後模擬FFT就非常方便了+ O# n% Y. N" g# ^* h; X! o+ ^9 i
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間
$ d: z4 x9 B7 @5 a然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧
2 ~7 W* e' P) F0 Q  {! b! X只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
0 d- I1 Q* A) a& U; v我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:6 W0 @/ {7 B( D
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
* Y2 w% `$ e9 \" m2 [且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。& R) D! `8 ]: l4 L4 b+ B! z
另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。( E+ L1 f5 [1 t
依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:# `6 @" N# E% @8 {2 `# s
clear all
- Q4 t6 a* c0 afid=fopen('sdm_out.txt','w')) r1 v! R2 z: d) }- F' b/ c
for M=1:1:1024$ ?& V6 q2 v- }( c
    T=M-1;
2 A% a% Q& y. g( {4 [* _& e    AT=(0.1952*T)+1.026; %SDM measure time( K7 z! {1 M7 \8 V& J
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
3 N. Z7 b) u& f  f7 ?end. B6 B* ?% m0 L! X7 c
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
$ Y; x6 N" m8 S5 t& i  ~想再請問的是:! N/ t, Z& p2 p! J' ?3 D% a
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:) Z" ]1 {3 C6 |6 c$ v
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
' L0 z4 |8 U+ a9 _# y# P9 N然後就可算出SNDR及SNR以及畫出圖形了嗎?7 J/ A  q- P: j: \2 }
請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-22 03:15 AM , Processed in 0.136517 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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