Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 98993|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
5 y% s+ I; \0 u/ }. e謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,
& I& M9 [: Y1 p4 W; v要使用這個toolbox時,在hspice的.option中不能使用post=2.
$ F! K0 Y7 G; i) k, X/ O6 z可以用2 ?, l- g9 Z* q6 |
.option post
( `$ H. X  o, F; b& k7 B或是' V4 c) V  Q  i# Y
.option post=1
5 t( [. _- d7 o9 I& z( {# A但絶不能用
9 h& S2 W( A$ a3 r. l.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:* C3 c& j+ i; t7 M4 g: v, [5 V
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。/ ]/ u3 T, F* ?8 o6 G, R
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。0 l5 A5 {1 {. |1 a7 ~% ?

/ K/ R3 f& T- a7 S1 I4 g[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用
& [4 Z# t! X$ k4 S% v就是直接用.print指令把你要量的電壓印出來
) H9 _3 g5 q# a8 @9 f然後再用手動把印出來的資料copy起來* _9 V: x2 K0 R/ J& S! p
然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
2 a  I, y+ ]) @. P3 o$ R: C. Y$ a7 B( i8 s' ]$ I
謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program,
7 _: O1 t- I( X) O9 Z/ h/ i, @4 Q所以  只要將FFT後的資料  做一些轉換就可以唷!!, L; s" R! @" ]* k+ v4 V; S" z
將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"
) L0 Q+ g7 w. U3 }: ~就可以換算  SNDR 了!!
6 K1 H# \  \' `/ iSNDR is Signal to (Noise + THD) ratio?
5#
 樓主| 發表於 2007-10-11 17:44:50 | 只看該作者
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
6#
發表於 2007-10-13 08:20:07 | 只看該作者
我以前作DAC的MATLAB部份程式) s0 V" V0 M, Q$ _/ K
我想,應該可以給你一些參考吧% {8 P9 f& O! l8 ?1 K7 r& o7 t: n
5 h& c& P! w% E# ]
% --------------Using minimum 4-term Blackman-harris Windows -------------% l' h0 e+ u' |: J; d- N9 c
nb=1:1ts;9 _- h( T' \; f9 \% L, ~  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));  S; ]- l9 ^9 N% L  I* o
win_gain=sum(kb)/pts;' I, p0 A7 F6 _$ @
kb=kb/win_gain;5 Q0 w- {, R7 G' w, U; l. @
  U1 O# S8 R% `" f/ q! V5 p9 M
% --------------- Calculated fft --------------------------; b8 y; |$ K* L/ y* r
yb=kb.*x(ptsttfi);5 S5 C) T/ ~0 B
yk=fft(yb);
/ M9 s0 J6 V# c5 yfft_no=length(yk);
$ B4 y0 L/ X! [+ bf=fs*(0:fft_no-1)/fft_no;% G! N$ g, D6 m* }! A( d
Pyy=yk.*conj(yk)/((fft_no/2)^2);
2 M" m3 k1 Z" w* B- I, a3 }$ m: R% R: [( T
% ---------- Calculate THD ----------------------------
4 H$ T" X' U3 x: y7 P2 D8 K* ]j=1;; h+ w6 s: e: f  F  \  g6 b- b
for i=1:1fft_no/2)" L0 s0 E* ^5 Y! I- f( P9 U" `5 s
    if (f(i) == (fi*j))
/ f0 E% l  I& N; ^, Y2 P$ w        HD(j)=Pyy(i);     %% find all harmonic distortion components
- e& L) R, W# o  r- |# S        j=j+1;
5 h, Y  B! V2 \, a    end* l, n7 I' @) L! p6 F
end' i8 ~; j# Y7 A1 u
P_hd=sum(HD(2:9));# K# P1 E  k/ B5 @7 ?
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
) K6 P1 G' Y' z- w# g; ?' K( e# Lfprintf('THD = %g dB\n',THD);
  d5 n3 B+ w, p' U2 g
1 X7 Q% N, g6 Z5 d0 W% ---------- Calculate SNR ----------------------------$ L# A" n) Y( ?6 W$ q1 T1 k+ M" \
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));( W* |4 r! t  F% Q' D  Y7 }
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);5 |4 f2 p; I" h: u5 v
span=max(round(fft_no/200),5);
9 B& N0 P5 {6 r6 w/ S9 l! kP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));# y& k0 W2 Q* }' F8 I
% `' U& M8 |% _0 W% [  f: D3 h
P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
5 d! X4 W9 ]2 y8 K( Q% oSNR1=10*log10(P_sig/P_noise1);
( L! w, a7 I( y# C4 ~# Tfprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:0 Z- X1 d. t: K, D2 V
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。* _$ t% H: _7 h) M0 l

1 I: n! B4 w/ m, g! k1 x另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:9 [7 J; [5 M" L2 E+ [/ k
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
6 O+ L$ G: }$ A" k* t內容為:
' m! Q8 U7 {; h8 S% T5 q压缩文件共有三个文件:两个m文件和一个txt文件$ t; ?! I0 B2 t
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
6 B; Y5 `4 ]/ ^8 u希望大家喜欢!! / x* z4 t0 b2 N& c/ [! ^$ z
附件為:FFT.rar2 k. g" d" T# W3 }* g3 Y3 U" s
! h2 ~2 T$ o" Y; @9 x& p
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
. K  e" q& v) N4 A" M4 ^
* W% `5 h1 W, {8 n! o6 d??? Undefined command/function 'AD10'.
  H( j' \; S: S, q; \. k' R/ J5 R( M* e8 o( i7 X, h
Error in ==> spectra2 at 43
. Z2 O) k6 @1 R3 ]- od0=round(AD10(start:stepstart+M*step-step),3)/1.8);
0 {# c* F* z) h) F' d! i
* B* o! |& @8 {. I5 U由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!3 _3 q- ~4 C$ L( m9 y" t# L3 D9 ^4 ?+ q
. Z8 d, }$ R% x1 X
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
+ z  y( i% S  Q/ U3 D# P8 o0 k% z/ B$ {* M
[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:& e7 q% q- ~. d# {# ]
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
2 ?& W, B5 b7 w5 h/ h另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:. V3 y: J1 }  R
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
& H6 w3 D" O3 g- y8 l內容為:- c# W# @9 v& B; V7 \/ G+ J
压缩文件共有三个文件:两个m文件和一个txt文件
% z7 x) J5 a% K9 hspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。: a1 N, k2 g' R0 a4 v( x
希望大家喜欢!!
1 U& z7 g; _  r3 E附件為:FFT.rar' o' ~/ ?  X" h% N* {  J; {. Z% F# {

& a3 c6 S; f# a; 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卻顯示以下的錯誤訊息:+ T+ z9 Q; ?+ J4 s

6 J) A2 _% e. J/ K/ G0 t??? Undefined command/function 'AD10'.9 H/ e& F4 Q+ K; A0 e
8 A! u; r$ a' l7 t# G5 w& s
Error in ==> spectra2 at 43
5 p9 r; Y. _1 m7 `8 G' a7 Md0=round(AD10(start:stepstart+M*step-step),3)/1.8);/ X" ]( _) |6 r9 n+ {
: R* g$ ?. A3 c, L  @
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
2 Q, N+ J! f, m* _' F5 p附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式
* s# |* u8 X  j+ b- _/ H" d要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值
5 T3 V, ?0 z4 d' x故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算4 a4 o; r6 [# l7 u# D3 z# ~
% b4 S, A2 R5 g; p
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
& N! |- T9 i3 r  X  C9 R1 \: n- X1 c) \4 ]
我看不到你的附件檔,故而實在無法作出評論; j7 V$ \1 h0 i& w  @7 `2 ^
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
. x2 w2 N1 c) S# z% D/ n從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????
' c# J+ j7 g) c0 y& O9 K! d所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,0 X9 Y* z) t* E- ]' b  i. M
指令的寫法是否為:& o. l/ y+ a$ R9 |+ t! K

3 D8 b/ W" e0 T- C- w$ H: [.MEAS TRAN DIGOUT$ R, J# d% f# I! l) `% b2 c2 K
+TRIG  V (Dout)  VAL=0        RISE=2
1 A1 A9 M8 I! k8 [+TARG V (Dout)  VAL=3.2m  RISE=2- t# I* Y% E; p2 f$ o1 d0 f

# R+ s9 J0 u6 N∼還請指教,謝謝∼
% }; |6 z5 a8 b' d5 g
, p6 f# m4 I5 X* v7 r( v' {" O另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
3 z  {" i. a3 H8 r
% o1 K- e* c' R8 `4 [6 kdigout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
8 T, x/ _) F+ G. A6 X
  n+ j4 n$ d" m7 q! n. f: p# S3 \Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?8 r5 e2 u" V$ K; @( J

+ Q! Y; N" t' T[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔9 `/ ~1 Q5 X4 k
故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
9 X4 r( W5 d  w" h( X0 D所以,請再檢查一下你的HSPICE檔案吧6 \# Z) H* @+ H7 N$ |- I" C0 H
8 h+ a- N7 r% ?  L2 G4 |8 b9 ^
再來,你的.measure指令用法沒有問題
1 n2 x3 F1 r% u* |1 c7 H$ [8 }' q, {但,你的取樣點及時間似乎不對
( q4 P$ h9 |7 Y% ]  Z) `  `你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
$ B: p1 e! B$ ^( K! [.MEAS TRAN DIGOUT8 C+ n1 B/ y$ I* f5 u) W
+TRIG  V (Dout)  VAL=0        RISE=2
% }- @) Y7 @9 M, M; [  P+TARG V (Dout)  VAL=3.2m      RISE=2
9 a$ f: `/ Y3 J9 b( x寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
: Z% F0 \- D1 v  W# y2 N那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
) h9 L8 {7 H5 h; w5 c0 @, C另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2% m+ @- i3 X7 `8 @
再者,如果是用.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# e8 Y6 T4 U  L" \6 r8 B  J8 G' g2 Q' i9 G8 x
∼感激不盡∼
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
/ `) O- G4 ]4 |3 }) X8 A, P4 X" H8 S& m  c. s7 U+ s# {) a" ?1 K' _4 v
.MEAS TRAN DIGOUT
  @& i) y$ P/ r; ?$ A% p+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
' r2 q' v1 f+ t/ h4 T/ U0 q+TARG V (Dout)  VAL=0.976E-7               RISE=1
5 l) L3 }% |3 ^0 b% R
5 P8 H4 \! b" O# R3 p  S∼還請指教∼
6 m$ |8 B+ `% r% f2 @程式重試的結果,*.mt0檔案只出現:. i/ S8 x3 u; O: G0 K7 \
digout           temper           alter#            ' f; @* ^/ _' f" F" |
1.890e-12        25.0000           1.0000           x% V- O, x( C  l" p
不知是否還需修改?
9 V1 Y- r3 C6 i5 _( N( ]9 s+ h3 n/ [1 U' b) h
[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題6 J! a( n- ?0 M9 O; W4 {
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息; r* Q- Z) y. V" s( d5 e; C
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
# d- T/ u' K6 Q' s. D& f& x
. O0 k. l( \& ]/ q9 ^5 A再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock' }, P. d$ ?# r6 {0 f5 w  k. U
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
) {! b/ i) M  D. |6 w6 T一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
' q$ h# L2 R' x9 j6 f再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???' t# t1 Y. p5 e
舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
* E1 i! b* @7 k4 o6 k.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
6 q2 P4 g9 W; l) w& |.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us
6 k/ a9 \$ X! j, E$ F4 F* ?7 L.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us
1 H8 k* }+ T/ d$ X' U6 p.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us
: @: {1 V2 W  b
( x' E" g) G3 L3 J. U.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us' D7 q+ P' S" w, c6 o2 B2 ]3 ^3 T0 t
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us
6 l4 E# A, Z5 X.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
) L2 J/ s1 L! L, F- }  g.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
2 S( N8 H/ t% Z0 U6 h  Q0 _  p. z  v$ w" ^# _; ~* @
我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code) [# I" B9 U. Y: z0 h
我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法9 j  `$ d1 I$ s5 F- }

0 Y) O2 Y! Q% ]# \$ |& S/ ]最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
% Q1 W9 u) d& j7 X可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

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

. V1 }1 p4 X+ X7 N* b+ q. Y再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪1 g9 M5 _  K2 T. u0 a
# i1 ~6 B& H3 k" O
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要
- I% P' V1 \) W% ~2 A% n+ ]5 O( l# i$ M' t
clear all4 @3 ~! a& Z7 b3 Z
fid=fopen('dual_measure_rms.txt','w'); j- t5 b7 g+ m3 J2 p+ _
for M=1:1:1024" N1 q% @: a* A
       T=M-1;
$ m- z7 o- C# @       from=(50*T)+45; %DUAL DAC measure time. l* Z# Y0 G. k( A& i
       to=50+(50*T);
/ M" |: ^/ j$ [& J3 e3 s: T       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
# p' B. a: \6 `7 lend7 P: u! ], C1 a/ q5 i7 r* V
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
( y+ @* }0 ~; Q9 }這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧5 B# |# n1 \7 v) Z* X
這樣以後模擬FFT就非常方便了6 x+ N# d* Q1 C  k0 P* v
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間3 I' p! Z. f, [! a2 e
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧
* Q" ?; l) t8 ~( B只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
; L0 b, K* ?7 u我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:
2 P! D; @: ]' a* D' A; g因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。: o5 _( N9 M/ z# G
且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。( X  q& d* n" S/ w$ Z% ^9 v1 i1 T3 I
另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
" ?1 D5 s: t% d- G依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
! a$ A. C# U. fclear all- }/ ]5 i; u& K0 R
fid=fopen('sdm_out.txt','w')0 r! l$ P% a! O$ E+ ~
for M=1:1:1024
& Y$ Y- ^' U) T- v/ ^( w  H! L    T=M-1;! v+ S3 \- S) E! B* g" M: m
    AT=(0.1952*T)+1.026; %SDM measure time8 K; i- ?( l; {5 k. s; L$ o) S5 F9 ^# J
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
1 S; G7 d3 I7 p/ H. X. d. `6 uend: V3 `. G6 I3 G* s) w' n5 ]
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
, q2 I% ^7 d* _2 ~! y7 f3 O想再請問的是:5 e' \# l. P- {2 G3 A; ?0 u& f
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:
1 T( @" Q3 Y$ l' o" E: {load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
, j: p' j+ ^' e$ Y8 z: P然後就可算出SNDR及SNR以及畫出圖形了嗎?
6 b6 [) S4 F8 ?# ^2 U請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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