Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....' A, N9 \( N) y
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失! r0 \+ ]% F; E4 V: H

- l3 I5 ?% _" y6 G& m& ^至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了2 k$ R3 n( X* N3 f3 }+ L( `  F
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
9 b4 r. A" F% M8 [9 O3 Y. e" c% s! v( o* V; t
至於另外個問題,我的回答是,對的$ l' l1 D: ?* U
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
) V1 |" ]0 d$ f3 E3 ]- Y4 b7 p緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
. i& c. d9 a% S# r. w1 k/ Hvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了2 a  x) y1 W! ?0 A2 z8 D5 V
至少我模擬起來也是這樣
3 K. l+ ~; W# `7 L: o而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC5 m* j; `0 F& s$ ?5 x
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
9 v5 r8 A8 d; |- g說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。3 D$ U7 l6 {6 J0 R5 I7 V
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 ( b* t8 I5 w& m4 {3 S5 r
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
7 {% [/ f3 ?' X% b. S! V2 w此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   ) e; E& }) N) N0 b  l
∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:
# F8 k$ a& W( m5 u" [) V+ o3 Q我依照你提供的程式,修改成我的規格後,程式修改如下:
; F) L) [! _0 s, n9 y% --------------The number of FFT -------------
. K, P+ i2 N% ^5 B/ h$ ~! B$ ?2 q1 afin=5;% *KHz5 D; j5 P& _4 y& L" Y
fs=5120; % *KHz- d( s' F: B9 D0 S  c1 L( k
cycle=1; % cycle = 2^N ; N = 0~5
/ F) E& o9 O1 |/ ^: jM=round(cycle*fs/fin);! j5 C: k/ |2 R9 t5 r
% --------------Load the binary code -------------
3 q1 x  @$ }1 M& Z9 bload sdm_out.txt -ascii* I4 q, {7 \9 G9 U- R! A
start = 1;9 p& I; b+ E3 K# Q( f5 r
step  = 1;
4 [. g* ]& Y8 ?+ W2 v, w3 p1 w%ADC
9 S/ y  u" |7 d3 j' Wx=sdm_out(start:step:M);
# y7 P  ?- \, A8 J6 S1 Z7 C
% --------------Using minimum 4-term Blackman-harris Windows -------------
; T3 q/ r2 x/ `ptst = 1;
* [3 B% ?, v* i& _; h7 J7 N6 ~ptfi = M;
& S9 t* K: G# _5 y- a% ~pts = M;. T( ^9 r( k, i; N, O% H2 t! w
nb=1:1ts;
8 l2 R4 Q4 ~0 u. D4 okb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));7 `, ?+ u: v0 @- t
win_gain=sum(kb)/pts;1 a) m, h# f  L: P; d/ M$ T) R
kb=kb/win_gain;5 K+ y) C: G( f, m6 v( _' L" I2 N
% --------------- Calculated fft --------------------------1 m* {# h  w" p: r
yb=kb.*x(ptsttfi);
0 ]: }# F; Y2 z. a) J7 j6 G% y+ k8 \
yk=fft(yb);
7 p, v. p) y& o3 T( _1 p& R3 efft_no=length(yk);
/ o8 w+ W) x" q' r! Y: Vf=fs*(0:fft_no-1)/fft_no;/ ^( D& ]! ^. c) {% I; N. n
Pyy=yk.*conj(yk)/((fft_no/2)^2);
" i2 ]& ~5 E2 }6 {( n% ---------- Calculate THD ----------------------------1 i$ ]! Q5 K" \" ~
j=1;
3 F1 ^* b# {% O% ufor i=1:1fft_no/2)! ]$ ]4 U, z1 ~3 {9 V5 @% i
    if (f(i) == (fi*j))  2 Y/ m" b' @4 v
        HD(j)=Pyy(i);     %% find all harmonic distortion components! Q$ ^  \( o. L+ _- Y! B5 l: w6 C
        j=j+1;8 i: T, \: [* i; M2 M; y
    end' i; l  f6 A) s4 r
end0 M+ p4 f0 [; Z$ K' ^* \
P_hd=sum(HD(2:9));
% q" X4 _" e: s, l+ oTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;, R  ^' G/ p" x0 ?9 Y, V& f
fprintf('THD = %g dB\n',THD);
2 d5 a, U, D0 Q! I% ---------- Calculate SNR ----------------------------  S$ `( ?- [/ h; }
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));/ f# g8 Z  f' o0 A
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);. A3 }$ u' f5 q7 U; K5 B" ~
span=max(round(fft_no/200),5);
- c3 ~; ?5 |& v/ l8 [3 ~% D; ]P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));4 Y  z7 y& ]' r; u/ Z  e
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;) i: m& E6 b: N
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;9 V# g% [9 [( w3 U. H6 z
SNR=10*log10(P_sig/P_noise);# o# Q! u& b# T2 ]/ k1 \
SNDR=10*log10(P_sig/P_noise_hd);6 B  i' Z3 G, N( I: I* X+ J
fprintf('SNR = %g dB\n',SNR);
" g- }& W0 S% \  a8 B2 j0 I: @* Kfprintf('SNDR = %g dB\n',SNDR);
, v: V0 Q5 W4 o  y
. k7 @* V0 A+ N9 q  l5 P藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:/ H7 u& z9 X2 J
??? Error using ==> times. J2 t9 x- y, V5 |, |9 U# n
Matrix dimensions must agree.
9 Y$ S9 ?0 f' }7 E' p
0 i) z' X# o  k8 L& d6 @
Error in ==> sndrtest at 21/ u3 J- A( `  V: X7 p8 w4 K
yb=kb.*x(ptsttfi);

1 `* k( s7 {! J( o+ b9 x; T1 Z, I8 d* O+ r! D' Q6 D' }! v
因x函數是我自行定義的,可否幫我看看要如何修改?
1 I7 t% t* N6 b! R另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?3 M) s! s0 a$ S5 s: D
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
5 t# \$ \2 e: R附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
3 q" i/ M: b! T: h% R" @以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
* I* O) G( B4 e. N2 i* ~那就是你設ptst和ptfi是同一個值是不對的( W6 v. [" t  B! F
ptst是計算fft開始的值, H6 o2 }) c( r# Z% ]+ C0 b2 P
而ptfi則是計算fft的range,如8~519,total則為512點
, [8 ]0 Y& t) r% S, q6 T故而你在執行MATLAB程式時就會出現錯誤- N' T+ n4 S! j( I
, D3 W% E! T2 _
我看了一下你的MATLAB程式,基本上沒有多大問題
& j6 F0 b5 R, A5 g& v& s  Q不過,要小心計算THD的值和範圍, V3 ]- c; ]' Z  z4 S. H3 f; o
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
0 Z4 B. \1 |$ I. ~8 m9 e
6 P: q, G* y" p" E9 o最後,計算noise有好幾種定義方式$ {! f2 j% I9 l" b6 N1 J9 l
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
+ S4 S& s- Y- F! z. Y7 q; z, \我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可# u; _: h: _: W! q+ N% ^0 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筆資料,還是說我這樣的寫法不對?
6 [0 @9 Z8 o% @+ c: o因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。% a2 p1 U  ]6 |' J8 x8 |- t
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?5 _4 l) g" n7 {: ?( ]8 J& ]9 c
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
0 G! ]6 ]& V  L$ I/ _% _: v; V我列出我當初寫ptst和ptfi的式子關係式) x1 ?. e8 K% K2 Q9 p* f) x3 e1 P
ptst=2^3;          % calculated fft of start point
2 f( r( c6 E& u4 m5 Rpts=2^9;           % calculated fft of end point
7 s) J, _. T& {2 y4 a. W$ L  X0 y8 e9 Yptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point6 T" H0 q7 b9 T& r3 J
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值% k5 E6 a. ~+ D, u/ t0 e
如此一來才能夠取到足夠運算fft的值: i! r4 y0 `2 j+ C% A* f2 C  [

5 S+ l- z" {- V7 E. G& v# M- J8 L另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值9 Q  I3 s0 z: J7 ^, i
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
/ x, Q# o6 L, X) Q  h! D( a) a% d
3 s8 f1 s& W% v/ k如果對於要設的參數仍有問題7 L7 g% D9 T7 f
我可以把我最原始的程式寄給你參考
  s! L& i9 D# R' a$ {
, f1 [. A8 D; o+ j( C& _+ z- t[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
& d, h3 I5 t/ s9 V$ E??? Error using ==> times4 w  M8 B+ b/ [. i
Matrix dimensions must agree.9 L+ r; o  e9 a( J! e
: u  r% w; [% G/ {3 h9 X
Error in ==> sndrtest at 26
( e0 ~6 K7 d& }1 K7 A& C6 S5 xyb=kb.*x(ptst:ptfi);4 ?& R1 a, }" a6 E) i
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。$ P9 n. m' X& a6 f' P
∼感激不盡∼( u+ l! z2 q6 N1 h$ L' m) _
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
9 k2 S2 p! Y8 {) D/ Z- U特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下: @8 E' D  T1 H( s( u
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??0 r6 ]& ?" j: f  O% K
因為沒有MATLAB請問HPICE可以直接做嗎??
. c0 Z7 c8 g" B, E# \1 o- V0 m
% O6 ]7 j5 i- P請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
2 W3 D# m; q; O% m! ^- Z至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬7 k+ \; a3 f0 b% ^3 x) h4 e5 l' G
但,在業界,個人的建議是,還是要跑HSPICE會比較保險$ \- l: A+ i' X$ C  o7 n
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
  |- v5 P% K( W一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易& d+ `( B" Q$ `
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
" }5 U. \2 b! i1 d( x( {# f                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-6-2 05:09 PM , Processed in 0.164020 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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