Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....* m7 _  Y0 d! c, _
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失; i/ c; D+ L: @6 e, w

- P' B9 G% o" ]/ |# ?至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
/ l. N2 O8 G( Z, j) }* k而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
: M7 l) L% S5 `" i/ {$ J  W- {. M$ D9 o
至於另外個問題,我的回答是,對的
% V' d# G% V- L* g) s# o但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
# Y9 F4 v" u! s2 ]緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣8 {7 h: R7 k0 I. O# n8 c
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了- `$ q+ \+ H2 ~% a2 @& S. P3 H  h
至少我模擬起來也是這樣6 B" f" n  {( t) i# ^# C6 f: ~! v- f
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
- O3 C, d0 r$ R9 d. m  ^7 a所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:, f/ D( M. e7 Y8 ?6 C9 F5 K
我依照你提供的程式,修改成我的規格後,程式修改如下:* p$ I3 n$ `/ i6 o
% --------------The number of FFT -------------
* d' B! G" q  L+ J8 Kfin=5;% *KHz
- P: U1 z' ?* G4 m5 c- {/ h* `* C, Dfs=5120; % *KHz
5 l) |$ F3 x7 e9 a  p3 B4 Mcycle=1; % cycle = 2^N ; N = 0~5
6 N' e8 Z# H* D" _( p1 q5 oM=round(cycle*fs/fin);$ h2 L% X7 J# _9 z1 E
% --------------Load the binary code -------------4 I9 w! ~$ Q5 u0 c$ X
load sdm_out.txt -ascii
1 ?, C- d4 I: p, i9 i/ `2 Z' Y  ^start = 1;- z6 Z+ D- {% W& _
step  = 1;
% L: K8 O' p* Y( ?%ADC6 F4 B+ y# z0 I$ N/ c; R+ D
x=sdm_out(start:step:M);
# W/ n! T- J3 y0 E% f! e' ?
% --------------Using minimum 4-term Blackman-harris Windows -------------1 o; ]: ?- o0 O4 O; y8 @6 k) M4 h4 V
ptst = 1;! U3 O) p5 {! K; F. }8 a  ^
ptfi = M;
  b7 c/ [9 r) x1 T: Ypts = M;2 N( F/ P/ Z7 X( n/ w
nb=1:1ts;
, X& O, ~; G0 [" a9 |kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
. c2 K; F  D' Dwin_gain=sum(kb)/pts;# x- G$ {% a7 w( ?
kb=kb/win_gain;
/ m7 W3 k0 ?! D! @% --------------- Calculated fft --------------------------8 q: o0 R% N' v
yb=kb.*x(ptsttfi);
4 D) a7 t: I3 |: P
yk=fft(yb);+ b% N! p3 I& P* j( h
fft_no=length(yk);/ v4 y0 t3 W9 T. T! \  C8 v
f=fs*(0:fft_no-1)/fft_no;
& a- i% ^% q! u. r/ l/ QPyy=yk.*conj(yk)/((fft_no/2)^2);. `7 G5 P! t6 ]4 w! L& ^: Z- R9 {: p* X* a
% ---------- Calculate THD ----------------------------* ^* [8 o/ O" ~7 ]2 S, |8 X
j=1;
; @& Y" m" [0 v1 l( ]for i=1:1fft_no/2)
8 k' F$ W3 t; @- P3 U    if (f(i) == (fi*j))  
' [+ _9 f6 r) U        HD(j)=Pyy(i);     %% find all harmonic distortion components2 i7 q- c/ _3 u' R! f# W
        j=j+1;2 }/ d! v/ |: C' {% S
    end$ k6 J5 _" g. _& e
end# I9 P: f6 B1 x$ c
P_hd=sum(HD(2:9));
+ j$ O) N0 m% `4 UTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;7 c. l  H0 ^% w0 b* T3 D9 S  z
fprintf('THD = %g dB\n',THD);
- q& R5 p) |' B: d3 K0 b% ---------- Calculate SNR ----------------------------
9 _( n( Q9 O; x5 b* z* ufundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
/ B7 e8 E! _' Bfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
& t; m" P8 q) [& z; ?3 ~0 _* gspan=max(round(fft_no/200),5);- _% u" |0 r8 S% \7 B
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
0 i7 A& Y; ~4 [- lP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;: O5 \5 A! w) S# x( r9 E
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;/ E, m: }/ t; ?% A0 K+ Z, N% i
SNR=10*log10(P_sig/P_noise);  d3 E( W+ V& K! ^/ r$ \
SNDR=10*log10(P_sig/P_noise_hd);
* G) i% a0 d! z' Q
fprintf('SNR = %g dB\n',SNR);7 x  h0 e5 t- C
fprintf('SNDR = %g dB\n',SNDR);! J- y6 G. B! v0 y, R
  ^4 u2 U. ], h, i0 z! j
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:3 u# E/ T& l2 e3 L4 U5 M3 T! J
??? Error using ==> times( w2 J% Q( k3 D; ?- J1 g1 P. x$ P
Matrix dimensions must agree.

5 L; {! _' u" A. x" {; @
  n0 }' G* k' n  Q4 yError in ==> sndrtest at 21, a+ [+ N9 Z! c8 s5 [
yb=kb.*x(ptsttfi);

; I' q- z8 h4 \0 I! l; X: O7 H5 C) K! Z6 [+ b( L) e4 a
因x函數是我自行定義的,可否幫我看看要如何修改?
/ K2 K- R* \; B: _! k0 M另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?$ O2 @* \1 @0 j, t& S# B* w3 e% R' \( E$ n
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。% x3 u3 O( R  F% H8 Q
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
) [! }  b+ [6 D以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
4 Q4 ]) J  p) t% F; U- B那就是你設ptst和ptfi是同一個值是不對的
: C1 ^5 I4 z2 e, Kptst是計算fft開始的值
2 K8 z' Z3 f- }! j2 e1 {而ptfi則是計算fft的range,如8~519,total則為512點8 a- ^! b4 o8 [7 K& o8 \* q$ P
故而你在執行MATLAB程式時就會出現錯誤
1 \% p* @2 ~/ c: R1 i. J. k( i& o2 W) k4 ?3 h
我看了一下你的MATLAB程式,基本上沒有多大問題# U6 u$ w* Q% J
不過,要小心計算THD的值和範圍
& k3 R& {& S7 h9 O因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
0 P! Z5 H( C4 C& \6 r
, X- O7 s+ G! U- s2 w最後,計算noise有好幾種定義方式
4 M; V# n0 Z  h; q# d% V! D原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理% _% h  h* B) n% P( l7 [
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可3 W- U' b$ i0 a
因為目前在計算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筆資料,還是說我這樣的寫法不對?& b2 k6 G& _  U) z. w
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。' t( X  f- C4 e& t4 G, \
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
; t7 ]( A0 a/ A2 ^7 C. R0 P謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
3 M& B# v' M6 A1 S我列出我當初寫ptst和ptfi的式子關係式
8 C4 L/ L1 O; i9 @1 W. d# nptst=2^3;          % calculated fft of start point
/ O; R. h- b, R( U, I# u( Kpts=2^9;           % calculated fft of end point
. Y9 u% p/ d9 E, r) s- hptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
- P* }% [# C# P( Q4 k因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值6 Z# H. t. W2 Z+ N/ s
如此一來才能夠取到足夠運算fft的值
0 N7 B2 S' u" q/ A" @/ n0 n( Y% D9 l
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值* W3 K; T; |1 k; q+ k$ M- ~
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
( P* J6 V* u+ P6 w! F& W
5 l/ t8 N3 @2 @如果對於要設的參數仍有問題9 e6 @3 h3 H4 Y* e) v, j
我可以把我最原始的程式寄給你參考
2 A" V9 y1 ~- ?' `5 |3 o. S; ~/ X" K
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
7 v# U, [, _/ e' b5 E- b2 B9 ~" H- y??? Error using ==> times
9 ]. \* M! u# {$ {+ ~. n! ZMatrix dimensions must agree.
3 i. r/ Q  O* `4 b; ]  g9 h9 J2 U# A' ^# g; J' {  m6 k
Error in ==> sndrtest at 26
# K2 w6 o3 w4 N/ J3 B; yyb=kb.*x(ptst:ptfi);
$ V* [: p+ X  o! j8 ^4 N那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。/ u9 j) W# ?3 m/ W6 Z& Y! Q, B
∼感激不盡∼) b+ S& H% @8 w
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
# H% u. S# h# l3 O2 ^: t6 B特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下1 V- c5 j3 y% t/ \& Y. G/ }7 x
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
% i( k8 K) F- d; e9 t5 p因為沒有MATLAB請問HPICE可以直接做嗎??
" @0 Y: C7 g- M4 o3 }$ L
3 M3 z: [# ~; w( I請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體$ K2 u8 Z- \+ ?* n& T
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬7 O- O& K* v- F: r/ E
但,在業界,個人的建議是,還是要跑HSPICE會比較保險
) K! Z. z$ d' Y. W# G至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算) e7 t  j5 M) |1 S
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易7 M( K7 m' ]. ~) b2 J$ }! V
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-9-21 02:04 PM , Processed in 0.207012 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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