Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 93498|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
! X" Z3 |4 D+ z, S* `# G謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,
# ]+ @/ d. u. }* N* _/ W  {要使用這個toolbox時,在hspice的.option中不能使用post=2.8 t: S" N; A8 ~
可以用8 B. ~+ T! l/ X/ q8 r, E* k
.option post2 G; Z- h# V; p  U2 A7 C( H
或是6 s7 ]2 k* C4 }4 l( u  j6 a
.option post=16 Y9 W& ?* I# |( d
但絶不能用# U: N- o% n9 Q& h( T
.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:8 M$ G* n1 ~4 w7 U; |
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
. A& U# Z* t+ [# q0 b% \關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
% [9 H/ g: ]) o& U
0 I& S" ]6 M+ [+ M/ V[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用" u& D5 h7 d: o2 \. b) \2 b
就是直接用.print指令把你要量的電壓印出來  S9 ^0 u3 D5 u% ?& g
然後再用手動把印出來的資料copy起來
& D( Z5 v4 D9 U# ~) e然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。3 R5 G, ?2 p3 U8 t# p& B' r

, A) x1 l$ j% ?" T- [4 Q謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program, ' S  B: i7 b6 j+ c1 f/ L
所以  只要將FFT後的資料  做一些轉換就可以唷!!
/ X  q( |0 K2 h% U3 V將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"6 B4 Z8 b; w0 G
就可以換算  SNDR 了!!6 g. U& F4 _! A3 i$ `6 r. x
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部份程式/ h0 m4 n% `. m; P' j! L
我想,應該可以給你一些參考吧
9 P& I# J% q$ R
; j- S8 x& ?1 H& E, G% --------------Using minimum 4-term Blackman-harris Windows -------------
, p6 @% S: k% O( Jnb=1:1ts;0 \# c  Z& s) q- T$ }2 P4 `
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
! A. S! `& d# K2 i% R& S# {9 S: w  u& pwin_gain=sum(kb)/pts;
; m( ~8 }- W6 c  f" Ckb=kb/win_gain;
& E+ Y2 M( m; F' J1 m2 H/ |; D9 W
: i  l/ E: D% G  m" b% --------------- Calculated fft --------------------------7 m9 ^, y0 w1 [) s
yb=kb.*x(ptsttfi);
" [- [) F1 K; B* Hyk=fft(yb);; s9 n8 S9 z* U' J! M( V
fft_no=length(yk);
$ m# N/ Q4 d( {& V( mf=fs*(0:fft_no-1)/fft_no;" N! e9 k) T1 S# j) x
Pyy=yk.*conj(yk)/((fft_no/2)^2);; G1 G( {- t  T; X9 S: E$ W

/ Y) f; ^+ [5 A. e% j5 E  U& y% ---------- Calculate THD ----------------------------4 \/ i9 s' B, _. M  `9 ?# ?5 \
j=1;
: Z  E- m8 s5 L( Z- ^for i=1:1fft_no/2)
5 \' Z& N: S4 u: M    if (f(i) == (fi*j))
+ N- I. I2 X4 P: d, n        HD(j)=Pyy(i);     %% find all harmonic distortion components
+ r5 w6 ^& e5 K        j=j+1;
* L; X) R3 Y  Z' Z# D! U    end/ M! h) ^# Q3 b* A* S5 L
end
8 V- f) R/ e- m% F1 @) Z: QP_hd=sum(HD(2:9));5 S. E( m& h8 J7 A: A
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
2 @  h% [- ^( y2 H9 K* s( Tfprintf('THD = %g dB\n',THD);
+ W) J5 Z+ ~! ]; Q4 V! y% _" U
$ p2 z5 }/ S( |& ^% k3 q% ---------- Calculate SNR ----------------------------9 a6 U* s9 D# _% X) I7 d; x
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));" P: q9 m+ g7 b. S" o9 V
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);( W7 [# c" }) h; u  t
span=max(round(fft_no/200),5);
. }1 F7 a2 q4 C8 n8 V+ P5 EP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
/ w! a! s: w% ^% b$ G2 d
6 d4 x4 z% ]7 C+ N: U' ?6 VP_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
4 _6 `, y/ f' [SNR1=10*log10(P_sig/P_noise1);- a1 o4 [( @- w/ M
fprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:/ u1 N) P* q/ @
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
& n/ r. l- \8 x* |4 y
* E/ p- c* S4 v$ W+ h2 d% B( i$ ^另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:7 Z4 X8 G5 k: @6 X# h
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
' m3 x. G7 n: i; F6 @1 y- Y內容為:
6 `0 a" i& q5 M# Y3 X; X压缩文件共有三个文件:两个m文件和一个txt文件/ q( T7 S8 o8 k- v; s+ @
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。# A1 U; N: Z1 t- a' z* Y  o
希望大家喜欢!! 8 W6 ~! F  B5 L- C) W0 p
附件為:FFT.rar$ k& A+ o" k: s! y' Y

2 b* U) I0 o) w3 E* d- 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卻顯示以下的錯誤訊息:. G1 k) Z+ w# n2 z& Z3 |! H8 @" X
- d: v$ i. \+ d6 D* M/ u
??? Undefined command/function 'AD10'.* N% x' u. o, u) e2 ?" S1 b

1 d( i& d! o6 \, T" {! x3 k& ^* VError in ==> spectra2 at 43
5 \' j# e8 [3 Y( Dd0=round(AD10(start:stepstart+M*step-step),3)/1.8);
8 ?! _  |+ s0 d4 x2 A
) t# s" n7 F  l8 y& F' y$ O由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
3 s" L2 }4 b) M. p. `. s" H' k6 ]% x  L$ }, m
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
! R& l+ q+ e# T
' P( Y6 d: y9 ]3 R% h0 J[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:% l/ A( H# \: F' ^4 g, T0 J) {  C
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。 " _4 n! N( F* x
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
& Y% C/ }4 e3 w. ^"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"+ E( s' x4 B8 |% m. B9 ^8 F# l# v* y0 C
內容為:
+ V# [* R6 D0 U1 d, ~) ~  ~压缩文件共有三个文件:两个m文件和一个txt文件
7 P# P$ F2 y/ D$ tspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。5 p! V  G" W0 ^' |7 N
希望大家喜欢!!
- s% m9 A4 s7 j4 [附件為:FFT.rar, V# i  O7 X" N: u6 F& M$ W

0 p& v  P* a* L" l我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:& O7 u+ F$ i, t8 L! p
& X0 W7 A/ w# z: n9 _
??? Undefined command/function 'AD10'.
& `* \7 \4 ^! U6 D6 v
' K/ I1 I, H3 u' `. w4 iError in ==> spectra2 at 43
- _( c7 q' }" t: p" l& y( Hd0=round(AD10(start:stepstart+M*step-step),3)/1.8);
. ]- G) v6 C7 u0 q2 I/ q$ I2 J# \% [
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
: }2 ]) Z1 q( ?% o附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式
5 v, n7 ~- d" g9 z4 \要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值
5 R& U" k- W( R故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算
4 ]1 D1 L# U2 H& W7 H0 _. T/ V. V' C6 t( d# e, A) e
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
8 m4 d7 P* ^  w4 X. W+ B+ E8 d1 J$ A( i% z' l6 Z1 @- W$ x
我看不到你的附件檔,故而實在無法作出評論/ @* W) X8 M# ~& c! `
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
- k- g% c; C& ]% }8 A從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????+ @! r' |5 K1 L4 J  h, c
所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,
' j1 N4 X3 Z" G* P5 Z) r% w指令的寫法是否為:# u$ c4 C2 `8 f* I9 [5 ]

/ @1 _$ T( ]% L3 j.MEAS TRAN DIGOUT
, t- `5 o# z9 I' U% `( ~4 p+TRIG  V (Dout)  VAL=0        RISE=2
! t8 Z# W" i; L7 [+TARG V (Dout)  VAL=3.2m  RISE=2) y9 z; ?  E3 V/ V; m0 \
& d( i  H$ y8 y$ A3 O0 h
∼還請指教,謝謝∼$ ?, h4 m2 V' G9 x9 Q

9 B; ?( y8 N# B4 f9 v$ x5 M另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:# i" d1 u' J7 i" L) {# A

( I, F0 @- Q& n/ h# Ddigout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
1 f) h) ~" F3 e0 P- y
% R/ A2 `8 g% M( QHspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?
; X" l$ R" X7 \- [0 Q; I
" N+ ?- o6 v1 A6 G5 K( _[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
3 B% N7 j# O4 f- h5 L; I$ X/ D故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料; v( s7 d' c% n
所以,請再檢查一下你的HSPICE檔案吧
" C; W1 g4 i. }( j/ y5 ?! o% J1 N
7 P$ C0 J$ u1 H  E再來,你的.measure指令用法沒有問題7 V9 J3 Z3 C/ g! d2 m( r
但,你的取樣點及時間似乎不對) V: v1 ]6 X& C! U& `4 g, d' d
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
" T9 c  d; m5 h3 [( n) F: a.MEAS TRAN DIGOUT7 b$ C9 A  i( l. W9 Z$ c
+TRIG  V (Dout)  VAL=0        RISE=2
' h3 d" O& O8 P; }' M+TARG V (Dout)  VAL=3.2m      RISE=2
$ D! v+ S% c8 c8 C+ w( V: J寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話0 F, u$ y# P( u: _! k
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
! ?7 B/ T5 {* Z0 h. S# K另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2
! J. X+ {" v% F$ o$ c& {: V4 Y再者,如果是用.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  |& `, I7 M, v
8 R3 \, Q; Q* H( y: j
∼感激不盡∼
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# j0 i+ h4 s" }4 y) V1 r2 X3 t% F: _
3 }) X8 A, P4 X" H8 S& m- i( c" ~" F. C0 Y
.MEAS TRAN DIGOUT
9 k; d# M. P& d; k1 K+ D+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
# f( K1 ]8 r( |; A+ p+TARG V (Dout)  VAL=0.976E-7               RISE=1. r( o5 Z6 N7 U: y0 s
& r, V" n/ ^7 t0 s5 }! {
∼還請指教∼0 Q/ M; A& ^1 E+ U
程式重試的結果,*.mt0檔案只出現:
, @7 ^# m' {+ P1 rdigout           temper           alter#            $ h& V: Q3 }# Q! e' H4 j) u6 y
1.890e-12        25.0000           1.0000         
. {5 \0 i* J$ J; u不知是否還需修改?
$ ^9 n% x4 ^; w+ S. m4 L6 B& f
% [& K' H* t2 E) V$ P[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題! r' s7 D) a! D) d' [! y
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息! d$ F+ W3 x: n; Q8 E9 @
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
) c5 O% f. V9 S7 H: a/ U' M/ L: |7 C* @
再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock. H9 A3 p8 f  w% u8 ^- g/ t5 G$ t
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
# p; ~& J! L. `一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
5 M. e; s0 r: @6 b- i; e' Q再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???/ L! M- T, \' }) W8 p  K. h+ ?- S
舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
  I# E9 n0 a5 g% |- p! {.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
  h. h0 J& S6 {& u2 s$ f  v.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us
- c. r" J2 F1 w3 _.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us
+ a: Q5 _/ O. h1 j( }/ J.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us# ^: A9 {; p0 a. L! E
* K; O. b! y3 ]8 K+ F
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us4 G3 t2 Y3 N* N7 i# ?% x) {
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us( T5 X; |! x! Q6 a. a0 c# F
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us& F2 O- F, G4 k0 U4 F7 S/ \) T% [
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
" E# b# g) d+ x1 l7 I& \3 P! y; u7 t  P, J; V; a6 Y
我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code7 m; F* j8 @- N! O" X
我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法, J* v  u  B9 f$ v% ?) L
3 Q! F* ^5 P  I( S- n$ h
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us3 f( D  g; ]# V! i0 @( a& V+ n( ^3 |( l
可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。! i' A+ f4 Z, b- s1 d. D8 U
我大概講一下我的架構:
9 m) o) `/ H+ L; e. K  Y我電路是使用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的指令寫出,指令如下:
2 O) }* \5 ~& H! j$ nFor Fs=10.24MHz:
2 R, \3 Q( n) r* N+ j" vV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7
: @9 A: X$ t8 g; X/ _V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-71 m9 M0 O( ?- }9 d
For Fs=5.12MHz
2 |6 d' _3 k  y' jV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7
! I& b( P& I% h/ C3 pV1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
/ {5 s2 n2 X0 R3 a! Y; h另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。+ g4 t: D! x% {# K( O3 @1 _
如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:/ S8 Y4 b/ W) G  G  u) P
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us: A9 J6 Q$ t0 a% R( ^. V( M9 c
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
8 v. _2 ^# @1 u7 u然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?( Z% i. ]1 f9 k! c& a
你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
8 |; ~! o! F0 N. T+ q) F* ^0 B' \/ {* N$ e$ \' O& M  M
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方8 K7 d2 {' e1 N
首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來, L0 c  A( J5 M' R) A: C
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?7 Y$ G$ k. ?% c6 _
5 \( F  V% ^; N  G# a
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪6 T+ `1 V& _3 {1 p% v8 u
) x; [* \" L4 g) f3 d1 _
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要8 f' N- d  x6 t2 m: F4 a) C

7 ^& h* Z2 b( _- [clear all! H; b3 h9 h) F% J! w2 u8 k: [9 @. ~
fid=fopen('dual_measure_rms.txt','w')
: E" {7 x6 u; F/ _% u7 a+ F7 Mfor M=1:1:10240 M( ]" ^' |: g2 e& u1 i
       T=M-1;  W/ W! g+ j. t8 U1 u* l
       from=(50*T)+45; %DUAL DAC measure time
" E6 a2 \4 W# e$ E0 f       to=50+(50*T);
! R) T- A; A/ y2 k2 q. E+ i       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
5 T* d* h$ q+ R+ Xend
& G' y, f8 U  y- b0 p* }; q/ WMATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用" Z% S0 ~1 z" R- q
這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧
; Z; O7 Z. N) @" A( }" ~9 \5 j這樣以後模擬FFT就非常方便了! R) F# y/ x; w  Z$ K4 S9 Z
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間
8 g' u6 N4 R, w, q然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧: m. }6 i$ J% L/ u
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
$ n3 |$ C5 f2 B  t4 i我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:
* P) V/ d5 u* [& a% M3 [/ X$ p9 _因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。: g! a' f6 P* m7 y3 e2 O
且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。  Y) y0 |5 M& S9 D
另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。+ k' D, s; B* V! x
依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
, n: s& Y) V' ]. y& Lclear all7 f+ s' H8 a+ s: z" M
fid=fopen('sdm_out.txt','w')! h7 ^3 d0 D% g% t6 Q, B
for M=1:1:1024- }5 \: X" v  I! q6 Z- f
    T=M-1;, D# ~3 K; y, Q7 {: f
    AT=(0.1952*T)+1.026; %SDM measure time$ }6 _# {0 f1 z* F, i
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
: h' i* @: C: ^1 L/ p5 fend
7 [! j0 f& U6 o試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。& ]+ K' b. S/ D  o7 ?$ h/ ?2 H
想再請問的是:
' i1 J( |6 r& |  }- R( T' c( l當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:2 ^  ~5 G% h: ^; T/ X; W! q) e
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
! U1 y# i. a  \2 h1 V8 ^  f然後就可算出SNDR及SNR以及畫出圖形了嗎?" Q5 K* `" v9 q; _
請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 01:06 AM , Processed in 0.159521 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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