Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
& E8 h& g& I' x, K! v$ d% h) d所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失% S7 g% ]. [$ n8 o3 C0 J$ E
) J) r! l) E7 H4 T- }2 u7 j" w
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
; U+ o% V7 m2 M( Q8 ]而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
; D  T' P2 S/ U# t6 A9 P! T; F# V
至於另外個問題,我的回答是,對的
7 _1 L. S) [/ A7 H7 ?  Y但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下5 j' t& X' m3 ]
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣) e% D! y! O/ V( l3 |% O0 `3 ~
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
. A: e- v7 X3 L0 h9 }4 @5 q1 {# H至少我模擬起來也是這樣
/ b1 m' s$ r' Z  k( y2 y0 Y而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC! ~- D: k0 e2 A7 ^6 U- z- ?
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:. d* v6 F' o& ]6 z: p
我依照你提供的程式,修改成我的規格後,程式修改如下:
3 S3 ?0 U" k9 W+ R% --------------The number of FFT -------------) N  d3 _" s1 N! E, G" t( \
fin=5;% *KHz; [8 T/ _1 K: c7 V/ h; p
fs=5120; % *KHz; R5 `& n; k9 {+ ^) H: G& p7 F5 i
cycle=1; % cycle = 2^N ; N = 0~5   d7 X! L1 I* e) H: d2 p
M=round(cycle*fs/fin);
6 n* o3 }* _* r3 C( }% p. a$ T% --------------Load the binary code -------------; r& ]2 W5 [* S% Y( M
load sdm_out.txt -ascii& X- ?! F  u! s- z0 m* V* g, r: \
start = 1;; l3 P9 ]: ^+ ^, l5 b" V. e
step  = 1;5 w/ ~% r" l2 m
%ADC
+ W: B5 p& W% v  hx=sdm_out(start:step:M);
/ [1 f: Q# p: r2 ^5 Z
% --------------Using minimum 4-term Blackman-harris Windows -------------# p$ y+ L9 `3 l  V4 \
ptst = 1;' c; ]) @  n5 V3 o- A9 T" A
ptfi = M;, g; b: s' c% [3 S
pts = M;
( h1 g; _: z9 X2 P0 D: V: X
nb=1:1ts;$ P+ b$ j# J+ |" v' Y! _3 ?+ Z! k5 a
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));) {. n( O( X, D6 d
win_gain=sum(kb)/pts;# c& Z$ b7 X& ?9 i- ]
kb=kb/win_gain;
2 l# n+ _: u" ^4 g7 b% --------------- Calculated fft --------------------------% v: T8 U  ?9 q. L6 _
yb=kb.*x(ptsttfi);5 D  `5 Q5 a. P
yk=fft(yb);
4 Y! z  B, y# A/ d% Vfft_no=length(yk);
7 u6 s# I9 o3 y2 of=fs*(0:fft_no-1)/fft_no;
$ q/ ~- s" t/ _, r) ~2 qPyy=yk.*conj(yk)/((fft_no/2)^2);
8 I; y' |2 q  Y7 N( w6 n. H% ---------- Calculate THD ----------------------------2 X4 Y5 \, A0 ~: U  s6 m0 T
j=1;
4 j' o: W+ \3 K0 T- a" h- h( m2 i1 Nfor i=1:1fft_no/2)
0 H$ C7 T( ^/ U$ K  d- m    if (f(i) == (fi*j))  9 i. o' K- j6 j. h( Y8 U. O- p
        HD(j)=Pyy(i);     %% find all harmonic distortion components6 O0 [' n0 ?3 l* W6 \, k0 z2 Q9 v
        j=j+1;
6 A: P3 q* }( O4 d& M. h    end+ ]/ K/ R/ P' h4 ^6 p9 ?& J
end2 F6 A( n" J1 p, J
P_hd=sum(HD(2:9));3 I; V( s) L7 T0 i9 H5 D3 O( ~
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;, _9 o6 g9 V2 h4 Z+ p" T+ d9 U
fprintf('THD = %g dB\n',THD);
+ U# ?( {6 s: ], E% ---------- Calculate SNR ----------------------------' f1 [9 F0 }6 D. m4 L; d/ a7 g
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));) @' O# m  v3 m: l' N6 y; V
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);& b$ d# M, @6 J
span=max(round(fft_no/200),5);
# n! o; W" ?. B& uP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));! A2 c0 O+ _2 q0 L" y) d
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
5 x, ]2 D7 Z' o: @8 eP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;1 R1 R, i2 D( f. Q+ W) r
SNR=10*log10(P_sig/P_noise);
, z, g3 B0 \: l, [SNDR=10*log10(P_sig/P_noise_hd);+ D! o8 s0 g1 l. s- c
fprintf('SNR = %g dB\n',SNR);4 ]4 N8 @1 d: y; J
fprintf('SNDR = %g dB\n',SNDR);
& {2 Z. B8 _& P2 ^' h
- l0 v6 |4 o. q! ^/ T藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
9 ?* U7 y$ m; y0 a2 d& o, ]??? Error using ==> times. [$ c$ Y) I: v- l& V* M* O
Matrix dimensions must agree.
/ I) p3 S" Z) _  }7 \: P
4 t" p, @6 {# D' b+ R2 }" z
Error in ==> sndrtest at 215 }7 Y8 g: m. V) r
yb=kb.*x(ptsttfi);

5 b* W: N; l% {8 x3 ^; t) H$ {2 r
因x函數是我自行定義的,可否幫我看看要如何修改?) A; U5 }# H6 t9 O
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
7 r1 V7 P" J+ m. v2 O除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
) c, W! G* G& {0 L  I8 U5 r: h附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。8 s( V2 A4 M' n/ B. x
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題0 y( ]: T5 j0 a$ v. z+ ~9 ^- ]
那就是你設ptst和ptfi是同一個值是不對的
' z" b$ X: c+ {0 N5 eptst是計算fft開始的值8 w' x4 W4 a" V, n
而ptfi則是計算fft的range,如8~519,total則為512點
$ h! ^* {. ~8 s! Q故而你在執行MATLAB程式時就會出現錯誤
  q  w& U1 O; P
, S4 {) @8 b" p& Z6 R9 q7 J, i3 p) q我看了一下你的MATLAB程式,基本上沒有多大問題
+ h1 J9 o" y$ @) G$ G不過,要小心計算THD的值和範圍
3 Q5 C% P. q) Z! E因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤( j4 M' b! e$ b9 y* c" u  H. U) j' y
( I9 ?/ V% |+ M/ Y+ j. W6 m
最後,計算noise有好幾種定義方式  U! }. o' P4 E: o
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
0 K' x. v# n$ E# i2 s我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可* s( |$ Z! t2 |- J- v7 r  o$ k' A
因為目前在計算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筆資料,還是說我這樣的寫法不對?
. [1 B0 p( J! P  e1 k$ o$ Z/ |5 R0 w因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。& k; ?% ~) q- E( C7 M' o
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
  d* |$ M: G7 }謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
, e9 X0 }% Z* U8 ~% h" p我列出我當初寫ptst和ptfi的式子關係式/ X4 v8 X' h, ?. a
ptst=2^3;          % calculated fft of start point& {" a6 N; l: V8 |. r
pts=2^9;           % calculated fft of end point
- {* D- S% N6 _8 `ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
9 V3 X; w  r9 R/ ]) p1 H9 H* W' t. D因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值5 I: T  v* P! S
如此一來才能夠取到足夠運算fft的值  f; z( O0 ^) H7 n: V

( i. i7 }' w+ K9 z2 W" L9 t另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
3 U" t! @4 R; {  [& K; m如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
" x# Y$ a5 h& ^. L, }3 p
; A& t( Y+ a9 W+ L2 x如果對於要設的參數仍有問題
: R) t1 i9 C9 B) w. ~2 [: g我可以把我最原始的程式寄給你參考
; V6 I4 I3 I( j: S4 v/ ?5 e2 H" m! N) Y
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:7 n/ W% y8 l# G. v' x8 F
??? Error using ==> times1 u9 |/ k- p( h; z% p& `, ~
Matrix dimensions must agree." O8 f" U! h2 M" u5 \
% B& D& I$ Y! F* w' j
Error in ==> sndrtest at 26: P- I1 l; z( Q$ Z& w
yb=kb.*x(ptst:ptfi);
5 F% y7 W; w/ `% D* h4 Q8 z+ ]那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
$ W3 T3 q' y0 J9 w1 O6 f+ E∼感激不盡∼
$ x  s( j! D4 X) i! Qps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
$ S1 c/ s6 R# N) l8 o+ Y" G! C特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
# u: b3 E3 t4 Y+ M: M如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
/ d) {1 A3 T+ U, Y4 H因為沒有MATLAB請問HPICE可以直接做嗎??
4 y# X' ]2 x) ]% O 1 @) p/ a: _# \  e0 b4 l) S1 k
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體* P. Q# v! O) C4 o4 d  H
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬, N+ y0 D1 f  c1 N
但,在業界,個人的建議是,還是要跑HSPICE會比較保險- _; P1 I+ p3 k6 W& r! f9 d5 H) J: G
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
8 l9 P+ T" x% r% h一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
( S; k9 g/ u4 W4 R' f- d% Z而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
/ X; U5 P! D( @- v3 r/ Q4 J7 o1 ?                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?
6 l2 u0 @) z% u還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析; S- \# j' N4 H0 @+ V5 R! \9 L
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:: H# u; T2 ]- a# q2 ^8 d
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。2 X, i  U2 W2 Y! _# i
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。9 U4 `6 \0 {' M8 q2 \. c8 h
. f) ~* X/ T! j; k
[ 本帖最後由 緣緣 於 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 U+ V  r, N  z4 F, Q4 p
2.然後開啟matlab軟體。
4 b) z- {! Y/ n* b& ^( Q3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。
  A+ ~9 e3 |# S3 o4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
1 S2 |5 i* Z: w0 O1 S* C  j% a) x5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?3 ~; L. c& s7 ^
1 T& K' }6 I% V! V; N2 l, g# A
error in hs_allocate_sf: unexpected values in block1 header
) P5 h+ }; J; R5 Z& ???? One or more output arguments not assigned during call to 'loadsig'.: k* V' g3 U+ S" v- E
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
) r* y: w/ ]1 Y" G第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-17 06:30 AM , Processed in 0.170522 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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