Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....# b" P9 J( a: S6 o# Y$ N, L' `
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失& a9 i/ J* z, F* C

6 U5 e1 D; v, ?至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了1 R- k: h8 n8 A* H7 V) [
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久+ w% i6 R9 o) |" G- ^

2 u- M/ w5 P+ t8 S* [/ K, Y7 {至於另外個問題,我的回答是,對的0 a" R( N. {9 k9 M
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下) `+ ^6 J# i5 z$ ~- C
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
, ]$ \! ^0 ?5 P( `) [' ^video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了; r2 G$ {! _9 i
至少我模擬起來也是這樣
- f7 i3 J- r( g- a而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
4 r  S) A% s% T  B. S/ L所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。3 R0 u3 k" r5 w
說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。3 ?- [- X% c# h5 X4 w
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 + ?4 Y6 z4 ?: R, D+ F& C* _1 ?% I
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。1 ^+ {8 K- N) g' C3 D
此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   + Q- M+ I5 f* {4 ]! a  `
∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:; z1 v0 c! {! Y$ Z, U5 S
我依照你提供的程式,修改成我的規格後,程式修改如下:
# y' c1 x. @% V& Q6 A& F! K% --------------The number of FFT -------------
0 @: @9 p$ q; `8 _fin=5;% *KHz, e. n6 Z/ t, Q0 e8 ~% G+ ?
fs=5120; % *KHz  m2 z; z, z5 O# E5 B
cycle=1; % cycle = 2^N ; N = 0~5 . y2 S& O! [2 ]! \! r0 g
M=round(cycle*fs/fin);! H. i/ L" `- O) D) M" B
% --------------Load the binary code -------------8 \( g% d' h1 W% I0 Z) W
load sdm_out.txt -ascii
+ P6 ?! [- y: _7 z3 H  \start = 1;
* D! f( U8 `- Qstep  = 1;/ W& j3 `8 n- j
%ADC
6 B2 q2 H: s  ^# Nx=sdm_out(start:step:M);
, a9 D- ?% j+ w" g8 t8 c' h
% --------------Using minimum 4-term Blackman-harris Windows -------------
  k" L; ]9 j1 G9 i9 w. F' \# hptst = 1;
4 j# }1 h2 `! w1 K  Mptfi = M;. Y1 W2 r+ x( E/ P# @/ c
pts = M;% A* e0 |6 [( z# f! x  Z
nb=1:1ts;/ Z7 t8 Q' u7 Q: K6 a: ?* p
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));( v3 K) d3 h3 c9 R
win_gain=sum(kb)/pts;) p% F) ^5 B8 T* r! P+ V
kb=kb/win_gain;8 |0 d1 v- m& `: v
% --------------- Calculated fft --------------------------
1 F) Q% t+ p# dyb=kb.*x(ptsttfi);
. F8 [6 c1 O. t8 g8 n" p
yk=fft(yb);# W: u; N* B- z
fft_no=length(yk);/ h2 v) ?" N& V! c$ K
f=fs*(0:fft_no-1)/fft_no;* e* r  G4 ]1 J) r- e
Pyy=yk.*conj(yk)/((fft_no/2)^2);% I1 p. e" E0 ?- \0 y% l( Q! H
% ---------- Calculate THD ----------------------------
9 C& K1 d; j4 p8 S* Aj=1;
2 [% o& k: m. bfor i=1:1fft_no/2)
8 ~+ }7 {9 h  b" t" z. D/ I    if (f(i) == (fi*j))  
: |' U! y; Q' ]2 ]# f( w6 v2 y2 ?        HD(j)=Pyy(i);     %% find all harmonic distortion components
. ?# L+ _& K5 Y6 p        j=j+1;1 g8 C$ g5 P7 Y
    end
5 y( z' A& L5 |0 I2 iend
. j- i# \  m0 a  e5 fP_hd=sum(HD(2:9));2 m) r& e- C4 ?( A0 f/ N* h9 X
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
  U; p1 }- Y& L7 {fprintf('THD = %g dB\n',THD);+ I0 h& Z- `7 {  O- o5 P: C: G
% ---------- Calculate SNR ----------------------------1 j! p. W2 j7 v
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
: G: O2 C$ @" d8 L: w& P7 Tfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);1 u7 |& E0 k. R, m/ `3 R
span=max(round(fft_no/200),5);- B  ^* u; y- _$ z" F) B3 t2 k5 g
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
9 l, X- U1 u3 ^$ vP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;! @4 M) d+ D! ]0 L
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
/ l1 q7 t! Z* A) z0 o6 j/ h
SNR=10*log10(P_sig/P_noise);
2 b( \& }/ [8 u! l7 hSNDR=10*log10(P_sig/P_noise_hd);$ S) d' j4 u5 c* l/ c
fprintf('SNR = %g dB\n',SNR);7 o) l7 x$ ?1 d1 @
fprintf('SNDR = %g dB\n',SNDR);
% [+ V4 r: `1 e' ~1 Y7 t) l
0 p/ C" s* y% Q. e: F0 c藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:7 V5 h1 S0 K( Y/ G/ V! a6 n% P
??? Error using ==> times
, O! s6 I3 M( b" D/ o0 }2 @Matrix dimensions must agree.
) m' u/ V- Q3 Q- U5 ?/ P' E

, P  x4 e5 b, k2 I/ b; `" P* U1 z' }Error in ==> sndrtest at 21# t0 w* z- E3 ~- B" L: B8 L
yb=kb.*x(ptsttfi);

# J9 g- m0 ?: U5 ~& F% W9 F* t, U' t. T; {7 B
因x函數是我自行定義的,可否幫我看看要如何修改?  B2 c$ g; D4 r
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?2 J4 `5 I& c4 J, y7 R2 v! P! F8 n
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。. R/ j( g% R$ c# Z" U
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。/ a- u+ Q! H5 g' B
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題- u7 W9 Q7 H$ r' `8 s/ i
那就是你設ptst和ptfi是同一個值是不對的
! V3 ?% e6 t6 v; q6 z& j# jptst是計算fft開始的值5 B8 W6 W# V( e$ k, Z% M; L
而ptfi則是計算fft的range,如8~519,total則為512點; i7 g6 U1 V+ o7 W
故而你在執行MATLAB程式時就會出現錯誤1 g1 m- I* r9 ?  ~4 ]9 G

. j: v$ R% T- b我看了一下你的MATLAB程式,基本上沒有多大問題+ G( g( Z) L4 J* p* m/ B+ h
不過,要小心計算THD的值和範圍
+ T$ {$ t. C9 b! {因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
: I- ~5 x9 u- P1 @6 U& A- H, j1 N$ B" l/ j- q4 q3 x$ u
最後,計算noise有好幾種定義方式( z) @" f' J7 ]" V8 l% Z$ J
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理' ]" p$ }+ q+ u' z' f
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
8 Y  }5 W+ q6 n因為目前在計算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筆資料,還是說我這樣的寫法不對?% |& Q0 q( F* E% {
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。2 m( Z( Y3 E+ t  `
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?. z: c0 g' p& T- _4 M! z( z# k
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
! h2 K- Q) b, U9 P& B6 o我列出我當初寫ptst和ptfi的式子關係式1 U2 ?' q$ v4 {" b
ptst=2^3;          % calculated fft of start point  |. F3 @( q2 R1 [- K3 f
pts=2^9;           % calculated fft of end point2 {9 L" n1 z) a' H
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point$ G! f6 K! V4 T' m
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值7 D. N3 l: P$ E/ p5 p
如此一來才能夠取到足夠運算fft的值
. d1 m! Y9 p/ I% x. J: \" W2 ]) V
6 q6 D; ~3 A) ^) V另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
3 l; k  k6 z6 S如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤0 a. {7 O! p' R  Q( v; o
! a  F9 F8 I4 N+ k
如果對於要設的參數仍有問題; z: o0 l7 t7 K) Z! S' C2 z! x' d! |( y
我可以把我最原始的程式寄給你參考
3 E/ Q% |- Q0 q8 f0 `( q) w8 O7 ^: i# }3 Z# K* j
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:9 k! h$ ~# u  S# }/ J0 k
??? Error using ==> times
- ]+ A6 r$ C$ k+ R: M" jMatrix dimensions must agree.& m$ v$ X2 o: ?* X9 O' v

- z: x' H, j9 t. ^( i; _, s& H' ^Error in ==> sndrtest at 26  [* B, n3 S9 ^7 H/ m
yb=kb.*x(ptst:ptfi);0 f+ b0 Y# c( Q- U
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。2 Y, k  t+ t/ I8 r0 l
∼感激不盡∼
& z% O8 b; q. k" L) Q6 Ops.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
' o; a  o% f7 n! p特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下* ?, _0 y$ C1 d. J" l! X
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
# s$ ]% G4 d1 @0 S因為沒有MATLAB請問HPICE可以直接做嗎??
# v- W% h& J3 |  I  K " }4 K9 v0 j" h& g
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
) `: Y* y' K2 @# u! _' E% s/ _至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
, m1 a9 M7 r" [' M  {但,在業界,個人的建議是,還是要跑HSPICE會比較保險
8 b1 \# V  z6 Y! d6 f! W/ v4 J至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
8 p, X. N) I' S* G- d- f一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易7 Q% g, a) m; s7 b7 j
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-6-17 07:52 AM , Processed in 0.158020 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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