Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....7 _  b/ h! T4 _1 b! e' ~7 m" Y: h) L& Q
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
4 \0 ^3 e5 t4 T2 s, C
7 d5 K3 Q% ]% @+ R至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
+ p- C+ P) z1 D而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久8 b# A+ L* u3 X, u8 N1 ]* G
/ m4 k+ b9 Y7 w% l7 |3 D
至於另外個問題,我的回答是,對的# E( V# H  B# B+ d4 P3 s" {
但,要先把一些參數改成你們自己的規格才行

評分

參與人數 1 +5 收起 理由
緣緣 + 5 謝謝finster每次不厭其煩的指導

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
7 C' Z0 B  \  {1 S% z3 U, b0 X緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
6 X, i" p, w4 t- g; T% @; L0 T/ @video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了5 R7 Z& e9 D  s6 a
至少我模擬起來也是這樣. r/ ^) G* J8 f8 b3 z7 z
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
! t0 y7 M4 ]* @# h0 y所以我想取樣點很多應該是正常的吧

評分

參與人數 1 +3 收起 理由
緣緣 + 3 謝謝版主monkeybad的指導

查看全部評分

23#
 樓主| 發表於 2007-11-26 16:38:58 | 只看該作者

非常謝謝finster副版主的詳細解說與monkeybad版主的指導

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。4 w+ L$ W' M3 ]: ?* ?* R$ r
說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。) s# ]. I3 V" Y( s9 @/ x8 l9 }
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。
$ s5 k4 C/ s* J$ i在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
; |8 F( N: M2 b. Q此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
4 s% ^, d5 j* S+ P: H∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

請問finster副版主有關程式問題

請問finster副版主:
7 u; y- t; X5 H/ q3 b我依照你提供的程式,修改成我的規格後,程式修改如下:& W9 ~% O8 y2 d( V) F
% --------------The number of FFT -------------& W" E/ k4 e* j+ D, h3 ~" f! U$ I
fin=5;% *KHz
$ Y# t  b6 q0 m* ofs=5120; % *KHz
3 z2 G( `0 W1 M  h+ [& u7 jcycle=1; % cycle = 2^N ; N = 0~5
6 e( F7 [6 C1 L$ c- O' \M=round(cycle*fs/fin);7 b7 }  t2 c6 ?
% --------------Load the binary code -------------; Y7 D& j# Z, q5 T3 W4 `
load sdm_out.txt -ascii& `& C# q$ _3 G1 M
start = 1;
0 E8 j0 F' ~+ K  W1 M3 istep  = 1;% ?+ a& L5 N2 i' T& }6 i
%ADC
0 a1 r! W4 U- w& e6 Mx=sdm_out(start:step:M);
6 D; L3 a# N( s  P$ q
% --------------Using minimum 4-term Blackman-harris Windows -------------3 {8 q. X2 G5 Q! i6 o3 p
ptst = 1;' \4 t7 c. P+ K) b6 t4 K  r, k
ptfi = M;
1 c6 p& D  d& N  f8 N  ?6 ^) ?pts = M;, f' |# {8 V1 D9 [
nb=1:1ts;9 e( y; s, {6 K0 ^
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));& G- U8 b" W7 [) h3 U0 h6 b6 g
win_gain=sum(kb)/pts;7 Q; K: c( S1 A/ S* ]' @8 L. V  b, }$ P
kb=kb/win_gain;+ s9 }0 c; c1 c8 Q4 `" ^, v
% --------------- Calculated fft --------------------------
6 ]9 i: [4 f5 P0 Ryb=kb.*x(ptsttfi);
* J, A) B5 O" H3 U
yk=fft(yb);
& e1 i- A0 y5 Y: T0 ~* D8 x% Afft_no=length(yk);* R9 {) |! `8 m- O
f=fs*(0:fft_no-1)/fft_no;! @; \( K$ h& @- Z( a* z: b
Pyy=yk.*conj(yk)/((fft_no/2)^2);
" L, _( T  A# d* C# T% ---------- Calculate THD ----------------------------
: V  \" ^" X0 qj=1;7 I4 T; |2 O! z, L
for i=1:1fft_no/2)
% U8 p" _+ o: `  i# ~& r% r    if (f(i) == (fi*j))  ( q& C0 f9 \9 y* j) b2 z
        HD(j)=Pyy(i);     %% find all harmonic distortion components: p$ R; E& o9 v' B
        j=j+1;
, I! V0 W3 L& J( ]7 Q' ?4 y2 O' U    end
7 l2 F1 W# \1 u( I( _end
/ D5 m; N, F( w) v; n* `P_hd=sum(HD(2:9));
" t- U- b; F( A. |. `- STHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;' f6 v( W8 y+ s0 M
fprintf('THD = %g dB\n',THD);& o) L" y5 C1 t+ _4 h4 R& K
% ---------- Calculate SNR ----------------------------
/ ^6 X" ?  D7 S( Tfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
9 F: B; q* t2 [fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
( t( d- g: V0 Lspan=max(round(fft_no/200),5);
" i! Q. R. O$ u! T! h# w. ?# HP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
- v2 m7 z4 _7 g6 j7 \3 TP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
3 r5 b" O0 S, uP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
+ y4 I" O3 n. J! z# p! q1 A
SNR=10*log10(P_sig/P_noise);
% x1 h/ U3 I- G. c4 o& Q3 QSNDR=10*log10(P_sig/P_noise_hd);; o: M& ^; P5 q7 B' s1 i! N/ u4 X
fprintf('SNR = %g dB\n',SNR);( a" X- B* }) A
fprintf('SNDR = %g dB\n',SNDR);
9 x2 e- `8 ~  P  ]9 Y5 i; |
0 ?4 r7 y. D1 ?/ h& A* t藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
0 \) W* ]# t- o* s- _1 Y1 x7 W??? Error using ==> times+ q" z; ~) j  i+ T1 F! B. t
Matrix dimensions must agree.

0 J# F* l- _0 t" V& C - v, n% E: {  t' F2 K
Error in ==> sndrtest at 21$ M; Q7 y% T' H) a* E
yb=kb.*x(ptsttfi);
5 K/ z# `2 z% W
2 u7 g, H& R! ~+ h
因x函數是我自行定義的,可否幫我看看要如何修改?
0 g5 N2 e3 ^4 g" p+ P另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
2 z0 l$ A. r1 q! v* w- S除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。6 B1 V& r  d, {5 \: `+ G# q
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。8 A* Y3 |, `3 U0 I: B0 J
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
- q# |' \9 u) [8 s那就是你設ptst和ptfi是同一個值是不對的
$ W- V0 K8 s! L* X8 |9 D  }7 Dptst是計算fft開始的值9 b. L4 i, `2 T5 E) U
而ptfi則是計算fft的range,如8~519,total則為512點3 m; w1 M# y3 J+ C0 u+ F/ h3 b0 `
故而你在執行MATLAB程式時就會出現錯誤
. ~; B" Y& V* [4 h, J& g
+ T6 `9 Q, ]$ J8 m1 `) S- A我看了一下你的MATLAB程式,基本上沒有多大問題
* A. D6 ~1 Q2 p0 L不過,要小心計算THD的值和範圍
$ K! n* S: d( M* F1 `因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤2 D1 Q  w" S: C- S
. M4 \: ^5 u# [/ t1 _9 c& y$ E! r
最後,計算noise有好幾種定義方式
; K& O) P8 F+ W' l原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理# f/ f' j: J8 _# x; d- s1 c9 o, N
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可' r. J# W  H' ?" }: {: E. k
因為目前在計算noise上並沒有很統一的說詞,故而,只要解釋的合理即可

評分

參與人數 1 +5 收起 理由
緣緣 + 5 謝謝詳細解說

查看全部評分

26#
 樓主| 發表於 2007-12-2 18:25:13 | 只看該作者

感謝finster的解說

感謝finster的解說,我解釋一下你的回復,我程式中ptst是設1,但我的ptfi是設ptfi=M=round(cycle*fs/fin)=1024,所以並不是同樣數值,取1024是因為我有1024筆資料,還是說我這樣的寫法不對?
7 z# A. t' j: [2 r( d) E因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。- n( {" x+ s- X1 l- u
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
! E9 ?, c6 J2 G4 j+ b, s( h/ b! G謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了/ a/ F3 ?8 o' T& B2 a
我列出我當初寫ptst和ptfi的式子關係式3 g8 V( q2 a8 l5 v% G: G# G' U+ E
ptst=2^3;          % calculated fft of start point! Q8 p) {7 ^" u  |
pts=2^9;           % calculated fft of end point
) h* O- k1 A7 [ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point9 p* g" E+ b: I, G* `2 X; p
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
) ?4 d! O4 }% v9 p/ W如此一來才能夠取到足夠運算fft的值/ M& [7 @. [( P- w; F& M

3 M( T- p$ o/ l, t: p0 c& _另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值: w6 G$ E& ~0 j& i. V
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
5 v' V# K4 J) }; K
! v5 a! S* ]1 x! q/ P如果對於要設的參數仍有問題
; p8 C$ _' }) V' e, R: F, f我可以把我最原始的程式寄給你參考
* b% n7 P  B8 g$ s( w  T4 `$ o2 R5 ]
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

參與人數 1 +5 收起 理由
緣緣 + 5 謝謝指導

查看全部評分

28#
 樓主| 發表於 2007-12-3 12:16:11 | 只看該作者

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:7 C! l& k; R1 t7 z" a3 q. h; W
??? Error using ==> times* V2 q8 H" H0 b; I, j% ?( w4 z
Matrix dimensions must agree.9 r* O; U* f( }4 J- i

( S( i! Z6 B; c; VError in ==> sndrtest at 26
$ y3 @( @. A* H; Z5 X% |! w1 C. Xyb=kb.*x(ptst:ptfi);
( k9 R" i+ w( U, n" z那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。2 y2 h# K# d8 h) n+ `8 O# P
∼感激不盡∼
& q: R' k1 k5 ^& kps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?2 G* c& F6 C( P+ y7 ]! ~. |* v
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
; c- {8 y1 ~, R7 b- P' N如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
0 f( w' r) i- [: f: Y因為沒有MATLAB請問HPICE可以直接做嗎??
& g% ^% s1 n0 ^
8 G3 a& X- n2 s4 \請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
/ }/ Q) [) [$ i" n5 v( k至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬: E2 K2 g2 O, p! F% J+ A6 z
但,在業界,個人的建議是,還是要跑HSPICE會比較保險
; h' U; V# Y/ I& v+ r至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算8 H( [2 U, D1 F5 L2 U
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
" b6 \6 a) |8 k* _* K而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?2 c$ s  P( q0 t( ^: `) d4 L) g
                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?; S; D& ~0 {1 Q7 E* R0 [( K1 ]2 J
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
% A" f( S0 O/ |4 N: K請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:7 g' D: L3 n6 s. G
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
8 ~4 s7 t' p" D" X( t. W% e關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
# E1 K% n# W! ^6 H* \- y6 f+ m( ^4 ^4 F0 w' }# n
[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

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

查看全部評分

37#
發表於 2008-4-29 12:53:25 | 只看該作者
請問一下,第一個問題我看完附件後,第三個步驟還是不太懂,是要先把hspice的波形檔放到hspice toolbox裡面嗎?那在matlab裡要怎樣叫出波形檔呢?
38#
 樓主| 發表於 2008-4-29 14:03:58 | 只看該作者

回復 37# 的帖子

1.首先你跑完hspice會產生一個*.tr0的檔案。1 `3 g- X3 Y+ y4 x
2.然後開啟matlab軟體。8 ~+ `  p# t' K& I0 D9 a$ z1 `- V, b
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。( s3 h! o0 Y) P. O
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
1 N0 @/ l& L+ i& v2 u5 u! J( v5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?1 \9 \, b* u/ v# \! m0 W- C& N
, O) \- y+ b+ z3 e+ o$ g  n
error in hs_allocate_sf: unexpected values in block1 header
* A' o6 ~5 Y8 Y& b5 y: ^" V- O??? One or more output arguments not assigned during call to 'loadsig'.  @( [" U+ h5 b
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。, g4 f4 E/ a" u" l+ h5 t
第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-25 02:14 AM , Processed in 0.195011 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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