Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....+ m+ m/ e8 S( g. J
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
1 c$ W: C* j: X* {0 s
* @$ H6 D/ {3 x7 U6 L2 d至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
/ \& t* q" L8 r/ i9 k# x而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
  @8 `; j8 k. ?0 V! R$ O# |  W- l1 @( M
至於另外個問題,我的回答是,對的4 w4 ^0 T" j3 Q7 d: e% V
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下3 O; h7 B* ]7 y* D0 J
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
9 b' b' x4 S0 b, N! ovideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了+ O; F5 e5 C- l, s" T
至少我模擬起來也是這樣
, Z$ H2 N" w+ p5 v% \! [而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
' y* ~! A1 ^; T7 k1 L所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
5 l7 a/ t* Z  h" J說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。* m, {0 P: M7 L6 Y
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 - K2 V* u  ~7 o* `3 G, m& C! {
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
# J. V/ d0 U9 P) P( x) f此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
9 D' u3 u1 o1 t$ ~' S. o; N∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:3 }3 K* P. a* ~! L9 T! H
我依照你提供的程式,修改成我的規格後,程式修改如下:
- B, Z, s& h  J3 g' H; `+ ~/ s& I$ U% --------------The number of FFT -------------
1 k, L" t2 V8 z% Y$ ?fin=5;% *KHz8 K6 m9 v- X) p5 N
fs=5120; % *KHz
% \9 I9 R. b3 ?: hcycle=1; % cycle = 2^N ; N = 0~5
' \# w7 h% y5 S, \2 G: L2 nM=round(cycle*fs/fin);" Y% r5 F3 T5 b2 s9 [6 g
% --------------Load the binary code -------------
1 R. B0 p" m8 Tload sdm_out.txt -ascii, U* M) R$ f; v' ]8 R- \* d  X
start = 1;+ U: N6 K( h: t! y
step  = 1;
$ Z4 @! z5 s# i0 w# u5 U%ADC
" m4 ^. R$ `8 J, bx=sdm_out(start:step:M);
1 f  |5 i/ n  k9 _. Y" M; D
% --------------Using minimum 4-term Blackman-harris Windows -------------
7 R& A9 |( E+ u! c3 mptst = 1;& n  ~6 v+ f2 c2 P  g1 [$ x6 Y' ~$ V9 j
ptfi = M;4 ]8 e8 M3 F. ~1 _0 y) `2 y
pts = M;
5 H3 q" R7 W# F, v, z5 \) r( T
nb=1:1ts;
( v# W& X: i- Ikb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));" d+ R5 k+ D* I9 _$ U
win_gain=sum(kb)/pts;; K; N) q8 C8 R3 X7 D$ c) J
kb=kb/win_gain;
4 R7 _! }$ B; o7 ~% --------------- Calculated fft --------------------------6 J# `& F- m6 y' O
yb=kb.*x(ptsttfi);  K0 U% d, \7 |
yk=fft(yb);! t) G4 Y; z0 I- }
fft_no=length(yk);
; m2 k4 c6 {, @, C" d# }' G$ G0 Gf=fs*(0:fft_no-1)/fft_no;# ]8 [1 A3 O7 L5 W- a! k5 e5 N
Pyy=yk.*conj(yk)/((fft_no/2)^2);0 i" W. D9 |. ], ]  g+ J! ~
% ---------- Calculate THD ----------------------------0 v! {$ B% O6 W  k' S
j=1;
( e6 h0 [( W: z4 p' K9 afor i=1:1fft_no/2)
4 L# Y' D0 J6 i6 H$ Q! H& B- [: _    if (f(i) == (fi*j))  
! x7 i& A$ B( @* K        HD(j)=Pyy(i);     %% find all harmonic distortion components4 B1 x. T$ m# ]
        j=j+1;
4 i4 z# r0 j  J. _    end
' d* b6 g9 b. P4 v) w% \end
: Q+ _" y4 X! mP_hd=sum(HD(2:9));2 P& P* g' I0 `
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;: @% e7 `4 V  m% s' G
fprintf('THD = %g dB\n',THD);2 C! \$ b* M! u& @7 G6 C. I) |
% ---------- Calculate SNR ----------------------------
( W! b/ z* L6 ^; h. a0 kfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
  }% C: l! e) |fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
5 z% {% D# k. o/ f5 Aspan=max(round(fft_no/200),5);) K9 F& Q$ i; w' b0 R, P7 W. Q
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
+ f4 S! H- S$ \8 Q/ }P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;% ]7 t, o- y' Q( E
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
  z! X5 U# J9 m' h
SNR=10*log10(P_sig/P_noise);4 e! C& r6 Z) @7 i# f
SNDR=10*log10(P_sig/P_noise_hd);
( s+ P! O2 ]7 M
fprintf('SNR = %g dB\n',SNR);
* V" b& q. u$ [8 H2 |4 ]fprintf('SNDR = %g dB\n',SNDR);0 D5 z' G, X) `
. Y0 O9 B# r/ `5 D! Q
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
) G9 g- o" _' N; P) q# i) u4 }??? Error using ==> times
7 X# ^& P4 z- z. ]Matrix dimensions must agree.
+ n) D$ X& c; X0 J) b9 D" f+ S

+ g# G" Y, E* Q0 ~+ C) l( QError in ==> sndrtest at 21
- B/ k3 i% u: n, d: S- r* `* iyb=kb.*x(ptsttfi);

8 e% q# ]5 U/ e! u1 q& b3 M6 L
$ D+ Q9 r& n; d4 F6 y" O因x函數是我自行定義的,可否幫我看看要如何修改?& U, K' V& S/ K  J( f( ^' Q
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?- D+ r& C" }- @- D: k! N6 |% V' g, P
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
) s0 C/ Z: i9 E- Z+ P' t附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
1 _5 f9 x0 \' Q以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
3 U2 U. [! i& c: W  I那就是你設ptst和ptfi是同一個值是不對的, K3 {8 }# S! g  E. h# ?
ptst是計算fft開始的值  o9 m7 _. o2 g7 N( S2 A' z
而ptfi則是計算fft的range,如8~519,total則為512點
! x9 ~4 y! i4 H  i故而你在執行MATLAB程式時就會出現錯誤* K) X% S2 g! T* q, e; P& j
  g% Q7 }) b# Z6 O" @
我看了一下你的MATLAB程式,基本上沒有多大問題  D7 b/ J+ k+ e
不過,要小心計算THD的值和範圍2 p6 @; ]# a5 `5 i2 j
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
( o! E# r# N5 d8 m6 ?
# d( {3 j! j' U) ~最後,計算noise有好幾種定義方式5 I0 u/ s/ @8 F! `
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
+ c, h% U; v2 D/ W9 C& W9 V我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
+ B5 o* d7 [! b4 s因為目前在計算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筆資料,還是說我這樣的寫法不對?! p" |$ s" p4 z5 h8 e1 s
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。( |$ @# z  [/ E, E( R5 [! e6 s
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
, c- k: y' n7 {8 X謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了! |' t  m( I: `! Z
我列出我當初寫ptst和ptfi的式子關係式
5 D# `" d' w2 D9 B3 Tptst=2^3;          % calculated fft of start point
$ g! @% F. f/ gpts=2^9;           % calculated fft of end point
9 b; E# [" V. y% uptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point. o( e1 n/ W  `' t% |, |
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
/ i5 a! g' d, L7 x+ u- d% d$ X9 v如此一來才能夠取到足夠運算fft的值; g6 m; ~/ l/ N7 T3 }* r
% [1 s% ^" c5 i  s" i
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值! C' s9 k  M0 M" F" d, [  C
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤5 d  x, k; g5 h0 T
/ @6 k) D6 S5 q0 p
如果對於要設的參數仍有問題' G0 ]3 M& `& ]1 i0 r% E
我可以把我最原始的程式寄給你參考) f5 k0 ?3 R4 y# A4 e9 a/ g
$ q" [2 g5 ]' E' W# F( J+ d( p) ^) S1 Y
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:: S3 B; e2 N. {  D1 E
??? Error using ==> times
- F9 R/ B! k' Q; dMatrix dimensions must agree.- l# C# n7 y5 ~2 ?/ ^9 F
! g: |$ w3 i1 a  c% ~! l' C
Error in ==> sndrtest at 26
1 W/ d2 I/ {: ryb=kb.*x(ptst:ptfi);
, D  P, z0 m% e那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。( H. N3 S! D# e
∼感激不盡∼& b2 V, `4 f" F6 E' s
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
$ G6 r  _+ o- \5 X4 f" U9 _特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下3 ~8 V, q. q2 f/ C; I& m2 m( @/ \+ Y2 q
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
8 |8 A1 z1 ?3 h# n' m因為沒有MATLAB請問HPICE可以直接做嗎??
$ B0 Y4 X% r" F8 N
$ l) Z% g* k) g# R7 O請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體" ~- \' w4 k+ B" h
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
- B& |! f' u7 \* h但,在業界,個人的建議是,還是要跑HSPICE會比較保險9 m4 h; F, s$ z) i: U" J
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
4 Z* T! s3 M% V  v6 w一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易9 i3 q2 B( d" T  @  w8 K
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
3 J/ l0 v: V6 C* }+ b: ]                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-6-3 04:09 AM , Processed in 0.153019 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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