Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
& {8 t4 X9 D8 M3 O所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失8 e/ F2 F- c# H

' `& v! P' c2 i至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了) e- y1 o+ t( W$ H: |
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
3 O5 J' q+ Q" L* k
; _' R4 S* B9 p; G( E+ n至於另外個問題,我的回答是,對的
: s8 [' K! \9 v8 R但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下, P/ q. B9 y/ ^9 S2 F( b
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣. m. I6 C5 Q% o- l0 {- W
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
  [* a/ E1 N3 V: y( _至少我模擬起來也是這樣
2 b: F& z% P1 `* Z+ N而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
' k. a, f. Y5 V/ e9 Z所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:
3 Y2 ]5 I% t' T0 E6 y我依照你提供的程式,修改成我的規格後,程式修改如下:5 [9 ]; |9 z; f( |8 z
% --------------The number of FFT -------------2 l+ g# D/ x0 ^% s+ E0 S
fin=5;% *KHz# t$ z' F& k* O) ?" g3 r% i
fs=5120; % *KHz
7 u" t: A' t4 Z$ ycycle=1; % cycle = 2^N ; N = 0~5 ( t$ r3 z- O+ t0 P% W
M=round(cycle*fs/fin);
$ K9 r4 _  ]6 X3 o1 I: [) ^) t7 n2 _$ y% --------------Load the binary code -------------
# w( A( m7 K2 B5 R8 o0 yload sdm_out.txt -ascii0 D( [9 v1 g0 x( t- r
start = 1;4 I5 ~: M( q8 `* F5 R
step  = 1;
8 x, x9 h/ Z1 r5 f8 `% ^4 I' `%ADC2 D9 C* M* j. e
x=sdm_out(start:step:M);
  g7 \, M+ D* w  G7 }- ]
% --------------Using minimum 4-term Blackman-harris Windows -------------
, Y8 Z* }* s) l/ N3 t9 e! L- Pptst = 1;3 ]; e: b8 U) d; [
ptfi = M;
: i6 Z' e5 }: Y) Spts = M;6 E* D# h9 g5 k2 q; T
nb=1:1ts;
& G% }! Y- w& D# M6 v1 ]; h+ Kkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));3 a2 @4 f, A1 u" h
win_gain=sum(kb)/pts;
3 i7 V. z- V2 O) Q6 nkb=kb/win_gain;5 G7 Y9 N1 g# E3 E
% --------------- Calculated fft --------------------------( C4 i5 y: \* W# S  _* K6 c
yb=kb.*x(ptsttfi);
: Q( z0 d/ F+ g1 |7 Y
yk=fft(yb);  D$ A9 h" A5 P% c- H
fft_no=length(yk);
) p: x+ b3 h, Yf=fs*(0:fft_no-1)/fft_no;# D. ^( s. O! ?
Pyy=yk.*conj(yk)/((fft_no/2)^2);: o5 G; d5 V3 x) C
% ---------- Calculate THD ----------------------------1 @5 Q2 W* M8 v* v+ H# H1 Q$ i$ v
j=1;
& P' t$ M6 |9 e; G* u2 v7 ~" U* {for i=1:1fft_no/2)
. g6 ?, Y; g) H/ z3 c# B; {9 C8 J    if (f(i) == (fi*j))  9 w* `3 F0 n3 i% G7 G: v
        HD(j)=Pyy(i);     %% find all harmonic distortion components) W7 n5 f6 O( |8 z# o
        j=j+1;
# G% j7 t9 X! T0 W; ?    end4 q) M* p6 j. ^& X4 o
end
* J% z4 Z% w9 B" b7 V7 U2 K) @" SP_hd=sum(HD(2:9));  D( @: E, J( Q
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;* r, _2 M- ^2 u( g4 d
fprintf('THD = %g dB\n',THD);
- W5 g8 l) h( X9 Y$ r$ i% ---------- Calculate SNR ----------------------------* ^1 O7 b8 D  z* \! b& b% `+ S
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));7 `& e" y  i* N3 ?. j
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);' i3 g8 ?( M3 H, V0 ^
span=max(round(fft_no/200),5);
; H- }  c1 D( j6 E; W8 |) dP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));  r! r' z$ c2 {# N0 r+ f5 l3 i& i9 Q
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
! ?  S1 V( v4 d  G9 P5 {# ]P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;: P4 i9 m5 l2 B4 ?5 [7 @
SNR=10*log10(P_sig/P_noise);9 O) C0 X$ G/ V) m/ U
SNDR=10*log10(P_sig/P_noise_hd);- R3 K9 g8 D) y5 {4 Z7 j' y1 r
fprintf('SNR = %g dB\n',SNR);9 \4 u9 Z' V; v3 }: Q# t
fprintf('SNDR = %g dB\n',SNDR);5 _1 c" c4 F; ~

. C' ^. x3 X: c! ?# ~$ u# G藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
/ v1 K  m* ^4 _" O??? Error using ==> times
! j% |% ^* d2 x2 q1 v9 N( ~Matrix dimensions must agree.
% m" k0 z6 U2 O! ?: O+ R% _" S; z
* t8 Z2 C/ I; a6 _' c' z
Error in ==> sndrtest at 21( i& M& y+ v2 G  W
yb=kb.*x(ptsttfi);

6 |5 \! T9 [1 @+ c& J* S; v- \* k5 E* K8 i3 b1 f
因x函數是我自行定義的,可否幫我看看要如何修改?2 R% s2 S! R( x; y) J9 N
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?* ~6 h+ B5 ^. Q! \; V1 J: n
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。( ]; O& h8 k% [1 X" Z) `
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
# A6 j7 W3 O  H2 d) B以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題# e3 F( y5 r6 `* x% }  \$ i
那就是你設ptst和ptfi是同一個值是不對的
+ D% Y0 L& U0 v  tptst是計算fft開始的值8 _! c0 E6 _' U3 u! A
而ptfi則是計算fft的range,如8~519,total則為512點
5 V- {9 q0 I: L5 _故而你在執行MATLAB程式時就會出現錯誤
6 B: s( d" u. ^. h6 c" H# u. _! j/ z: Z, t/ T  l
我看了一下你的MATLAB程式,基本上沒有多大問題
9 J0 N' }) T, C& e9 n% z, T( K" b不過,要小心計算THD的值和範圍- s' o' Z9 i0 Z* f& T. A
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
7 _/ ~" n% @) T* _% r
7 t1 q3 A9 S& x# {2 i& X最後,計算noise有好幾種定義方式; D  U; H, i8 ^; k
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理6 B, [/ m2 _; _
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可. t1 f! ^2 Q) U4 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筆資料,還是說我這樣的寫法不對?8 m& v/ H; I& f2 [0 U
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。4 j9 q# o9 n: e
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?" n; F0 P$ N; l( |6 w- L
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
2 U  M& V! W; n2 [. n- O$ r我列出我當初寫ptst和ptfi的式子關係式( V6 X  n! q3 E  @. h  V6 U; H
ptst=2^3;          % calculated fft of start point
  w: r- p- W! [. ~: b7 O5 M. zpts=2^9;           % calculated fft of end point: L& u8 J* w  d& H( h& s3 h2 p0 G( I, ]
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point& m5 J6 V4 P6 S; j0 j, u- g
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值% c; z3 C$ }; Z9 _& c/ l
如此一來才能夠取到足夠運算fft的值
; X+ g0 I3 N, O
* E- N/ Y/ k  w) ~另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值/ k3 F7 o3 k! a
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
& O! l* c; X# H% V% h7 s' V* v5 Y8 |8 \% Q/ L0 ?9 J$ }( V
如果對於要設的參數仍有問題
( I; V3 e8 [4 I; {+ X" o: Q! Q我可以把我最原始的程式寄給你參考
, P/ A$ }$ a% v1 r, n/ B6 k" k/ X$ Y8 N% h) r- Z1 B, u
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:. ~1 I' I5 H, |5 `5 y4 h6 {9 \
??? Error using ==> times
  h) g/ z( T5 D# Z2 yMatrix dimensions must agree.
7 E) K$ D# w, S" P- M7 j& L$ Q8 }
Error in ==> sndrtest at 26/ z, x- J6 S0 C7 \- J
yb=kb.*x(ptst:ptfi);! F$ m7 @& D, T$ r: m
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
8 }. p* P1 I3 z$ T9 `∼感激不盡∼; p5 E; m& U& u5 r5 Y5 \4 L2 t
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
9 ]0 D- P& U9 P- \' s$ f: H特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
% a6 H6 G% r. k4 S  r6 ^如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
6 w9 Y' `" m- P" j因為沒有MATLAB請問HPICE可以直接做嗎??$ X/ _, P$ y0 N

% `1 u/ e& K7 f3 b) {請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體* o) |7 P1 y$ t5 |$ H& |( e
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
! B( y2 {) [2 }" ]9 j但,在業界,個人的建議是,還是要跑HSPICE會比較保險
$ Q( ~% Y; J, t2 d, z/ s- u5 d至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算9 u0 C' {! c/ c$ \5 Y
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
( `  J6 W& M$ Y( |: J/ a而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?) p5 X, v5 Q, I) j# i& L* i* X
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析% A7 L  v$ [( @- y3 _$ ^/ M
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:2 P0 y% {6 m: K8 o3 k( N
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
1 Z6 `  t& C8 K8 P6 \" z9 y關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
5 ~2 C6 n. E2 A$ y" n
' K/ P2 e5 d" F4 Z( @[ 本帖最後由 緣緣 於 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的檔案。- v' T& b0 \; C' {9 p
2.然後開啟matlab軟體。
. ?3 ~$ t9 T) V! D: ~: i3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。' `. R' i8 P! c
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
& d. A- y, A- A( R- L( y1 O5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?
- c- Q6 J2 f9 C# I6 }! w* x& E) @
) @$ \  k5 |! Q) X+ ~2 m' ierror in hs_allocate_sf: unexpected values in block1 header
( e2 j/ e' G7 C( [$ _5 O# c??? One or more output arguments not assigned during call to 'loadsig'.8 W! Q! g; ?3 o, `, @
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。) O2 N9 p2 B- D. \
第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 03:56 PM , Processed in 0.149519 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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