Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....2 @6 }" L9 i; ?
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失7 a) @5 L3 U0 j2 H% m- y+ N) r
4 a6 x% M, S: b1 _
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
# q: W( a) i4 p3 ?, w; K5 b而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
- K1 I) C# [1 }; q/ }/ ]% f( ^1 U3 _: n, \' L2 c  H
至於另外個問題,我的回答是,對的
% @2 V/ g+ B2 V% v$ Z但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下) F- B% k! t2 k+ M( [, F0 n, ?
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
' x5 u9 m/ j" H8 c8 Kvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了. z5 |' o2 y! g9 _- @* _9 W, X- R4 V
至少我模擬起來也是這樣
: m, q' c( e# S* e' A. A而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
* X% Q7 r( [2 Z0 E" j2 r所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
& d) Q1 g- V. P說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。
( B$ F8 l( l  r4 K說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 , C5 [$ \. C- D" X
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
" R4 y: q0 y' L% t2 O5 J/ }( O2 E7 p此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
' \: B) e; Y( D7 e# ?- m# K7 A∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:: k  e; K! v: l4 f2 @2 X4 e
我依照你提供的程式,修改成我的規格後,程式修改如下:
6 n- ]! ?4 L. }% --------------The number of FFT -------------; {3 Z3 L/ ?3 I6 R. p
fin=5;% *KHz9 t  I- \7 m. l: L; v9 ]5 J2 ^
fs=5120; % *KHz6 f9 M# {% m8 Y" U9 V( W
cycle=1; % cycle = 2^N ; N = 0~5
  ^! l$ f/ D% q4 U2 Z$ A/ CM=round(cycle*fs/fin);( w8 v& Z1 y0 f$ ?% |% O" }( [
% --------------Load the binary code -------------* l; K) p% q6 _1 |( q# N
load sdm_out.txt -ascii$ v' ~% c, r. ?5 {; X
start = 1;
5 G: `3 j' I; i2 H5 s4 o- wstep  = 1;4 V( c' V0 b0 m) [( m' B7 b
%ADC
0 U  m! R( R! J& b) d% Ex=sdm_out(start:step:M);
7 E0 g' J9 d' m, G
% --------------Using minimum 4-term Blackman-harris Windows -------------
3 \4 D% R: |: ^$ e9 y, x$ t. Iptst = 1;6 X% d$ a6 [: n3 [& x5 n' I
ptfi = M;5 @* C, A7 Z) c, y; B' v
pts = M;% z$ B) e' h' Y  S6 ^
nb=1:1ts;
" O" R& ]% T  d' S9 R  kkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
# S: |7 t7 k, G7 ?win_gain=sum(kb)/pts;
( F! a8 f6 J. j# N1 H' v# q: Lkb=kb/win_gain;2 v# E9 c! j3 W  F% ^" B+ @
% --------------- Calculated fft --------------------------$ f  R5 \- z; }5 v7 N
yb=kb.*x(ptsttfi);7 d: `5 Y- h: `$ r+ L% _
yk=fft(yb);
- `( s  F) B* F$ n; F0 B# Wfft_no=length(yk);
  B9 V2 {0 y* Vf=fs*(0:fft_no-1)/fft_no;/ x: `7 \  ]6 T- `  @) K; G
Pyy=yk.*conj(yk)/((fft_no/2)^2);8 \- L7 m. y7 V
% ---------- Calculate THD ----------------------------
2 H% g2 Z6 i6 V$ p; k' }j=1;
$ Z% N$ Q8 ]$ B: a$ q5 Gfor i=1:1fft_no/2)
+ u: Y6 n% g, T) Z    if (f(i) == (fi*j))  % Q& H* G5 F# G0 k
        HD(j)=Pyy(i);     %% find all harmonic distortion components
0 r; @: q$ A' k7 p6 a9 q        j=j+1;
+ F; {& X3 c" P    end
/ @' u, b( f. b; q, N: r2 Bend6 T6 H9 s' t  R7 X+ I
P_hd=sum(HD(2:9));
8 o; L" W& I, ]( X; VTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
+ |  b8 ?! r! Z. bfprintf('THD = %g dB\n',THD);$ H9 H& j# G7 M* |. a
% ---------- Calculate SNR ----------------------------) G- G0 f) y# T& y9 n# c
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
% h. a# J8 A* O/ hfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);- T; G" w5 G0 z7 b
span=max(round(fft_no/200),5);* B( u4 Y% k" G( t& }! e
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));6 v, w" e: z1 l7 b0 s; W- ^# L2 \
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
  k* Z( c7 [7 n. u4 yP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;- @8 J1 H3 ?6 G
SNR=10*log10(P_sig/P_noise);) w. p, \) f* F% R9 C
SNDR=10*log10(P_sig/P_noise_hd);$ a5 r5 |" o+ Q) C; Y( F
fprintf('SNR = %g dB\n',SNR);
, l' t3 I+ i+ b" X- _0 K! cfprintf('SNDR = %g dB\n',SNDR);7 K/ L0 u; Y, Q* |/ d

3 X2 e, i1 _- V" t. }藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:, T1 Z9 |# B; w  o; P- }
??? Error using ==> times
4 u# X) \+ Q0 l( \Matrix dimensions must agree.
0 b/ J9 l, n8 D

8 v* C2 S% M" U& y% R! H, \! K: KError in ==> sndrtest at 21& h. d8 ]; c# N& A! f1 h. s# `# }
yb=kb.*x(ptsttfi);

+ d* ]  `& V* W1 x
' J6 W0 p( `/ Q0 v& {7 |4 ~, c因x函數是我自行定義的,可否幫我看看要如何修改?
5 M/ Z- w! J2 W9 p( o5 `另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
% x; {. O4 E- W! Z6 e  [# q9 R除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。0 b7 e6 l+ O% l1 L* I; e# S! O
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。+ F% v0 U& V2 _* q* v! o
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
- r/ V7 G  i! i3 y: c那就是你設ptst和ptfi是同一個值是不對的
& k4 ~) a- L9 `" z' `" |# u/ M0 _* rptst是計算fft開始的值
8 h$ k4 x) y. F1 O6 ^7 A( \而ptfi則是計算fft的range,如8~519,total則為512點6 E) r) e0 N, y3 P% ?* C8 W) k
故而你在執行MATLAB程式時就會出現錯誤
$ U) T1 \! U0 J" p, O! n  C" V0 v
6 g- D) d0 c! Y  H  y我看了一下你的MATLAB程式,基本上沒有多大問題
2 p3 D# _. Z+ G0 K: T4 J7 w不過,要小心計算THD的值和範圍
' t: L1 f+ d6 ]因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤: ]7 P3 R7 \, O+ b" C* j/ Z% C. o

: e# Z/ P, k7 i1 m9 [最後,計算noise有好幾種定義方式8 d; R2 }* N2 }" T; c
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理  Y3 m$ e$ n# u1 b4 f3 p
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可4 x7 G' x  S- o! G0 G6 f
因為目前在計算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筆資料,還是說我這樣的寫法不對?
5 T" `3 V& i2 \' d9 h  v; ~因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
5 I6 l7 o& ]* s  O我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?& G/ `( P, I% ~+ i4 D2 c' `
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
( S( W5 D: w5 K9 J+ c6 r: |# M% {我列出我當初寫ptst和ptfi的式子關係式
' @/ o; I4 q6 D! F7 `ptst=2^3;          % calculated fft of start point- f. s; S. u* c- Z1 Q' t1 p& l
pts=2^9;           % calculated fft of end point3 D$ \% F: i1 A4 R
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point; m/ f5 i5 l8 ^- S9 K$ d$ X
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
% |( i5 v- i' W% R8 s8 ~* w) I如此一來才能夠取到足夠運算fft的值
# k) `- y  j4 y  u. @
+ f- v; C/ X8 P7 H3 [1 P3 J另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值0 B7 E9 }3 Q, N0 Q6 V
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤# T% I) @8 _" K5 [" n" B* g
1 W$ c$ _* S5 {& ]! G& _! A
如果對於要設的參數仍有問題
8 ~- u, t9 h* ]2 {我可以把我最原始的程式寄給你參考
/ [  M, b* R% g
8 g( S1 I7 q% |/ n1 M) V+ ^9 Q[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
) T% |( B" x0 |5 ]- o3 z??? Error using ==> times9 [6 A0 v  x9 M2 k* F" g+ L
Matrix dimensions must agree.
, @  r+ K' P& s+ @2 [5 |9 k; a. }' g6 \0 ^- i) M/ h
Error in ==> sndrtest at 26
5 [/ q4 i" k' uyb=kb.*x(ptst:ptfi);8 g: U$ L( @3 c) t. A7 O% I
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。8 C+ v' v: G- C! h: r  U
∼感激不盡∼( I9 p1 g- X% o: [9 r" ?9 {
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
  O. ~8 b9 C+ S特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下" i0 _" u) X) ^, }: |6 k# S
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
) m9 E$ w; T- q" ~( ?因為沒有MATLAB請問HPICE可以直接做嗎??
5 E9 j$ ^5 G: w' u% q* G1 s7 R# x
0 S! r% F( f' j- F請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體+ q% j0 K& Z$ k( O8 [
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬: F. n3 ?" G0 j" x6 |2 W2 Y
但,在業界,個人的建議是,還是要跑HSPICE會比較保險7 s! e; v2 ^- l
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
: I) G) i. U7 d: V  E! [3 }一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易7 u; g3 r1 p: u, w0 s/ i
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
/ \' a# A- S$ ~! z" z5 m/ F/ z                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?; x, \2 W; r) a0 }- t. T5 h
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析+ i$ Y9 c& S  L4 \
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
6 s( Q. v0 i$ R! X9 p如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。3 |( Z+ X) }* H  v! N. S, K# o
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。$ k; @; J+ M( x' v0 O4 x

6 h5 T8 r. Q  N3 p[ 本帖最後由 緣緣 於 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的檔案。% n4 m6 ^0 c4 L
2.然後開啟matlab軟體。  c/ v7 h0 a5 T8 }, m- ]5 T
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。& C$ G0 N0 M* w1 b. N5 c5 A+ e
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
( l% f* j% C( b5 i; {2 X. c5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?: X- ~5 V/ u* m9 K: e) d% H

* |+ v  }& A1 d9 z; [$ werror in hs_allocate_sf: unexpected values in block1 header: u; N) D* v& K( C; g
??? One or more output arguments not assigned during call to 'loadsig'.
4 [; }3 `/ P5 |0 r2 s這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。1 c3 y" Q+ P, b4 D( ^
第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 04:04 AM , Processed in 0.147518 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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