Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....0 M& g; G) V0 g( d. g0 C  I2 I
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失8 h+ z# D0 w3 o% f

4 N. k1 l" E- m+ g至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了+ i3 P) ^( c- V" z& O8 j
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久8 e4 q& E' P; A& B  k( i
) ]6 s) ~8 B4 N1 U! L
至於另外個問題,我的回答是,對的
$ U, @; z+ `+ L但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下2 B& L; b2 A9 @, d# }
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣, O7 R5 A; V1 N# B7 ]9 p
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了) T( h9 n) l1 y, ~; p' u
至少我模擬起來也是這樣
7 P6 q: g) q" v0 d) w3 X+ g  A! c- |  U而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC8 ~7 `4 `  a" |
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
9 d$ K8 C7 ?9 C說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。
* o* L, U7 D0 Z4 X; z& Q, F說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。
1 z1 y$ l, d# R- D+ ~9 @在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。: N6 I* |( k) o! e3 B
此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。     P6 U1 x( ~3 i
∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:
" C$ F; o5 _, D" L, j. |1 [我依照你提供的程式,修改成我的規格後,程式修改如下:7 V. r+ P+ t& m
% --------------The number of FFT -------------' [5 \% r5 L. g3 X" X/ l
fin=5;% *KHz1 ?1 C) A/ p5 c& R
fs=5120; % *KHz$ U) t# C8 u7 m& i; Z
cycle=1; % cycle = 2^N ; N = 0~5 * T, M; G3 A2 s4 v: }0 ]8 J
M=round(cycle*fs/fin);
) y0 M7 N" o- z% --------------Load the binary code -------------
) D& Q0 T# r" Aload sdm_out.txt -ascii
+ P& C7 ?. r5 y' R4 a; a* u2 ]) mstart = 1;! _" r3 H- u; ~( z) C' |
step  = 1;
$ m+ }' g% K. p: z9 m$ r%ADC  m, K4 M  K' p) s/ G+ H
x=sdm_out(start:step:M);9 S" d8 s6 Y( b% [9 t9 w5 P; [7 k
% --------------Using minimum 4-term Blackman-harris Windows -------------9 K5 Z8 U, G2 @, _+ T
ptst = 1;! B: t4 B/ c: K
ptfi = M;
5 l6 a6 G, P+ C/ a+ `: |# ]" Mpts = M;; F3 R! [; p8 }+ K6 D; ^( u
nb=1:1ts;1 `' e' G8 `) g) Q- \+ c
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));% ]# K# X' y/ r2 i+ f# F  f
win_gain=sum(kb)/pts;
$ z0 ?, |7 L/ ^5 u% j+ ]/ _* }kb=kb/win_gain;/ ?! X- T  v9 a: v+ t3 y; r5 D
% --------------- Calculated fft --------------------------
" E, x9 L( b5 H! a9 M( Kyb=kb.*x(ptsttfi);& z! w3 }' Z6 y9 }! g* W0 B/ {5 A
yk=fft(yb);" W$ J# Q: J4 E5 O" A
fft_no=length(yk);
, d4 Y; q9 B6 cf=fs*(0:fft_no-1)/fft_no;
3 q# N; [$ k/ }Pyy=yk.*conj(yk)/((fft_no/2)^2);
8 ~& `9 `6 m. P2 K! f% ---------- Calculate THD ----------------------------' L" T) g- f7 Z; p& T
j=1;
. P& H/ r' L4 X& }/ Jfor i=1:1fft_no/2)/ J: X* u6 s# V4 v8 F8 E! ?
    if (f(i) == (fi*j))  
5 T7 o! A! I3 E. k$ O1 O0 M  T2 R        HD(j)=Pyy(i);     %% find all harmonic distortion components
5 ]2 h4 y9 o$ D$ ^8 r6 I        j=j+1;
" {  a9 l2 K7 r4 R( C' G7 n: c    end
( f5 i7 h" U: M9 ]* C5 W9 K* Pend! L2 L6 x0 l3 B0 z% \/ N  p6 T
P_hd=sum(HD(2:9));
) K: b0 i( W  C! X- `: a1 u* eTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;. ~: N# `+ Z4 r+ R" c% A7 z5 q
fprintf('THD = %g dB\n',THD);
! O  d- {% L, q6 j8 k% ---------- Calculate SNR ----------------------------0 [' h9 l. K7 I$ }8 r- n% T1 ~3 J, }' C
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));5 v7 G+ i, Q7 t; E% n4 ~* f
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
- }" m9 p& y7 R% U; S4 Dspan=max(round(fft_no/200),5);" r- w4 E* k) ^: E9 V: G6 A% z7 ^  K
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));  h; J9 D' B) c& n
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
$ {+ q$ j9 h$ P8 v5 I! [: a+ d! q$ d* `P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;* O. ?% h$ o# G: U4 M% M
SNR=10*log10(P_sig/P_noise);
1 C( S2 r* k1 _6 \/ q& vSNDR=10*log10(P_sig/P_noise_hd);
7 N5 \  u7 h1 r! o$ \1 r
fprintf('SNR = %g dB\n',SNR);
9 Z& F' k- ^6 Gfprintf('SNDR = %g dB\n',SNDR);
% Q( f9 v, t. ^1 E/ Y  m , `# C) B. |+ [' r# j" u9 X) O
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
, a1 u! P, L$ ]: l- ~??? Error using ==> times4 N4 F( @: z% H* I$ o" @
Matrix dimensions must agree.
  P6 `8 d" i! ?1 t9 O

  I7 M# F( O; R8 |& Q* _Error in ==> sndrtest at 21! s% P% }$ W2 {' e- d
yb=kb.*x(ptsttfi);
3 |7 H3 r( b* K

( N# j! T4 `, x9 P4 s因x函數是我自行定義的,可否幫我看看要如何修改?  u0 E% g7 y' L  W
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
+ ]$ S) W  y; P2 Y7 H4 X# y5 ^" [3 w除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。9 B  y5 t. x& k. \3 d0 x4 T
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。/ v  L3 s& m: _
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題4 Y4 M) u& ^4 }" U. T. C2 ^# q0 A
那就是你設ptst和ptfi是同一個值是不對的8 U) D1 M$ S, j/ m# u6 i5 Z. _7 ]7 F
ptst是計算fft開始的值( |  J8 k# g* U- p3 C4 o
而ptfi則是計算fft的range,如8~519,total則為512點
. ]+ \* j1 y( J+ U! u. z, v故而你在執行MATLAB程式時就會出現錯誤
' v& B! D, _) D; l# W
# q9 C1 n6 L  [我看了一下你的MATLAB程式,基本上沒有多大問題
7 ?* ]- G0 t/ ]7 U0 j不過,要小心計算THD的值和範圍
7 p! e' c; s0 L9 Z4 e1 O因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤9 M1 w  t) R  K+ X9 G3 ^, ?
, w  |0 S1 e7 A& V/ e4 m  d
最後,計算noise有好幾種定義方式0 `8 q8 h- t3 p( u% f  K
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理- V% y, V% e" v1 b
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
) H0 H  T1 G( F- O因為目前在計算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筆資料,還是說我這樣的寫法不對?
4 D+ ]* f! w7 K因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
$ _; u1 |. X2 _( L# K5 b' @我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
, g; A% |- j& V( q8 @/ ~! G5 h謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了1 B' _: e: I8 S1 }3 ~) `/ ^
我列出我當初寫ptst和ptfi的式子關係式9 U- x: J" Z2 h& K7 t, {' ^
ptst=2^3;          % calculated fft of start point, o2 B/ z/ G9 d2 k$ @
pts=2^9;           % calculated fft of end point
! F- v2 E) S% X: P+ ^2 rptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point1 A/ `* l: f% }
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
7 R2 b  Z7 x& ?( g如此一來才能夠取到足夠運算fft的值, |8 N) d, f) O* w

. K% C* A, }% M! T8 z另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
8 A7 ~% v" c% t( T: @8 M, V0 ~如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤/ x/ n3 M; t( ?; c, W3 H7 `
: @1 L0 N. |; J( Y( O7 H& b2 Z
如果對於要設的參數仍有問題, v6 u4 q8 Q% \, w8 n
我可以把我最原始的程式寄給你參考
5 a0 v$ p. B- p
7 y+ O9 [2 m3 s6 R/ K- o[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
! }9 D! h" c& X) O  S2 J5 X& i??? Error using ==> times0 V2 k4 F( j; E* B! N
Matrix dimensions must agree.  k8 G# v0 ~6 S1 g' C
1 a% y' `2 g/ u7 M0 Q" D( l
Error in ==> sndrtest at 26
- j3 S+ k! [4 D8 `  j& A& ]8 w) a9 Hyb=kb.*x(ptst:ptfi);; E+ k6 s; y) G! \3 g
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
6 @' L5 \( i. s∼感激不盡∼
9 ]3 @; B$ v- B/ y. j* ^& W# Q' Q/ M+ Nps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
! V! ~1 X, D' U9 [$ y4 a" B特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
& v6 l! r; w0 D+ N% z如果要在HSPICE模擬ADC的INL及DNL的流程及作法??% s2 Z# z( {  H4 g' W
因為沒有MATLAB請問HPICE可以直接做嗎??
) R: U  m% q1 ]  ?2 b, ]/ h & C8 N( o$ j  U# ~7 b
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
7 t' M& S: a) Y- p0 t至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬4 j( [! e4 U) M- l6 L9 W
但,在業界,個人的建議是,還是要跑HSPICE會比較保險. f# v! d9 s8 g+ s. A3 q
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算1 U" F: t( x5 R1 M9 r  R8 @
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易* k: z% `* R4 n6 A, D
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
- a8 H: h9 M, h+ ?& y                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?# o$ h  h& o7 l& {9 D$ i% M$ T
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析$ j6 T/ q8 V! Q# e( t( K" P+ b+ W
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
2 U2 {. t) C7 s1 ^8 C) N$ o& x( H如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。4 X# r" P: n1 v, A) h( N6 K
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。# A2 p9 J7 ~8 W5 V- X$ ]9 R1 k

/ g1 X" z+ T$ r/ c) m7 }[ 本帖最後由 緣緣 於 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的檔案。
& Y- {* u# E/ S  f0 `2.然後開啟matlab軟體。
( J2 [3 U7 ?& ~- t. C3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。7 q: g3 m1 D; w; r) j
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
/ Z  j  c8 y2 V  K" @# {5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?) l* N# t! n1 D2 |6 X# B/ K5 g

9 J" W) v+ z" t' b7 Ierror in hs_allocate_sf: unexpected values in block1 header
4 w  Y3 A2 y* ^* `??? One or more output arguments not assigned during call to 'loadsig'.
: @2 S. h: l$ h) D1 {# U) y這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
3 L5 q0 E; N; w4 P第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-17 08:21 PM , Processed in 0.178022 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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