Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
樓主: 緣緣
打印 上一主題 下一主題

[問題求助] 如何將Hspice資料轉進MATLAB計算

  [複製鏈接]
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! f9 D5 B+ ~4 e4 l# a4 ^# Q% n, D
3 }) X8 A, P4 X" H8 S& m
9 h: u; @3 g/ c.MEAS TRAN DIGOUT$ J, @2 l) C3 j2 Q) a+ e& ?
+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f: Y4 Z$ s! [6 @
+TARG V (Dout)  VAL=0.976E-7               RISE=1+ `2 l& O) P' t% j

( x- a# [- m( b2 S2 t" k, i, \9 l∼還請指教∼
( x  f$ F0 k6 S, P9 C# f2 t* {% g程式重試的結果,*.mt0檔案只出現:7 G' d9 N1 R6 J2 `$ K/ O6 o( [
digout           temper           alter#            
5 C) g1 L( f5 l1.890e-12        25.0000           1.0000         
1 D! i' s5 D2 R+ D& Z不知是否還需修改?0 P+ M- [" B# M2 z" j! G0 V! q+ H

: J# a' C0 o' k/ P/ j[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
14#
 樓主| 發表於 2007-10-17 14:02:04 | 只看該作者

再次謝謝Finster的回復

再次謝謝Finster的回復,我會依照你的方法再重試一遍,另外在麻煩你幫我看看上傳的ADC Matlab程式。
5 d! v( N* M, e  M3 {
& @! q; p6 j1 x% m- a∼感激不盡∼
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
! v- J3 z& Q5 D. g5 {  t故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
( ?, s* p- A/ g' S" e所以,請再檢查一下你的HSPICE檔案吧/ L, H. X: \, x& Y) l* }* T
! d% q0 q7 C% S' R  n/ _% m. o
再來,你的.measure指令用法沒有問題0 [# ^- u# i% n: Z3 i8 m
但,你的取樣點及時間似乎不對
$ G* P* `; q2 H  k5 V你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:9 O4 a% X4 O8 D  B0 `. Q6 i
.MEAS TRAN DIGOUT' }' p$ e+ S# b! `
+TRIG  V (Dout)  VAL=0        RISE=2( ~- y3 b5 e3 r, G% G2 F
+TARG V (Dout)  VAL=3.2m      RISE=25 M7 M# c/ f! m5 S5 F2 \
寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
1 O' [5 P$ B! y  b那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock; j+ ~& v: s( s/ U& c4 R
另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=22 l: h( Q) H2 U) x+ j3 h4 K
再者,如果是用.measure來計算digital code,那如果以rise edge作基準則應該用RISE=1,而不是RISE=2,這是很嚴重的錯誤,除非你的clock及取樣有delay 1個clock的作用在,如果是以fall edge則是FALL=1,若是以你RISE=2,那你取樣出來的digital code應該都是錯誤的
12#
 樓主| 發表於 2007-10-16 17:02:11 | 只看該作者

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,/ U& d, g" I+ @; \4 X
指令的寫法是否為:
7 g! ^& e# m# P1 C2 I
* C  M4 F2 L2 r" q) F+ @.MEAS TRAN DIGOUT' @: C/ k8 Q, t) y+ u0 ~
+TRIG  V (Dout)  VAL=0        RISE=2
- k+ ^0 [/ a9 T+TARG V (Dout)  VAL=3.2m  RISE=2
# t* L) ~& H, ~) z3 \. I" I( Z, x* l' R1 b& n" v
∼還請指教,謝謝∼' N" d4 T6 ?4 d- i: W( P. z6 L
; P) j- P# c% P) r7 e$ p: K) Z
另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
+ L8 }* R4 z+ {3 w, F$ Q
# _" N4 H" x' s+ n1 Y( [digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
3 M8 G* i/ t6 s! a7 a/ [' C/ g4 P$ j
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?$ ?3 n" G; B  v% j
! X3 W7 c  z4 I$ b' T" h
[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????
2 [0 D& C1 _& G1 ]/ B. T所以重新上傳附件

本帖子中包含更多資源

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

x
10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式6 y/ b/ v  d: d8 s
要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值4 w$ u8 f! r8 R( A! ^6 j" p5 Z
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算% G9 D0 }! X8 W$ x

/ W& T( t5 U2 C' A2 w- T& n' Z% k. ^在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧& C! C& W' r9 a8 `4 U1 E

* @, r; B+ G$ ^3 R; Z我看不到你的附件檔,故而實在無法作出評論
( K7 S( X$ K' h- B6 ~: M! R而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
6 V8 x6 O* ?1 F; L  Q" D2 c從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????# A0 @* M3 J1 W. W4 ^' j6 S. B
附上上帖的附件

評分

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

查看全部評分

8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:- e' a; `2 ^6 M  K, V+ ?
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。 & V3 K2 B6 b, S3 l% _" p3 }# X0 k8 `
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
$ k/ T: a1 [0 Z- w" d0 F2 A"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!") Z. j- Q9 k4 p* K  J: Y: |* m# G
內容為:- l. {9 V) ~, k6 `7 Y
压缩文件共有三个文件:两个m文件和一个txt文件5 a1 u: n# _* l+ h0 R, x% h( Z
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
3 s* n9 Z* Y3 N希望大家喜欢!!
" r. _$ `- f7 {* q附件為:FFT.rar
. L6 z" d0 d# F9 x0 K4 h% G
0 i+ ]/ `. y4 g, 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卻顯示以下的錯誤訊息:/ E+ m) j! [" }' h) D1 T1 P
& h! ^. G$ V/ S. I! y+ [
??? Undefined command/function 'AD10'.
* k/ i; J0 X$ @; A5 I+ f/ @; z2 I. R1 m- E7 v5 q* e/ M2 H' [9 r8 {
Error in ==> spectra2 at 43
- n" z+ s$ L4 h* Z' J; sd0=round(AD10(start:stepstart+M*step-step),3)/1.8);
' h) {* |6 R7 C; Y. e: K- Q% ]' I4 A7 J. p4 B
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
  }5 H1 F7 O, |( e9 f% R請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
" }0 T1 z0 q6 Z" J# C" l8 e( P/ P4 }1 X
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:4 Q' S: x2 }: Z/ W( V8 w$ x7 U6 H
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
: C+ R4 a& D; y8 f) n內容為:1 e: _3 \! ~, O# y
压缩文件共有三个文件:两个m文件和一个txt文件
0 f4 z5 H, b! [1 Wspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
3 {* E1 ]) C, E# a0 Z希望大家喜欢!!
7 z6 c, J4 q0 b/ m3 Q$ z; ]: u% y附件為:FFT.rar, W0 X6 r# I& |6 L, x

+ @0 Z0 H* S& V" \我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
, q9 N( n! _7 K" J. W" b) y" p, t' f4 R2 Q7 h* i, `3 K
??? Undefined command/function 'AD10'./ |5 i& S6 k3 A! A
" p5 b! K" S3 ?* y5 c2 n( Q8 V
Error in ==> spectra2 at 438 J5 }$ m0 ^5 q6 X$ x, I
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);
; {! r' t5 _4 }9 K. L" h7 q* b1 L& k7 m2 @6 Z
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!" |/ a, k: W. `! H4 D: }
) d, h* g6 c8 r9 }: J) O2 }
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
9 L, H, [! F8 Z& p4 i5 s1 J5 J. S# i5 B4 _
[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
6#
發表於 2007-10-13 08:20:07 | 只看該作者
我以前作DAC的MATLAB部份程式
; K2 ?' h  D! Y, r$ O0 M& w9 S我想,應該可以給你一些參考吧7 ~6 E; p( y9 D% l: }0 q
1 c) {+ E0 \2 v' }- V
% --------------Using minimum 4-term Blackman-harris Windows -------------6 G  Z' _* c6 s6 |/ G% B' V
nb=1:1ts;
  J" W1 S9 g  h/ C& V7 e& }kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));$ J8 i% r; F# u) h/ B3 j
win_gain=sum(kb)/pts;
! P, W1 d2 G  O: r, _- P% O7 {kb=kb/win_gain;
! E( N5 N8 V1 T# l# @9 H$ p$ P
7 U3 E" w% s5 {) M% --------------- Calculated fft --------------------------
; N; K/ _9 g& M! Nyb=kb.*x(ptsttfi);
( r! Z6 m8 Y* ?  J" ]0 f1 cyk=fft(yb);3 e5 o  C8 Q1 z
fft_no=length(yk);3 X' Q/ s1 ^  H8 [/ C1 Q0 z5 c7 K0 a/ B
f=fs*(0:fft_no-1)/fft_no;
$ a" S% X2 S+ aPyy=yk.*conj(yk)/((fft_no/2)^2);
+ m$ i8 {' k4 d7 L: N/ ^- f$ H/ K
% ---------- Calculate THD ----------------------------( G, v- |+ {4 ]
j=1;
6 X& ^- M+ f0 R( W, hfor i=1:1fft_no/2)
0 N0 Y/ ]: @" v+ _7 w( R3 y" l0 j    if (f(i) == (fi*j))
) w; a* _- E, ~2 ~+ S: l        HD(j)=Pyy(i);     %% find all harmonic distortion components
4 F1 d" h& B+ S" V- K  X/ T        j=j+1;$ z8 l: P0 ~# Y$ P3 C! l
    end2 r7 a- c% J0 ~8 U* j
end+ o( ~# i9 S1 Q1 M- q
P_hd=sum(HD(2:9));
5 n( p3 ^& i6 tTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
' \. v5 H$ R3 W* Mfprintf('THD = %g dB\n',THD);$ U" W5 Z4 {& L6 E/ ~

; O# o" t3 f7 K0 r% ---------- Calculate SNR ----------------------------+ N# @5 J! S( T) j
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
7 J; _7 B) t+ v: Q. |" W5 @) yfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
. X, y$ a8 g/ ospan=max(round(fft_no/200),5);: v7 l' _: N, w& N- \0 U8 ^
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
' d% r2 N5 E* k3 [( a+ |1 _. n
1 l" w; i" ~* J, \P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
+ g: l! {" R8 M4 q3 d9 a( y/ p, _) v/ vSNR1=10*log10(P_sig/P_noise1);
: V7 C3 T& ~9 ]3 f% Ofprintf('SNR = %g dB\n',SNR1);
5#
 樓主| 發表於 2007-10-11 17:44:50 | 只看該作者
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program, ; ~( w+ c% B+ q6 ^: ^9 @$ V8 }
所以  只要將FFT後的資料  做一些轉換就可以唷!!
' q& k; K$ K) L將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"" L( x5 Z1 j8 u  ^: B7 B$ o
就可以換算  SNDR 了!!4 S3 `3 i' |5 i7 l& y3 _; T
SNDR is Signal to (Noise + THD) ratio?
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

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

9 D. e5 T( i5 V( T+ A謝謝!
2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用
. n" g( Q) }  w( n就是直接用.print指令把你要量的電壓印出來! _- h! L* {; `; p, e; B( `
然後再用手動把印出來的資料copy起來' m! ]8 m" I1 E' a1 H
然後貼在Matlab程式上面 然後就可以做FFT了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-28 02:59 AM , Processed in 0.171009 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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