Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....% m7 p# x" {7 M
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失* H/ T/ I& k" k
9 k0 l/ I% {6 W5 |7 B" y3 s" d
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了+ X0 x+ _& c. L# U6 x/ B
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
$ @8 w7 d( w. q# N! X& }' `+ z
7 M* J! E& A. E8 s5 N至於另外個問題,我的回答是,對的  k* I. V% Y. o: W2 b+ c) M
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
) L* |0 O4 Z$ l$ H( L2 m. T  C) h緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣$ D+ q# L9 \) ?; C( p2 p# H
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了% k) _8 E$ l" V' k0 E0 E
至少我模擬起來也是這樣
5 {/ O1 `5 @; V) i# Z6 i: I# F而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
& X7 c. q# ^2 P$ D所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
) s/ i- G) V+ \$ S8 U) j, ~說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。% b) Z6 |) j' v0 m) @1 W
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。
: C& @: }) P; r7 b& Y; m在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
" B2 m5 z9 o: f2 C1 a' Q( l; }1 D此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
8 q8 a: [3 @6 ~. g∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:
% [" g! q) a2 A" C我依照你提供的程式,修改成我的規格後,程式修改如下:
6 T2 G, B% [3 @* C+ v% --------------The number of FFT -------------
1 D- r$ D6 j. A. {, Nfin=5;% *KHz
% w+ c& R6 \& O2 a' ]0 A$ Gfs=5120; % *KHz& ]/ g7 Y' `) f
cycle=1; % cycle = 2^N ; N = 0~5
; ?& n* t1 V2 e& ^$ JM=round(cycle*fs/fin);
: u- o  c5 v$ I( j( k: h4 q& P% --------------Load the binary code -------------
& |; W9 X# r7 h) Sload sdm_out.txt -ascii
) N0 ?( J6 v& T! E: _# t- pstart = 1;
2 a+ I+ @- W, d+ b6 C4 y4 q9 N7 {7 I: sstep  = 1;4 u& |% X( R% v( e( R0 o- f. i
%ADC
' o: T; A0 ], i3 c! I; @x=sdm_out(start:step:M);' s2 H( Q' V, A9 Z* b, m/ D5 v& Y* J
% --------------Using minimum 4-term Blackman-harris Windows -------------
+ E" X/ e" r: A2 }ptst = 1;# B9 [" i4 n! \
ptfi = M;" P0 }; e! Q7 i  e1 V/ W9 ]7 `
pts = M;1 X" I% A2 H* b0 c& l
nb=1:1ts;, f/ P& }- j5 p- |4 _
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
2 Y' ?1 L' z; H1 W- O% l, Cwin_gain=sum(kb)/pts;
1 @" j( V' V& J+ W" n; g: P" S3 Okb=kb/win_gain;
# J4 c2 Y- ?/ a. [( M  y6 |  ]; W8 z% --------------- Calculated fft --------------------------2 V% d  B1 s+ A2 `, d
yb=kb.*x(ptsttfi);
; S7 g6 E; h( m2 _# }6 Y
yk=fft(yb);) ^5 N0 F4 c# o( a! ]1 d
fft_no=length(yk);
3 _: B& s1 P: N# J* {4 X/ k5 _f=fs*(0:fft_no-1)/fft_no;0 v& f( c: P4 g' Q$ N: o
Pyy=yk.*conj(yk)/((fft_no/2)^2);
! ^+ e: l5 o7 x( ^6 ^- ]  z3 V$ G, v% ---------- Calculate THD ----------------------------( X) L. C' w) c# d8 I$ z
j=1;* b, G* }& ]) n4 k
for i=1:1fft_no/2)/ y( J: L. ]) L3 {& o2 i
    if (f(i) == (fi*j))  
, ?+ m: T( p- S4 Y2 _5 |        HD(j)=Pyy(i);     %% find all harmonic distortion components
9 ^% z3 K5 p; p" ]% i; }2 w0 ^' j" Y        j=j+1;+ m' `$ a! t' t+ h
    end. k- M; ?: o% V
end, U/ {3 |& K, K: F  n' H. w
P_hd=sum(HD(2:9));
2 d7 g0 k& |, m- q9 KTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;0 `& L' Q- {! ^# l9 I6 d; `
fprintf('THD = %g dB\n',THD);
; e! O! ^! x7 }" D6 ^: B% ---------- Calculate SNR ----------------------------' F9 w% t) Q# c3 \' a! Y% U$ K/ j
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));9 \: r  M* t) q/ K% Q3 T
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
: f8 q; x0 I  Q0 ^span=max(round(fft_no/200),5);+ X0 F" m: C% S/ ^& H5 ?, A
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
3 |5 r* U3 L! i" B4 z0 S# M8 _: JP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;0 G7 Y* n  c- w  W
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
% `' J0 k2 @( N) T0 ?( Y
SNR=10*log10(P_sig/P_noise);  I8 L: v1 O- C7 L* O, ~0 ^- \
SNDR=10*log10(P_sig/P_noise_hd);
5 l8 p5 N5 p- n
fprintf('SNR = %g dB\n',SNR);/ Q9 q# x# ~. X$ U0 M) `
fprintf('SNDR = %g dB\n',SNDR);: }% ^) ^* r0 h; B) h0 ^4 j

: I( a6 J* ~5 C+ [" U9 \藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:: m* K1 r3 O* I( R! S6 n
??? Error using ==> times
5 r( |, t( j* `3 N! [/ B* wMatrix dimensions must agree.
! B! X8 Q$ T+ Y$ j# n

8 T$ j! I2 d3 n. Q. w& DError in ==> sndrtest at 21; a7 G6 A1 p0 N& g& t, {
yb=kb.*x(ptsttfi);

- d, N( y  x  ]7 D) q
! }- m0 q2 S# Q$ C3 [5 R! W- Q因x函數是我自行定義的,可否幫我看看要如何修改?
7 p0 ^2 |9 @, B1 I( z另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?6 }+ Q% c0 [0 M5 R; S' ?" j  R
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。& W: K! N' a0 G, [
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
4 p. K, y, A% F' C& t4 k/ E以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
( x) O" T* F" t. q9 R+ J) M$ O那就是你設ptst和ptfi是同一個值是不對的" \1 V: W/ [3 r( X6 v" g) E
ptst是計算fft開始的值5 S- o: @  v0 r& Y5 S
而ptfi則是計算fft的range,如8~519,total則為512點8 P" p$ r% U# L/ x, w4 M( c
故而你在執行MATLAB程式時就會出現錯誤
3 ^6 I( k! v/ \0 C9 S. K0 F' n5 `- Y# J) F: q1 }; s9 k0 J4 G  L' e
我看了一下你的MATLAB程式,基本上沒有多大問題: o2 x- |1 [: Y2 m5 H* N
不過,要小心計算THD的值和範圍
& _* U6 v9 a$ m0 u% f# d# B因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤2 s( Z- N0 v- ]7 \. v( M, F. b
. Q. \( c4 H$ Y0 m1 q4 e
最後,計算noise有好幾種定義方式
& d1 u9 G8 j0 z+ u原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
4 J* ~) w/ G1 X6 J4 x& i% v我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可2 _5 n; F+ q) i! R/ G, W
因為目前在計算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筆資料,還是說我這樣的寫法不對?
$ v! H- D% e& k: n因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
' x" L4 l. B( W) {5 O. @- x我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?5 f8 K1 B, c  |2 d% u
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了2 g$ o+ O; {/ q! ?
我列出我當初寫ptst和ptfi的式子關係式
0 A+ Y% O- i5 {- c' R0 \- |, U+ Nptst=2^3;          % calculated fft of start point
9 p% }2 T) N8 V2 K# V6 o0 k4 lpts=2^9;           % calculated fft of end point8 b/ A- @3 g" D  g
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
6 H3 P% F2 O2 T* S$ c- U# w因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
' Y' P, R3 _5 T& `6 g5 J如此一來才能夠取到足夠運算fft的值
3 n: i; E" n& p6 T+ @# P3 p
1 c4 _( M- U# z$ w" v另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值4 j  L( K* t* X; i% p1 A
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤( O1 ]4 q, H# S8 a) v% Q/ R0 f$ S

' Z  K( Y( N' M5 R5 f, G4 ^, C5 u如果對於要設的參數仍有問題1 `: Y  T0 a/ K% J5 C
我可以把我最原始的程式寄給你參考" b3 q, V- f3 i
% y( @: M& i/ o+ L8 c" ~5 L+ T
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:3 i* F4 h/ m4 D  w; Y# g+ f
??? Error using ==> times
$ ?6 H$ N2 r( L# \5 q9 wMatrix dimensions must agree.
' P  v" F6 \1 e* L. h8 _, T5 b1 ~* ]4 J3 M' L
Error in ==> sndrtest at 26& n8 H, t  ]7 Z% J8 k8 U# o( J; m+ @3 q
yb=kb.*x(ptst:ptfi);4 e+ n" \2 H" L1 t) K. D* j0 n  ~" H
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
4 g7 B$ J5 g5 j" u/ k, Q∼感激不盡∼
( e4 V/ t* D+ e& L' c7 P0 w) ^ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
$ }1 R' X" s! `- `特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下. S' s" J2 C1 o; a
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
( v9 T; i4 K5 z" _& @因為沒有MATLAB請問HPICE可以直接做嗎??/ m7 m  k4 _% G  v+ b3 K4 ]% `

! Y& E8 k. W* R! a& {, c請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
4 G5 p/ T, I6 R5 F至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
/ W6 V6 N6 o% z  t但,在業界,個人的建議是,還是要跑HSPICE會比較保險5 M' C' f- X+ ]. R. W: F
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
5 P4 q, U& V+ F1 n: _2 S) D一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
6 c+ {$ A6 z; _, M; A而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-6-17 04:47 AM , Processed in 0.151519 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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