Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
' g; a9 n1 _7 ]; q) Z2 h- i所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
  @5 d$ ?: H2 ?- M7 v/ }. S# F' N  e/ g6 M) T% S4 Y
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
/ l9 |% \8 _8 A8 E' o7 O& }5 O而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久/ h, W3 k6 X7 t, B4 N
5 h& W# `2 @) \
至於另外個問題,我的回答是,對的
0 x# V: i: s& x! _% B& Y, R但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下4 h! x# q5 \4 v8 p( a+ A
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
& G9 P; ], G( {% Cvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了4 ^+ K" M. t: S
至少我模擬起來也是這樣' s- k# F* y. C. Z5 v
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
$ w; b* G$ s4 u+ N, S7 N+ W' i" ]所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:. X! e( X+ u: r, B  o
我依照你提供的程式,修改成我的規格後,程式修改如下:
( f& S; L0 ~/ f% --------------The number of FFT -------------
/ O7 `) S, U& Ofin=5;% *KHz  q* Q( r3 _& w2 L
fs=5120; % *KHz  j( l1 s& F( A! [, {- h0 q. O
cycle=1; % cycle = 2^N ; N = 0~5 5 B: ]1 m  [6 }
M=round(cycle*fs/fin);3 H( a/ }( m. Y- X
% --------------Load the binary code -------------
6 H8 W8 ^% z. aload sdm_out.txt -ascii8 ^) N2 D% S/ ~  q; ?1 `
start = 1;9 g8 o+ J. Y) ]  s/ n4 }
step  = 1;3 m, r& F% \$ n" L1 V
%ADC" w" e  }4 `" m  K+ w/ U% N3 f6 Z9 S
x=sdm_out(start:step:M);
! d( Q# x$ K' _  w  {+ A
% --------------Using minimum 4-term Blackman-harris Windows -------------. B9 ~1 g) s3 l' m: d  u+ Y8 ~
ptst = 1;
" a) G" C8 ~" b+ \/ \ptfi = M;! U5 O- g% L8 p! n: T/ l
pts = M;5 g5 J1 L2 d6 {- n" p8 h6 }6 q2 g
nb=1:1ts;7 K* [. o  Z: Y0 c5 y
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
  A& q3 [- f) |/ o' cwin_gain=sum(kb)/pts;, V6 Y8 f0 d% k( P# e' C% E, `: b
kb=kb/win_gain;
1 J- P- j& |2 I% --------------- Calculated fft --------------------------
( ?6 @/ @2 d5 g* P3 Q( pyb=kb.*x(ptsttfi);) q; c1 j" U1 J( R- e$ I
yk=fft(yb);5 Z+ z  k) T4 |$ h+ n$ n% z- w# T
fft_no=length(yk);$ S, p: q7 l' f* X0 n* ]
f=fs*(0:fft_no-1)/fft_no;+ E8 Z0 y$ ]$ H: Z5 i- `1 ]% k
Pyy=yk.*conj(yk)/((fft_no/2)^2);- R! ^( J3 B- p: q, y# D
% ---------- Calculate THD ----------------------------$ c+ b! \1 k# v% d& c9 r
j=1;
2 w( k) N, z7 R& Z. M' Sfor i=1:1fft_no/2)
5 B. u1 d8 X6 q+ h% e    if (f(i) == (fi*j))  $ ?3 \% u0 J3 H0 k, s$ N# y
        HD(j)=Pyy(i);     %% find all harmonic distortion components
/ _" T4 e3 ^6 X1 C* K        j=j+1;2 d* H1 [; O; m! a9 J
    end
) p  ?! g! E. N9 e/ Mend
7 ~) ^5 R% r$ Y2 gP_hd=sum(HD(2:9));% J) i4 S7 b+ [5 N
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
- m: t9 L# I! b* D9 [fprintf('THD = %g dB\n',THD);/ N' h# W* [8 |. V" s' z
% ---------- Calculate SNR ----------------------------$ e% E' l. q, t& j
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
3 U- M+ Z% g) ^/ n6 c+ Lfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
; |9 q8 j) T" ?( Vspan=max(round(fft_no/200),5);
* h( x  z- O8 p. pP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
- K  \) u" {: uP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
7 x8 p, M9 ^2 u- `5 c8 bP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;  M' W7 J3 R) e: C
SNR=10*log10(P_sig/P_noise);
/ Y0 X. V$ K" _SNDR=10*log10(P_sig/P_noise_hd);0 `3 d: ~; X- a; I/ ]6 {2 ^! k* P# s
fprintf('SNR = %g dB\n',SNR);
* i  k" Z8 z9 M+ ]" B& Xfprintf('SNDR = %g dB\n',SNDR);
, [, C) _8 D* N- `4 ]; j# B1 c. r " @0 w  H% T; }7 Z5 n! K
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:. ?, r3 Q1 R* [/ E
??? Error using ==> times9 b* t2 H2 D+ w6 g& q
Matrix dimensions must agree.
* _! F( i2 P/ E* y+ o8 r
/ v4 G0 Z& d- d" Z8 s8 K! q
Error in ==> sndrtest at 21
8 A* K, @" G! Nyb=kb.*x(ptsttfi);

. b/ \* i! s3 E* N) G8 h- D; B2 U6 m# u6 [+ n
因x函數是我自行定義的,可否幫我看看要如何修改?
3 j* i$ q- w, y/ H另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?0 R6 W4 n( g: ^; e
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
" \0 H( y7 a9 C9 X附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。/ M* `& X; U* [% V% N" ^
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
; o/ m5 l# M* l$ M4 n那就是你設ptst和ptfi是同一個值是不對的
$ H; E+ u+ [; T# A, dptst是計算fft開始的值, P+ h1 ^  M! e2 D% P, T
而ptfi則是計算fft的range,如8~519,total則為512點
4 M/ g% A$ j4 G8 D: H7 l) h故而你在執行MATLAB程式時就會出現錯誤
6 `5 O( u- T# A0 d8 r3 e; o2 j# s  N* \0 k- i
我看了一下你的MATLAB程式,基本上沒有多大問題% S2 H* ~9 U, _4 v! b8 x/ {1 c- C
不過,要小心計算THD的值和範圍
& k; x5 t! F7 G/ K因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤2 A3 v  Y' E$ u/ c0 c0 ~2 w& Y0 R
4 M+ X; p. R- l+ h' p" z; Q
最後,計算noise有好幾種定義方式% T: I  I# S; I" A* C! q
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理+ r0 {, _: P6 U/ k7 v$ ~
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可! V6 P& g0 j, z& ^% J. A
因為目前在計算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筆資料,還是說我這樣的寫法不對?
6 y$ B! h1 Y2 P; f9 O: p) e& [因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。. c( B  h9 h8 C) R0 |9 W( x
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?/ _" K- {0 V( D, T9 v
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了3 m* h+ w! W. x$ B
我列出我當初寫ptst和ptfi的式子關係式
  u" `) I/ I0 l. {8 |ptst=2^3;          % calculated fft of start point; t( j- m' u+ f3 O( Y4 j2 k$ Q4 t( f
pts=2^9;           % calculated fft of end point
8 m$ j. N+ P( c! x- Nptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point$ g) C0 R' l" t6 n' i7 y
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值* x' S, g7 J( ~2 {0 a
如此一來才能夠取到足夠運算fft的值
. ~: K: A- {; x* U$ P; e6 J: n9 Y/ M: @& X- y8 d9 b+ U
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
4 |5 c: n2 J! J( l$ B, y5 S, {如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤: I. E( ]: V2 Z( ^1 L* _+ D

$ H) R/ o) }3 s) f3 x0 l如果對於要設的參數仍有問題
3 n9 B; ?5 f1 Y) x, g/ s: w6 D我可以把我最原始的程式寄給你參考
! U6 d! [6 D* @1 |! S: W) q
4 P7 |# c& H6 F" G; ]5 U[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:, s5 v- g; M$ [7 I% J; R7 \
??? Error using ==> times$ B3 ?# N9 }' ^
Matrix dimensions must agree.
* ]3 a! p) v3 E; L1 ~; j
% T& \3 X0 Q5 |0 d' OError in ==> sndrtest at 260 R+ X; I. k7 I( p# U, v
yb=kb.*x(ptst:ptfi);! T0 w) i6 f9 s5 J  d
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
) m/ M% V1 j7 l. D∼感激不盡∼
0 i" x. k) o, D* D' h  p1 T( f# eps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?% X$ e4 _# E" n: s/ k5 E
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
( R) e8 n2 w/ ~& [. q* V如果要在HSPICE模擬ADC的INL及DNL的流程及作法??" o) V3 U, H$ @3 L9 z! z$ A2 U5 W
因為沒有MATLAB請問HPICE可以直接做嗎??
% k5 B# A% H7 }6 Y6 H  D+ c7 p - C$ g7 \# S  {, d, l4 B' j
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
* c7 D; U2 n+ p: O至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬( q/ p6 m; U2 Z( C! X
但,在業界,個人的建議是,還是要跑HSPICE會比較保險% D) X" I2 s1 y0 P5 Q
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
- [/ s; h5 z+ ^$ Y9 N; [一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
0 j0 H  \/ Z5 F0 d/ l. i而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
+ N+ p- F* h! e3 c/ L2 _                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?4 D# O( {6 D) r
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
8 {' E% A2 P" j( a' l5 ]請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
1 B% k0 t" E0 O* }如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
, O8 c/ W1 x; a7 u0 Y4 R7 z關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。$ {  k0 q/ V* j( ^

1 `" [% p3 {8 V$ D2 I  w6 k[ 本帖最後由 緣緣 於 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的檔案。- d4 @1 E, l+ Y# N6 j) J7 Q2 n
2.然後開啟matlab軟體。
, ?+ _$ c8 H* Y  D3 Y9 A3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。1 [# @! D# X; b+ y$ ]) T
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
$ g, z; o; p; j2 H! N7 B5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?
! c2 i. f& O% j- e! X- g% G3 [3 H
- E/ A# j, e, O: J/ k& I& {error in hs_allocate_sf: unexpected values in block1 header
1 T9 Y5 U' R3 l- `) W??? One or more output arguments not assigned during call to 'loadsig'.
7 ^/ ^1 a4 {, f, k$ o& r# P7 F2 C這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
, M" k. r. Z6 l) f$ Z第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-14 04:49 AM , Processed in 0.142018 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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