Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 93517|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
( s; U) B( s  m, x謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,! P7 [2 {$ I3 u7 }# I9 A6 [
要使用這個toolbox時,在hspice的.option中不能使用post=2.
/ o7 v0 t" z3 b+ {' R可以用
8 W+ c& n+ b0 d: A' P* [.option post+ {; W! e. V4 {9 O/ y2 q2 N* }
或是
& V2 w6 ~7 m: A1 [# K. Y.option post=1
. d( r) X7 L% K但絶不能用
) V7 }% i* W$ V.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:& B+ m/ v. p$ G4 R
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
4 M1 s/ M8 K- a0 \關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。9 }, B; G6 F" N  @

, ~9 J0 U! K" q( E[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用: G3 b/ f) N7 z  W
就是直接用.print指令把你要量的電壓印出來
7 N% A; O1 k; T0 J然後再用手動把印出來的資料copy起來! a$ y- d; d# e% h" Y  W
然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
: o5 Q0 U+ J: H
# Z+ x. N8 ^/ T謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program,
( y+ n8 k3 @, ?7 e+ t: o6 m所以  只要將FFT後的資料  做一些轉換就可以唷!!
( G' D7 k3 N, l! o. W% x將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"
' R; A( G8 m, k8 q% `就可以換算  SNDR 了!!
3 }: E) B6 {: p2 L* m+ ASNDR is Signal to (Noise + THD) ratio?
5#
 樓主| 發表於 2007-10-11 17:44:50 | 只看該作者
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
6#
發表於 2007-10-13 08:20:07 | 只看該作者
我以前作DAC的MATLAB部份程式
8 X& |0 q  b( t/ S5 a  o我想,應該可以給你一些參考吧; s# F! `: r2 ^) `( Y$ f+ p) l

- t& B9 p& x: f. j; r/ T% --------------Using minimum 4-term Blackman-harris Windows -------------
; G# U5 K6 K# U9 h6 u, z1 tnb=1:1ts;" U% k) P1 q1 Z! l+ T; 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));: ]. t0 ]* o' @7 F) ~" j
win_gain=sum(kb)/pts;
2 q( e2 v9 F  b# rkb=kb/win_gain;  A8 o, }! s  y$ c

5 H! \6 ^- [& h/ S* _% --------------- Calculated fft --------------------------
. n* [+ h7 O6 y7 }$ nyb=kb.*x(ptsttfi);
/ j7 I# R4 l+ [# a2 Oyk=fft(yb);* I1 u& X1 h0 {+ z+ {
fft_no=length(yk);
: x/ a* f3 ~5 C4 lf=fs*(0:fft_no-1)/fft_no;
0 f+ ~1 c, r6 z0 k- U( cPyy=yk.*conj(yk)/((fft_no/2)^2);1 }/ f3 k( T( g- ^! W
% ~; r3 b0 \4 b' P8 Y* R; T
% ---------- Calculate THD ----------------------------4 h! F9 Q) s0 [
j=1;5 q, Q7 _  T. Y  _& ^! W! s
for i=1:1fft_no/2)
& a) L- e0 l3 G; j. Q    if (f(i) == (fi*j))+ a2 E9 \* E% f' G
        HD(j)=Pyy(i);     %% find all harmonic distortion components
: t, \( G* X9 {5 A- o0 T9 }! F; o        j=j+1;
& Q/ u, B8 {. Y  O7 p    end
8 n" ?4 k7 A2 ~% o$ {- Uend
$ w" J. S, q/ F& s5 r9 VP_hd=sum(HD(2:9));
2 t  b, q' g- n2 f; C- VTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal/ H' I; H- X0 z
fprintf('THD = %g dB\n',THD);% v  v9 X6 V+ y- J
# t: a! S7 B% N! r' U
% ---------- Calculate SNR ----------------------------
* t. g" W& d# t6 R* i  Hfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));# H9 |5 f2 p5 Q9 H+ B+ x  {
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);4 k4 G& D5 v  y& _9 a1 a
span=max(round(fft_no/200),5);- j$ g( x, J# g9 r3 o
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));$ K; a/ d) O/ B5 W! N

9 w0 G: w4 H2 p/ B; j& \. OP_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;; }6 P5 f0 G( h/ f- f4 s# ^
SNR1=10*log10(P_sig/P_noise1);$ g6 K( t3 ]& H3 ^
fprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
$ e7 ^9 k$ b9 u$ G8 Z& o) S8 N請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
2 m; j, Y5 m8 J& n1 I
1 X* v1 r! c5 w7 U另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
: `4 j# E0 m, g# K5 Y"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"# P3 ~) _9 g, d$ V; L6 y- M
內容為:
. B% F# F; G( N  y压缩文件共有三个文件:两个m文件和一个txt文件# j2 X! H- Z3 F& u0 h1 T3 V
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
: N8 C1 b- c9 F希望大家喜欢!!
# {. b; @3 X, U& Q  N' ^% }附件為:FFT.rar
; B1 b9 l0 u0 x) U: Q
1 Z* _& K# |% g. ]# p+ V; V! y% O我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
- c( k" H) {: j0 e4 H* X
8 k- y/ v! |+ [! U$ A- G4 Q9 c??? Undefined command/function 'AD10'.1 F. m: u2 S. W8 E; l" g

1 m8 [- |" O0 F( z& b! j8 JError in ==> spectra2 at 43
" G& s0 @6 [. h/ p& C3 B: n% yd0=round(AD10(start:stepstart+M*step-step),3)/1.8);9 |4 L8 C3 M, L! `/ o
' G- ?# L' D. W2 F( v- R3 O7 i
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!# ]! Y3 |2 b: W( N
, y+ r7 o9 \7 u4 H9 V$ P  U
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~??????? 2 v( `+ q& Y7 G+ S/ i8 C
9 E% O6 p: ^+ P6 \4 H, |" L
[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:2 K  d7 u: |  C/ R! i1 `3 o) z7 X
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
& g, ~/ W8 S/ _0 ]7 u' u6 C6 t: k% Y另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
' M4 b4 L( O# m" T$ P"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"+ m( s, O, a6 a# {! g; C7 w7 |
內容為:
: r: S1 C% F; G/ S' i* s$ o压缩文件共有三个文件:两个m文件和一个txt文件$ u- i- o3 t; l* V& z3 x+ b& T5 {3 ~
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。  M3 }) r! L! K3 w
希望大家喜欢!! ' [8 ?/ K: a6 v7 X0 u) }8 |5 A# w% p  L
附件為:FFT.rar" q# M% E8 H# c1 y( {0 e% u/ F

! \8 p/ q. h, ~# B7 N" p  n1 [我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
6 ~, `4 m7 ~' f
' [$ A' d# E! m5 b' m4 O8 k??? Undefined command/function 'AD10'.2 R6 n$ k$ k" f7 P8 t( w3 q

$ S3 g2 X  `5 j, m% wError in ==> spectra2 at 43# F( \( n* y/ D/ W# c; O8 P5 H
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);8 a; _! \& p  C" U$ f4 p! u: {( _+ g

6 K2 h+ m( W) W# d; R4 Y由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
" N7 _, D7 g0 |9 ?* q( k0 q6 j附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式
4 x3 f' s& }9 L) x+ r% l要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值; g0 F# U- W4 P2 u9 s6 O
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算
1 C- k: W% k/ _/ w) G- s, Q
# K1 H5 E, v) f5 z0 p! L9 J+ W在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
) X. q* t+ S) B/ p% g# F! ]. A; X
/ q' @0 D+ _$ K" t) K; a我看不到你的附件檔,故而實在無法作出評論6 j* Y1 c$ i& I; \& O
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??0 r) Z/ `+ d! |: E  ^
從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????% {, B0 K$ r8 I
所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,1 S8 k. E& A- Z5 f6 p1 e
指令的寫法是否為:: T2 x' z! `! Z2 J8 h

' }5 V( m% t0 E; P2 J.MEAS TRAN DIGOUT9 |; W) {9 [9 ^
+TRIG  V (Dout)  VAL=0        RISE=2$ x" B+ A" ]! l4 @5 G$ V7 X
+TARG V (Dout)  VAL=3.2m  RISE=2$ ]/ K) q% R, X4 F' _

9 M( `6 ?: h  q% k+ g∼還請指教,謝謝∼
/ `$ w! z& L9 E4 j. z$ J1 ^
: e/ T# N( F5 a* G另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:! G7 r  i/ l! C8 I+ n
. {( H" @2 a8 L' M6 ^5 `& t
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07' o0 H4 i( [+ u. z2 k  K4 j% K

- j. d. c" E% r- _3 O$ J- z6 s2 \Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?
/ A% Z( m2 Y$ a% @4 z( f! k1 ~  v8 F
' ^9 p1 o! \+ H4 s4 l[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
9 ^: H, H- Z  }  l* P故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
" T, [' Z( b  w9 i& [+ u所以,請再檢查一下你的HSPICE檔案吧
5 r, U" B  y. Y- t* {. ^, V" I  L  U$ G- ^% ^, ?
再來,你的.measure指令用法沒有問題7 e" J6 G) Q) V) U6 s: r9 o9 O6 I
但,你的取樣點及時間似乎不對
9 M( A3 e% W/ x# Z) S: F9 z你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
5 L$ {" e) [/ V  Q( m.MEAS TRAN DIGOUT8 M8 `2 {7 b& E# V2 ?1 T
+TRIG  V (Dout)  VAL=0        RISE=2
) S" j# n" R; p* S! q+TARG V (Dout)  VAL=3.2m      RISE=2+ C) j! Z0 T& G# M2 V6 U% Z
寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
( k/ a& l, b/ h& C那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
; f9 h9 y9 c3 T- x$ J: C另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2; w* N) d: n9 a1 C/ t9 a( ]
再者,如果是用.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程式。$ f4 Q: s3 Q6 _$ u

6 k/ R; G; e' w" v8 ~∼感激不盡∼
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/ J( q7 D2 c) i9 a% v3 }) X8 A, P4 X" H8 S& m
* z% L7 X3 q4 U.MEAS TRAN DIGOUT) E/ h$ B6 a, O6 e& {
+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
. S% D, W: d, C, l& e+TARG V (Dout)  VAL=0.976E-7               RISE=1) ]1 q  b5 B! E/ }
  X" }, {! ?6 l0 \# O& r9 L3 W3 O- u
∼還請指教∼
6 O# a, a$ E" s5 A" A程式重試的結果,*.mt0檔案只出現:9 a0 E1 o1 }% P. J$ p0 _) j; V3 }
digout           temper           alter#            - }/ l$ n* ?6 `) C5 q! S) ~
1.890e-12        25.0000           1.0000         1 o' Y) U  N4 N1 m6 b/ }/ x* a. a
不知是否還需修改?/ c  v. i" [( r4 h

& m# s: @9 Y  q7 f" s! C[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題" l( C! E9 z( g/ V
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息
$ w& d" t1 ~: P) `# s# `+ M所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧1 L% G: T! ~3 ?( N2 i! L4 V
4 n  e% }+ X+ X# k5 n* E( q; p' x
再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock
" i$ i: A3 ^$ a- J1 `# Q7 s但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
0 n/ V8 b; S- A" O7 ~$ q5 g3 P一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
8 ~% g& g" u5 X' F; o: B- J0 Q再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
3 h  y% s! Y5 c0 U# _7 _  R, A. k舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為4 K8 [" [& I9 q  r
.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
: U* i, V% J/ g1 R8 L.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us7 V' `. [, \$ L
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us7 `, h; Y  x# E6 ^
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us
' _$ k9 c+ H  C& u" u7 l. I) A+ q& T; r- r+ I
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us
9 a  S/ u/ \+ ?) ]: D.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us6 M, I4 L5 S( ~& K# K; {" J
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us* v7 L  E; q8 x
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
/ r/ q9 }- b% X6 |0 z: f8 `
2 H3 t& p# W4 I+ @我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code$ I* y5 S3 Q: X  s6 @
我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法' i6 @' h4 m/ c% m$ K

5 z( o) e4 Y+ e9 Z4 \8 M1 R最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
; h* Q+ I: f2 s1 P. S可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
- G2 X, m  C$ S2 s我大概講一下我的架構:
, {, |' ]4 I& i我電路是使用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的指令寫出,指令如下:8 Q( X7 C2 _0 N
For Fs=10.24MHz:' a% B! c. E5 z; S
V0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7
: N: y. Y9 r2 ~% e# uV1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
; T5 T# O' U% f4 J* TFor Fs=5.12MHz
, _( }8 x: t2 lV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7
' x' d% D- `$ B2 w$ @& EV1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7( \8 ~: {! i) K' s! m3 |
另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。
# m# G' \* \1 C2 J2 k3 V0 s1 x4 l如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:, [/ o, @$ B, F( I/ r# \2 ^
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us* l0 y+ I6 S. N6 u
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us) q' Y/ ^7 {8 H& u% F; U( H3 L
然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
' u( w, z8 v# I5 I6 W6 h$ T你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
2 q9 d( w6 ^' W9 w2 M) t, t' U0 Y3 K- o  D0 h  f
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
: O) K7 E, D$ A8 U% Q首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來! c/ ]  }7 ^4 t1 e+ [  `! i
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?
7 t' j/ O( p% E" D/ w
9 r7 I% N# H$ U3 H再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪; [; H' @2 ~; }4 L& u3 x: i' _
5 U# X4 C; t( z* @* Z& s
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要
% L7 G8 e7 n( f' D4 D& E& ]
% Y. \  a6 Z8 c! t, ^0 G2 x4 C7 Fclear all& ^# F9 r+ \5 W5 S
fid=fopen('dual_measure_rms.txt','w')
1 E  o, n7 Y6 _8 `, y# A; a+ K( qfor M=1:1:1024& A: g7 {; ~2 D. o4 l: e) T& O
       T=M-1;- z. k; w2 C0 Q0 r
       from=(50*T)+45; %DUAL DAC measure time
7 n  M9 w; C. L) H: v" D' D       to=50+(50*T);. M; E9 B8 {8 d; H
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
0 N& G$ j9 t' f* n9 D" Z+ f! v) Fend0 p6 ^+ G9 d6 |$ Y) K# ~! C1 s
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
, ?8 r6 F% e+ w6 w這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧0 Y0 k# \" h' b  Y" I" c7 i
這樣以後模擬FFT就非常方便了! S; B% F8 w. E5 O* D' o
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間
1 H! v% z3 ~+ n9 g( {( a然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧  R* v& A* z" p9 G4 x2 D  R" E
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
- C5 H# t& O! ~8 I# g* }: p我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:& L9 {: e3 o/ H! R" a% w  N
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
2 D3 b3 ^6 w6 z+ t! H% x2 _( l且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。6 W  ]& A- x' x, n% ~
另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。6 I7 g/ Y' O  n* Y: s
依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:! Z& o! B/ t. ]2 g. G: {
clear all
  D* B) y4 W; P. M' Q- D3 v8 |! kfid=fopen('sdm_out.txt','w'): Q6 _$ F. C: Q3 F1 j/ M
for M=1:1:1024
1 ~; q) ^# _8 N5 q: ?* i    T=M-1;6 o: `7 I: j6 n6 ~5 b% Q
    AT=(0.1952*T)+1.026; %SDM measure time
* q  [' ?8 l9 R* R0 I    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
* e  g! D  C6 N* ]; o8 l" qend+ L1 z0 a& b* \
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。! c& N: O+ C9 j0 v5 h
想再請問的是:7 I" a/ B$ c) M3 f/ U4 B
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:
* ~! g" ?0 H6 L8 o9 h" W: Xload sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
6 b# ^' c3 U8 }) |# c然後就可算出SNDR及SNR以及畫出圖形了嗎?
- R7 X$ t' L* a# C/ g請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 03:01 PM , Processed in 0.163521 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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