Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
1 _0 z/ P( z- _4 N所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失' R3 Z! O, A2 r; l6 i
7 g  D) A' g. ~( N% w) }1 A( J9 J
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
, ^& i2 l0 |+ z; Z. ^% n# y+ l3 `9 T而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
' s9 d, O  q' G8 O/ i9 K' o8 d6 P/ ~& _) D. `
至於另外個問題,我的回答是,對的. `% d( r% S+ `
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下8 k: b+ f* `1 f3 b! d# ~2 h  b
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣# d: s1 Q' \% _& P
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
5 m6 e' j! `! J8 @9 I; r% t至少我模擬起來也是這樣, x& S5 W' L2 O) H/ k  [/ N$ g
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
4 D0 Y0 e) H( e; \* ^+ ^; b! u所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
7 U6 c; [. Z8 X7 c說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。$ X# M  l2 X* Y/ y
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 7 M  N& d2 p8 y6 h! l
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。4 m; S" h( s+ V' A4 P
此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
7 {7 T# H7 [: e# |2 u∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:
2 j0 j. l3 p, G9 M0 r0 U3 G5 @; f我依照你提供的程式,修改成我的規格後,程式修改如下:
% z+ s* v! M1 c1 `9 }  {+ u% --------------The number of FFT -------------' G- d8 b* k) Q' C* A3 D, J
fin=5;% *KHz
& C5 S, a+ u7 W; @1 q6 h( g- f% Lfs=5120; % *KHz0 i: c' G$ I2 `7 Q! g
cycle=1; % cycle = 2^N ; N = 0~5
9 g) Y, P  q! L  k( |7 iM=round(cycle*fs/fin);
' S) `7 Z  D: A% _- c( i% --------------Load the binary code -------------
. }- @4 K. O$ y7 f* P: P  P/ D* {load sdm_out.txt -ascii! \! s+ F7 P2 G: u: E
start = 1;
& j* G+ X! q7 U* `) j1 c2 e; Ustep  = 1;
# O( E% Y* I6 ^& [" v7 I! T%ADC
& O5 i0 ~" S. Q- j) g4 Wx=sdm_out(start:step:M);0 ?7 B9 l$ t, U' H4 S5 j, y
% --------------Using minimum 4-term Blackman-harris Windows -------------
! B' W- x! D# m5 U) s. m+ Hptst = 1;
3 Z* W4 K8 n+ Y- hptfi = M;
$ y. b7 Z  |7 m4 h: H* z' W" M6 k2 H5 Bpts = M;
3 u( I. X8 \! B' J- W. I
nb=1:1ts;2 ^1 Y5 z! x5 E; z! i( [
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
0 ]) j0 A2 y% Swin_gain=sum(kb)/pts;' N0 E: D5 e6 C- p4 N1 M
kb=kb/win_gain;
  v$ {+ k5 n+ E$ H6 w+ S1 v, w- {) f% --------------- Calculated fft --------------------------/ w* j. n$ |& M. O2 j. b' p
yb=kb.*x(ptsttfi);; \' G; S, Y% t9 S& v9 @
yk=fft(yb);
7 V- p1 c3 R( f! n+ ufft_no=length(yk);
& ^0 @4 c+ l5 w, a; h9 xf=fs*(0:fft_no-1)/fft_no;
5 u0 O, ]0 m+ J. b9 J6 e0 V6 EPyy=yk.*conj(yk)/((fft_no/2)^2);
2 T; B$ |1 S( e' ?" e% ---------- Calculate THD ----------------------------6 [* @2 [# @7 g( ?: S3 Y8 |
j=1;
3 f8 `& v5 ]) nfor i=1:1fft_no/2)
& F( [+ y$ t5 z    if (f(i) == (fi*j))  . a; p3 ]% a! t/ ]" j, [7 K
        HD(j)=Pyy(i);     %% find all harmonic distortion components
9 q, C( L0 f. n( J' ^; _$ O3 D        j=j+1;
1 q+ @8 x9 J+ _( h. q/ _    end
7 @: n/ d  \# q$ x, Vend: A+ g, \4 L4 z' W" k, R
P_hd=sum(HD(2:9));# @9 h! i  B4 z  x) {
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
7 v/ _8 Y* X( o* T( u7 B- ufprintf('THD = %g dB\n',THD);8 V! u8 a' l8 b4 U- O& c
% ---------- Calculate SNR ----------------------------: P6 A  q, C; _* R
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
2 U8 D3 @$ R3 j4 H6 Wfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
3 v+ p$ D" h0 B6 x- \& [( Yspan=max(round(fft_no/200),5);
6 e& {5 f9 S1 _2 z3 R  @P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));; h$ A: v1 d# ?. h+ }! n) o7 _
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;# I2 u/ J3 O6 D2 {
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
; G6 \( A6 F+ _) O- a6 G
SNR=10*log10(P_sig/P_noise);2 J: W2 J' l  X" ^6 ~! z2 h' t# G
SNDR=10*log10(P_sig/P_noise_hd);
' ^7 @. H4 v( l2 v& z
fprintf('SNR = %g dB\n',SNR);8 Z3 d; n4 |2 M/ {: d. ]  |2 g& r
fprintf('SNDR = %g dB\n',SNDR);  C& R" U( k& `! b1 L6 M7 Y; G

% P! y8 t) e- e藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
5 s+ n7 Z7 v9 O??? Error using ==> times
! g; Z# M  N# aMatrix dimensions must agree.
/ e! v+ Y/ v- z1 z0 I

0 t4 Y$ F' p. I- t1 `' vError in ==> sndrtest at 21
4 w/ x# q0 [" T+ r$ H  {5 Myb=kb.*x(ptsttfi);
- l+ N( Y  s* ~$ F

# ^1 t0 i! M7 w) z因x函數是我自行定義的,可否幫我看看要如何修改?
, t$ s* b- D" |' |% z: @另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
( q$ f( w# C$ P# r+ w. w除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
8 I* v( y9 j  ?7 H! f附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
. [5 m! [, L  N% \; P以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題! e8 `4 b1 c2 k) J0 T) n
那就是你設ptst和ptfi是同一個值是不對的
6 P# Z8 _& v  r& pptst是計算fft開始的值9 F1 A( o, g. p2 @! H/ O
而ptfi則是計算fft的range,如8~519,total則為512點
( B) }4 N6 a7 P故而你在執行MATLAB程式時就會出現錯誤( `+ m5 U9 p, V

" B  U5 U+ a6 ~5 n我看了一下你的MATLAB程式,基本上沒有多大問題
2 N4 ^. F& v4 X7 ^* K不過,要小心計算THD的值和範圍+ Z  C0 N" j; B2 Z
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
6 y. F; Z1 k  f1 k  I$ P' b1 ]; a' p1 x% b
最後,計算noise有好幾種定義方式
' W# U, f2 _" j. J原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
: H5 J# i: r( x- z0 A) q我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
$ Q' v; e- E  x+ Y2 c/ i因為目前在計算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筆資料,還是說我這樣的寫法不對?
: q4 {0 C+ R0 h- Z& m6 a7 w& S因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。9 a( z2 N) c* T5 }& f4 P
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?4 {; `4 w: w9 E1 K# N8 ]
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了& ]7 E1 d: W$ `2 M- F) B
我列出我當初寫ptst和ptfi的式子關係式. ], E$ K2 j9 u
ptst=2^3;          % calculated fft of start point, ]3 l/ L) X3 c3 c. H8 R% Y0 G7 g
pts=2^9;           % calculated fft of end point
5 t  c( R3 l, J7 sptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
( l6 ?6 T- V& d+ [3 L' ?因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值( N6 o% c: g# u0 L3 L9 x$ `
如此一來才能夠取到足夠運算fft的值
% ?& u$ {/ Q3 P5 |( I
+ @: r/ u% v8 H; L- t另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
: k  M# g4 w0 j' k: P/ }% G如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
! a! p0 v4 X5 r- w1 Z8 J* R/ U
如果對於要設的參數仍有問題
' f) L8 ^% C$ f7 i0 k我可以把我最原始的程式寄給你參考- k7 X$ y" w3 P* g. e+ z
1 t$ \2 {/ s6 T( |2 S/ J
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
" m6 B1 e# b7 ]; N) F??? Error using ==> times
2 ]' L; @" D: E3 BMatrix dimensions must agree.' Y3 f& V3 ?. }0 J; s- x; Y. T  z  l
1 p+ `- T& _7 R
Error in ==> sndrtest at 26
, ^1 O% v6 P, ^( ~- N0 @6 z7 m4 y( g0 ryb=kb.*x(ptst:ptfi);" g  \# `( I; ?& f- ?+ |" t7 R: v& R
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。. W7 M$ q, Z9 W( q' b! x
∼感激不盡∼1 z6 ?2 P: w% G* J, t/ z; [
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?2 K) h: A9 B) n' k5 d% W* [' t
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下# [1 |2 Q- [5 }% a
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
9 M# {6 s/ I3 h) j$ S" \3 F因為沒有MATLAB請問HPICE可以直接做嗎??* T' f: E9 Q+ C3 J0 F

7 k" \. I# C( I+ D- |7 A1 U" Y5 n8 d請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體! k, ~$ K# u7 T' ]9 q# x- }3 m
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬6 x, S5 R4 o0 m) A) _
但,在業界,個人的建議是,還是要跑HSPICE會比較保險
( E6 C, V% ^5 M( H+ Q至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
1 v7 ^; j* y1 Q2 h& W5 t一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易  i4 V# Z- z9 Y; ^- K
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
$ W' f5 N; H8 R- Q$ d0 ?$ r. B                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?4 W$ L8 d* A. @7 F# [
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析/ A) I5 x) T# @( G+ k; R9 K
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
4 v1 H: k1 S, ~如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。, X( }; N5 f/ v3 J) [' [8 f4 k/ {/ Y
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。7 H+ \+ w% h! n! N1 g% b8 b

: ?3 b8 Q5 g7 B: L2 o7 H[ 本帖最後由 緣緣 於 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的檔案。/ @/ I5 a# F8 c9 [- O) ]9 v
2.然後開啟matlab軟體。
+ b/ X7 d+ ^( ^1 j8 M% _6 u3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。6 l- f; r$ \; ?( I
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。% q: M  @6 B, y; b8 D+ {% F
5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?
! O8 m  |! H, _- m- I! \
" w8 a% ~( P- G) Q. _. ]error in hs_allocate_sf: unexpected values in block1 header
0 `" c6 R$ d3 B; T??? One or more output arguments not assigned during call to 'loadsig'.
9 z) ^. M. j1 J# \  u這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
- M5 I. Q$ v6 B* ~7 g第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-28 09:39 PM , Processed in 0.137008 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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