Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....$ S6 Y6 q* k! _+ I
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失" b7 s& f6 g/ _  M% q# l
% l' M6 u2 `! o+ t& n! H
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
  H0 a1 e" I. u! k1 k7 O& }而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久/ v' ~/ U( m8 O6 r  j9 A

' s4 l8 |7 Q0 a至於另外個問題,我的回答是,對的  K" p, w: }5 J7 ]2 x; [
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下# W) D) R  f) v( M2 {1 |/ P" B
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
2 Q: h2 t0 y9 a* l8 kvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了8 F: w1 C- w/ J8 M- }' M
至少我模擬起來也是這樣5 j# O/ s( {0 }, F
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC7 w7 F4 @+ s8 i
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:
! ?$ N1 t% R: ?/ \* _# X' j2 Q我依照你提供的程式,修改成我的規格後,程式修改如下:
# N4 O0 j" o, `  |0 K8 Y/ p% --------------The number of FFT -------------
: h, H1 c; c+ c* [/ S1 Xfin=5;% *KHz9 }8 U1 y4 t  r1 t& o- T8 S- p
fs=5120; % *KHz
% @! q% R" g+ tcycle=1; % cycle = 2^N ; N = 0~5
$ Y" [9 L& w$ _" RM=round(cycle*fs/fin);
+ x, p, Q$ `' k9 w% --------------Load the binary code -------------
$ r6 Q9 d" e2 Q5 t% I9 mload sdm_out.txt -ascii
' h% L* ], k$ p' j6 U( ]9 Vstart = 1;. O- Z8 c* C# ]+ K' N
step  = 1;
; f7 r# z0 v# A( P$ v! \%ADC, `# `  J- X+ q- t7 w
x=sdm_out(start:step:M);
) f5 @% R" K6 t
% --------------Using minimum 4-term Blackman-harris Windows -------------
2 W4 P$ v3 H# x9 g. Pptst = 1;3 q- ~- [3 J, W6 O3 x* e
ptfi = M;% ?$ h: n+ g1 _, b4 W  A$ S
pts = M;2 X8 ]2 q  `" h
nb=1:1ts;
* F' U0 z/ ?+ K$ q4 r; ikb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));/ f: u& N& f5 ~7 q/ Z9 M
win_gain=sum(kb)/pts;
$ e$ t- v# j$ Okb=kb/win_gain;
+ ~# b5 q7 i! Z3 ]. i% --------------- Calculated fft --------------------------
* @8 U$ E' v! `* I3 Syb=kb.*x(ptsttfi);: ?, x0 ?$ B2 `: g, T1 f4 |  h
yk=fft(yb);! q: I2 O) r, o6 E0 k( l# [
fft_no=length(yk);1 Q% p3 R  R, M- G
f=fs*(0:fft_no-1)/fft_no;
0 ^8 d, h4 @5 A* _! HPyy=yk.*conj(yk)/((fft_no/2)^2);9 u( ~) P  \5 v% j+ F& P
% ---------- Calculate THD ----------------------------
- B1 C/ r; ~+ E& hj=1;# u2 W, v4 j, T
for i=1:1fft_no/2)" {2 @# Y: w1 R  Y
    if (f(i) == (fi*j))  
) q* M2 {1 ]  Q9 K% m" o. c! h  G" y        HD(j)=Pyy(i);     %% find all harmonic distortion components; ^. a5 M5 [1 t2 ~) B6 }
        j=j+1;
6 K9 T- Y$ {8 y9 M    end/ f: \" K' M+ E. q( b8 \+ D/ f6 w
end8 f* i, W5 r% l2 _$ U* I! q2 e" g, T
P_hd=sum(HD(2:9));" }& m/ l* q* N) Z/ x. q" {5 e
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;; z$ A; U* |0 J5 C3 f0 o! ]
fprintf('THD = %g dB\n',THD);
! M9 `# F* x6 P9 b' a) L9 I% ---------- Calculate SNR ----------------------------$ A; p4 s) c! z# Y1 B# C, K3 [
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));5 p% j. x7 O3 V  Z$ M( t
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
. J. v; ^& }8 G% {2 N; t' R! t& rspan=max(round(fft_no/200),5);
1 @# d3 G8 v' X# M0 G" fP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));8 @+ }! N; c6 Q; q& Z" c
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
3 i1 K' ^% d5 q+ Y& oP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;( q( u! W1 P& T" p- J
SNR=10*log10(P_sig/P_noise);
' h! z& l( _6 l0 P7 F  ySNDR=10*log10(P_sig/P_noise_hd);: [7 u' l6 j+ P7 g' j$ p$ w
fprintf('SNR = %g dB\n',SNR);
: j% k9 p2 i' j# n8 Yfprintf('SNDR = %g dB\n',SNDR);5 p* }( Y% P5 @! _4 O! G$ N- A
, |; ~9 H& T( ?, ^
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
5 B; x4 F# v  K: v: Q1 v) p??? Error using ==> times: @) Q* g4 v3 w! v7 |& E8 [$ I' d
Matrix dimensions must agree.
( x2 k& t' Y' k

& ^/ R7 T- ?; S; o' x# @5 T9 ~Error in ==> sndrtest at 216 {- z* c6 x# {: Y* ?9 m
yb=kb.*x(ptsttfi);
+ C0 P3 X2 P) }$ D- K$ ?  |
! H' u; w% T: p
因x函數是我自行定義的,可否幫我看看要如何修改?1 w, k8 h* q4 Q6 G
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?0 f9 _/ ]4 _) M) e
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。) V, S% b- A6 b# o9 A) \4 V
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。+ n! |4 w3 e2 w0 Y0 j
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
- q0 n$ P9 Z. y2 F3 Q那就是你設ptst和ptfi是同一個值是不對的! d9 u6 \5 Q. Y
ptst是計算fft開始的值
# Q  C6 J  r+ R& g而ptfi則是計算fft的range,如8~519,total則為512點
9 G) ~( Z! X6 v6 K0 x1 B4 O- |故而你在執行MATLAB程式時就會出現錯誤' `% J4 Y* h2 [6 F$ r& ~$ T( n9 e0 F9 e
% `1 \" g: h& ~$ s" B+ ~
我看了一下你的MATLAB程式,基本上沒有多大問題
7 S! y5 c3 K, I不過,要小心計算THD的值和範圍7 r0 l, X! B' c  f- ~
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤/ @0 ^  F( e8 A

' v+ i' d' w$ o! }5 @最後,計算noise有好幾種定義方式+ h' J6 t: Y0 Z/ c% x3 b
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
  K9 o) ]0 f" J4 c' K# W我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
% e. M1 N) ^" O8 m/ p因為目前在計算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筆資料,還是說我這樣的寫法不對?
* i. V; C3 v+ w0 N. L因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
+ k% s2 `& {6 }9 t; U我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
2 ]2 j3 G* h4 U% P. N4 p謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了$ z# L+ }( o7 K) E& {( e
我列出我當初寫ptst和ptfi的式子關係式
. ?* W& r. G$ W( Zptst=2^3;          % calculated fft of start point3 ~, p2 w3 c; R+ h
pts=2^9;           % calculated fft of end point
+ ?+ R+ m( F( G8 ]ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point3 Q) o9 G7 R# T
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
9 z$ V1 G) j( S) w' ?8 |* `如此一來才能夠取到足夠運算fft的值9 y( x8 a1 j5 C( Y1 K
0 S+ A2 i, Z5 O6 }" b; r3 B: _
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
$ ~9 s/ ?5 r" `9 t如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤* S. l' J2 Q* E- C" B5 s+ z

- B" y2 \, y6 U* J; K如果對於要設的參數仍有問題
- x6 {6 E5 `- m+ X我可以把我最原始的程式寄給你參考
/ B0 J4 @( h3 ], }9 \5 \# U: L9 Q( T( w5 x9 B* Z# }% i7 e* Z
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
& O  ~) M( N9 K. M  t1 n9 ???? Error using ==> times
$ K3 ?* }0 h0 o2 @/ w5 A1 E( B8 SMatrix dimensions must agree.
0 X# A7 q- Y9 q: |, [% ?( r! @; ~, n3 B5 H
Error in ==> sndrtest at 26
. d& @, u* C$ P0 b2 [( Kyb=kb.*x(ptst:ptfi);6 S$ K5 o* P5 Y& g- I6 ~* b
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。7 }& N- `" b) J
∼感激不盡∼0 \5 a1 _/ |" j) P
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?) w* l2 T- i  j4 b* k! A* L. r9 l
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下2 ]$ S- Q( q' W3 h" s
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??+ e4 Q- s7 M! G/ l6 c, c# L
因為沒有MATLAB請問HPICE可以直接做嗎??
' E# K' x, O) |2 C: ?+ g. Q
+ @) t8 R4 a0 ]+ c/ n& b請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
  O5 B. d* C& X) G7 E; Q, \! d至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬; J1 S8 r3 W3 b- j4 o
但,在業界,個人的建議是,還是要跑HSPICE會比較保險. }2 ]" h" S9 [
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算. h! Q! k7 r. e. ?% u
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
6 `( U: m# v+ x- V% S! R- I- o而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?
1 ]# C, q; f- `5 @1 e還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
7 v5 \) P2 }2 K請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
6 W5 I8 X% R; o  `! D如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。* o6 z& v& ~: ^/ V4 k' w3 t
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。- v9 {1 _# x/ m: k
1 B6 R, e, `! X' _# p; N
[ 本帖最後由 緣緣 於 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的檔案。
" E  y. h" \5 B4 @- a+ t0 B2.然後開啟matlab軟體。( k( y0 ]0 c( W2 B' ~2 J5 x
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。* `4 m* j4 C7 ]# a; H2 |
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。* t  _6 W$ }6 M- k: v
5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?0 {6 F$ |# `/ S" j! B! ^

) A) [0 n1 _7 `. s; w+ D# H1 {error in hs_allocate_sf: unexpected values in block1 header
1 v' v% ]+ |- d- Y! s: ?+ t- R: `??? One or more output arguments not assigned during call to 'loadsig'.
5 }4 Z1 o; Y& N$ G: O這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
. e) Z! }+ @) G( O+ N# t- m5 X第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-16 12:00 PM , Processed in 0.201011 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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