Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
, W, ?3 s1 h8 n8 J7 u所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失1 T, d. s  h$ M  I& I( H9 o! U3 b
& w2 C0 v+ s1 f9 X& L) a! X
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
1 z$ G1 E1 j7 A; _+ M/ z; o6 R/ g而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
) I. t/ B9 U6 ^2 l2 M8 e, c
! c% C6 e! X3 @3 ]  N: d至於另外個問題,我的回答是,對的9 d! v1 K+ B* {1 `; T. f$ w
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下5 N+ U7 o- k  g3 N8 S1 l, x- `
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣7 {8 X' t8 p3 g9 D; O; t  |
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
4 v- G1 |; f* W3 X% A+ K% ^; [至少我模擬起來也是這樣7 f& K7 P& a+ z* {$ e9 o8 [" a
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC' k0 h9 l5 E9 x. b$ t" }$ s
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:* r) d2 l/ h. Q1 j
我依照你提供的程式,修改成我的規格後,程式修改如下:3 J, h0 l% E4 B) u
% --------------The number of FFT -------------* c  \, y4 r+ Z$ ?- E* K
fin=5;% *KHz  \6 Q5 u5 S: c% |0 L& I
fs=5120; % *KHz
- d- V4 w; h& u4 L& H3 i" Xcycle=1; % cycle = 2^N ; N = 0~5 ' G7 r7 H. o) E4 @; b
M=round(cycle*fs/fin);, u2 G+ d0 D) ]' J6 v- b4 C
% --------------Load the binary code -------------
' L  Y# c; ~4 f! Sload sdm_out.txt -ascii5 X) V7 q& C  J0 {0 {  W
start = 1;, J3 z8 Y" C5 \) ?$ P/ U8 s; t4 D/ p
step  = 1;9 C( V9 u" M( Z/ F+ B" w, ?9 k
%ADC
% W( A3 s6 s' D) S# `x=sdm_out(start:step:M);4 W, V$ Y2 h1 l
% --------------Using minimum 4-term Blackman-harris Windows -------------
& ~+ M! _5 M* C$ Qptst = 1;
5 C! i; \7 [) K& u7 m3 ]* V5 m7 }ptfi = M;! T. L( V, \3 y, e8 ]
pts = M;
$ x& B* S1 a9 u) l
nb=1:1ts;
6 l2 Y% L" |% O+ s) ^2 T. e. ?kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
& L) i" U: h, v2 B/ rwin_gain=sum(kb)/pts;# A' ~8 w, I8 l, e7 |
kb=kb/win_gain;* s/ O8 v2 W) ^8 }
% --------------- Calculated fft --------------------------
1 z! o- `( c' ?; Z# dyb=kb.*x(ptsttfi);, o9 V3 {+ w3 G( `, b3 X9 L( U# b
yk=fft(yb);/ o" \4 z3 k5 E% t/ X
fft_no=length(yk);' G4 k6 u7 e, x  |
f=fs*(0:fft_no-1)/fft_no;* B5 F! d# M5 O) g
Pyy=yk.*conj(yk)/((fft_no/2)^2);
. f# J" |# J8 W6 q) \- D% b% ---------- Calculate THD ----------------------------6 }! ~4 W& H' D# \' z
j=1;4 \' e$ p& O8 C: c
for i=1:1fft_no/2)/ @0 [4 Q- J+ ~& M9 `4 P
    if (f(i) == (fi*j))  : P8 R: f; x8 y4 D0 @( I2 A. q
        HD(j)=Pyy(i);     %% find all harmonic distortion components/ {# n1 }! d7 P6 [5 n* A' G5 @3 i
        j=j+1;
3 r6 ?7 @0 z2 i. O' W9 {( D    end
) A& Q) @7 h* x) ]+ i8 }7 ~* x# Dend8 m' ^9 z6 l% |
P_hd=sum(HD(2:9));
3 u" N0 o5 N: n: a' {$ r& fTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;# o6 c* J8 U/ J4 Q: ?7 x
fprintf('THD = %g dB\n',THD);
7 J! [2 u) u+ r% ---------- Calculate SNR ----------------------------
' W  v0 g4 {1 I+ ]5 T1 Cfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));! Q+ b8 N6 E' ~  _' o
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
+ P1 b' N. P. {1 @, c/ G* _span=max(round(fft_no/200),5);
+ d" b9 ~5 o7 gP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));8 C9 f# w; ^3 T/ n, ~  P* F  ]
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
7 @4 K* }6 q6 A& v: J, }# N! H) [P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
3 @3 S" C4 z. M
SNR=10*log10(P_sig/P_noise);) Q5 z$ P9 l; V6 n1 G! h
SNDR=10*log10(P_sig/P_noise_hd);
3 g* i3 j$ e+ y  f
fprintf('SNR = %g dB\n',SNR);) t& \1 E, b+ @6 H3 v
fprintf('SNDR = %g dB\n',SNDR);
7 M. i3 x8 E! M- W0 X' n( ~3 Z, \
1 K# R4 v0 y3 N1 |藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:0 q9 x  \1 ?! {
??? Error using ==> times
( S" P5 `  A9 P) n$ ^; IMatrix dimensions must agree.
, N2 ]" R( c2 W% M/ v
" V) y$ R8 D5 {3 f; Q
Error in ==> sndrtest at 21: S, {5 p! T% E5 W; J
yb=kb.*x(ptsttfi);

/ d/ Z* X! |0 w% D7 D$ z2 e3 |
' h/ m- @7 X) q6 H4 X  h2 ?' W( W% t) ~因x函數是我自行定義的,可否幫我看看要如何修改?& V. T! J9 R: @; }2 d
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
4 ]7 t, ]1 _6 a% x( n  J除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。5 \2 q5 Y3 t) I7 F2 N$ Z: _( g
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。* ]2 C; ~/ u( F9 s* e* T6 y3 g
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題' C3 L% O$ @1 Y! Y8 ?6 x
那就是你設ptst和ptfi是同一個值是不對的
7 i% s$ j9 k; J, i( }ptst是計算fft開始的值
9 F' Q7 ~+ s3 |9 ^1 T5 l" V% i而ptfi則是計算fft的range,如8~519,total則為512點
' C- M/ M* `, I" m  i& l: I故而你在執行MATLAB程式時就會出現錯誤- [# b* ^) e( W3 u# M4 H+ x

" o7 S2 {& C" \- y2 N  h5 s我看了一下你的MATLAB程式,基本上沒有多大問題+ M( O* C, |. P$ W1 c. w4 C
不過,要小心計算THD的值和範圍
9 {, c- G: u) Y2 L因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤7 l2 N, }0 ~. F+ L; v0 `

' u3 N  @6 r% Y# Y% H" O最後,計算noise有好幾種定義方式
4 p6 _% ~0 Z: p) K; X原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
- a7 o2 c3 ?6 t* G+ I我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
" f- g% z9 H) x因為目前在計算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筆資料,還是說我這樣的寫法不對?
0 ^! U: r7 {) }因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
. R" o7 v7 `! L2 h8 \$ k0 A$ ?3 f我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?5 W  E0 T* @! `
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
8 l; {; }1 T1 e$ Y2 H我列出我當初寫ptst和ptfi的式子關係式/ T# n: l! `( S. q. D
ptst=2^3;          % calculated fft of start point
7 g! k5 l2 F* I5 V3 d# V9 Jpts=2^9;           % calculated fft of end point
9 C* i+ l! v2 {1 z8 b6 `4 tptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point" C2 L2 F7 g  W$ p; P) d
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
% d6 K$ O: t! T  z如此一來才能夠取到足夠運算fft的值: v4 _2 r. e: q" \! R
& x% s1 ]* K9 R
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值) w: N3 s6 L4 c# L( w+ e8 U% K
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
2 B2 Q* W! ]# z# g! p. K  h1 O0 B" E3 A* L
如果對於要設的參數仍有問題  U: t/ a& S$ A
我可以把我最原始的程式寄給你參考
& D4 V, O# ]/ d7 y
3 z) ^+ _& v' b- C9 ^[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
9 L9 I; c8 a; D- ???? Error using ==> times
4 _3 z* f" B- v4 HMatrix dimensions must agree.; @6 K7 Y! c8 c5 ~0 }7 X
( y- K% |7 G* \7 i
Error in ==> sndrtest at 26
! Y8 D. m" v6 Lyb=kb.*x(ptst:ptfi);' o3 {7 w; T5 q9 W- h
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
& c" d% I- \6 R& C9 e∼感激不盡∼
  e% x2 ?+ F" b2 z- }, G* Aps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
# H* w: e$ {5 U( H( L* W' @- m特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
& `/ `! J+ `2 V  p9 q8 d& C如果要在HSPICE模擬ADC的INL及DNL的流程及作法??" a& H& n  k% i7 r* c: z6 Q
因為沒有MATLAB請問HPICE可以直接做嗎??
( B! v5 P% l; K. a ( O8 u7 R  E3 q4 S8 m2 n$ u
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體* F8 Z" E9 y- u# k6 e& X# \
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
/ {8 G2 c' B8 W2 }但,在業界,個人的建議是,還是要跑HSPICE會比較保險4 Z8 v4 R7 `5 C& {
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
5 \/ @5 }( f! j' i一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易2 W& X. }7 H8 r8 O) H( c8 j$ I- n$ G0 t
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?( ^! H& z/ _" \: ]6 {& h0 v7 B% |
                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?. G; C& v" X) F8 [4 H2 M8 {. i
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
* ]% T4 w: N) ]6 q6 T0 G. k請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:  i3 ]4 U0 C" Y$ w
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
8 s' N) Q+ `: F  f關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。& `, P3 m. j, }3 ]; h

8 l* d/ K& J; h2 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的檔案。
' B  t' X& Q% w9 I+ v2.然後開啟matlab軟體。7 p) [, W  o! O- ~6 A; E" L
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。1 p4 L" x5 _) d2 h
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
* X0 t5 ?3 }; s. O, w0 x6 G5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?. z2 x2 ~# J9 U

. P2 @- U3 g9 q9 p1 ]error in hs_allocate_sf: unexpected values in block1 header
; n1 l6 `: U' u9 H??? One or more output arguments not assigned during call to 'loadsig'.
, _8 J  j/ G0 U* s! ^這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
7 M! b, j0 x- k3 }第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-25 02:46 AM , Processed in 0.199011 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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