Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....4 _+ {: R1 B) Q1 j5 I2 o
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失/ B/ E# G) y2 G" m6 r  x/ \
' G$ n+ y! A3 p, ]
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
$ A+ U  P- ~) Z$ r9 }; ]而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久! j" |( _- l( l9 G
. Y) S) L7 q7 S4 f
至於另外個問題,我的回答是,對的5 q$ M% F( w7 W% p  u: x
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下) |: o* z, F, o1 S
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
5 d* A, i' ?3 P6 J3 Wvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
/ y6 ^% O: ^4 Q至少我模擬起來也是這樣
0 w" y8 D( P8 n8 ^4 j# ]: U而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC5 \7 L  p* v: |! C
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
1 p8 v0 x/ t; i+ d& ^& y' ~說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。  K0 Y3 G5 o4 ~* V$ ]3 [
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 , d8 W/ h3 Z/ ?* A
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。7 T3 @- Q* n7 {; ]3 ?$ T
此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
0 g0 E9 f# |9 E∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:
% F) z7 l5 i5 C/ V+ E我依照你提供的程式,修改成我的規格後,程式修改如下:
% u4 G8 J' A% e: b6 a8 _7 t% --------------The number of FFT -------------  P5 d" @/ ~2 Q1 r0 q
fin=5;% *KHz
% e# J  p  _$ Sfs=5120; % *KHz
4 ^- e6 p1 E: [; g- y( g& f& ncycle=1; % cycle = 2^N ; N = 0~5 5 }: L7 ^3 R! `* G
M=round(cycle*fs/fin);
% ^+ |; U4 _0 x) B3 d% --------------Load the binary code -------------0 M' n; n7 B+ h$ T9 o; c; G
load sdm_out.txt -ascii
8 _5 a- r, f& Gstart = 1;
. _0 J. Y; x& H( ^4 Pstep  = 1;' \& b3 b0 t' `5 l( w
%ADC% e8 n2 H* s4 N9 R, o  j
x=sdm_out(start:step:M);' R) ~# W% h$ H" |
% --------------Using minimum 4-term Blackman-harris Windows -------------/ e' x; k, j1 c' A  S) p6 n  e
ptst = 1;& t/ L, H& J2 i+ V! P) _
ptfi = M;. F8 k9 Y6 T6 V; n' W0 ?
pts = M;
6 ]- }3 H5 b8 o  j$ y* e0 D, ]1 u
nb=1:1ts;
% k$ c9 N& H% D4 l' @; Bkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
7 z8 ^- O# c8 v# o% c3 V. Rwin_gain=sum(kb)/pts;
  N3 U" ]5 k' J( B4 Q7 qkb=kb/win_gain;
/ }% k; Y7 b% d' ~" d" {( E- r% --------------- Calculated fft --------------------------
% Q, s0 s6 j! G$ H* yyb=kb.*x(ptsttfi);$ e0 P# }; }$ k& W! Q; P0 \% M$ O. r
yk=fft(yb);+ v7 p* \! t# j8 _
fft_no=length(yk);
- g% [' t2 t4 Y4 Z0 ~* e1 Zf=fs*(0:fft_no-1)/fft_no;- g( w, ^% W0 t3 I2 m& R
Pyy=yk.*conj(yk)/((fft_no/2)^2);3 B5 O( n% u9 W& Y2 `1 ~
% ---------- Calculate THD ----------------------------0 |' D( l3 }8 _4 y
j=1;
, ^. ?+ N2 b- ^1 p! W4 F# Wfor i=1:1fft_no/2)
# \5 D2 h9 J: K7 n5 k/ }' v  M    if (f(i) == (fi*j))  4 \7 o! Z# W& P- U. x
        HD(j)=Pyy(i);     %% find all harmonic distortion components2 d; F3 d. a. p1 a
        j=j+1;
6 ^+ R' H9 `; I4 t6 B$ i    end
4 l& E9 v& _$ ]8 n3 R  Yend
: Y( g* w6 t, F) TP_hd=sum(HD(2:9));
0 H$ G  Z" ~' Q$ i7 y0 d/ lTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
! M) D+ m' J: u. k( Q  V( Cfprintf('THD = %g dB\n',THD);
3 \1 F" c; K7 f* a% ---------- Calculate SNR ----------------------------, l! k5 Z5 b1 o% J. V7 ]" q# k! J
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));  {, e3 i1 P# K* c1 r( Y4 _( I
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);+ ^. r- H9 X2 k$ J' i% D
span=max(round(fft_no/200),5);
6 f4 D' m2 E* v; P2 |6 @P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
" ^- `% _3 \  v' B; U0 JP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;$ X8 F  ~  `7 G  c8 @
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
' }/ n' Z% K6 K+ _  P4 ^7 g8 o
SNR=10*log10(P_sig/P_noise);
6 Y& K1 k! F- L( JSNDR=10*log10(P_sig/P_noise_hd);' ~$ x! M% p. g5 _6 S$ F2 x
fprintf('SNR = %g dB\n',SNR);: B, l9 _5 ]; a: @
fprintf('SNDR = %g dB\n',SNDR);
0 c* ^+ V& {$ \
' G4 h' m/ r$ R3 D: K" |藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
9 L1 x; N7 u" `% N8 u??? Error using ==> times  a' W) j; C; `, _: x6 ]# _. i
Matrix dimensions must agree.

3 {3 Y$ v0 [7 G 5 @9 v. v# `9 I! Z4 p, y% X' U+ `
Error in ==> sndrtest at 21
! Y  w; e+ ]) b& O* Y' Cyb=kb.*x(ptsttfi);

/ L! C7 \" A2 a: y. ?/ y5 e4 P0 W0 K0 N9 R; \8 A* Y- B
因x函數是我自行定義的,可否幫我看看要如何修改?7 I% M( z$ v8 }; w) V* K
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?& \$ ^1 A: j" `9 s; @# V  u1 `
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。, @9 Y  M& M1 j
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。$ v% C- z! t2 \9 Y
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題$ r7 Q% J0 q) w% ~, x0 Y
那就是你設ptst和ptfi是同一個值是不對的8 m; |! n3 T/ ~% h/ s
ptst是計算fft開始的值
% j) Q3 B9 ]( y( h9 w8 b( R而ptfi則是計算fft的range,如8~519,total則為512點
' Z; ?# ~  `. W故而你在執行MATLAB程式時就會出現錯誤  C8 U" [5 N0 V( r6 Y( O4 x/ E

7 E+ J. M9 ?4 d% Y0 [1 C1 v' T我看了一下你的MATLAB程式,基本上沒有多大問題% H! q+ q6 ]# A( M
不過,要小心計算THD的值和範圍1 K* \: }+ x' Y. H8 d8 D* F
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
) p% O, V9 g9 |2 l
4 V$ ]5 u- o+ i最後,計算noise有好幾種定義方式/ W1 v$ \* @7 s
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理6 h+ W8 Y2 H& m: F" C4 N
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
) W" X' x8 |# x1 D$ c6 A9 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筆資料,還是說我這樣的寫法不對?  t* C8 b- v: `' S5 D
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。6 w- R+ ~9 t  F, o) y, D
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
: [! V9 |) |+ l/ \. q+ Q# b謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
& l' F, J+ c" k8 v1 u5 x我列出我當初寫ptst和ptfi的式子關係式
) c/ o2 W0 u" \" optst=2^3;          % calculated fft of start point
8 c! J1 S7 ^& Cpts=2^9;           % calculated fft of end point
! @. k& _2 d  R) m" Gptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point9 }* c  ]/ a! d  C, j
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
- ]2 d5 D" S8 r' ?如此一來才能夠取到足夠運算fft的值' o7 P# V; G  G7 b6 J; [
4 f6 N& f( P5 j' u: M2 ]6 I% h! J
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
% m. [1 z* d: E; @6 X' f如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
* }$ U0 l, Q8 z
2 u2 B4 r9 D! @; t. B如果對於要設的參數仍有問題% n" K$ A, }. Y: f6 y3 j: G7 T  p
我可以把我最原始的程式寄給你參考; j5 q  y* `/ {) ^
0 v3 L  {  Y! i) l8 h9 ]* Z: a
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:2 z" b7 {. B# t- O; H, h
??? Error using ==> times
/ n0 h$ I! ~7 Y2 h! y1 M5 FMatrix dimensions must agree.
+ i4 N' E: E+ p: Q" F0 L9 `. p! i' P/ a% S
Error in ==> sndrtest at 26
, k2 K/ |$ m& r7 K! s: eyb=kb.*x(ptst:ptfi);
5 o6 W/ b1 @5 {9 n$ w那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
# o6 f1 h. U& G( O0 E5 v9 H∼感激不盡∼+ Z) i; Y% {( O4 B& N
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
: m6 R. R0 @: r( Y- c2 h' J  ]特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
. P6 O' x+ x- p如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
7 V: \+ E9 }* R( p$ ?3 |( y& s因為沒有MATLAB請問HPICE可以直接做嗎??: N! V$ _) C5 |

% I% p' R/ c& ^) b- M, P5 A請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
, M8 X6 i4 S' b  C1 Q至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬! y8 Y$ N* Z/ o
但,在業界,個人的建議是,還是要跑HSPICE會比較保險
, s% g5 i) N9 R+ w( F' P) _. M  c至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算, u% j+ |0 F( S, ?8 T! h; b
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
0 t( n: M( o6 R3 F9 t0 T4 c而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?7 i+ k' A% O0 x' L1 q; o( M
                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?4 y# D9 L9 H  @/ O
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
; t" W3 F/ M! F" C. m' u2 L' f& _請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:; D9 ?( i( o4 t. `2 s+ u/ ]" s$ I
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
! E4 b5 r* y# k: [1 }關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。/ A. D) K4 Y6 G$ k4 \8 P
" O  t& {+ K' s
[ 本帖最後由 緣緣 於 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的檔案。
" ^  {- E5 |) a5 ]9 y( k; F2.然後開啟matlab軟體。; v  p& {3 T& x4 h# ?& F  {
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。5 k, H- G- }' v; X
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
/ k7 S" _( d6 \- _4 \, n. d9 J7 O$ O5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?
1 i. I/ z+ q2 r1 i" c/ `4 a" r7 V" {9 c4 j# }
error in hs_allocate_sf: unexpected values in block1 header
8 C+ y( O9 G5 j% r/ T??? One or more output arguments not assigned during call to 'loadsig'.
4 H  x% @* k5 p這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。# c2 z! w& S5 i. @( q
第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-30 01:33 PM , Processed in 0.159520 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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