Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....- t" d; p! I2 D* u: e& z+ d
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
. t: V( g4 Q7 Z1 g. _- \: r4 q3 b* P4 U8 S- m1 J
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
' g* U: f9 a5 D而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久: G. @6 w3 [6 {4 O& d& X
* A  o* {. P$ u8 b
至於另外個問題,我的回答是,對的
7 {- X+ I3 }& n! [但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
! n$ H, t0 G0 T1 ?緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
3 U% {2 p8 q' a/ r: X" f5 Q; Pvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
: l, ]& F1 N. P# @5 f至少我模擬起來也是這樣
% w  O+ t# E# I% f0 u: g而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
; D) L/ o1 H- u0 E所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:
( n- S' c, y: m/ d# Q* F我依照你提供的程式,修改成我的規格後,程式修改如下:# u4 C7 ~$ E2 G' ?0 a* @! {
% --------------The number of FFT -------------
, n# n$ |$ G/ K5 J' Z0 b+ Tfin=5;% *KHz& h* c% C" J% C. r# |6 m
fs=5120; % *KHz
2 [% c9 k) \( T8 m! bcycle=1; % cycle = 2^N ; N = 0~5
- S* V* y" M' ~) G- H  b6 NM=round(cycle*fs/fin);
8 O9 x& p: E7 V- v) ?! ^0 c% --------------Load the binary code -------------
8 j& s' v4 i) M* v" Q* X- E! d% @; O8 K0 Dload sdm_out.txt -ascii; i+ C: d& K  V0 X; f4 a5 I
start = 1;& N) Q* i7 a- b" y' q" q
step  = 1;5 R% D1 Z" H. _, u2 D; A' Q
%ADC9 f  M) q2 r, D' E4 O* y! M5 k
x=sdm_out(start:step:M);
1 ~2 N( \' J8 \( K/ c, H
% --------------Using minimum 4-term Blackman-harris Windows -------------3 G2 C4 m4 }$ }# Y
ptst = 1;
+ ^( ?# t$ f/ F' u% W( Y: ]  _ptfi = M;# T6 ?5 n1 j( x% e# k& p! P/ {
pts = M;1 ]% _1 `) g5 d
nb=1:1ts;' i* p  [/ }! G$ u  B( V, u
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
$ ]* x4 X$ i8 Dwin_gain=sum(kb)/pts;
$ H8 U+ D: d5 d8 O" y2 Fkb=kb/win_gain;! B+ g8 O" l: m; _
% --------------- Calculated fft --------------------------
! ?# E$ l' X, |' uyb=kb.*x(ptsttfi);
- w& G: j0 o& |5 b8 C& ]; n
yk=fft(yb);( G% n$ C9 o6 }
fft_no=length(yk);. j& j+ S; M. ~1 g8 X& }
f=fs*(0:fft_no-1)/fft_no;
* U# n$ \2 i. l$ Q; a! P) p) QPyy=yk.*conj(yk)/((fft_no/2)^2);' O' ^! F! I+ \. c! d3 @" ]
% ---------- Calculate THD ----------------------------' E! ^$ {5 f1 ]- V" G
j=1;) ]$ L$ ^5 w! T1 H' F! O6 [
for i=1:1fft_no/2)
) }- d* T2 ^  r  Y: h! l; Q    if (f(i) == (fi*j))  2 z+ H% D) h! n
        HD(j)=Pyy(i);     %% find all harmonic distortion components
2 y, c6 x" h. N' d* o) x% u# t        j=j+1;* B# o: m1 V( g
    end
0 F' E2 g( \: A0 A$ ]7 Nend
- F& o7 W/ e' IP_hd=sum(HD(2:9));
5 y3 M+ _1 ]- y4 X( LTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
& c: ?' ]) g# l1 M6 O7 sfprintf('THD = %g dB\n',THD);; k1 n4 V3 \1 s2 O: B( f! c
% ---------- Calculate SNR ----------------------------( k( ]  p3 s" i9 ~' a8 _8 Z
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));: f+ b! n$ a4 q; B! A
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
1 F! Y8 T8 j! O7 p2 s* {span=max(round(fft_no/200),5);
; @+ n' d! {0 G+ I, W5 SP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
. D: P  v0 c9 L" l' sP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;7 P" M: C* w3 Q; h# f" y! E/ A
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
- j: ]( n7 W' X- i
SNR=10*log10(P_sig/P_noise);8 M& l4 D) o3 e( v6 A
SNDR=10*log10(P_sig/P_noise_hd);
) I9 _% U3 p/ w: _2 O& `
fprintf('SNR = %g dB\n',SNR);6 @* N- J* ^* u1 T
fprintf('SNDR = %g dB\n',SNDR);
) d3 n- ?( A7 K( `
, l! i. e9 q% v5 p! k藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:8 b' C, E& Q  o2 V- B
??? Error using ==> times
% z9 B9 `! @  oMatrix dimensions must agree.
! y# j# c% ?0 c2 f2 f0 ], J

; H/ `) W) ~# U( EError in ==> sndrtest at 211 G4 t# L3 ~; i6 _! A5 F2 y/ y; Y
yb=kb.*x(ptsttfi);
3 A% V! a2 m9 s% T1 M# Z2 [' s
1 H5 J+ V. j+ Z  u% s( u
因x函數是我自行定義的,可否幫我看看要如何修改?
% l7 Y' A+ R. ~% }1 Y另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?* g7 h" ^. m! \( \3 V. D7 \
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
$ c" B& v* @7 y3 j' X% B附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
' m6 n! `; h7 v9 \8 O( D以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題8 Z  G% m$ D; y+ t5 a! M
那就是你設ptst和ptfi是同一個值是不對的- n; u8 ?5 o  g( H; o
ptst是計算fft開始的值
9 F# A1 b/ n0 L2 J而ptfi則是計算fft的range,如8~519,total則為512點( q9 [# O; ]" Z6 I  Z
故而你在執行MATLAB程式時就會出現錯誤
: N# ]2 \  q0 J% N5 z0 n- n
. H! y0 w1 r* U1 `! E. c我看了一下你的MATLAB程式,基本上沒有多大問題3 j: r, G# b  d
不過,要小心計算THD的值和範圍
0 H* q" D$ [& L0 P. q因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
( t5 G2 k" Z4 Q+ a
: q  D8 ^% `% D4 o最後,計算noise有好幾種定義方式
& n( C2 ^3 S2 a原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
6 m$ f  s+ }$ i# c/ Z我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
, B- P' V) O0 S6 q: L! _- G因為目前在計算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筆資料,還是說我這樣的寫法不對?
( D+ I; w, W$ I" [& [3 M因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
( a6 R/ |" ]$ Q' u1 z我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?) n, \# X* E  C; E
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
& k1 Q# Z" v0 P2 s# d/ ~: J我列出我當初寫ptst和ptfi的式子關係式
0 p: J9 F2 v, A! {5 x2 z9 }: ]" ~ptst=2^3;          % calculated fft of start point% e2 L8 h& n* x, N$ |
pts=2^9;           % calculated fft of end point
! @$ p2 g, Z, r8 fptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
0 r; }+ g7 h: {8 m8 C因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值8 E) {, y& ?( O/ L  s5 `0 V( M% X
如此一來才能夠取到足夠運算fft的值
2 ^* t) _7 y( M* i$ _
  d; j5 ^" o2 K" A& t; v0 ^% V8 S' u另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值4 p' c6 s4 y9 C+ s" y$ ~
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
1 @/ E+ Y6 w* F9 o) T! R  t1 W" w
如果對於要設的參數仍有問題
5 N2 R1 T" G1 @9 l0 N' t我可以把我最原始的程式寄給你參考! o+ ~  d" B" k

# }* E& h2 H( w* A$ a. P! z[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
* l2 p2 X  F2 X??? Error using ==> times. J1 u, Z6 Y; c1 A2 ]
Matrix dimensions must agree.8 }: o/ }. g  ]& `$ a7 d0 z

7 r6 `* e1 u$ m' dError in ==> sndrtest at 262 {3 m5 e) ?% l8 o  g" y1 s6 x4 x& G
yb=kb.*x(ptst:ptfi);) i# e( K5 X% h! }
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。1 P1 v! ?. M2 ^# `$ e; v
∼感激不盡∼
$ U+ u0 \- p$ `  f( Yps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?  W9 d: X1 v* _: V- a- d; D) }
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
+ \9 ^5 ^8 T3 U. r如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
+ y1 i# }/ W6 [因為沒有MATLAB請問HPICE可以直接做嗎??
& F, ?7 I  @- ]) m$ o& c; X 3 |+ N* n9 F3 E  v6 t
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
/ w8 ~. s9 W/ }9 ]( I; ]至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬! R# T9 T8 Y2 E' b+ ^7 p9 ]" d
但,在業界,個人的建議是,還是要跑HSPICE會比較保險! ]# l  V. F+ ?( a% V' u# J# H
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
& V4 E) M# Z) b% n一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易: y" R: d/ \' ^) N; Y* S
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
  J1 {5 _: K0 U& L. m, r                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?% d/ |% D, b5 P2 D) Y: l
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
. U4 L* {/ `% {: M請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
% D  ^+ B8 q/ f2 p+ K$ Y如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。$ @" Z& N! ~2 }' a3 A5 u) V
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。5 l1 q' S( b) O' {. `

, ?9 G9 b+ _8 R[ 本帖最後由 緣緣 於 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的檔案。/ f) b/ X$ j$ `1 U
2.然後開啟matlab軟體。
3 i% S) l2 [& Z! ~- K3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。% u) a- s1 A8 Q7 P2 C! k- a
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。1 v! j1 ~) f/ k0 |* g
5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?
- P$ j' t+ o7 m% [% B  {# S3 E" \( @' v2 b. @& c
error in hs_allocate_sf: unexpected values in block1 header7 [5 q2 {( D. K9 Q8 ?9 @, K4 l
??? One or more output arguments not assigned during call to 'loadsig'." L% R  e0 A) {  J& X  G9 v; Y
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。6 L# [% B5 c8 \4 u$ a
第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-19 06:09 AM , Processed in 0.196011 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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