Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
/ U, X# Y; `+ n' Y所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失3 }& o3 x$ t# n

. z+ M3 j/ k, }3 l1 ?# B1 v( T至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
. G1 @( |9 I' f1 \' o# c3 I. r而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久! z% @& |5 V9 l$ B( h% D6 ?

! Y1 [2 @  G( D2 p至於另外個問題,我的回答是,對的  G* ?# N" t4 f, W, |9 {' s
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
. p& w' C" ]9 o. X1 r緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣7 u. K4 n. B( }/ ^/ o% [, R
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
5 O, Z) j. Z% C/ d" [至少我模擬起來也是這樣. ]/ v5 h9 M2 k& _
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC% K2 Z* c+ ?( H% s, {
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:
# Z2 v( z6 x, {" N4 t2 `我依照你提供的程式,修改成我的規格後,程式修改如下:
' X, a- c; K  T! M% --------------The number of FFT -------------( A& D& n9 }" E! Z6 j
fin=5;% *KHz
% A5 b- `' S' c( G7 S7 Y- sfs=5120; % *KHz4 C  W% r9 L7 q$ [0 {1 W5 m
cycle=1; % cycle = 2^N ; N = 0~5
! N$ x% [; n/ _$ |' ]M=round(cycle*fs/fin);
3 s2 y8 M2 `; f% --------------Load the binary code -------------6 x( s" C9 \/ w6 H& D# \
load sdm_out.txt -ascii
9 U# [7 _1 D- b5 m$ }3 L8 Ystart = 1;# q6 J6 a' q; F' n& ^$ B
step  = 1;
. \: E; F$ I0 e! W- E% U% {%ADC
0 o; J/ E) L' xx=sdm_out(start:step:M);
; m: ]' r0 k: M! C9 k' e# {
% --------------Using minimum 4-term Blackman-harris Windows -------------
# F* }0 r6 `4 W: k6 }7 yptst = 1;  d5 u+ @- l( n
ptfi = M;
) D' m+ P! S' r8 [; C; ]6 Ypts = M;
) u6 y; r% S* D
nb=1:1ts;
( |$ W1 {. q; ~8 H. {kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));3 A! O& L; T5 l
win_gain=sum(kb)/pts;9 d8 w- c+ ~3 {" K( \7 s" r+ \# f
kb=kb/win_gain;5 Z7 s% _: v5 X2 C3 h1 `
% --------------- Calculated fft --------------------------' |. ?# J- y2 `" X9 T8 f& a5 b, Y
yb=kb.*x(ptsttfi);
& I" h/ Q2 k" [$ M6 N! M: z
yk=fft(yb);
  Y3 b$ Y6 f; X  G& |fft_no=length(yk);- N7 ^4 D7 R/ i- o
f=fs*(0:fft_no-1)/fft_no;! p3 O8 k4 W% F# f4 M- h
Pyy=yk.*conj(yk)/((fft_no/2)^2);
6 l5 Q& ]- P* _/ f9 C% ---------- Calculate THD ----------------------------4 q4 z" I2 K& E" k
j=1;! a) y. U9 G' `) h- E% P! i
for i=1:1fft_no/2)
# }: E6 W, R$ L8 j9 P    if (f(i) == (fi*j))  
' D! H, B. R/ w2 G" L8 H        HD(j)=Pyy(i);     %% find all harmonic distortion components
6 A6 D! K7 V. a, C        j=j+1;
5 J& e6 M! w  O5 n9 F$ T    end
% Z$ ]) _+ o' ^- U8 T" A4 eend" N8 t" A5 m/ Y  A
P_hd=sum(HD(2:9));. x$ M( a1 D7 {! t
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;; ]9 j. ^) }6 S. h
fprintf('THD = %g dB\n',THD);
& s/ y5 {6 ^. T, _+ q% X7 O% ---------- Calculate SNR ----------------------------
! ~4 P- `$ H  Xfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));/ h, }& b$ D$ V4 N& M* g+ Q
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);8 y+ n+ g# ^- @
span=max(round(fft_no/200),5);
5 B3 ^4 D8 T, HP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
, _4 ^9 c3 |+ W: u. GP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;, V9 z1 E4 k( w& [( M5 d# F
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;# e6 x9 f( C7 ^- i
SNR=10*log10(P_sig/P_noise);
. R" v3 P) V" ]4 b1 B5 bSNDR=10*log10(P_sig/P_noise_hd);" U$ k& p/ Q: F3 Q5 L# K/ d
fprintf('SNR = %g dB\n',SNR);7 K, X3 S5 |' J0 Z  E
fprintf('SNDR = %g dB\n',SNDR);8 p2 @# `6 X. o: y' e+ y

  t' k4 @$ Z. R; i: h藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:2 c' k2 o0 Y3 R# i. Q
??? Error using ==> times
8 |8 I( {- Z: G0 |  i2 X* gMatrix dimensions must agree.

6 v4 r6 `5 @" Z; `9 a % x; D* t: i: S. \" ~, v% v' [
Error in ==> sndrtest at 21
7 e) X8 A+ ?( u# ~: uyb=kb.*x(ptsttfi);
: e- L  `3 a- ^2 Y- C, I7 A  N% I
! u- Y8 \0 w- [+ {. u9 e
因x函數是我自行定義的,可否幫我看看要如何修改?
/ ^" k& r% V; V9 |; w另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
1 e. e' v4 J: S; q除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。/ x, p% u7 E& b4 y! N) O3 `
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
. a$ N9 _1 Z$ p8 n以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題( x* E% c5 V* K! _. M+ U
那就是你設ptst和ptfi是同一個值是不對的  s' n, `1 g5 p- x6 T
ptst是計算fft開始的值0 \0 o( W$ b5 ~6 B* B' J
而ptfi則是計算fft的range,如8~519,total則為512點$ {/ W5 ~. W5 L3 n4 H' s
故而你在執行MATLAB程式時就會出現錯誤
+ o0 g6 s' n) F. I& x; j& c, X: N; O" }# L& L0 {
我看了一下你的MATLAB程式,基本上沒有多大問題; L( K5 @7 Q% d0 M1 U6 }
不過,要小心計算THD的值和範圍
8 c! }2 o* v' B6 w因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
; q2 v  T3 R+ n7 }& _  l+ ~+ h9 `; L( S
最後,計算noise有好幾種定義方式8 y9 T' m7 j3 v& x# H
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理6 U, }$ b: C5 q8 P5 v# L$ }) C
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
  z7 i8 d& R0 L9 g& Y+ j因為目前在計算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筆資料,還是說我這樣的寫法不對?
/ ?" J/ `7 i# ]因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
- Z9 }" c) z1 [( u/ p* {7 d: B. w我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
' P4 _/ J! V& m+ `% R% u謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了7 _. ?, H% J) x6 d
我列出我當初寫ptst和ptfi的式子關係式; \. V- G) C# [, i; ?
ptst=2^3;          % calculated fft of start point/ N& y+ Y1 l) Y& T' R% L" {2 L; q* Y+ o/ ?7 K
pts=2^9;           % calculated fft of end point
" \7 r  |7 y+ hptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
1 V- R6 G' ?" i' g. a因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
% P6 S/ |- C/ C1 W- i如此一來才能夠取到足夠運算fft的值4 W4 N: G, _3 ~0 @  r+ Y- [1 L
) z0 A2 @( d- ~" S8 ^$ V% x
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值4 J) {# d% ], q
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤/ D$ H7 v! ]( j( u, {8 _; T
# q) ]: y$ ^2 X# ^! U, q, ]/ G
如果對於要設的參數仍有問題
- f( O: d/ H7 l; D# q+ ~0 w5 Q我可以把我最原始的程式寄給你參考
# ]5 J9 V+ E% ]( \& C* A. C
. E+ m8 V* l0 R1 p: ~+ }[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
' r/ s. V6 Y( z6 Q) {??? Error using ==> times3 x% r- z: \% K2 l3 F, }- ?
Matrix dimensions must agree.
) s% q. N: t' d5 i% }5 x& [
9 J4 D+ W3 c9 @% H' mError in ==> sndrtest at 26
! n7 w# X& E/ ]& Eyb=kb.*x(ptst:ptfi);
8 q: }2 `* \* h' ^* D那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。1 o) t$ e6 ?" U9 k& j
∼感激不盡∼
- o  U! Y2 A2 zps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?# h) n+ ?  p8 ~  u: m1 a
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下+ x' _. J! A) c
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
, w) t; P! J' }因為沒有MATLAB請問HPICE可以直接做嗎??5 W. \; l! p, f& _

  m$ O- X( ~2 p* e4 ?  k2 Q請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體  V' h* g# R: o8 }& I1 b
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬) v" Y% \$ ?! n0 T( W7 `# P
但,在業界,個人的建議是,還是要跑HSPICE會比較保險& w1 t1 n! F% w+ s8 G1 @+ w
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
& f9 ]6 Q' h" \6 A6 a9 a( ~/ r一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易1 w$ \" s4 s' q) Y3 S9 d0 |
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-6-14 02:49 PM , Processed in 0.133517 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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