Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 98986|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
+ |- O! c$ J- H. ]% F謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,5 H: s) J5 |$ w
要使用這個toolbox時,在hspice的.option中不能使用post=2.
( ~$ _1 n0 Y9 L6 o. j7 m0 Y可以用0 N% _" O+ ~* y4 k: r
.option post4 k1 c% e% H& z9 L- O  S
或是
$ b- i- k: @) e$ i.option post=15 {! R3 O# `( R/ ?- a
但絶不能用
, {( ^' Q* @& E' i/ W5 h( c.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
) Y  U( T/ p3 ~如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
7 m! U) x$ E  \關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。% D6 d: o4 L1 Y/ s  `- X

( t6 q# S( i# C8 b& q# Z[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用
- {' {; C3 h: M& k就是直接用.print指令把你要量的電壓印出來9 o6 Y( K4 ~4 Q1 o$ X! `& L
然後再用手動把印出來的資料copy起來
" g9 l* F$ z) _; r: \$ z然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
$ N0 R# F; _1 e
" Z3 b# B6 o9 o3 O% f謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program, ! ]' l) H' ^/ G) N$ B6 e: |
所以  只要將FFT後的資料  做一些轉換就可以唷!!
1 J5 h& o# T4 b7 F4 {$ l+ m將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"
3 e  v2 L  r$ W' q! L/ ~就可以換算  SNDR 了!!  E' s2 W1 U* s: B% i0 d
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部份程式
: [, r) ]0 L+ y  c! G, W4 U我想,應該可以給你一些參考吧5 _1 d3 E/ Z" T5 e! ?& i/ n+ e

* H" O& D* e6 G% u( G' x# k) ]% --------------Using minimum 4-term Blackman-harris Windows -------------
  x# i) I# A9 R3 gnb=1:1ts;% G1 i2 R1 q, T
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));0 a2 ^. }! X; t6 Y' k9 U- S1 R
win_gain=sum(kb)/pts;! b1 F% j9 X/ @% B4 N
kb=kb/win_gain;2 M1 H1 x4 N$ `! D, o
0 \4 d$ i- I+ Q' x2 x2 ]
% --------------- Calculated fft --------------------------- I! P1 A" e& a
yb=kb.*x(ptsttfi);
( f# `  K2 W( Eyk=fft(yb);7 ~, }2 t0 y" O
fft_no=length(yk);. f# l. r6 j& q- ?
f=fs*(0:fft_no-1)/fft_no;( t& ?" C) R$ [) ~0 \! r7 e
Pyy=yk.*conj(yk)/((fft_no/2)^2);
+ q" o3 ?) y5 r4 F, E% ~8 U, [# \. R/ t/ s( J
% ---------- Calculate THD ----------------------------
, t0 _) I8 h6 t& Fj=1;* L+ Z& j, v- U' C# g  [
for i=1:1fft_no/2)
& j0 `) b2 l" n, P$ Z    if (f(i) == (fi*j))
8 P" F$ t, E! p/ k7 Z2 G4 U        HD(j)=Pyy(i);     %% find all harmonic distortion components
! T4 W" K* S+ h. d$ W2 _/ J        j=j+1;8 p3 d8 S0 o  @
    end
, G1 \' _) m+ w& v) W) H( Vend
5 d) l+ O# a6 e( sP_hd=sum(HD(2:9));
& e( R6 v, v/ L+ }& FTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal! b" I" r5 v. t1 Z! A
fprintf('THD = %g dB\n',THD);
$ V% `8 J; C4 k3 c6 t! x
8 l* d; e* h7 h4 {7 d1 f: V% ---------- Calculate SNR ----------------------------1 Y5 ]# Y+ b3 Z2 ^) L! _
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));, k0 X# o" F; m# K5 x5 ?" ^$ H$ m
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
* n' k& Z' l6 P+ ospan=max(round(fft_no/200),5);0 B7 C! K, k, i' u' P
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));& Y* R3 ^# ^) x9 x. \

$ X2 @0 b7 v5 i: G1 LP_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
9 z6 [, n: @6 P0 ASNR1=10*log10(P_sig/P_noise1);
3 g( C; ~2 d2 m0 K; Z% Efprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:4 ?" W& K7 M! {' I4 h
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。2 q. A# u3 y% f# E
3 {" J4 y- y" ~$ A( V6 K
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
# Z( k2 ~6 X; G1 g"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"7 T  k' k% w! r; i! C
內容為:
7 O. l' x2 W. D% U6 N9 G压缩文件共有三个文件:两个m文件和一个txt文件
0 Q  C7 C1 G+ y% s3 A% ^" B: ]! J/ cspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
) K5 y/ d6 q" w! Q/ }' F希望大家喜欢!!
4 L9 Q4 A! k/ P6 ?附件為:FFT.rar
* T0 X' E; o9 {6 w! G
8 ~- Q8 M5 u) @; |& w! 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卻顯示以下的錯誤訊息:7 w4 a' `/ V! {2 u, G
! p3 H$ N4 V6 |; x5 q3 |& S4 W/ ~* i1 }
??? Undefined command/function 'AD10'.( B3 D% ?9 g6 B9 h) y) w7 T$ e+ j
4 ?( N  i1 u! s+ l+ K
Error in ==> spectra2 at 43
2 R4 H; r) k$ j: T) q6 ?; _d0=round(AD10(start:stepstart+M*step-step),3)/1.8);
: b* `; M& z6 Y. w% P* E
4 _% {; `. t( Q" }2 w3 f3 H由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!& a* z7 V8 P6 k2 }3 k/ _

, l4 k, w2 S2 ]9 ?∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
6 h4 E' Z* `& V. b* ?% U* q
% G$ I: j/ z  |% P# e, Y6 c2 }[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
* r  b! w- g* O  G" j* ^) _0 E% ]$ c請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。 2 x6 y, D. @# g6 |/ p  \
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
7 B" f' L5 R, V! r"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"" s" t7 C* |9 X' `. f" w( F
內容為:
4 @5 X6 O" a# N% `+ P压缩文件共有三个文件:两个m文件和一个txt文件* b6 b; _+ t0 ?- W* W7 S
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
/ }' S) }) A& S希望大家喜欢!!
0 G9 [1 {5 _5 \' h+ e5 R6 _) Z附件為:FFT.rar1 G9 p7 O( n- Z1 o& c% m- q0 h
. o% g; Q9 I) q8 \8 Q9 G2 T/ h
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:$ Z+ ~4 ~: Q% u) _1 [0 I
9 D( x$ B- G% V& ]0 q$ }5 Q* z
??? Undefined command/function 'AD10'.
$ T. c0 V& V  l: D- O( q. g9 [/ m% ]6 z% U1 i  ?( k
Error in ==> spectra2 at 435 I$ B6 L. T( ?$ x
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);
5 k* [! |! O# r# @8 z3 W6 w. ?5 V  T1 Z- Y1 U2 ~$ Y
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
: l+ [, o+ U4 U$ T. {% q附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式
7 H( ~( |7 I5 [) V要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值
, V' M. g6 I. g% q" [# K- w故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算) o. `* E, C6 R( p# N

: X+ H* ]7 a2 A' N在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧0 u7 L9 c2 b1 _$ y+ ?/ H+ |

& B6 N8 F4 j: N% [我看不到你的附件檔,故而實在無法作出評論
2 S, n* P; j$ w. H. z而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??3 }( j7 o$ x4 R2 Z4 h8 Z4 A
從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????
& p3 U5 n' B( ^' P4 M, C所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,* i& `. w' q! n, I( ~) ]
指令的寫法是否為:
8 O, V% d4 v! r- p- l7 j
& M1 }" i2 o0 T3 R; @7 R.MEAS TRAN DIGOUT
' k8 [9 ]* h% I" a7 r9 v+TRIG  V (Dout)  VAL=0        RISE=2
# V$ H+ L% o9 G) [8 z+TARG V (Dout)  VAL=3.2m  RISE=2
+ B; g: F4 J0 f1 l$ k, A% h% Q; z" A7 L$ ?+ R
∼還請指教,謝謝∼
0 M2 `% U( n" \- q# Y# D3 F
/ u* [: \( m$ g( h2 t6 V- Y另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:' `, a* d. ?/ ?; q+ a& }

  P( h0 s1 N9 h/ X2 s7 [digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07# [7 H- h! F8 R  p! |/ u- ^

* e* v7 N; o5 [! HHspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?% M  b- a( q8 ]# \( N

6 `: ?. i) g' |[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔4 H+ h  d- Z. X/ Z) @4 w) }
故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料% h6 r% Z) f$ T
所以,請再檢查一下你的HSPICE檔案吧% |  G' |/ K, T! J. C

! }$ [& z) Q, r2 A# v& z再來,你的.measure指令用法沒有問題- L% A5 R: R% o( n, }
但,你的取樣點及時間似乎不對# D8 n1 o4 P2 D; I
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
! V3 ^8 F% h/ f! q.MEAS TRAN DIGOUT; R9 \5 g& z0 I1 }
+TRIG  V (Dout)  VAL=0        RISE=2
; z: j& F- D0 Q0 S& S$ b# R/ z$ `+TARG V (Dout)  VAL=3.2m      RISE=2
2 r$ K4 b1 {& L/ g. i寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話, L# J$ C) K8 H8 p! V+ `
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
+ F$ a6 X% k4 P. s* t# u# e! O6 [! i另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2) z3 v) g' `' M9 n: J
再者,如果是用.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程式。
# }! D- g' K- r5 A( z* B5 h2 z
6 |  Y9 ]' K: D& \8 T% }/ D3 G3 A∼感激不盡∼
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
; V* f4 ^! j/ Z! S; z7 \, x. n3 }) X8 A, P4 X" H8 S& m
$ E" Y* C; A: i% y2 u.MEAS TRAN DIGOUT
+ Z" \! R# b5 T/ Y# {& v+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f: v. R* N: |& z6 u( T5 A! E: E/ G
+TARG V (Dout)  VAL=0.976E-7               RISE=1
, }6 z2 ^" F) o# p4 }; i8 Y
0 U5 l. k' y! r7 |# A( }( y∼還請指教∼
- D; t2 r. P! _程式重試的結果,*.mt0檔案只出現:
5 _7 R. h6 p$ e2 bdigout           temper           alter#            
3 b# Q/ {( M8 f* w" B9 a. j1.890e-12        25.0000           1.0000         
9 j5 Y( g% c0 y- `! Q不知是否還需修改?
0 T" b' ]+ Q0 L; P* S
( |% B4 e& D; C[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題
& m$ p/ _" ^/ C/ Q你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息) r$ E  m" N* a5 `+ r4 X
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
. h. f* X$ S, o0 M
: h( v6 ?; A: p. C+ L再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock
5 h) E( z2 u; s! X% N2 \但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock8 u  ~! c. E2 W, y8 ]
一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
$ I0 f7 S- w9 o; m1 t) p再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
( y( m! z. [6 ~3 o; t  z8 O舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為+ P1 Q( w( W2 D0 k. m3 x& f/ H9 e& \+ n
.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
* A6 Y: z& }% g# X. H4 i! M5 b  V.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us
7 i& H  c- \- z& j/ @0 K  h.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us
' Z- v# s) a' z9 v" F.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us2 i3 J( S% K1 Y1 ]+ V

: _. m' P! E# U. U.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us
, [0 s$ w4 ]: v3 [6 L# L" A.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us
+ R. M# ~; m$ X' x5 i1 g! u0 Q% ~.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us4 e6 q3 {6 y, a; M9 t( `& s7 v
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
3 C5 _- ]7 ?2 @2 u- x
& N  i' T( q) I) r8 O; t) n5 g我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
$ x# S/ |" r. Y我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法
) l  c3 R8 n* ^, B# F
) F9 L5 Y4 W9 |- i, C最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
) ?8 V% t4 V8 A& x可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。% L' i- n2 v9 s. l& I0 m) `
我大概講一下我的架構:' ]! \& {: R6 ]" l% i+ l& O9 \
我電路是使用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的指令寫出,指令如下:
' Q9 N$ l6 w! R: p# ?3 NFor Fs=10.24MHz:
4 H1 O5 w8 o) j5 R! o) rV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-75 @& H. R8 s0 g. h7 ~% P; f) G
V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
4 f4 f! C* z, O2 f7 \) j! oFor Fs=5.12MHz
% J5 Y0 y/ i6 l: iV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7* l( r6 G& n- t; \% k
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7( b* ]  Z7 _& C9 t/ R, e
另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。  h# J  o8 F8 p1 S6 \
如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:
& ]: Y/ P3 u$ R4 g5 y2 @. Q.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us
7 r& m' _9 z  b2 U.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
8 x& y- r4 [' N; S6 S7 v; Q然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
# G9 h6 F" L9 |你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!  G/ E$ q. _' n7 n2 u
! B( D7 x; V: d4 n/ f- [
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
* ^$ u, I  G. i; Z; `7 c) f: m: b首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來
! ^2 K" r0 {( ^1 W) T2 a# y' |, o而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?
. v4 E! {9 n& u: `, g; ]7 j3 n: r4 L4 y9 M1 ~$ v% M
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪
6 P, @& l, k- F7 ?7 K  V: A* L0 N
6 Y' Q% r+ U/ }  B3 X: i$ XFFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要) o- |+ J3 `1 Y& {4 r/ v$ Q

4 p' Q& j) n& i$ vclear all5 T  C8 u* G0 s; P6 y
fid=fopen('dual_measure_rms.txt','w')$ Q0 c+ f% G: H) l) P
for M=1:1:1024
. t2 s0 J! u5 e7 F       T=M-1;* c, |- ?) |( \: j: f2 u
       from=(50*T)+45; %DUAL DAC measure time
9 a' g: q" Y# T$ [       to=50+(50*T);' c/ L( r6 G) C: g  x
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);1 T# G4 Y5 ~- X& |+ a. c; a) ]
end" b+ ?8 a, n, H, |  B& L
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
4 t& s' l( C# }這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧- ~  T( N% a9 s' u
這樣以後模擬FFT就非常方便了8 C5 {" @+ M3 {# t8 k; |" ~
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間$ t- }. k6 ^$ D
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧, l+ w1 E6 `' q4 ~: R, \5 w  D3 W
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?4 G) Z' Z+ Y( P& y2 F! v  b  g
我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:' O( U4 i; p+ L" E, E, b
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
1 D% `4 L6 }7 d且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
$ m& D9 ^* e1 y( e% s5 l$ q另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
- z2 ]# [6 s0 T1 h, E& h/ L6 `* k依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:0 I5 C: D) G( m1 C
clear all
  z* N/ A& c. D( V) }9 [' s, ifid=fopen('sdm_out.txt','w')% k+ F2 b0 a* T( n9 Y8 w
for M=1:1:10245 L3 X0 g/ q& a) {
    T=M-1;
" d, D9 F$ q7 S1 ~    AT=(0.1952*T)+1.026; %SDM measure time- @5 ^) d& s& P* U" Y. J# ]1 j" a6 I) @
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);, ?- ]3 a# [4 [7 E; f
end2 T! x* B- P" s2 a6 E5 Y, U
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。. ]& Z" O  v$ ?7 Z
想再請問的是:3 z% ~5 O- v6 k
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:
4 @- m. ]5 s3 Q4 x6 I& {/ n% f9 oload sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
9 u7 a" ?6 w7 M然後就可算出SNDR及SNR以及畫出圖形了嗎?
2 L3 P& \0 l# r# T請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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