Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
% |9 Q1 m) R2 o! v/ D' q. x所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失' t8 E3 `9 c0 s( U9 ~6 f

# K2 L1 ?& t) j/ w. @- F+ v至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
( S6 p  `  f$ S而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
, }% j: d" o6 E9 @& z9 J
6 u, M9 c+ b& ^9 }) e- K至於另外個問題,我的回答是,對的; @# u, @! @( k% O! ~+ K
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
( D/ W" Y5 I1 \6 G緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣" I& }6 P" X: u
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了3 }3 t! `' ^# f+ F/ V
至少我模擬起來也是這樣
) p4 n! u8 M! u4 ~: O而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
% T0 C3 {9 d; Z& H: r# {0 O8 n所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:* g% K) M8 U, o0 |3 B. e- m
我依照你提供的程式,修改成我的規格後,程式修改如下:
( }( [! h& T7 v5 D% --------------The number of FFT -------------
2 H4 v2 _# G$ p& p8 l% l- O$ i8 ffin=5;% *KHz- v0 ?, b6 |8 d) L8 U$ u
fs=5120; % *KHz
+ K! }, n3 V8 m0 h3 V6 pcycle=1; % cycle = 2^N ; N = 0~5 % c" u! r$ Z! _; X& w. V( ^% d
M=round(cycle*fs/fin);
# ], w) W  a4 _$ U% --------------Load the binary code -------------; ]6 k6 F$ b" y# S0 ^* `
load sdm_out.txt -ascii
! Y3 ~, v& ?$ k9 V& A- ~start = 1;
( g6 T, j' L, v" t  bstep  = 1;: x3 A3 e- n! U: z* {% i( k& d* M
%ADC% c* u- Q$ H' W9 g7 F
x=sdm_out(start:step:M);1 U! q# {1 \' q9 g4 ~+ e  I. F
% --------------Using minimum 4-term Blackman-harris Windows -------------
' u- D; G* c& ]6 H, u8 dptst = 1;" d' o5 W! _( R& G1 m; `( _+ R
ptfi = M;
6 @& x: D: \/ `& cpts = M;
" r% z9 e7 _; L; ]" Z; G3 F0 z. O0 j
nb=1:1ts;
: ^* [0 I) J8 |2 O; E% M3 a0 Qkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
* m+ o5 I9 z9 \3 `8 O1 Y5 ^- awin_gain=sum(kb)/pts;) |4 a* _0 S) d& X: |$ J
kb=kb/win_gain;
; |) v$ U1 i7 {2 s: o/ m4 G3 I% --------------- Calculated fft --------------------------- S# E% C( M7 Q, B
yb=kb.*x(ptsttfi);
  W' K% n/ r: K+ ^
yk=fft(yb);( e- R4 Z7 o$ X  }) X/ X1 C
fft_no=length(yk);
+ X: m6 F2 r9 f/ P6 Uf=fs*(0:fft_no-1)/fft_no;
9 N# d& t$ j& ^3 K2 NPyy=yk.*conj(yk)/((fft_no/2)^2);* R( f5 E: r$ {
% ---------- Calculate THD ----------------------------
( j5 l# t, t  s  g) A- O' ~j=1;4 ]. p- V8 E7 r- C( V
for i=1:1fft_no/2)
3 t# j& g6 I5 \3 I* e- M& `    if (f(i) == (fi*j))  
% W1 y' y2 c( G4 U0 h        HD(j)=Pyy(i);     %% find all harmonic distortion components5 b7 n+ p9 d* [) s% P7 C& F' Z
        j=j+1;2 U/ G; b; ?8 x$ I% D) p( v
    end5 A$ P6 p$ i/ {" S! Y
end
* ~. W6 z2 \/ XP_hd=sum(HD(2:9));8 K% \' a8 b) G5 _+ V9 j
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
5 y/ V1 {0 m6 }% y, rfprintf('THD = %g dB\n',THD);
2 T3 h; H* O1 k1 n0 n' `1 d% ---------- Calculate SNR ----------------------------
, y( V' M" r/ Wfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
4 k/ x0 R  h$ [& |fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
- v" I3 t2 ]+ R' J1 n- P" jspan=max(round(fft_no/200),5);
8 I% V$ ]3 w& O/ @; zP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
" a4 \9 B1 o% {/ LP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;0 W# }; ?3 o" b$ d; {2 i
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
: \( d) b0 T  N
SNR=10*log10(P_sig/P_noise);
4 H; ?& c6 i7 u! H; y7 Z/ k; R- P& BSNDR=10*log10(P_sig/P_noise_hd);
: w" x% Y" s# l
fprintf('SNR = %g dB\n',SNR);
3 B: y1 V3 W0 i$ O  vfprintf('SNDR = %g dB\n',SNDR);( L. S0 Y* C6 S# C8 W& ^: `
1 m, b$ A1 q" [* _5 j
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
8 G: H8 X6 H+ S9 a. {& e??? Error using ==> times
% D+ I* {( M) C" v, JMatrix dimensions must agree.
, l2 M3 E6 i7 o3 o7 X% F
2 ^' A& |% n! c4 s3 w8 D
Error in ==> sndrtest at 21
+ g3 \4 l$ [7 @" hyb=kb.*x(ptsttfi);
3 \2 D  w# ~2 H, N- P5 M
- Q, d/ N( S' f& h9 N8 m" x. l3 X7 W
因x函數是我自行定義的,可否幫我看看要如何修改?
5 c0 x0 S; t' Y5 u另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?* E/ m% A: @4 @3 s3 l' V5 ]
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
7 j2 t( j, i: i8 v% ]  a附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
- l9 M* K. H1 W' d; V以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
9 |9 y4 f1 z" t. V& y& M5 i( e& o那就是你設ptst和ptfi是同一個值是不對的! w! c8 O5 `" b8 G
ptst是計算fft開始的值7 M/ X+ S. `- k. n
而ptfi則是計算fft的range,如8~519,total則為512點
! n- |: B- @/ \; J$ x& B故而你在執行MATLAB程式時就會出現錯誤
; N( Z5 ~. s! e/ k! y* ^% l% u# I7 i  o: r
我看了一下你的MATLAB程式,基本上沒有多大問題
+ d4 ^' [6 U, R6 p7 c不過,要小心計算THD的值和範圍9 }1 _3 |/ p; O: j
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤; g* h) G  n! y, j6 v; E0 c

9 v" n' g5 _* X$ B. K! |" q最後,計算noise有好幾種定義方式! U# F+ C5 k, N( R1 z0 l+ d& K
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
9 r3 O. c" x% |4 C6 c  i我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
% R7 O5 c) u2 q因為目前在計算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 x7 e* L' V  H  b" Q
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。. E( H% r+ M1 S5 L! L2 L
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
9 S7 t( T! K* C4 k謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了" M$ B; W7 ~) @* h. n/ B  x
我列出我當初寫ptst和ptfi的式子關係式
, z1 R) E0 `) ?' j) M! U# J2 uptst=2^3;          % calculated fft of start point
, u. R6 V6 O" mpts=2^9;           % calculated fft of end point
* x& m* |9 T5 b, Xptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
& ~: w4 q4 G4 d( d% F因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值% D5 H9 H3 S, S. [4 w
如此一來才能夠取到足夠運算fft的值5 B- m4 w0 W" X$ I& k! M5 x

$ t' O! t1 b, `3 n( j1 \( w( d另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值* E7 j6 e1 R6 k  t. s2 g9 y
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
/ u/ ~8 k: e* J1 ?9 e/ P  b( U4 r$ F; a: t4 w+ j
如果對於要設的參數仍有問題
+ H# b9 p  X4 [, c" M  f我可以把我最原始的程式寄給你參考
$ ^6 H) m0 j2 U6 L, J: f
4 s! {2 [# p2 P7 j2 N1 w[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:9 l: ]/ Q; I6 w! W
??? Error using ==> times" o% H4 E; J7 u. i3 t' P
Matrix dimensions must agree.' h8 d9 j3 @& u0 |& i/ e

: t9 d8 X& B  e. Y" M1 p' E  U) YError in ==> sndrtest at 26
5 H! a: x$ {# w! G& _yb=kb.*x(ptst:ptfi);
* M% }4 L$ g& X4 V1 j那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。* L3 @* a7 L' _* M) a4 C
∼感激不盡∼% }/ |- q( a3 p4 |, @/ Y8 B
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?) B3 }: U8 D7 p; }3 |
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下. B( \7 E/ z3 j+ Z& E9 _* a
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??, u! D0 p& |% b* {- C
因為沒有MATLAB請問HPICE可以直接做嗎??# h4 {- A% U, J4 U

  R) B, Q6 J5 f" ^7 i請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
& z, L3 s) `. Y  I9 Z$ e0 |至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬( p8 h3 S6 n, t
但,在業界,個人的建議是,還是要跑HSPICE會比較保險+ s4 m! [0 ~2 m* h7 t
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算7 E6 ~3 q/ h: i" N4 Z& ]
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
9 `9 Q: D9 S4 l5 r+ k; q1 Q, O而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?( w8 L% X0 \4 E
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析7 e$ `4 m2 v. j2 p* R; ]
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:9 f2 C$ E2 N  |" @. f
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
7 w' t% I* H7 T) R% w. j# _關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
6 V7 n1 l- L* g; R5 P, k0 j* w* \4 G7 Y( z% a; A& c
[ 本帖最後由 緣緣 於 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' @# l, R- V' x. s; }3 B& P, ~  R7 s
2.然後開啟matlab軟體。
' E* x6 A5 N4 U' a5 b7 S3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。& M5 ?. K4 I+ k2 P8 c* I
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。; t" {& J$ S% y/ y5 Y* p
5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?
0 S! U+ h0 X7 l4 w+ U( W( C% m+ o- S$ x, ~8 p
error in hs_allocate_sf: unexpected values in block1 header
5 ^. z0 N5 J9 e# ^5 s% l??? One or more output arguments not assigned during call to 'loadsig'.& v5 p) {3 u  Y0 q5 _  u' q
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
. ]# p7 t* r& c  v' J- F/ E第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-15 03:58 AM , Processed in 0.143518 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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