Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
2 w* G1 l3 o. n2 W: }* d所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失: ~2 \5 W* V  P1 W

. y  E" ]8 w+ u3 [9 F至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了3 D) I, ?# P" W* @+ I$ ~
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久4 E2 W. W* w. A
$ ~: C6 i& t8 r) d" }: h, `. }
至於另外個問題,我的回答是,對的
: y; K2 V( o5 P  H: @9 ?但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
6 P+ |# R5 O0 x! r緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣) a1 Y4 T3 X: N7 I8 u$ ~
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了# `! B1 \7 y/ _
至少我模擬起來也是這樣
% _  T. P$ G3 Y6 M而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
( G- F: Y5 o% o& Z6 ^所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:/ w! g* _( K3 H+ @; {
我依照你提供的程式,修改成我的規格後,程式修改如下:
7 ?2 a( ~( b3 n8 A; r% --------------The number of FFT -------------, }" j& e. ]# g, H9 X
fin=5;% *KHz
9 R: u* m  l. [  i7 Hfs=5120; % *KHz
. v) J2 {' \' S$ J6 W& O2 lcycle=1; % cycle = 2^N ; N = 0~5
! x* }& P8 S, R! Q( G2 c/ u/ Q8 X; cM=round(cycle*fs/fin);& a/ W1 J5 z: J  L; I( c* |2 i: d
% --------------Load the binary code -------------3 j  o  I3 C' n. t9 K: Z
load sdm_out.txt -ascii
( |" d1 G/ a: Y# o9 Qstart = 1;
4 y' U/ [- q" y, A. `7 h) D# hstep  = 1;
- u$ X' d" z1 S+ m8 ?1 X% _%ADC
0 D: C" ?7 @. w. ?( L! v2 Xx=sdm_out(start:step:M);9 M& V5 |) w! x$ G- {, @' w+ v" t
% --------------Using minimum 4-term Blackman-harris Windows -------------# D( \# ~$ y2 V: M4 N9 i( k
ptst = 1;0 _0 F1 [( n/ w5 X* N
ptfi = M;
, e, ?- ?# \' e8 ^- `$ x5 b3 Ypts = M;
5 v4 z4 H8 {$ F
nb=1:1ts;
7 ?2 E9 y; Q4 J$ C( Fkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
; z; z1 ]2 O8 M1 b( E, N1 Z3 b% Zwin_gain=sum(kb)/pts;
3 V0 n# q! Q3 U& G$ T2 }kb=kb/win_gain;- u5 A+ V8 ?* W
% --------------- Calculated fft --------------------------  x, @7 d# O5 L+ L, }- |, e' b
yb=kb.*x(ptsttfi);
: M8 ]# q5 R1 e, M3 T; D
yk=fft(yb);) _+ b" J/ [5 f/ B1 u2 w% t# t  Q, z: ?
fft_no=length(yk);
' c- L6 ?' V1 N: X) n  [* K- R2 |5 P8 Sf=fs*(0:fft_no-1)/fft_no;) d0 V! i$ k+ j% E" G& Y  _) @. N' E
Pyy=yk.*conj(yk)/((fft_no/2)^2);
) p# G. K' q. N3 l; j6 ]% ---------- Calculate THD ----------------------------
" ?+ y- {$ C6 Z$ U. A5 Xj=1;# P, S( b0 F4 k
for i=1:1fft_no/2)
6 b7 E. O- k3 Y9 I    if (f(i) == (fi*j))  
- `+ ^$ Z9 U8 h! b% b0 X* D        HD(j)=Pyy(i);     %% find all harmonic distortion components3 n0 c* n3 ^- ]8 o- O- }
        j=j+1;' f% x: e& l, N4 x! ?6 [* U& ^
    end
" x, _# f# `& x5 {  m! d5 hend# Z/ Y8 `3 i8 s; T
P_hd=sum(HD(2:9));( `; p; m: n/ Z/ O5 ]2 Z
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
5 G$ E. d3 z( c+ A5 N; ~( dfprintf('THD = %g dB\n',THD);: m% T+ ?& E* ~% O. V+ Q$ C
% ---------- Calculate SNR ----------------------------- M+ U- Z' L6 c( O/ u. m
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));# |9 P$ J& `- B
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);2 ~  n) k8 v4 ^; T5 J" W' b% e
span=max(round(fft_no/200),5);
# K# o2 X6 x1 ^" @" m/ \P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
0 R. v  ^5 i3 X! z7 }# v8 @P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;" O2 C' b* T  |4 [; d' \
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
' @& v9 j  n) q. H. a/ k3 R9 S
SNR=10*log10(P_sig/P_noise);% \8 V& N# n! t3 J9 T( B
SNDR=10*log10(P_sig/P_noise_hd);7 ]0 J6 ^. ]  y. }. {4 B, q% H
fprintf('SNR = %g dB\n',SNR);
! b. y0 A* m" W. c6 M! A9 i7 C: @fprintf('SNDR = %g dB\n',SNDR);
6 H; [( a) K! u  U. Z0 ~' [ ' l9 w- ^5 q5 y) B( y! B
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
1 |4 _& b6 Z3 p* r; l, d2 H??? Error using ==> times- n2 ]! ~0 z; d
Matrix dimensions must agree.

% c$ f- |) f8 r0 l ( A6 S2 h2 n# A6 W; ~
Error in ==> sndrtest at 21
" P0 c2 S* i; n( ryb=kb.*x(ptsttfi);
: @. i, B, Y& X! V% ~/ D6 j

* f; e2 M7 c$ r$ s* w* n2 a因x函數是我自行定義的,可否幫我看看要如何修改?
$ g9 R0 f3 y. ]0 p) n" i3 p4 j* i; M3 z" X另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?  K) s8 |1 r* V, [6 R- Z7 U
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
( A; V/ D: ?# c+ b2 y$ o- T& L附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
4 V! n1 b# O  i/ Y  q以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
5 x+ h6 P- f5 S# z6 Q那就是你設ptst和ptfi是同一個值是不對的
, Z6 o/ j7 Q/ fptst是計算fft開始的值4 T6 o: Z7 ^& o/ c
而ptfi則是計算fft的range,如8~519,total則為512點
# `! v: g* R$ q" \9 z9 g. _% v2 C故而你在執行MATLAB程式時就會出現錯誤
8 v3 {0 {" }% l- j& f; C1 \( [! y
) Y- {, Y2 I: k2 _; X& i3 Z8 r$ T我看了一下你的MATLAB程式,基本上沒有多大問題' I$ C, X7 S+ z# Z, t1 ]
不過,要小心計算THD的值和範圍2 R( P) [/ [2 c0 e; c2 ^+ d) p8 o
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤) A: r& W  l7 i3 k1 d. O# r
: J0 n5 \+ H- B8 ^7 y
最後,計算noise有好幾種定義方式0 ^+ U3 W2 W# `  }/ @
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
9 A9 z9 }# t7 d1 c6 L: n我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
5 S8 ^6 d) M# ]) M# f- r因為目前在計算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筆資料,還是說我這樣的寫法不對?. c' e& w2 Y- o
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
: ~7 x6 P; q. s我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
) Q, q1 g% g* _0 K6 R謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
0 k, |% O' u- I; e* Z我列出我當初寫ptst和ptfi的式子關係式& k+ A% p1 ~1 [) ?8 R9 w
ptst=2^3;          % calculated fft of start point
8 `. I- }7 m- w! o' Z+ v3 |& Apts=2^9;           % calculated fft of end point
2 p$ D+ {3 Y1 c; n. b6 xptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point7 ?" S; }. R( @6 F& v3 Z
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值! ]' S0 `3 N; N: F1 s& ~4 k
如此一來才能夠取到足夠運算fft的值
$ `0 U, V1 e* y+ i$ O  J7 F6 R
% K1 Z1 x# ?8 B# R另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值% g" V# f8 _& K* t0 l
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
9 }* n! K; [- O. e3 N, [# E! D. G' k$ R$ |3 a
如果對於要設的參數仍有問題2 [4 y3 S  a2 H0 u$ e
我可以把我最原始的程式寄給你參考
2 o5 K) P, S4 G. A+ R$ q# P/ h$ R2 a5 r
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
: t" g# M$ |: x??? Error using ==> times
( u" I4 |4 F7 B3 hMatrix dimensions must agree.; {& s+ G5 n  |6 e# ]6 v
; ]( N% |9 x. ]! x" ?+ V
Error in ==> sndrtest at 26
4 E: O- ~- t- ]$ O6 hyb=kb.*x(ptst:ptfi);
0 l' y; y  \( [; V4 c那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。: f# `, s, I$ h
∼感激不盡∼/ ?5 G' T2 j+ l% I, ]& Z0 }; }( }
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?# e6 ]& }  G* D7 f+ [
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
7 O' [' J  \7 ^( g如果要在HSPICE模擬ADC的INL及DNL的流程及作法??; I- |# d% H; I! A
因為沒有MATLAB請問HPICE可以直接做嗎??
9 W( I% W4 T* s# S, F- n; _# n0 N & K" b5 k) y8 T
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
+ ]  r. n& b: p至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬$ x6 e' R- H# h* `5 d4 U
但,在業界,個人的建議是,還是要跑HSPICE會比較保險
7 G, k3 @, T; @. l至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算; G- d! u+ [% Y; K
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易+ J  v' J& c; T
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
; C& s- P+ V/ i6 y+ ~" ?: S                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?
3 {. q& z+ E1 I$ F還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
) C: }1 g1 h8 ]" f請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:7 d; B* s+ c9 N. P( w
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
# ]  W, o6 w* T關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。& j0 V9 g7 J! H+ y0 V. T
1 y2 O3 S) _4 I# u0 p* |6 Q. p
[ 本帖最後由 緣緣 於 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的檔案。
3 V: l- X2 b4 i# f) \, W, A$ h* Z2.然後開啟matlab軟體。
1 C1 r4 G& S3 t- R1 i3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。/ E, z$ W9 |6 j
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。- O! N! R; \. U' V% W
5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?$ x6 M+ g6 }: B8 }5 ]  q
* r; ^' v; l6 \1 ?# ~
error in hs_allocate_sf: unexpected values in block1 header+ Q! c- X$ u5 l5 f9 |) A2 t* S) P+ s
??? One or more output arguments not assigned during call to 'loadsig'.0 f& c4 D) ?0 x+ g* R& A. ], t
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
' u1 A( \6 N9 J7 `' D% G( Y第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-13 10:25 PM , Processed in 0.138518 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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