Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....- D) p( c8 H6 L! B1 }: b
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失* {" _; y* N  d) J) e+ W+ V

( x, r* X  z1 v1 p5 O至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
; J1 C6 D. S# S- l. Y+ @: g, v而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
# n- d9 i* p4 c# a- T; W, Y
, D  v, B" e5 v$ {! x$ ]$ h* b至於另外個問題,我的回答是,對的
! _) X; H0 z7 d! B但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下: E7 n. V4 z( t# \$ A0 _
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
5 ]4 F3 L& U/ Uvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了+ Q1 w; ^; ]- n: t$ g$ \6 ^
至少我模擬起來也是這樣7 ~: s3 B- R8 U  p& M/ t
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
; ?  `9 r% e( Q0 D( L# o. h所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:
+ z- M7 |/ e6 d, n0 n2 i( @0 y我依照你提供的程式,修改成我的規格後,程式修改如下:, V  b! Z9 Q% E$ z
% --------------The number of FFT -------------6 @2 k- Z; U7 R' _* u; c% O0 F* e- g
fin=5;% *KHz. V& ?8 e0 S5 g; O9 ]9 r6 v+ R
fs=5120; % *KHz
& f) ?* E) E0 s% Q0 Jcycle=1; % cycle = 2^N ; N = 0~5 3 g& f3 j' K( x4 J* W3 l
M=round(cycle*fs/fin);+ r' d/ T4 ]* f: F9 M# C! I4 D
% --------------Load the binary code -------------
. l. K9 b1 |( ]/ O; \3 J7 L; Rload sdm_out.txt -ascii
& J* T# m1 Q" J3 ]# W7 D; Dstart = 1;( _, b, E8 R1 |, C5 A# h
step  = 1;
, M3 E, s6 j. u. s%ADC
8 s) _# N: |- }3 ~5 m( L; `1 @: Zx=sdm_out(start:step:M);: B$ _: w+ K; ^& Z
% --------------Using minimum 4-term Blackman-harris Windows -------------
+ M. s# [3 T" M! O* b9 Tptst = 1;  Y- C- N" }' f3 j# {. j
ptfi = M;
  K6 s- \! j6 z( ~, opts = M;
; [& u3 M. P+ E9 m
nb=1:1ts;
' e6 s8 i9 h- Y9 _: `2 q  d1 _kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));7 V' P7 ]0 V) o, G; ?
win_gain=sum(kb)/pts;5 Q7 d5 d+ a6 X
kb=kb/win_gain;
0 v* E  J! v- n% --------------- Calculated fft --------------------------
& A- h' I6 ?% ]1 A7 L0 Z3 lyb=kb.*x(ptsttfi);
3 ?* f4 @( c2 F$ [
yk=fft(yb);
# P5 K$ L; Q% k; F: s) E4 p# _fft_no=length(yk);5 S: L- M* F( N1 ?( D" V
f=fs*(0:fft_no-1)/fft_no;  i! B) [* `- B6 j8 G1 G. L8 `
Pyy=yk.*conj(yk)/((fft_no/2)^2);8 t  d5 S, M% s. O5 h6 M( ~5 u% s
% ---------- Calculate THD ----------------------------
4 @) a% ?" G! Lj=1;; Q2 m9 Z, }+ D! u# L8 Q. g# y4 F
for i=1:1fft_no/2)
( d9 T& v- {, E/ x- c' ^    if (f(i) == (fi*j))  
5 ^: N, L5 s; G& j  N' v1 f        HD(j)=Pyy(i);     %% find all harmonic distortion components
: h, Y" w, h$ G: [# w        j=j+1;2 @3 B; b0 ?, e/ U
    end' ~  i& l8 ~+ A' J8 ]" q
end' b4 f6 c0 v' ]; t  e4 d
P_hd=sum(HD(2:9));6 n" ]3 B) e/ t6 |1 I
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;( a: n2 F2 l) l) w& \1 ]6 |
fprintf('THD = %g dB\n',THD);0 h/ q, C9 F/ ~& {+ \
% ---------- Calculate SNR ----------------------------" d/ M" Z" y$ v4 v
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
2 ?+ d) ]! W8 `. t, ?$ Ofundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
! [- L4 x: q% G, j% B$ ]span=max(round(fft_no/200),5);& k$ Y) C7 q! ?- ]. {
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));: Z' V. Y6 J  I6 n6 N! j$ p
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
0 n& @8 A7 d  k' {& IP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;2 _+ e1 z# G+ l& \' r" M( C8 p
SNR=10*log10(P_sig/P_noise);
8 _3 a( I5 |8 o2 J9 b4 qSNDR=10*log10(P_sig/P_noise_hd);0 ?' K- ?2 A; ~0 t9 }
fprintf('SNR = %g dB\n',SNR);8 k2 k2 X$ G+ R5 G: q* T
fprintf('SNDR = %g dB\n',SNDR);  R2 b# P/ |4 M
' C  \7 `3 Q( _. R/ Y7 L
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
1 R; W6 _2 y/ ~9 ]2 a0 m1 S- r??? Error using ==> times
, z4 l  M. ?7 s6 aMatrix dimensions must agree.

# E% W1 W9 @4 b 5 `& [1 t- h  R7 ^. f) O- S
Error in ==> sndrtest at 21
; w( v. j. Q( b, F) Uyb=kb.*x(ptsttfi);
0 P$ q* B# \& _1 C" Y7 C, ~1 x

- [# X' A, j" w' t因x函數是我自行定義的,可否幫我看看要如何修改?0 D' o$ _1 q" [( E$ i) b" x
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
1 I* j& W% i2 z" r9 f% Q除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
" f0 Z* y+ R- t! J2 K. O; @附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。4 I; P0 j5 N/ S0 j! N
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題! Q: d; }3 Y) g0 Q0 g) A
那就是你設ptst和ptfi是同一個值是不對的3 Q) H: p- x! Z! D  @' P/ c
ptst是計算fft開始的值
2 ~8 r, z& x" |# _1 u! a6 v3 ]9 P而ptfi則是計算fft的range,如8~519,total則為512點
! h# F5 S3 [) l1 R7 }故而你在執行MATLAB程式時就會出現錯誤3 j" Y* m; ?0 x! b9 t

! ~; j1 ^0 ?" ]8 w+ B! U* p我看了一下你的MATLAB程式,基本上沒有多大問題
- `5 z+ a% ?9 H  E/ P2 o: l6 W不過,要小心計算THD的值和範圍
& x8 J9 j. }6 \4 ^: \) }因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
% V0 Y9 p$ l+ t1 R9 T, y' ~. c1 {9 X) Q0 s  T: D; [3 d" M; A  c  i; a
最後,計算noise有好幾種定義方式
* p) W' j& ]+ f, m+ E. N  s, m- V原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
0 w+ J1 a3 _% b我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
- G9 G" ~  I3 V! s0 f4 Y因為目前在計算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筆資料,還是說我這樣的寫法不對?
  r' G3 f- |# d" d/ x; J0 \因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。, D' c0 v, ?" I5 I: X8 R4 F
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?' ]5 O2 Q8 O6 n6 V" w
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
9 L; H9 F% J- Y$ Z4 d5 A我列出我當初寫ptst和ptfi的式子關係式
4 F& ]6 G; x! F5 L1 eptst=2^3;          % calculated fft of start point6 V$ q$ F) n% J) B( J4 S# V: }6 b
pts=2^9;           % calculated fft of end point
, g/ h  `) J0 {1 _0 @5 xptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
7 x8 K0 n) W( A/ I& U* Q/ F$ n0 g因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值5 n8 R+ \0 |  Y6 k
如此一來才能夠取到足夠運算fft的值
3 r- o$ F: A2 X3 S
) p, P% U5 ^) y3 Q6 x: G  }. y; z另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
5 u+ ~, }+ o8 z# H# y" @( t( o如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤5 [6 F4 H3 {8 ~
$ ~- x" u- ]9 A/ ^* E% b8 G
如果對於要設的參數仍有問題
! W, `" }8 g3 W我可以把我最原始的程式寄給你參考3 H' |* D3 o2 F: ~$ j' f; I) ^
3 P9 Y9 z# C' j5 X
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:8 |$ Q: ^, |3 D  p+ ^
??? Error using ==> times
' U* O) C; f- h. |3 c/ _: t) pMatrix dimensions must agree.
, S- R: n5 ^5 I7 A7 x2 @+ H2 R9 o9 i
Error in ==> sndrtest at 26, u/ ?; i8 p% `: ~) o8 \
yb=kb.*x(ptst:ptfi);/ v* R- ^6 q  z# J+ X
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。1 j+ Q% X# N% O" A) M
∼感激不盡∼6 |" t4 w7 a  V( h
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?% @3 s# |, c5 S0 K5 J
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
) j5 K, m  ~+ i. H# a3 X如果要在HSPICE模擬ADC的INL及DNL的流程及作法??' p# d: m. {! w' _) D
因為沒有MATLAB請問HPICE可以直接做嗎??
; M. u" N% d% T3 r; L" }; y ; [+ G1 f4 X0 A$ S) f% _& ]$ B; ?
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
) N/ D% x7 m* Y/ E8 z至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬" q6 U& z) D) y, M5 z" ^5 ^
但,在業界,個人的建議是,還是要跑HSPICE會比較保險
/ }' a8 Q/ y# B2 c" d, f5 N至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
1 K6 e8 F( l# _& e# M: S一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易. s7 s7 c  [- o3 S7 D: O
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
; w( s7 `$ m7 Z2 ^# k                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?* C( @( P6 z/ x
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
! y" G+ ?& a! Y( }' Q, `. S請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:" q/ [4 P8 V% n* X
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。5 _# ?) a6 h3 s' H! i
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
) B3 ]' @6 B. i$ O
- T4 w2 C, _# U' I0 o[ 本帖最後由 緣緣 於 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的檔案。
+ f% t9 i8 L3 J/ F# x# I' ~2.然後開啟matlab軟體。
' F$ A8 Z/ T/ T1 a* W- x3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。
+ h9 I  C3 @1 t2 q- B4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。3 v9 a% B8 t7 s: U8 R3 D
5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?
& w/ z4 K5 b, f2 \, ~$ ?% s2 R+ B8 o6 S8 r# H
error in hs_allocate_sf: unexpected values in block1 header' t" F! V8 f, i- ~* m
??? One or more output arguments not assigned during call to 'loadsig'.' i$ V4 n( h7 j( e( p* G
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
7 n. o+ R& y$ N, [! g第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-30 11:16 PM , Processed in 0.138518 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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