Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
" r. U, P9 H+ w! c所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失9 O, p) D. [+ F$ M8 h
5 c% ]1 c/ Q; ^
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
9 q) y  @, k5 b而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
* j0 c6 @9 B% R" Q, |3 x% [, s5 y, \$ h$ h9 B# B' o
至於另外個問題,我的回答是,對的- ^' U2 s" \0 A* G, n" H2 D; Z
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下& U3 V2 c: v3 r8 y; m7 `/ q  |# h8 @
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
! H) v/ d- T! t* |8 D' H" Wvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
' d( P! D3 V3 O1 F  p) w至少我模擬起來也是這樣
) h. S" ?2 g' i4 @: t1 O( C而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC2 L# i% j; V$ Z2 K9 v
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。8 x7 V+ ?% @2 C! _
說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。, {. Z% d6 r, Z0 @2 S3 G4 D
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。
1 u% a8 ]+ ?$ Q& W6 V- T  k在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
9 z3 k7 {6 E0 X, Z5 z. d此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   1 Q- S2 o" t# b* j% M7 V
∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:9 B9 V9 R% G  h
我依照你提供的程式,修改成我的規格後,程式修改如下:
5 @0 F4 K$ ^/ ]& I* \* j% --------------The number of FFT -------------# k, X+ M9 q# _5 C; _
fin=5;% *KHz
. [* p& P) ]% k7 j/ ~) |; Mfs=5120; % *KHz
+ l8 Y  N) d! c) wcycle=1; % cycle = 2^N ; N = 0~5 ) Z' }3 C  y1 a! A5 q" V/ |$ S
M=round(cycle*fs/fin);
* p  O! M- s* n$ p; W* J% --------------Load the binary code -------------
) p/ v$ X/ b, Hload sdm_out.txt -ascii
4 d9 r7 K7 v) u6 w) rstart = 1;
) \( l4 K" ^4 K( I8 M' n. ?% Y5 I; estep  = 1;
, I. m: K. \5 [* T%ADC3 u( ]. @* B3 X- G# ?% f/ [
x=sdm_out(start:step:M);
" Q- X$ E4 y0 K% I7 ~# w
% --------------Using minimum 4-term Blackman-harris Windows -------------
) T, Z( N! l8 \( [2 Pptst = 1;
, U  w6 T* W3 {7 j  Dptfi = M;
4 J8 I9 Z$ d2 R# M; _9 Xpts = M;! l: O1 k  {6 s: p$ o
nb=1:1ts;
4 L9 l7 `3 }4 F8 t( ekb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
3 ?: ^. A2 U! u9 K7 cwin_gain=sum(kb)/pts;
/ v' k# m7 F% Vkb=kb/win_gain;
: K. e: s$ m# V# i+ S( r/ S% --------------- Calculated fft --------------------------+ D" G  F5 P7 ?7 M* M. x
yb=kb.*x(ptsttfi);6 N8 B; N+ ?. y8 \% S! I* \
yk=fft(yb);
. g% S! y6 p/ w6 |, z) ~+ H$ Mfft_no=length(yk);) c- f: m2 E, e0 ~
f=fs*(0:fft_no-1)/fft_no;! A! [& n1 I4 w, M  E# A3 l
Pyy=yk.*conj(yk)/((fft_no/2)^2);
& Y3 d( X8 ~1 ]+ M& X6 o% ---------- Calculate THD ----------------------------5 J" l: [, y5 M! W) ?
j=1;2 [  u) ~  P: d
for i=1:1fft_no/2)4 P* N+ n7 o  O$ d. N
    if (f(i) == (fi*j))  9 h4 ?; |( _4 `& }1 e
        HD(j)=Pyy(i);     %% find all harmonic distortion components
, g* f+ N; Y4 I4 b/ \8 {! y$ {' _        j=j+1;1 |4 F* h& u; T! g( }# t1 u& s  s
    end, ^. I: o" z$ s8 ~; u2 c/ k# w/ p! h
end
( U% U  E: Q0 N# Y  H/ cP_hd=sum(HD(2:9));: p! t  e! N( Z
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
" X5 e5 Y# V. \5 B2 B+ S8 cfprintf('THD = %g dB\n',THD);
, H+ a" U' K$ U% ---------- Calculate SNR ----------------------------! H3 r6 o! d- _5 t. C
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
4 ]5 {/ W7 r2 R/ }8 Z+ J& q8 l/ ^fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
! q' g4 r! r9 ^6 D* S5 qspan=max(round(fft_no/200),5);
6 }- t' T7 X4 gP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
5 g0 I6 u# o/ s# xP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
% A+ C! c* F4 f! BP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
; |: [4 ]3 P9 @
SNR=10*log10(P_sig/P_noise);( M# _# P) l4 ^1 U# B
SNDR=10*log10(P_sig/P_noise_hd);
  d6 H9 `% ~! F4 Q
fprintf('SNR = %g dB\n',SNR);
( j0 ~% R  {2 Q( }2 X9 f9 F, zfprintf('SNDR = %g dB\n',SNDR);4 p7 N0 S1 e4 u# K2 E3 c" S6 b/ E
- D  x( l  m# g( r
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:: X9 g8 T$ p2 ]7 p* `
??? Error using ==> times
4 }6 G* S8 f- ]/ w: u+ lMatrix dimensions must agree.

/ x8 I# }3 E5 ]% C( I# \% I
) \- C( t. N! I+ E. p& rError in ==> sndrtest at 21
4 E# K' |* `6 p  {yb=kb.*x(ptsttfi);

0 Z7 Y/ D( c9 Q; z. R1 S7 X" ^
  G8 l# N& O# L: }0 Z因x函數是我自行定義的,可否幫我看看要如何修改?. X# L; P' L, J
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
# ^  W' u+ B6 @; k# I7 g除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。6 S8 }. Y# O# R' x' a# U
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。! a7 v5 D& s8 M. P$ _, ]$ x
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題. t* X, b4 @' a' S: h8 @
那就是你設ptst和ptfi是同一個值是不對的
- ~; _- {( j- m/ _. @ptst是計算fft開始的值
, K& {+ K2 j- d- B5 R# s7 ~6 ?而ptfi則是計算fft的range,如8~519,total則為512點
3 g- ~( p! a0 s故而你在執行MATLAB程式時就會出現錯誤
" O" Q* {+ a- Q5 {3 Q$ R" E
2 ]1 t; @$ {$ w" k* l我看了一下你的MATLAB程式,基本上沒有多大問題
: l+ x8 f8 R. |1 K不過,要小心計算THD的值和範圍
7 Z/ f9 [& d" F2 A% E" R因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤. w  `9 L6 u6 V8 {' V8 l+ G! ~9 ?
5 @0 G& m2 d( q0 Z, |0 R
最後,計算noise有好幾種定義方式# ?% b, m# Y5 n: l8 w
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
/ j4 ?3 Y- ~* c, e5 G( I: @0 Y我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可! T9 \8 w" e6 U6 K4 Q& }
因為目前在計算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筆資料,還是說我這樣的寫法不對?, {* m8 i6 U$ p! h4 c
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
# y! i9 R# K* T$ z我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?0 n% h3 t6 x+ M6 i1 U/ }+ \, c
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了( J2 m, U; S' x. d0 _6 w% o
我列出我當初寫ptst和ptfi的式子關係式
+ E6 L! ?  k. tptst=2^3;          % calculated fft of start point$ G5 t. G( C- o0 _
pts=2^9;           % calculated fft of end point" b4 R2 [7 J( [) n6 b1 b1 ~; v
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point8 D- A' y% P( U7 F
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值: s7 H& H4 D- N" T7 ?
如此一來才能夠取到足夠運算fft的值6 @" }5 l: H* j- }3 Q& R

+ B$ a5 s# o  `: C% C1 A8 I另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值# ~; r$ W% u6 F9 I" k6 T
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤6 F+ e% X) q9 W& W2 c
$ X3 T) ^7 Y, a
如果對於要設的參數仍有問題
) {8 L. y! b" n. M: K/ q2 N我可以把我最原始的程式寄給你參考# \0 P, K0 P" h

1 v. ^/ s1 v8 d4 Y) r  w% ^* K[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:. Q5 Z" o9 M( M; k
??? Error using ==> times
5 S9 S9 j- W+ @7 \9 f1 s6 gMatrix dimensions must agree.
# C$ t/ \: h7 {
. n6 V1 a1 U0 A( U1 uError in ==> sndrtest at 26
$ P3 g# B7 f, D. B: N! O% r7 Cyb=kb.*x(ptst:ptfi);
" b7 E! Z) @- p- o2 g那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。, `, D0 c. `  }! S. L  L( R8 `
∼感激不盡∼6 j5 N* C5 F& I$ K
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?# m) Y$ t+ M4 Q; n2 z/ T2 k
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
( e7 i- a6 N  n- x) |% ~如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
+ q7 ^9 R1 Z( U$ `, o( A% a因為沒有MATLAB請問HPICE可以直接做嗎??
0 m0 k7 t, G/ ^6 b% I , b' p" Y4 x7 G) h! L' P. c
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體1 i2 P" x( U+ J8 }. n. w) o6 ~) b, |
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
0 b, w" F0 D) B' L但,在業界,個人的建議是,還是要跑HSPICE會比較保險2 b7 X4 y$ @7 B. e* a
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算* N* D! a5 n) g+ \8 r1 G' b
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易' G+ k7 |9 g% B) K
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?
: C% @1 ~) q4 t/ a# w/ `( q還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析8 w3 C0 b- p9 C7 j) A
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:4 j7 [; K7 s7 ^, W. ^, y4 P
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
6 y4 d+ O& ~3 r- y7 w8 ]關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。# u4 n) f9 ?+ v

, h9 W. p' P! 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的檔案。  d- S5 x) M( v
2.然後開啟matlab軟體。0 |- q+ j7 Z. j$ x2 f/ {
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。& _8 ]& O6 C) c6 H& s& r
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
3 }1 @( \5 q/ s9 Z& N5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?" e- e! J  ?2 V
3 _9 t, v6 ^% H- a8 {2 J( {- z' M
error in hs_allocate_sf: unexpected values in block1 header
! T5 L" G2 V. B3 g- B2 X??? One or more output arguments not assigned during call to 'loadsig'.
. _- k4 u! u1 A% v- i這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
8 v7 H7 U  |! g. E! {7 q第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-20 06:23 AM , Processed in 0.135518 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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