Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 93179|回復: 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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
9 f' f9 U- u. S' X' x' N謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,
8 @) R3 j& @  d要使用這個toolbox時,在hspice的.option中不能使用post=2.9 Q/ M% K7 w- ]' x* x' {
可以用
! y9 X' S$ U6 ^& d) v* y% ~.option post
. o9 u& S  \0 t2 M或是( c$ _- p4 j0 w" Y& s4 v$ |& V' g  ?
.option post=1+ v& [+ U5 P* [% u* V9 a6 O6 Y
但絶不能用
5 K1 f5 h* H, E.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
* _  }$ \! H, \% }- L! r如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。: T6 T( m) [& i: G6 [8 N
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。+ I- _' N+ n& _* z/ ?' J& l+ ~

+ ?- m- h" r  f+ |7 i9 w[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用% H2 S$ U& f* E$ u
就是直接用.print指令把你要量的電壓印出來
/ U9 L$ i+ p: Z( B3 c; ]1 J/ \# l  i然後再用手動把印出來的資料copy起來
. i: E  o: @* ~1 l5 K' D8 W然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
/ ^' l" D5 O2 k
6 z! i8 V- @' w謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program,
' z* p' a; V# ^. e% O1 P% s所以  只要將FFT後的資料  做一些轉換就可以唷!!
1 ?; h  }, w" y) z- M% b5 L將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"- v# Y# q% |) L* z  I
就可以換算  SNDR 了!!
- _" V- z3 ^) X* |, o9 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部份程式  C; f) \, }: Y, W! Z
我想,應該可以給你一些參考吧2 A; G3 }, S. |* s
2 O& f- M* r5 Q# x; D' U
% --------------Using minimum 4-term Blackman-harris Windows -------------
3 w3 ]7 M- B1 nnb=1:1ts;
7 ^+ T# V2 Q6 |kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
* L9 q( [! |2 E/ j8 j7 ~- f2 E4 |win_gain=sum(kb)/pts;
' T# S1 g3 @7 Y; _/ Okb=kb/win_gain;# N; r: u- K& P. }& q7 o3 C
3 ?, P) l% I, O
% --------------- Calculated fft --------------------------( V+ Z8 h( G8 Z9 A0 t, t
yb=kb.*x(ptsttfi);
# x/ H9 S8 N8 m0 Nyk=fft(yb);4 D( f; f5 c$ L: G$ g7 M' k
fft_no=length(yk);
! W9 O* I  {* G' i1 g3 g, r! L' o' x+ Cf=fs*(0:fft_no-1)/fft_no;
  o$ @7 J$ |- j9 L/ jPyy=yk.*conj(yk)/((fft_no/2)^2);. f, Y6 x! `) Y0 `

* l: w$ X6 A- c- l# n7 D( \8 I( ?  E& W% ---------- Calculate THD ----------------------------8 o& p3 k4 j& L3 S; @
j=1;% M  @; V) p* c2 b$ o% x: |
for i=1:1fft_no/2)
. c* p8 `2 X5 p" k, r- {    if (f(i) == (fi*j))
5 v% y! |: f4 e6 X/ I        HD(j)=Pyy(i);     %% find all harmonic distortion components3 P  i# T3 P+ a! r7 r" S9 Z
        j=j+1;
8 Y" u* _  A( A( i8 N; \# N. D" G  \    end
  i% d1 D. y9 jend3 k  ^' z; l. z; p* C8 g$ @; E3 c
P_hd=sum(HD(2:9));' L  ]9 t/ C' O* [% J, S# U
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal2 P& V* I+ f6 T( n: g: S# {
fprintf('THD = %g dB\n',THD);
; L/ _8 Y$ m, Y
! i2 k4 @9 U' u1 x1 K% ---------- Calculate SNR ----------------------------
" F0 [6 W8 l. Z, E6 X$ _, Sfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
& N3 J4 T/ f  t( `; g* ^fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
. x; ~9 `* V5 n# {  W9 \. ispan=max(round(fft_no/200),5);' [7 \2 ]  {4 \& c; Q! c
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
# |% T( }6 T5 B3 V2 `
0 i# c! [( j9 p2 x$ _4 \! gP_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
( t' u; `6 ?+ MSNR1=10*log10(P_sig/P_noise1);- ^; C/ d" o) O4 F8 _& ]% C
fprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
5 I  s8 D9 V$ [) a. ^: {3 ^請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
4 @7 H  K5 j3 N( S1 S( {
5 _( ~) a& x2 }7 |2 t7 @* I6 e另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
1 M, Z; ]- d2 U$ z  }4 I) k1 C"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"% B# X7 s4 a, z. a( e
內容為:
) A) t7 j. v5 F, \, M2 F压缩文件共有三个文件:两个m文件和一个txt文件
3 D7 k; \3 e, W4 tspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。) Z6 h4 }. ]: B* \6 ?( J
希望大家喜欢!!
* L6 o  p- q. F! A3 `+ B% Q" n8 a附件為:FFT.rar3 d- _9 P* S! ^0 k+ d0 I1 m

5 I% I2 O, R* z7 D! Q6 i) E6 c# E我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:" u& q% ^9 T; G& n0 t

, h  l' d4 j# I, n- V' s??? Undefined command/function 'AD10'.
$ H1 |8 h. y* M/ i  `
7 w! Y0 I8 K6 V6 k1 yError in ==> spectra2 at 43
9 O' q# v3 u; M. g" ed0=round(AD10(start:stepstart+M*step-step),3)/1.8);
2 d8 F6 ~/ ?: V3 c7 X& M+ W; O- |6 B) L" D" ?: R& v( g
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!& k+ ~! o9 l9 w& `* C& {

5 y) C  J8 j& h3 K9 K( E∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
, U, U& D1 e# d4 e3 o2 N
* A  s4 i3 Q0 v0 Q! O% ?/ @[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:% K) t8 i: o" x, d4 ~- r. ?
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
$ w0 a( i) }1 G9 I) Q! o( y/ @另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:* ]; l" c$ P: X" T, ]0 ~( P8 b
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
" c9 j- R, x& e0 ]內容為:4 ~) W* j6 {" A1 d2 e" B
压缩文件共有三个文件:两个m文件和一个txt文件6 q; r9 w: J6 J1 E. h4 U1 Q
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
  m* `0 ^6 s5 ?/ A希望大家喜欢!! / F5 ]" _9 ]5 M
附件為:FFT.rar' `4 l/ f% d1 f" G) [
2 b* i3 t7 s% s
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
# W: [5 n1 t1 x5 @8 ]2 a
  z! e( g6 m6 R  b6 i??? Undefined command/function 'AD10'." }  X) Q) z3 D' y9 y
; p; [: |# i, [5 W% [: I
Error in ==> spectra2 at 43
6 n2 w" d# `9 _' a7 u4 B' e( H9 Md0=round(AD10(start:stepstart+M*step-step),3)/1.8);+ C, e9 H& p% ~- s% V

- Q2 P; V/ c2 |+ [: r  {0 k) J由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
: n- l  G' k$ l) x/ v/ |附上上帖的附件

評分

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

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式) o! o- A, ^1 ^) z1 d
要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值) q% v0 r7 _1 L7 M' J, c" ^7 m
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算
  S3 O! T) l% l5 ]) \0 F! x7 m5 _9 ?- I" w8 R* j' `
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
. q4 o1 z4 n7 A- T7 D7 C
2 }8 f1 _( @# O6 x我看不到你的附件檔,故而實在無法作出評論9 S( e$ N0 K/ h* L) D
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
5 v+ N8 F# l9 G2 Z從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????  v/ ~& h0 @  [
所以重新上傳附件

本帖子中包含更多資源

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

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

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,8 n1 n, }" c) c2 H& y
指令的寫法是否為:
6 ?+ F1 g0 _" x( Q& Q. I/ N% K% F/ P/ l
.MEAS TRAN DIGOUT: ~' `0 ~! I% F( ^  L" z' @: u
+TRIG  V (Dout)  VAL=0        RISE=29 _- x- e4 f$ {! A
+TARG V (Dout)  VAL=3.2m  RISE=2
5 ^4 s0 b4 E* X7 F( @
0 |+ C1 s. v' _3 j) w: A∼還請指教,謝謝∼8 n: j! k8 l( m3 y* s
. D' C0 C) T  D
另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
- V7 N& y! U. G7 r3 h2 W7 d
% @# J& p9 \" f9 }3 Idigout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
! B2 [$ z1 _4 J4 p9 m, }; T2 A! J$ i  ^, R0 ^
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?6 D4 Z" d( t1 k' w& @
4 a1 @( F, o  m6 S; t* u& v
[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔( y0 o7 Q' J# ]8 `2 w
故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
5 R/ |! [9 A2 m9 @* p' @所以,請再檢查一下你的HSPICE檔案吧
! H* o$ g; d& J8 U+ ^: d5 w
* y+ B! ]+ g. o, H( `$ W7 J/ e: k再來,你的.measure指令用法沒有問題
% v7 F) m' f6 M但,你的取樣點及時間似乎不對  e6 {- S  g- W' Y3 K
你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
9 P" f8 T0 p4 U.MEAS TRAN DIGOUT
* Y: T5 z1 \+ z3 ~& s* N1 O- ]+TRIG  V (Dout)  VAL=0        RISE=2; H+ b: @! z, \
+TARG V (Dout)  VAL=3.2m      RISE=2, A) m  u4 W# C% y! n
寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
- U+ u# a4 z0 h8 S) P  v% a那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock
! x# e; M& m5 K  C9 ]4 E/ w另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2
* p1 r( n" b; [5 {! 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程式。
) G, `  k+ w( {/ i' N, S+ p- Z' G
. f6 O  {3 f2 a& G& g∼感激不盡∼
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
' G9 A. K4 Y# S3 }) X8 A, P4 X" H8 S& m% I- p- o0 H; R# S# y* f' \8 L
.MEAS TRAN DIGOUT- P4 }+ ^4 n  @0 z: b
+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f
; U# N: O& g% T9 L" W+TARG V (Dout)  VAL=0.976E-7               RISE=1
0 B! \% G6 e9 r1 ?8 W, I; d7 J7 a% w5 g2 a: c) V! u3 ?
∼還請指教∼6 H% `# ?4 b# [( V; q
程式重試的結果,*.mt0檔案只出現:
  i6 K' E7 D- ?1 V. g$ s9 }6 Wdigout           temper           alter#            
: Q' J5 D- G  W: B( P/ ~# J( h1.890e-12        25.0000           1.0000         
4 s% z( m; x; b不知是否還需修改?: A% r& S3 D/ v& L; \! o9 o6 w

3 W0 c/ Y/ [* S. ^( ~' R, ?, q[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題( R* j, X  g5 k1 E; q
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息
+ o2 c# I2 Q7 r# c7 h3 o) F/ {所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
. D. ~3 y7 B7 D1 D" ?" x' ^3 ?  r' I. V! s$ e
再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock) S6 Q/ Y7 i) U5 t: T5 Z& C) o. z/ l
但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
; p! |5 V6 ^0 t一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)% ^! z( ?. k# Z) C$ j
再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
+ Y4 C; G5 A1 k, W! c舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
+ \$ e% j! M. i: f; [5 y6 b  }9 {.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us0 d0 `# x. h$ H  @' P# O
.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us! D* n& B' J/ F
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us
, Q. }" }" g. A) ?: C8 Y.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us
- J' n) V! f8 q1 J2 ?& h* e* l7 r, m  S# {
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us, S' z% Q. |8 k9 U
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us& J* w- R7 m% e1 t
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us) y- d' o/ R: h& W# C' x
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us" Q; n2 i" r9 O% Q  ~
) O( N3 t( |, I! u
我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code; Z# p! ^: n+ I' f1 {% H/ m& [  h
我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法
) _; C5 U# b. l# S) F$ P. U9 T' ]  h8 N8 v& J( \
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
+ F; \+ R& k! [9 v* y0 h6 r: u1 \可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
$ U( ~- b! L/ e我大概講一下我的架構:& J- k+ z9 g! @" B4 ~
我電路是使用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的指令寫出,指令如下:/ x% p: J- _- m; [
For Fs=10.24MHz:
; m% t/ v( \+ y  K" lV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7
/ e2 X8 N, N0 C+ Y! \- N' _V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
: D& J' v: q" |For Fs=5.12MHz
5 z" Q, c* T$ ]* e) J8 cV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7
; C5 a1 D1 \) IV1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
. {1 Q/ J. X$ _另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。1 a1 R+ y0 N( ?! f+ i! w
如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:8 u, g3 u$ x& ?! Y. f
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us
  I3 Z9 U- c% w.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
. @& [: S2 }( r; O; D( v* q& T# B然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
* T9 a  J+ _* y6 w! z- w1 d你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!: u& d# G4 T! e  e0 W/ J5 x

* T) l, q8 X( m1 ~9 o[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方
  _$ R: Q! J1 w首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來
" o) U- l; s  P5 G' I而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?: T0 t: j, o9 m. m3 T, z  m
8 e" \5 G6 }+ m& P/ d0 J
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪4 I5 s# L# X) ?6 q4 {7 Z* B

0 N% C0 E% Z5 k; v9 y- _$ ZFFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要
5 V* q2 L- N$ v+ H2 s: M$ l" X8 X: f* d6 e- Z, N1 j
clear all
3 e/ ?: Q4 a9 N- ~! O8 X- nfid=fopen('dual_measure_rms.txt','w')
$ y" a4 l+ A) d7 G# x. _for M=1:1:1024
! R8 t& Z* l# k* q       T=M-1;$ j* r5 R  S1 D* f8 b& m& T9 M
       from=(50*T)+45; %DUAL DAC measure time, }9 H" g# }, ?  Y# |: c$ C# K
       to=50+(50*T);" I: m. `8 J% E( d
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);! q: k  b$ p; }2 `  i2 q
end
! z  y/ x3 y6 ^: }8 ^MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用) a$ {- W8 d" H' ]
這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧
- I4 H4 A' o, G; }8 c! [這樣以後模擬FFT就非常方便了
! ^6 A% D, d: F2 Z' ^- q( ]3 O看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間
" \7 r, Q5 E/ R: ]$ O8 U( c( S然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧, K1 _+ Z8 |8 c* h
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
4 y9 ?% O  b7 g6 I8 Z8 f, N% N% L9 [我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:, a; G! Z( Y: U; h; G  l, x# G1 b( ~! F" C
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。+ s/ M$ z9 w5 c. S, D- P
且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
- _5 L1 X  X; N) D# I3 L5 z# m: D$ v另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。# o0 c7 {; N+ a9 c
依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
; r- K3 q* a1 X  ?: D8 @% }- Y5 mclear all
  @* @8 u1 f2 N2 pfid=fopen('sdm_out.txt','w')3 U; t3 R1 S( l7 v/ H
for M=1:1:1024% c+ `2 e5 ]# M0 i3 x( l
    T=M-1;; f1 k) c: q8 y1 `0 d( X
    AT=(0.1952*T)+1.026; %SDM measure time
( f2 q6 G) a% D' t    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);9 C- R% p+ R3 z# `
end# M; j; M% r. F3 t( ?. {: p
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
9 z9 y3 A3 V8 C7 s& r1 g想再請問的是:2 D7 u1 W4 h; P" u- o) c0 C1 S" P
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:
, q! G* p% R; u% r$ oload sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM# a9 m* h) g! h) d. W* U+ _
然後就可算出SNDR及SNR以及畫出圖形了嗎?
1 ~2 ?6 |  `  _! N8 v請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-22 02:13 AM , Processed in 0.157020 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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