Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 98990|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。' q2 w) N: T6 ~5 g4 D& c
謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,4 H8 k3 O. x: [. X$ s$ x
要使用這個toolbox時,在hspice的.option中不能使用post=2.5 V. p, e3 [( x  [2 H7 t0 i) x
可以用+ a6 P0 ~' U! R$ O' x+ E4 q
.option post2 x4 T5 e6 s& ^2 A+ s
或是
1 v; S! G% g* R; U.option post=1
/ |8 e' [& O1 p- o但絶不能用. h. N8 s5 y8 m' l8 K- J9 U* r1 r% j
.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
8 z$ d% Q1 w; Y+ [如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。: q, H$ L' R" J% c$ [
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
) v+ d( \* B8 o5 ]1 ~: X# D) T+ r. {, w$ l
[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用
8 P: h5 m) u1 E6 i/ _- I; |9 Z# I就是直接用.print指令把你要量的電壓印出來, E0 @) G' G, c9 Q8 n5 Y9 K
然後再用手動把印出來的資料copy起來
( h+ J( L8 |' s. l& C) @然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

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

% M8 M+ J! m! G7 J" Z! i: j) \; {謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program, * I7 m7 d. H1 q! j
所以  只要將FFT後的資料  做一些轉換就可以唷!!
- M9 P0 y9 m1 S將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"
# J: j( w' E: |就可以換算  SNDR 了!!3 C2 d4 F& V( I* d; r$ U
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部份程式. S1 _" q: n6 v4 j* \5 K( s
我想,應該可以給你一些參考吧
4 _- m! k0 G/ ]: z; F9 w% ^: b) r" ^) y6 Y+ v: J5 ^8 ]1 K
% --------------Using minimum 4-term Blackman-harris Windows -------------1 H0 T, e+ Z7 h0 Q% c( a5 R: f; c
nb=1:1ts;
* V0 G' s/ S+ O) T4 kkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
4 Y; t% s9 \) z" N: cwin_gain=sum(kb)/pts;
2 D1 T, B& T1 J% Gkb=kb/win_gain;
3 G4 ?2 |  k5 Y+ v" C, H% k0 Z" C, c9 q' H. W  G8 g/ Q
% --------------- Calculated fft --------------------------! {( m! B5 ]  V
yb=kb.*x(ptsttfi);% W. D! X. [. t- t' j) B3 P
yk=fft(yb);8 D0 r: P. L: [* R' k
fft_no=length(yk);
: R! M' V8 b& v) Lf=fs*(0:fft_no-1)/fft_no;
& ~! E5 v# J' H: CPyy=yk.*conj(yk)/((fft_no/2)^2);# E0 L- U2 ]) k

: g+ U1 z$ r6 k  O9 k% ---------- Calculate THD ----------------------------
: l& [" s+ F, v8 y% A. \j=1;
, N- s% h' I% ?2 ^9 h  [* F" _for i=1:1fft_no/2)
4 w9 p" S% w3 B" e) Y4 a. D, E' \    if (f(i) == (fi*j)). }1 S8 q. K7 a0 b8 ?1 H) j& W
        HD(j)=Pyy(i);     %% find all harmonic distortion components* y+ Z/ y8 M: h3 n: {! c
        j=j+1;
( E! e+ a  s* s; n$ N: H    end
7 J* ]. Q( e! c$ kend
- i+ E; o6 B( t( a- ]* fP_hd=sum(HD(2:9));
3 O+ V  y# _4 K. ^, vTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
) c$ j# Z1 C8 {: [. f: X4 F& |fprintf('THD = %g dB\n',THD);
! h, r/ j+ s% f
+ w1 x" p  D, {: t! z% ---------- Calculate SNR ----------------------------
2 y2 c7 e* R' d8 V% [) U) \! h0 Ufundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
; V# y/ w2 V8 d! G$ v9 y% d' ?. Yfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
/ i# P- s$ E" d+ n0 Z! Wspan=max(round(fft_no/200),5);+ u6 [$ m0 L4 S: f- D& w
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
+ G( `3 y5 Z2 |' o9 F* g: q& ~5 ~
5 G- ^  s( q5 O! [2 |P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;( L/ W4 u. f7 E' ^/ Z
SNR1=10*log10(P_sig/P_noise1);
6 g) G8 m1 U! l2 Zfprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:$ C: c" T. G; P6 C7 ?1 y& c
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。7 ]1 F  N. K, l  w
) G( v- x: G$ z9 d
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:" j1 o& W: R( ~: Q9 X  j
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
' I1 ~5 E4 y. J3 l內容為:1 i7 y$ I- Q1 v- `$ _/ R) ?9 o$ X
压缩文件共有三个文件:两个m文件和一个txt文件
3 V0 _! d+ c$ B$ ?  K; q$ \' Wspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。& M3 ]2 g9 `' \1 ^9 S: m
希望大家喜欢!! 7 o% [: O3 p2 ]6 H
附件為:FFT.rar
& T: p2 c, i4 k9 u* r4 u2 e. |" B
8 i- v% }' p8 `0 b" t我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:5 b9 v: _& s; `, @- N* p

& d/ l4 o% g& h. W3 q( i; T0 }$ Q??? Undefined command/function 'AD10'.4 l; f3 U1 P! \& ]7 Y

( f, L. y& m" X/ R+ WError in ==> spectra2 at 431 q' i6 L, \! O% J% ~' V
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);2 t1 p. f9 X; Q+ G: g; X
* w' m8 I  t- I/ L7 h
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!7 Z+ V$ s9 p6 {; f7 d1 T  Z$ a/ m
0 m; e7 t# k; [  ?! m2 Z
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
, S* a2 |$ w8 x5 [8 D
+ ]/ e, M7 l7 S9 [[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:' k! Q. k7 ~8 j
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。   c/ a- L+ _' ?+ r2 U5 P3 _  v* I$ ]
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
) D* M* F- {5 l4 j6 z2 h"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
8 k" q( A6 z; x+ T; J: u內容為:
6 Z. S5 B7 k6 a- c2 S3 _. V压缩文件共有三个文件:两个m文件和一个txt文件, H: Q1 R; c% j0 ^4 Y; K0 c+ \$ U
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。' @2 a  S1 t. c4 H6 B8 O, j
希望大家喜欢!!
9 r, _! k* t( I9 b附件為:FFT.rar' j/ h) B% M, }% N
% Z% v; v, S9 t' W
我根據他的說明修改他的程式變為如附件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' q2 _& q, R; T3 H: I# q3 x
- B8 n( O. d0 F??? Undefined command/function 'AD10'.
6 D; d3 b/ R/ p- I6 q' i; I! Y( d3 t
& c, s2 ^7 n' n9 q1 UError in ==> spectra2 at 43
# I% o3 \: `- h4 P0 G+ _, Gd0=round(AD10(start:stepstart+M*step-step),3)/1.8);  J  U8 X6 B) L8 j0 a& _: h
$ u3 @( @$ H5 ?7 J
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
7 O, B/ j0 Y! Q7 [- Q% c附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式
* L- w- C0 m# A  V3 F/ x$ ^' m/ t, o要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值; K: z- P/ i& P
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算
# J  C. v! r9 Q& s* g  X# M, r" N* ?, u* I0 _  H
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧3 K0 h* B( O5 A) N& d7 {, C

7 j# d3 ^, I7 z" e8 u我看不到你的附件檔,故而實在無法作出評論
: t. q7 c4 L- j7 v5 _而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
/ Z% K# I5 M; I) ~3 j9 x4 |從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????
) ]3 t: a0 }4 _, ^& |2 l3 ^所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,& C- z; Z  `+ S6 i" [
指令的寫法是否為:- Y: P1 }& m) s% s' z; b+ J
1 G6 [; u4 r5 O# E
.MEAS TRAN DIGOUT+ d1 C2 t, _: ~1 o
+TRIG  V (Dout)  VAL=0        RISE=2
/ J! K: ^( F9 R+TARG V (Dout)  VAL=3.2m  RISE=2
" v% m6 G; h' W0 N: |: B
% p7 F8 G9 i3 \' B$ h∼還請指教,謝謝∼2 f- j- m" |9 e" m; Y2 q* l4 H

) Y, N) \6 `3 U1 E  H另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
& w9 q7 P5 ^7 P  K  Z$ U2 F. q" o; y, S% Z. X
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07: ^* s5 G9 |$ W. [

- c/ O+ J6 z) Z! @! X0 iHspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?2 G2 O, R$ n$ d/ k% C* [
& v9 W5 b; _$ ~, L9 o1 O4 Y7 \& P
[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
/ p7 h5 m8 G) U: U3 S1 W; I) ^& b故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
9 {7 x( H7 z; q. A$ i6 V" F所以,請再檢查一下你的HSPICE檔案吧
* _7 T, @7 O$ [. Z* ]% O# }& h
7 M# G) ^: |' d" |再來,你的.measure指令用法沒有問題8 @+ E1 Y  I: }
但,你的取樣點及時間似乎不對
5 E. W3 Q7 ]! f  M" A你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
$ s+ f# M! u4 K% C) |% o# F7 a.MEAS TRAN DIGOUT
3 t5 W  I- R' @# m3 e0 F: |+TRIG  V (Dout)  VAL=0        RISE=2
2 A# S  z1 ?+ m  c+TARG V (Dout)  VAL=3.2m      RISE=27 P# b4 d" H' V2 s. M  ]# Y
寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話2 c1 [! ?; t- b
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock+ n3 q5 _( g- H2 B7 m( O: Q
另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2+ S8 D1 X4 [8 `% r1 H, E
再者,如果是用.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程式。
* @; o) Z  g- K* Q6 t
: h1 l* `& i) y" X9 {3 M. J' d∼感激不盡∼
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
# |+ A/ \. P& i, T3 }) X8 A, P4 X" H8 S& m
4 |3 c2 o0 O* H1 s. J/ b.MEAS TRAN DIGOUT# ?( }" [( I9 M
+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f4 s' g3 r" I$ T, h2 z; L( `4 o" a
+TARG V (Dout)  VAL=0.976E-7               RISE=1
$ m: j. }' F4 s, Y  `1 }1 ]& c. E+ k2 a  b
∼還請指教∼; U: X1 O+ V7 @6 F
程式重試的結果,*.mt0檔案只出現:) H. F* D  M% [" n- h. r
digout           temper           alter#            + J( s) z+ n- g
1.890e-12        25.0000           1.0000         4 P5 M! e  q. E/ o. n- Q" `
不知是否還需修改?
5 W3 S+ _4 V) r* a3 x( k' M  b# P- G
[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題# I6 v1 v$ I; o# l, b: `, l/ D
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息
8 ]( ?3 j7 L0 I7 j4 V  G) @所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
" h; \2 S* O# Q* T6 f, \- i" ^" q2 t) V. c
再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock2 p; p& @4 F! m  U6 c
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock' B' W( e: \& l) o: u- \
一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)+ A$ I# ^9 i& x( G
再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
$ I8 v2 }/ ]8 Z7 b) J舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
3 q* x. M6 {0 B% S, F.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
' Y# \9 y) Z5 Z( u/ V8 f& B% s.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us
5 D* [9 x/ k0 y. ~$ z.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us* n, i$ B% c. e2 m" m  u) N
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us1 ~( R2 P& i( b6 W  k" L
% u5 I- f: i& d$ w; C/ ^  p
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us
7 X6 w" q7 t4 o4 L/ P.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us
- R6 M5 V" J: {* u.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
- T+ k- q$ Z- e3 k# U1 v.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
) [5 X/ C  r3 b, N, p. V9 L8 i: q( b" Y! |+ D' _
我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
' _! b- E' u  S! ^" J: e我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法9 w; ^  ~2 Z6 R
( M2 M- M4 z3 N9 @  w
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us' s% ]. u! o0 ~- \! O8 \' u1 P+ y
可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
, t' J" }3 q- e7 D& g我大概講一下我的架構:
* H0 Q" y* Q0 G7 A9 d, ]! G- w我電路是使用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的指令寫出,指令如下:
9 v5 _/ C# E- @! L3 T3 ]2 I1 [- b2 kFor Fs=10.24MHz:: j- E/ l9 E3 J& r8 N
V0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7
% H* `, L$ P% Q: L0 L6 IV1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
* E! K: ^  J( F+ R2 m8 a5 bFor Fs=5.12MHz
6 k- ?- P. M3 @1 FV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7" t  f8 b- k: L% a  f5 c
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
5 P+ J2 S, Z; Z! c7 F! [. L. W另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。: d2 J' g7 j$ W5 \7 F- ?2 O3 s
如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:
* H2 Y7 o5 }# i6 h( G.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us" I$ P, ^7 p& _4 H0 @" l& _
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
! ?; X4 L- U. `% h7 g7 g; E然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
! A8 t& ?; u) v4 m你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
' g, L; g2 R" p  }5 W+ {0 [9 `" p- N0 Q; M
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方, c. \$ x# m5 z+ P/ \+ f7 J* \2 A
首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來0 G5 |' `- K2 `
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?5 ]: H( g+ S6 Z% |" h
8 E& T5 Y  @* V4 S7 l( p7 E
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪6 C- ^+ Y- P& y& C5 @
3 n. i2 W2 a  F& ~# O6 V& I4 D
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要* X  I6 p" F" U; d3 I
$ }0 d" w; k3 M1 G
clear all
  s* k* ]& o4 @* y! Sfid=fopen('dual_measure_rms.txt','w')
" z. L0 A, Y: gfor M=1:1:1024
  a" t1 G& Q: G  `2 H       T=M-1;
* N% r, [2 c8 q, m       from=(50*T)+45; %DUAL DAC measure time
0 q3 l+ c4 p7 ^" p# ?) o       to=50+(50*T);
9 g% `( J" I& F8 r1 K1 `       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);% B7 ?& p/ v! q& s
end
& R& Z. \/ f4 o; Q2 g) mMATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
  e; A8 E: I. A0 }* p這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧
. q7 n5 T; r% y3 o這樣以後模擬FFT就非常方便了
7 S  H" O; D' ?; G8 E看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間1 Y) O" G9 |. i/ A0 k: \- v8 e
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧5 @  K) H* H4 G1 ?6 G% O% w2 r
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
3 `8 `, ?2 Z5 G" q8 n* h1 c' I, _我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:5 i4 T( I/ t% f& p9 E$ w" x
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
' g- O/ m( s; H- M# K5 J' v8 j) I且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
! J  u8 K$ }" g% _9 n/ }/ H另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
8 v$ U* y4 X; v' s0 U依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
$ B' m. q- _. g# Z" j7 Vclear all# P1 T/ q1 Z0 @: f1 b
fid=fopen('sdm_out.txt','w')
6 `1 j5 w, e9 J6 g6 @. sfor M=1:1:1024+ G" ?) m4 y8 w3 J$ y$ l/ w) T
    T=M-1;- g4 d2 t1 v- {) x( V% _4 R
    AT=(0.1952*T)+1.026; %SDM measure time# W3 n& n9 {/ h+ J1 A( H' u* s
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
# c% Z' G. o2 N9 M6 {end) O8 ~: {5 r& R- K
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。5 U- V- r& i, Q6 q4 t1 E
想再請問的是:
3 b% a0 X4 Y+ ^1 v, q* T# p# J$ R, c當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:
9 @& e# C! Z/ d& R& P/ {9 |load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
# Z+ J+ _" o( t/ [然後就可算出SNDR及SNR以及畫出圖形了嗎?* H8 c. {. u: t$ p5 Z: O/ e
請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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