Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....5 V: Q6 G! `" G- R+ i$ O1 a! v+ q
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失5 A! ]1 k4 B; }2 N. o$ a
% Q  X' l. x% A% G+ _
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了& V+ U: C0 I: A0 x  H' B& n  F3 J' r
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久2 ~; _) X/ p! ?7 j: ^1 V" b

$ C$ B. b+ z( N, a至於另外個問題,我的回答是,對的, t5 Y! Z, t" e1 A- Z, @
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下2 r) A4 _4 r. }7 E5 k! ~
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
/ w5 u: f* R4 x# L+ c4 T  Svideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
1 r( o$ ^. M2 P+ }  D* Q至少我模擬起來也是這樣
& e- J4 J1 g1 s" [7 p! ^, R+ Q而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC9 |" J# ?. U. \4 j( y* T
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:
, r- O' G1 j- N* K, E) `9 D, Z我依照你提供的程式,修改成我的規格後,程式修改如下:( P' }$ u2 q. J4 M" E/ v
% --------------The number of FFT -------------
: a8 C7 h2 t' n- lfin=5;% *KHz# I; p0 b: D: B. M% P, L
fs=5120; % *KHz$ O( f5 `8 i4 ~# L+ s4 I; E* x
cycle=1; % cycle = 2^N ; N = 0~5 * ?/ v( T$ L1 O1 |6 n" v
M=round(cycle*fs/fin);
6 P5 S) p- Z; _% --------------Load the binary code -------------7 `4 X1 U8 X$ z' M1 K5 _/ I: _5 g6 N
load sdm_out.txt -ascii
2 N; X* l$ P# y; o; J2 j6 xstart = 1;
2 G6 A4 R' k- ~! Z: r9 Rstep  = 1;
+ j  H- ^3 I0 C) z1 C) k  s4 n# z%ADC
3 F6 h, O& f8 W2 jx=sdm_out(start:step:M);4 j( z& r: |: N$ i2 g
% --------------Using minimum 4-term Blackman-harris Windows -------------' F# Z( j1 [5 @2 X6 ?, e2 P8 v: J
ptst = 1;
" E5 w( U6 _, H6 P" Dptfi = M;& w$ i5 e; a3 ?$ a1 k. N
pts = M;
5 v, M5 D5 d2 U0 W8 o
nb=1:1ts;
* S; s& V/ _. I2 l/ O. ]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" `0 L& v1 g3 ~, {. t
win_gain=sum(kb)/pts;
, f% u6 `0 h) b6 skb=kb/win_gain;8 E' y% G" I; V+ K: l1 a
% --------------- Calculated fft --------------------------
6 ~0 U4 @9 A0 M' K# vyb=kb.*x(ptsttfi);
6 H( J' E6 @8 P& P2 Z
yk=fft(yb);
/ m  t& Q* K! _; o  S- ^& A& i6 \fft_no=length(yk);6 g) l5 S6 n/ T5 T/ B
f=fs*(0:fft_no-1)/fft_no;, a) d8 K7 p7 S( P! ^8 K
Pyy=yk.*conj(yk)/((fft_no/2)^2);
' J$ d( C4 }# b' ]& r% ^% ---------- Calculate THD ----------------------------9 Z% p0 A% ]& j3 x+ G; U; F
j=1;
% q; ]- A% o7 u" u( w% xfor i=1:1fft_no/2). v4 D2 C$ Z( D" Z
    if (f(i) == (fi*j))  
, C& k# a/ f* ~! l7 j        HD(j)=Pyy(i);     %% find all harmonic distortion components. O+ q; N- Y6 h1 x
        j=j+1;
0 Q( |# Z# M5 m8 \  C4 o    end
) F$ V: g: Z/ m, U: {end
7 s% M* u: R5 [, Q9 ]5 E- dP_hd=sum(HD(2:9));$ X) _: e+ r* s/ G$ K& D
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;7 q- c$ T8 ]# H! t" R
fprintf('THD = %g dB\n',THD);6 h: ~+ P/ \- F2 h( n8 |$ n8 w
% ---------- Calculate SNR ----------------------------
" g& N/ U/ D9 y! Efundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
: p! U; B% P# k# R! ]6 U! i. @fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
2 [) d# H  y. X5 q: v0 P& i5 Cspan=max(round(fft_no/200),5);
) r/ f0 I; `0 @4 p  H% Z, d/ m  S, sP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
2 U7 [& y- [  G" O6 B( m! YP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
( k0 h0 X5 z% W( yP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
) e$ B' H9 m: l: ~# Q
SNR=10*log10(P_sig/P_noise);
7 U9 G# w" Q8 R! o% N( CSNDR=10*log10(P_sig/P_noise_hd);
! k/ |7 Z, u6 H
fprintf('SNR = %g dB\n',SNR);+ H2 Y6 R% l4 P! k- ~9 U
fprintf('SNDR = %g dB\n',SNDR);9 m4 U+ Y* c9 u6 q  t) v

. X! F1 W3 W5 A$ t藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:5 n4 ?6 y. k. \4 @
??? Error using ==> times, H3 l6 |) k9 i  D2 k  B7 l
Matrix dimensions must agree.
7 y6 y9 i3 |+ \5 c' g
  d& M' K* ?- y+ F) O
Error in ==> sndrtest at 216 i& X8 u& Y- C6 I# m2 J
yb=kb.*x(ptsttfi);
2 }1 ]% \6 V' g2 C

( `1 d* ?; f) K" \1 h因x函數是我自行定義的,可否幫我看看要如何修改?  m# S+ Y; P  f3 S( q
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
% x& {9 C& w( s6 z$ u除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
/ t3 d; \: o0 u4 x附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。) h) L8 V. A, D0 V# Y
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題/ F) I0 d  X  P' O
那就是你設ptst和ptfi是同一個值是不對的
" U4 U, k& ^% S2 F. Uptst是計算fft開始的值
' H& o* d( c1 K- n. E, G而ptfi則是計算fft的range,如8~519,total則為512點3 W& [" q: Y/ w: c! y2 a3 e
故而你在執行MATLAB程式時就會出現錯誤
  k, ^+ H. h7 A( w2 B2 g+ W2 J  T# z% ~6 G8 }( k" B% ~; t+ `4 X
我看了一下你的MATLAB程式,基本上沒有多大問題% W: e- P9 x1 l" s! K/ d7 z2 T! @! @( A
不過,要小心計算THD的值和範圍
' q+ X2 w) Q* D; T+ _因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
; I2 w) z; o- h  u" H- e7 Q
  c& [7 B) m4 a1 ]7 F最後,計算noise有好幾種定義方式
0 ^; X2 v4 W9 J) ?% a" h原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
* @. ?7 L3 B- a6 |4 }  r. s# _+ Y我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
- E. E5 Z. r* x: O$ Z0 {2 f5 ~: H因為目前在計算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 v% S/ U5 `- r+ E4 n因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。! f, O% q$ }# g: Z9 I8 J5 i' i, b
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
) V5 y' a1 M( A, @3 l4 [; }謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
8 X  r- o2 _4 C& Y6 f我列出我當初寫ptst和ptfi的式子關係式; r& f: K% S9 _8 G+ C- q7 e- A
ptst=2^3;          % calculated fft of start point, Q. d0 e+ k5 N. z
pts=2^9;           % calculated fft of end point' X' p  D. a* T5 U
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
. R* n6 m' Q1 B因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
  w- u: r/ E$ N, l. L5 b如此一來才能夠取到足夠運算fft的值
# K' c2 k6 K" b/ E( E. T1 ^  n* w" h0 c/ L; \
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
1 x0 u1 `" A1 H1 l如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
6 Q  c' a9 M" i1 a+ c0 g$ y0 v1 {1 c+ T# g; X
如果對於要設的參數仍有問題
5 w; d$ |& _# }7 F8 `' t8 P4 r我可以把我最原始的程式寄給你參考
" y- D) F  G: C
7 m& I& U% v/ [& E[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
2 i5 \# l, {, |) R5 x6 m??? Error using ==> times. y1 A8 W' i+ x
Matrix dimensions must agree.
8 ]% J3 m- B/ m- b+ a, w+ P% v
' n& F" s+ n2 k! ?1 L0 W6 PError in ==> sndrtest at 26  g& O# C4 y0 J4 H- E6 L
yb=kb.*x(ptst:ptfi);% P% u0 h+ j9 m: A$ T( _  E
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
# b  _/ S9 P4 m$ i- `∼感激不盡∼
& X  N- G5 e( g- T, qps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
6 L( ]1 H. Y" l; F4 d/ r特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
1 S% O# r1 u5 i7 e9 C: h1 i) ^如果要在HSPICE模擬ADC的INL及DNL的流程及作法??5 o) g7 Y/ o/ r1 x$ X
因為沒有MATLAB請問HPICE可以直接做嗎??, F5 {9 z# Q8 t+ p* y$ d5 X+ T

' J& V% p9 r3 ^$ J! {; C( ]/ O6 `請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
/ w5 p! ~4 `% Q至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬: T3 m5 n9 M" K
但,在業界,個人的建議是,還是要跑HSPICE會比較保險' w2 a( c) ?( A3 p- ~
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算- _5 M! O- x: J- G
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
7 c  m/ p  f. D! u+ a2 _1 A( l而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
- U) j. t) o* F2 D3 a                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-12-26 08:49 PM , Processed in 0.202011 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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