Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

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

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
( K! S' n/ K$ b; u緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
1 K5 W0 M6 j/ d- j8 X6 Y1 xvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
: A& Q2 U6 f, A( O& ?至少我模擬起來也是這樣
8 o. f5 [) c! z) j* E6 Y( y' ?而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC0 _( L% D+ K8 O' i2 g5 [7 x! ]; x
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
) g# `3 T0 b/ u. ^說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。: Q0 d( {0 O+ D# q) e0 q5 D$ e$ z
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 . V1 y! [" g4 H4 f% L9 Y: x
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
7 m; n5 [8 u' ?. ~/ M, X4 ]6 G此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
0 G( q+ `' k5 @, J9 m∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:$ r! x& U% X  m- H
我依照你提供的程式,修改成我的規格後,程式修改如下:
- B1 z& q7 k' U1 s% --------------The number of FFT -------------
2 n1 K+ ~  r! }, V; d  Vfin=5;% *KHz
) F" B( G) w7 @; a8 afs=5120; % *KHz+ p  H- r# b+ d8 |1 ~+ X
cycle=1; % cycle = 2^N ; N = 0~5 % Q! W0 ?% B; C; {$ Z! ?
M=round(cycle*fs/fin);
; I9 ^  x+ v) a2 `& @5 o% --------------Load the binary code -------------" B+ D) b" P7 ~5 ^0 i% E# O
load sdm_out.txt -ascii! B4 Z/ \2 @3 q1 e
start = 1;' y: I: X' M# d" q" ^
step  = 1;
$ s: n$ Q/ `4 q%ADC( H' k$ ?) {4 d2 o$ Z2 x) L
x=sdm_out(start:step:M);
3 Y9 _7 p' R3 f
% --------------Using minimum 4-term Blackman-harris Windows -------------) [: `. U+ f2 @: j3 q! p$ T# f
ptst = 1;% u6 ~! ]% n( d3 m, |
ptfi = M;
' c& |- O: a2 ?" z- l* Zpts = M;
2 z1 d( ^+ G9 E5 Y. H
nb=1:1ts;" y  E( K, r3 t0 P/ L
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));1 w# I. x; H: l( ~2 @1 V# X
win_gain=sum(kb)/pts;9 \8 A7 ~: ~  }8 I
kb=kb/win_gain;
+ a) z7 ^# B0 h% --------------- Calculated fft --------------------------$ D% g" b3 S# u2 X) ?
yb=kb.*x(ptsttfi);
0 X; F& z' W! m# u
yk=fft(yb);% {$ f! Y3 I+ O* o$ y1 W8 P  P" `
fft_no=length(yk);: o7 `4 |% [" s* Y6 V5 m- L
f=fs*(0:fft_no-1)/fft_no;2 b4 ?1 ^2 _- h3 |5 p+ K0 t
Pyy=yk.*conj(yk)/((fft_no/2)^2);% L( S; b* v8 C2 G, }
% ---------- Calculate THD ----------------------------
; ^* K. m" p/ y$ |) vj=1;
/ B8 ?0 C$ _- g3 jfor i=1:1fft_no/2)
  t7 y+ ?) H3 m8 K! G  H# |% U    if (f(i) == (fi*j))  % f& _; S* o/ g- s( i3 j
        HD(j)=Pyy(i);     %% find all harmonic distortion components* l+ n6 O) G# t
        j=j+1;/ z) m: v, r9 f+ D+ ?
    end4 Z+ Q9 @4 i$ E) C8 [
end7 q- |6 `5 _/ ]+ t' T2 @" A* G* ~' C
P_hd=sum(HD(2:9));
5 \! B+ j5 e5 R  v: f% r# JTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;2 P+ y- u" M6 L9 C5 R/ ?9 p
fprintf('THD = %g dB\n',THD);
2 h, ]) P" I. u; L! z% ---------- Calculate SNR ----------------------------
9 U% f1 `- b3 O* I* `: bfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));# J  \0 n3 W+ [7 t: v% ~2 [0 f6 s
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);' T" ]" z% i5 @/ M2 G, S
span=max(round(fft_no/200),5);
2 _- a9 t4 J3 B3 y; eP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
- _0 _  c, H* e/ a$ t) A1 m5 ?$ ?P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
; W! W6 a4 L0 ?$ h2 [2 J0 p- g( L; `P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
  ?# c0 ^3 |! f" |7 Y+ |
SNR=10*log10(P_sig/P_noise);
7 a+ o9 w' o# A, l3 f& `4 FSNDR=10*log10(P_sig/P_noise_hd);; d5 G  i$ n$ x9 \* F
fprintf('SNR = %g dB\n',SNR);
* H1 f0 b+ Q' b( ?3 Xfprintf('SNDR = %g dB\n',SNDR);# _  ~1 D0 n, y! i6 m5 g8 i

; _0 {9 |& i* I& L. P藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:1 Y8 K+ h7 J- q5 C5 O5 V
??? Error using ==> times- c: P1 D; U- a/ X+ O" U
Matrix dimensions must agree.

9 x: A% a, Z9 M$ |1 O ' f/ i# i5 d8 V
Error in ==> sndrtest at 21" d4 F( q5 f- K+ s$ {# r
yb=kb.*x(ptsttfi);
$ k$ {3 F( p, E

; O: k. f; h2 M0 |% K因x函數是我自行定義的,可否幫我看看要如何修改?
3 x1 Q2 I; R4 j# i7 L2 d7 m另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
  e- K- j7 q1 H2 N除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
) M7 i% v1 |1 j3 C附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
4 T. U; Q/ ~  r以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
4 H- b1 h7 S. \" E9 P( \那就是你設ptst和ptfi是同一個值是不對的
+ K1 \! R4 L' q" f5 R& F$ g+ sptst是計算fft開始的值
5 y) ^# }4 J* a9 `7 l* `+ V而ptfi則是計算fft的range,如8~519,total則為512點
& V5 x9 t: j" q2 j, m0 h故而你在執行MATLAB程式時就會出現錯誤
% D$ o& N' a' @: s' k) S5 |9 l$ b8 u# o$ z
我看了一下你的MATLAB程式,基本上沒有多大問題2 b+ [3 q$ P1 y6 F; F, a8 `
不過,要小心計算THD的值和範圍
8 l6 I* T& \! s- K& W0 r8 o因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
' ]# [% V! F4 I* p# l
, V" ^2 ]4 r* d7 `5 y最後,計算noise有好幾種定義方式* i; F. @3 Y7 S5 [( r; ~
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理; V% u4 ~( W/ m# b
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可. u. j* M' M: N5 p% K' E2 x7 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筆資料,還是說我這樣的寫法不對?+ P! @7 o1 n" T2 N% \1 U+ B
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。0 T  h' g: v, `% C' F7 m" e! C
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
( |& s9 E+ C& r/ l; c% w* L謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
1 I7 G. ^7 q. d. I3 U# {8 S我列出我當初寫ptst和ptfi的式子關係式
  }2 D* H. P% d: _( M: p- sptst=2^3;          % calculated fft of start point2 b+ R7 K& O/ q) r
pts=2^9;           % calculated fft of end point
. u  x6 y+ u/ W/ Xptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
7 L% g( M0 E1 Y& J# B  }因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
! X6 x. {( O- K" u如此一來才能夠取到足夠運算fft的值
- q% ^2 p4 i- G+ D
* z2 V+ M- v8 a# j  }另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值1 h- j7 j4 s8 k3 R' X3 f
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤1 x& k7 w; @, s1 |6 ~& Y* F* s

. Q8 Z& z) Z- \! S如果對於要設的參數仍有問題
1 R& B* Q: ^) I我可以把我最原始的程式寄給你參考
( n: Y* |: I4 u$ F# N6 {- `, }% q, Z8 |/ }1 L
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
; N% f8 B" ?, b7 B2 `??? Error using ==> times
" S3 A# }+ M2 pMatrix dimensions must agree./ I9 e- b8 K% k7 J4 ?/ J1 a( P
) N5 s" u! O  n% f2 t+ q
Error in ==> sndrtest at 26
0 e5 F9 O1 }9 F  Byb=kb.*x(ptst:ptfi);
7 }2 M2 M# H" E& {; \4 {那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。2 C6 p# T+ e$ C0 ]/ k. B
∼感激不盡∼
: `$ i, I  U1 L+ E, N2 B# w. Hps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
4 N* @+ ?  \+ Y# q$ T$ V2 p特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下4 y! S6 |/ n' V- h3 I* J) N; ?  f) |
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
" i  Y2 k  r0 g* t4 U因為沒有MATLAB請問HPICE可以直接做嗎??3 a: J" e0 T+ A( F/ W" y+ [' t4 \
# F; \, ]) p1 n$ V! T
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
" f' c# |  d8 N/ X: n) p6 i至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
! ^$ T. Z% O' ?+ J5 D但,在業界,個人的建議是,還是要跑HSPICE會比較保險; Z  J! G4 d, X* r2 s  i' ^- F
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
7 V; l& t5 P4 v# X1 Y4 w: ~6 D一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
3 S- W" b" k6 K% C& T4 j$ Q而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
* I# x* K) w5 I                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?
0 }% f; L9 F9 p還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
2 ^/ v  f; r9 v2 P( ^' M4 d請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:" Z( Q  Q/ |; T, U& Y/ p" l" e: O
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
7 I: P7 R5 R! q5 }) j關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。: M) h& C/ \2 K) `  Y6 c6 L
& X- k; o' N9 w
[ 本帖最後由 緣緣 於 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 N3 }( T$ m& W8 y- J0 Y2.然後開啟matlab軟體。/ N( z% W2 w3 V' }# s4 Y: L/ o
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。
0 G6 O( b6 t+ W1 H3 O# ^3 m4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
3 K- V! s. w$ U  f) J" u5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?' p+ n$ N: n& M

/ s' Y7 K. h* i7 d9 Oerror in hs_allocate_sf: unexpected values in block1 header2 N8 h4 N/ Z$ F+ t0 H0 {
??? One or more output arguments not assigned during call to 'loadsig'.3 B: _8 d1 i  `2 ~  m
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。8 _- ~2 N# x9 C5 a
第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 02:37 AM , Processed in 0.154019 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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