Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....9 i! |6 M) U  ~
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失4 S" R5 E) V. Z* q' q& q

* k0 Y2 B, m7 |( }8 q* L至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
1 W+ p; N" r/ T: q5 y而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
8 R% H* j) l# P% F: F5 Q; E+ @* ^9 @0 p! \  Y" {3 p
至於另外個問題,我的回答是,對的
6 T7 O1 R  t$ k6 O但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
3 g  Z7 w; g. f/ ~1 D8 x& @緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
) s  r) A$ m1 _* qvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了" ?* F  G5 {& r& x  S6 B
至少我模擬起來也是這樣& d4 Z+ k+ C, o, k& D: P
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
* x. {& X* N7 i: u' q所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
4 t* J2 \% M4 G4 I( i說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。
6 O: X7 g7 t( d* h, ~; \) {* q說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 ; f! E; [, ?" v, o% J- q. x# j) O
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
, L& {$ l2 X5 _: \此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
: k; i+ t$ r5 s& |4 O3 o∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:& K& N" y4 i# f1 d' B
我依照你提供的程式,修改成我的規格後,程式修改如下:
6 ]0 C/ C( x/ r% --------------The number of FFT -------------
3 J) G8 b$ _; k2 y% }5 T1 p; P+ c9 ~fin=5;% *KHz
' V5 N* K& a, o) u/ Ufs=5120; % *KHz' G: C) _6 B: Z# R+ S8 Y
cycle=1; % cycle = 2^N ; N = 0~5
8 x# @' b; J/ o( S, U$ KM=round(cycle*fs/fin);) P. e4 [) q3 @4 q
% --------------Load the binary code -------------" _6 W5 g* K" V
load sdm_out.txt -ascii
& t- _" m' \+ Q$ vstart = 1;
4 s  D( F4 G$ jstep  = 1;
6 N+ v( s8 G. Z5 ~%ADC% g/ l, }! R- L$ R9 S* `& F7 E6 _
x=sdm_out(start:step:M);
; b" s. s& A- d2 k* j
% --------------Using minimum 4-term Blackman-harris Windows -------------
) b  ]. j7 y0 w4 {" m, Kptst = 1;
, }0 g( Y' R2 q1 aptfi = M;
$ }/ M* B. L; a5 o1 D0 Z% Ipts = M;& D% D& a( q+ E
nb=1:1ts;
0 r4 u3 ~) g( V) A1 {kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
' R8 z: i; ~% r7 Ewin_gain=sum(kb)/pts;/ Q/ ?) r8 a7 U
kb=kb/win_gain;0 ?# m% V' p, I& I2 V
% --------------- Calculated fft --------------------------' \4 a4 B& U1 _, S/ c6 w. S# d
yb=kb.*x(ptsttfi);
1 d& Y5 t4 g2 V. m
yk=fft(yb);2 z6 O% y7 q  M1 r( W$ a
fft_no=length(yk);
. ?3 t! F+ ~7 l5 d( o4 r- Uf=fs*(0:fft_no-1)/fft_no;( K. T9 ~/ K" ]5 r; r$ P; ^3 n
Pyy=yk.*conj(yk)/((fft_no/2)^2);
) Y* y! R& f4 z! `# L' j+ V% ---------- Calculate THD ----------------------------# J! ^- S7 _( @! v, x" L  V, l
j=1;; M/ e: S& O: i" p
for i=1:1fft_no/2)  H# w# r- A: }8 i
    if (f(i) == (fi*j))  + L" z4 Y" ?# E  |8 Z6 k, g
        HD(j)=Pyy(i);     %% find all harmonic distortion components9 L' ~0 i. J# |& K( A- ?
        j=j+1;0 n& ?" j9 Q  Y& Y4 f6 {
    end
9 b9 F7 f1 f- k  A3 \% N4 Dend
4 L8 ]: e! q! \9 T6 u: b) X5 O" {P_hd=sum(HD(2:9));
+ k5 ?9 Z+ F  D# h! pTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
5 z: N$ s/ I& x7 lfprintf('THD = %g dB\n',THD);
1 _: ~& o: w9 l# o9 U- c% ---------- Calculate SNR ----------------------------: l; r7 |7 @$ K6 d
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));+ R( P/ J* u. R3 U3 J
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
2 l7 j1 F8 a* c, c& p/ E) o1 Xspan=max(round(fft_no/200),5);9 W5 @6 ]1 ~) {# J5 `
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
: |( Z" C, b) g5 F- ?! oP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
( L/ h2 i% n7 h. eP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;, p( }$ W- y4 [9 p# t) V
SNR=10*log10(P_sig/P_noise);
( m6 J% K2 }( s4 K) fSNDR=10*log10(P_sig/P_noise_hd);$ e+ R1 M7 f4 J7 T9 P, |
fprintf('SNR = %g dB\n',SNR);
: F; ~0 U- `3 dfprintf('SNDR = %g dB\n',SNDR);
. A% V+ e' h# z- j4 i
! X1 T% T" {3 k& Z; E) E4 W6 B藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:4 t: C, L. I- z6 l
??? Error using ==> times
1 h/ u  V# d2 H. n& c5 h6 F, gMatrix dimensions must agree.
7 r% H- r/ o! V2 y3 L4 \) ~
/ J/ Q8 U' o2 N% h. V8 W
Error in ==> sndrtest at 21
- N( r0 q, c# P, N# n4 fyb=kb.*x(ptsttfi);

& v2 ?. c6 x$ z: V$ H. M, m/ Q$ e' [& Q" }
因x函數是我自行定義的,可否幫我看看要如何修改?$ t# z: _; f  }. a/ @, J2 q
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?+ `# ^3 X6 _) T
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。* B9 c2 @. f/ `
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。* r0 {* Y" P9 b6 R* F
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
" d' a4 Y' ]* w* I6 P! E$ a那就是你設ptst和ptfi是同一個值是不對的
% Z* `# t; D* T5 Bptst是計算fft開始的值
# X5 _5 V' u, ~+ [0 r& E, P5 [! ?而ptfi則是計算fft的range,如8~519,total則為512點. C1 W; A# U3 x( l
故而你在執行MATLAB程式時就會出現錯誤  Y0 N" }( E$ Y5 Q" U% G
. m% S2 F- Y; d/ ]) B/ y. t% Q6 I) I
我看了一下你的MATLAB程式,基本上沒有多大問題/ C5 `/ R8 g, @8 m+ U9 q; v
不過,要小心計算THD的值和範圍9 Q; U1 D+ s8 J4 U& [$ O' K
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
9 e" Q* h% c2 Z/ X
# L  J! Z" ?/ \# l9 }# d7 W最後,計算noise有好幾種定義方式! [& v4 e$ O7 E% U) X
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
# y2 q0 E) H7 B( Z- o- h* h我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
' d0 F9 A6 g& l4 V; V因為目前在計算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筆資料,還是說我這樣的寫法不對?
) k( G# y% @  w因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
# H4 u+ j" Q9 j% f: t7 Z$ a我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
/ q4 V! P9 R8 K' N4 s7 n謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了% ]3 Q; N9 F& H# M' _+ g
我列出我當初寫ptst和ptfi的式子關係式7 v  s5 d) a. T: E
ptst=2^3;          % calculated fft of start point
# `9 K" D: ]& p6 ipts=2^9;           % calculated fft of end point
- G; E1 D, e2 k( m( nptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
1 M1 K$ n8 P' L/ M因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
9 |( L& ]# N+ H' ~/ z' T6 U如此一來才能夠取到足夠運算fft的值
8 i0 d+ U3 v* D. }( h5 T+ Z( ?" z
! e4 K0 [) ]8 A- z" ?% Y; q另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
$ C5 Z( K0 v5 c8 v如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤" o% }  _. o5 S& T
4 \4 a$ P; w0 Z  H
如果對於要設的參數仍有問題
! ?' ^1 y1 T& u' z0 X我可以把我最原始的程式寄給你參考4 x, ^5 x3 C0 a7 T6 y
4 ]# [7 G. k3 `+ o5 r/ X4 w0 ]
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:+ F" @3 X9 Z8 ?+ b# x
??? Error using ==> times, U- P6 A9 t3 V7 |: R7 \3 h
Matrix dimensions must agree.
8 j5 C* f# R* b. c1 T! r: I+ H- w2 {8 d4 }' X/ j% ~; N/ Z. m
Error in ==> sndrtest at 26
. H1 b) d( Q& M$ Z: gyb=kb.*x(ptst:ptfi);
, I5 G4 ]% r3 _那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
4 i# I7 ]. K+ `& U' `5 a∼感激不盡∼
3 U3 \+ ]" ]4 J) lps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
4 N$ J4 c6 @5 z' z5 u特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
/ X" |* ]2 Z+ r. d' W# O$ q如果要在HSPICE模擬ADC的INL及DNL的流程及作法??% K. ]4 D3 p) }3 r! G3 I
因為沒有MATLAB請問HPICE可以直接做嗎??
0 @( u! h; k; G1 j$ V5 h
# o0 k2 X8 V" v7 E* g請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
3 ?4 [( L, S5 W5 y至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
: U; [3 E  H0 x% B8 k但,在業界,個人的建議是,還是要跑HSPICE會比較保險
3 P5 ^' C9 B4 b; O1 M) W; g至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
( k# i$ a. ~# T% c& l4 @5 {* {" j8 r一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易' i, S6 ?+ p. y: ?# q
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
9 h2 o8 u' E: a4 x6 @' H                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?) k2 S' o1 ~( _; [( }
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析. G  o6 Y8 z+ X
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
5 |; E& h" r" l如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
5 e; Z  s2 o/ h7 b. V8 w關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
8 y8 i. t6 N$ `, P# l* O3 c6 W3 A3 g% h3 U/ i) C9 X
[ 本帖最後由 緣緣 於 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 f% a+ `+ g# H- G& ?1 z
2.然後開啟matlab軟體。
9 X) C! d" _$ E% h: I! {3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。
4 m  g8 c8 S& q5 e- K3 A: H4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
" k$ ]0 l# M  _8 o* R# _5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?% m% P0 e9 y; c9 t( n% q) h$ S4 y, f

3 l7 o% Y3 M" x, g2 X7 Ierror in hs_allocate_sf: unexpected values in block1 header
5 u4 B$ v' {9 w* Z  ~6 H" @3 E??? One or more output arguments not assigned during call to 'loadsig'.% a4 M! F* T: Q6 x! T
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
! K' `/ I5 s' K, M0 v; I! l第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-26 05:37 AM , Processed in 0.140018 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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