Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
/ Y4 [4 M+ S  f所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
6 a2 J6 ]5 z6 J: E% `
: w3 L6 s, z& B; V5 m9 @& `1 ~+ W至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
7 x% B# w# P8 w( A2 |而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
  N, N1 c5 a7 b# L" B/ f6 t  w  U6 B5 ]0 {
至於另外個問題,我的回答是,對的4 q! W- w( V6 ?* a; j- F# p/ K1 o
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下: X. ]1 p- {+ R4 Z7 ^- {
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣' s9 f7 A5 ~) E
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
& ~6 @) z+ a' M* Q至少我模擬起來也是這樣5 Z7 r" K* r9 G& l
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC0 |# P9 m, E& ?; r% _& `- S7 I
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:. o* U& l, o9 E5 E0 m6 u+ ]
我依照你提供的程式,修改成我的規格後,程式修改如下:+ s, _7 L/ h  u2 f
% --------------The number of FFT -------------. X4 Y, E: B" B$ ]+ B
fin=5;% *KHz
+ T" W, c; G- p1 K2 |fs=5120; % *KHz
, K% D1 m' q" j. j, H/ ]cycle=1; % cycle = 2^N ; N = 0~5
% R. D( }( n( m8 S6 x( N( Y9 PM=round(cycle*fs/fin);6 W8 h% O3 @' y* Z% [6 M/ s" A. P
% --------------Load the binary code -------------& s/ }+ M% S9 m- A" ?" h
load sdm_out.txt -ascii1 \* E, Z0 v# P0 [, C  f4 u  R2 Q
start = 1;+ B' O" a0 m7 ]+ [
step  = 1;
9 @" e+ V& P- d+ g%ADC
* V. b" r- \5 w" Hx=sdm_out(start:step:M);
% H$ J" k( w) E( W
% --------------Using minimum 4-term Blackman-harris Windows -------------7 Y0 F+ q' h- c4 l+ f! I9 u
ptst = 1;
$ _, i- r. z+ e. V2 C; zptfi = M;2 a8 m# s; x) T- I5 ~- D
pts = M;
. {( C$ e8 f- A+ Z4 U
nb=1:1ts;2 A* y& o, x1 F% Q; O
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));, W1 U( C$ N3 F
win_gain=sum(kb)/pts;
  g! `* M8 \% k( fkb=kb/win_gain;
' z, i0 }) {- j0 ~, a% --------------- Calculated fft --------------------------0 D! T( m( m( q, j
yb=kb.*x(ptsttfi);! n: R0 ]7 t, F7 F8 ?" u% P$ u
yk=fft(yb);
2 g) @7 Z- o; t* u& Lfft_no=length(yk);4 o$ z. _6 v" ^7 s8 f  C% |6 w5 E/ n% U
f=fs*(0:fft_no-1)/fft_no;
( I$ [, i. ?' x% \/ u4 l# Y: nPyy=yk.*conj(yk)/((fft_no/2)^2);
8 y" B4 \5 A. q4 ^+ L% ---------- Calculate THD ----------------------------" B# {8 d/ K# ~( t
j=1;
. {; R6 v- d/ e7 afor i=1:1fft_no/2)
; {  U6 [  n$ A, @- m% z* _    if (f(i) == (fi*j))  , ?  I) I. U: ^9 H$ w. T2 n, }
        HD(j)=Pyy(i);     %% find all harmonic distortion components) |- Z$ ~) {0 v- o$ I# n0 z
        j=j+1;
+ z% W7 H3 B" p2 r+ q* V    end5 }. o) {. O' Q9 L/ w
end
6 z2 U9 R+ j' [* z, tP_hd=sum(HD(2:9));
% H! r1 \2 G) V7 y# p+ j9 ~THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
7 ~1 ]# W" V& |4 l) H& O" _fprintf('THD = %g dB\n',THD);  O$ t& F& w9 A9 L+ i- z
% ---------- Calculate SNR ----------------------------
8 `& b- W) V+ j+ ffundamen_dB=max(10*log10(Pyy(1:fft_no/2)));1 e. Q! d1 N8 ?1 P- F. S
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);5 ~" m$ z; j7 l) f. N
span=max(round(fft_no/200),5);
' T% e4 D# a4 iP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));1 b2 w  Y5 K% r/ I/ O. K; E% u
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
9 ?' D5 ^& v2 I$ `$ v2 VP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;1 e% t. Y3 B' G$ b+ X
SNR=10*log10(P_sig/P_noise);1 P. q# n& N' }* E3 F
SNDR=10*log10(P_sig/P_noise_hd);6 a  |8 h3 T0 @
fprintf('SNR = %g dB\n',SNR);' P; {" a4 Y1 O) m+ j
fprintf('SNDR = %g dB\n',SNDR);
5 x) M1 X1 k. g; t0 e ' Z3 k9 U2 l+ F2 p9 p: x
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:1 P0 f1 x2 }# r- G; D
??? Error using ==> times
: Z) b8 O5 a1 q; m5 c' v9 M1 bMatrix dimensions must agree.
. y+ x2 l9 r) [. h8 n5 c! z

7 s* [7 O; U/ j" vError in ==> sndrtest at 21  z! K: O) v" k5 [" p8 C* q( Z) n
yb=kb.*x(ptsttfi);
) i. L4 `1 \2 S8 x- I! X- U
5 K4 B& a, G% V* N5 B
因x函數是我自行定義的,可否幫我看看要如何修改?
" r, w( j2 \* h& O' d! W  u& V另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?4 d0 K! W% p  X7 `) ?3 H  V& S; O
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。8 D8 C- G$ b! L6 a6 }# A
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。! u8 |) @0 y. \, V: t: n8 G
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題6 r9 k" V. l  k. o6 M
那就是你設ptst和ptfi是同一個值是不對的
* I* A/ l# X4 s+ {! V( _; Vptst是計算fft開始的值
  j1 q$ A5 d+ x& i而ptfi則是計算fft的range,如8~519,total則為512點
$ \" ]8 {: i+ F. b- ^( T故而你在執行MATLAB程式時就會出現錯誤
1 z) ?0 j) m( p
' Q( P* D1 X, {; x$ l3 h' A我看了一下你的MATLAB程式,基本上沒有多大問題
+ L! g+ K: P' E' g不過,要小心計算THD的值和範圍# \- p2 {8 j" P$ s) b& E  `: J. F
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
5 A% z+ E) ~$ w8 d1 \9 r' ?0 Q
" I' j! N4 q" |) y; D9 }最後,計算noise有好幾種定義方式. p- Y  N5 @/ y4 Q& o8 I1 {4 ~
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
& R. @$ Z4 C$ N  l7 U我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
$ y, T0 a6 r  m; J0 J; C因為目前在計算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筆資料,還是說我這樣的寫法不對?
( h/ O9 p( Q, z5 x5 P因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
' Y7 X  {" o1 e+ M9 `我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?. [, _1 ~9 X2 u; ]  ?
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了$ Q7 k+ x1 S, V5 R$ ^3 S
我列出我當初寫ptst和ptfi的式子關係式
% ~0 x3 V# y0 r$ y" T( \ptst=2^3;          % calculated fft of start point
" K% ?/ N. c. w& q1 K. Tpts=2^9;           % calculated fft of end point
  G( a# w- v+ z$ yptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point) s' g3 ~- A6 @1 m. E$ C( A
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
* G; P$ y  D: @1 C# s如此一來才能夠取到足夠運算fft的值, ^' ^- A7 q* L  U& X2 U
5 `$ k, _" J$ Y
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值/ K; a( F8 ?5 @* @; c& X
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
- H* Z3 m, K' _$ {% T9 _) i! b0 m
& U, g" @1 T- K" ~如果對於要設的參數仍有問題
& P7 ]$ L; V& M7 }: l我可以把我最原始的程式寄給你參考. [' n/ B4 V" }! d; a, x! U3 G

: s0 H0 \7 z7 P' @/ m9 Z( V  X[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
0 \! E4 V: N1 S. f??? Error using ==> times# S6 x2 a. L5 V; Q- x
Matrix dimensions must agree.
- m) \# Y$ H& N& R6 G) L- ]) J8 f( Q5 d+ ~
Error in ==> sndrtest at 26  J) R  g/ f6 h; L9 s
yb=kb.*x(ptst:ptfi);$ t& D7 P2 I, M
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。6 f; b/ \- [  b& F+ m6 k
∼感激不盡∼
' o' J5 x7 i/ @/ a& Xps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?/ ]# z0 K9 G9 u
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下; b2 }9 p, i7 K3 n
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
! V! c3 Q$ ?% q1 B因為沒有MATLAB請問HPICE可以直接做嗎??
  n9 c* _2 `- o2 H
- [* _+ g& c* J% i請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
% Z- W- u2 |! j. X. n至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬) H5 v# D) z) K0 h8 J- X/ e
但,在業界,個人的建議是,還是要跑HSPICE會比較保險
7 u0 u' b4 K) U8 ^4 X至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算, u0 W# K& a5 S& p2 E2 d8 o& F6 G
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易' O  r4 g; \0 r9 K8 s* J) `/ u/ b* |
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
7 ~1 o# H( P" H7 F; G- y6 Y9 i" L- j                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?
& v/ N. h2 d! q9 g還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析  R5 w. A) S. ?7 b9 y* w% D
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
3 `8 T& }7 R2 v5 \  ]如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
. i! o9 E0 g& m/ n% M關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。/ P+ q- V& r' m4 a* G8 \

. e8 ^& |0 J6 e" m% H+ Q, f[ 本帖最後由 緣緣 於 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的檔案。! S* r9 W0 O6 e9 U/ f
2.然後開啟matlab軟體。+ ^8 J- ^& ~/ l( g) c8 v% \" y0 F
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。! l. W4 [( _, T: Y
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。& }# N8 r" X+ @/ o6 I
5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?; D+ {5 N4 ]" o6 x+ ~" a" V

' a1 A' K  S: Herror in hs_allocate_sf: unexpected values in block1 header' v: G' \4 H- e) S' n3 W* m' F9 @
??? One or more output arguments not assigned during call to 'loadsig'.( Z( S3 V# `6 @+ p0 W( S3 d# ]" O# n
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
. f; A1 m' |5 {4 C第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-14 06:49 PM , Processed in 0.142018 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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