Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
7 i6 G+ k7 y, L, a4 J1 S- A$ S所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
) x6 i7 q5 l/ H
- M1 I$ k! J; Y  D6 w- Z& \至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
  Y- R  j5 R3 M" {: [  Z而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久) n6 _8 h% X8 [0 Y. S+ {0 [. ?* b

/ }2 d9 r" M) Z7 f: j" z/ ~$ ^至於另外個問題,我的回答是,對的
  z6 i; \. |( G& P$ o3 U  c0 q但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下  {1 e0 b  N1 h$ t0 h9 a
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
; ]6 Y' L- ~0 \+ m3 v) b/ H# }  Wvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
- u( F- n4 U$ ^2 O. s至少我模擬起來也是這樣. o( ^+ O0 _) _! ]# ?$ T9 K
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
( L4 |/ P4 ~' ~% I2 g所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。+ m' ^- p+ V$ H) p' {( e
說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。/ j: r, n* k  U- h! a& I
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。
3 M) Y3 V" a8 ^5 ~- U' u$ k- S在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。) v- |; M/ L1 A" M& l; {
此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
% ?! G( b8 `' z, F' k∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:( v: H% V. R) J8 B2 u- p
我依照你提供的程式,修改成我的規格後,程式修改如下:5 Z  a& h' C4 M( x" l% g; h
% --------------The number of FFT -------------+ ~0 t1 J! k) I: f- M
fin=5;% *KHz' g" K- M. N) a
fs=5120; % *KHz/ R! Q% z# s& B+ W% E, X
cycle=1; % cycle = 2^N ; N = 0~5 # }& x  F& \$ E" ?% m' A1 \# U
M=round(cycle*fs/fin);
# G8 R$ {2 `2 b6 }% --------------Load the binary code -------------
% k+ W% E1 |: i& [& Aload sdm_out.txt -ascii+ x) S1 }8 ~0 I) c5 ?* w5 K# ?
start = 1;
8 u! W+ J" Z! T6 b% s' v* Ystep  = 1;
- L& D) K, d4 k& K%ADC/ N# n9 Z5 r! @; p& r: k3 `
x=sdm_out(start:step:M);
2 s1 g4 t' ^7 v6 ]" K
% --------------Using minimum 4-term Blackman-harris Windows -------------
1 C& J4 ^# x1 z+ z" Mptst = 1;: h; L- j6 S- K" f( P9 v
ptfi = M;5 p2 s& U8 _) |) h
pts = M;( @0 g9 v$ C' K( c4 _5 ^# q& c
nb=1:1ts;0 A# {; @9 _4 K7 n! R7 H
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
* D8 A5 e7 N. Z$ pwin_gain=sum(kb)/pts;' ~% W% Y2 g- @
kb=kb/win_gain;6 \& K& F  E0 t7 B6 c" l
% --------------- Calculated fft --------------------------
; g; v3 `/ V5 w* r- _yb=kb.*x(ptsttfi);
- \7 n2 z3 x. c6 S8 A1 q! X
yk=fft(yb);4 g( T0 t6 r# T$ H( }8 v! z
fft_no=length(yk);
! b# o  P% {6 y- d. c* J' Xf=fs*(0:fft_no-1)/fft_no;
8 p9 a% }% x; _4 m& wPyy=yk.*conj(yk)/((fft_no/2)^2);
/ E( u; t6 }. [5 g) O% ---------- Calculate THD ----------------------------
- O  g  v3 G2 O: S9 b7 S. hj=1;
+ c5 ]6 c, }% }0 I6 F/ afor i=1:1fft_no/2)
8 f4 B) B2 b: ]    if (f(i) == (fi*j))  
' M8 r- g- y  W4 Z        HD(j)=Pyy(i);     %% find all harmonic distortion components
9 z( o0 C1 t- B        j=j+1;2 E& {4 v: e% D* o% W* R! K' `
    end0 n2 ]) l, a+ e  \
end2 m7 Z) U; D( U* \& C! \
P_hd=sum(HD(2:9));" m# p7 `' G  B( N% T+ O
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
) j6 ^0 q+ K" k" q% w4 Jfprintf('THD = %g dB\n',THD);8 E" a" S2 h: p( r, }
% ---------- Calculate SNR ----------------------------
) Q! I2 P1 m2 k3 rfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));4 X! C& H' o7 ~" u( G
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
' d, f7 ~3 m% P  `span=max(round(fft_no/200),5);
6 \1 H0 y( s! y1 K* S/ `( |P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
' ^+ g# p! F! A) k3 m1 zP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
0 z0 d: U* q, w6 m7 ]4 x. H- {: ~P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
0 Z, M) J* G: D# F% N, A  v" d2 W: P0 }
SNR=10*log10(P_sig/P_noise);
2 R! Q2 a  B2 D; fSNDR=10*log10(P_sig/P_noise_hd);
, L) b. T$ }/ ]7 @. y
fprintf('SNR = %g dB\n',SNR);
* C( L8 o' J! J* C5 A7 V5 I6 k5 xfprintf('SNDR = %g dB\n',SNDR);, J: A) f7 f8 d% g& B6 r
* z- J( a. y  t7 I
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
6 a: i# o% T! N; ~! q; `??? Error using ==> times
1 K3 Q- h6 k5 ~$ A8 a8 y0 f5 p+ GMatrix dimensions must agree.

$ S6 a) {' s2 q2 {: ^' | 0 c, ~8 T$ Y, C* _8 ?- q
Error in ==> sndrtest at 21, j7 E4 P* W3 a3 k% E( S
yb=kb.*x(ptsttfi);

9 M! {- I: j: }3 m5 u
, `& H7 l7 X) z2 W9 U因x函數是我自行定義的,可否幫我看看要如何修改?+ P& E: z' L- B
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?% f9 S# y/ |4 `7 e2 k. g
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。8 ^6 M4 a  T& s
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
; R1 ]5 x: [7 u+ t$ G7 E以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
% Z& e2 p$ }$ \8 q+ \0 M( P( p那就是你設ptst和ptfi是同一個值是不對的
, W/ y3 v/ e! ^" F4 xptst是計算fft開始的值
/ O& g7 I! u. q% L0 Z) A而ptfi則是計算fft的range,如8~519,total則為512點% `( s& T- y: l' y/ m. }# m5 |
故而你在執行MATLAB程式時就會出現錯誤
+ [* v) ~8 @/ }& ^9 U' o
5 _+ L4 D: \) a8 E. ?. O+ Q( I! I我看了一下你的MATLAB程式,基本上沒有多大問題
0 @+ c6 i* E! |- e不過,要小心計算THD的值和範圍* `4 u/ Z6 J' a1 v7 F' O
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
8 J) R2 ~6 V: w6 f/ r6 l$ C% L! ^5 H% A
最後,計算noise有好幾種定義方式
& y9 l5 D+ t1 m5 @7 @原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
0 s/ R  W2 c+ ^# U  H+ u- m4 p我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可( q: u( ~6 E7 J% s
因為目前在計算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筆資料,還是說我這樣的寫法不對?
, z5 d$ G7 |1 h' P: w& A6 @( L因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。8 s) O- W& c% a- w' o* Z6 Y) z. g
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?, b$ O4 y0 c# M) `5 W. `
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了. f) Q. G# ]1 M; O
我列出我當初寫ptst和ptfi的式子關係式; o. p5 s5 \  [3 P
ptst=2^3;          % calculated fft of start point5 c: j; ]& [! @+ _  R  V1 d
pts=2^9;           % calculated fft of end point# U- y& u9 M" {3 ]4 L$ C( j
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point$ e9 t  T) j: H4 U& L1 B
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值0 s$ z" [1 e" [; Z
如此一來才能夠取到足夠運算fft的值
) M! {9 l- f3 O- @  t1 H3 b6 m
+ j5 V: y% x" ?# q2 A# ~另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值8 s6 T( V; U5 u# u9 i$ ^
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤, k: I: Z  q2 r; _+ }' P
- o! i4 v, _5 X/ j* W
如果對於要設的參數仍有問題
$ {; u9 m5 R/ y9 Z4 I- M我可以把我最原始的程式寄給你參考6 E* w8 C: Y+ j9 }: M

% m& l) a) G" Q+ e+ j7 h- v[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:% @# R, g. g9 e1 D% K
??? Error using ==> times3 f4 X7 \" ]0 `% G4 Z
Matrix dimensions must agree.
3 O- u% X# Y: _: `/ m
7 _- O2 E* m$ y$ x* w' H1 ~  XError in ==> sndrtest at 26
6 G* u0 h9 v! {" K- G1 n/ F! p" Kyb=kb.*x(ptst:ptfi);: w7 d0 c9 [$ H  K; c$ E
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。7 `' B: Y) F' a" p$ b
∼感激不盡∼: w8 u) u" `, m9 {1 i
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?+ G" r) f8 n( a( j
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
  f$ u' x+ D# p% a; S5 b0 o如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
' @4 g8 P" b! _* B" ^' k因為沒有MATLAB請問HPICE可以直接做嗎??2 F( N% R. c% z3 N0 ~0 g

- X, g; V# ^  q. k; y/ _) Q( m請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
7 g- u+ z3 w  v+ A* [& p至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
0 X( E& r- K6 N# U, c2 n但,在業界,個人的建議是,還是要跑HSPICE會比較保險
% \4 A) {$ f% m+ h' z2 c至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
/ B8 |% P9 k4 _一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
  y# c- K  r3 d而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
& T+ c" R& C, t5 s, t* L  I                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?# C1 f% e6 ]- P; Y) I* ~* C
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
# s/ ^7 H7 f- s' l! o請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
" z2 t6 L) B* Q; W2 D如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。* n9 ^; C' p' m0 t* @8 t3 q
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。  P1 S0 j$ y$ x4 e! t# A

; C, l5 Y% }, g; W  O/ J0 V[ 本帖最後由 緣緣 於 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的檔案。
0 b; _  _/ X( u' c! ?& a! C: @2.然後開啟matlab軟體。
. ]4 o4 W/ c8 w3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。
0 w2 _! ^5 e! I' x9 M) D4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
( U/ s3 f3 D2 A0 d& i5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?' c8 t- s3 ?7 Y. ^, p" C" F

3 ]; v7 X7 N% o" t2 H# Derror in hs_allocate_sf: unexpected values in block1 header
5 a# O1 q7 H3 t2 q??? One or more output arguments not assigned during call to 'loadsig'./ `3 p" s. Q  C; d9 F( ^: G
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。4 E- Z* d% ?) y5 K( g9 W
第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 01:19 PM , Processed in 0.163521 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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