Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....' s( o8 C, n. V
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
6 {5 @: y: w6 g3 Q. ]! e) e; Y4 q! b/ b1 n: a
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了# _4 R" ]" j8 u2 {7 u5 n
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
0 |; K- Z' l% }0 M4 a: T/ w; G/ j1 C  w
至於另外個問題,我的回答是,對的% A' T6 e6 o, }
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下7 c3 X7 B6 Q  G+ l
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
( M2 S8 l, c  w3 Z' pvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
2 [. Z8 G) @+ ?至少我模擬起來也是這樣5 _# K, K# H$ S' {) t5 O5 u$ @
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
/ M' {- _2 O1 i: R2 X: V所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
- ?* Q" ^; X3 T' h/ v+ B說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。
3 h4 U) B$ T0 A說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 , ?$ H# ~2 I0 S8 h
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。/ F) @) K1 u6 g
此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
$ X% L# H6 N: {∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:
: O4 [  S% y7 \1 Y我依照你提供的程式,修改成我的規格後,程式修改如下:
" _1 R( B0 r4 O- O2 ?/ p/ W' m% --------------The number of FFT -------------$ a1 C2 x7 L/ ~; _( ~0 H8 u
fin=5;% *KHz" |% z3 w2 E/ G2 F
fs=5120; % *KHz
7 w% a/ g" ^3 ^' e/ gcycle=1; % cycle = 2^N ; N = 0~5
0 P, ~! [( g; l, CM=round(cycle*fs/fin);
# e2 O3 H1 X2 c9 i6 Z  @* ~' V1 {% --------------Load the binary code -------------
3 p8 K; K  C7 L! H4 Yload sdm_out.txt -ascii4 }# W& n4 [: }
start = 1;* e7 C* n% f5 r7 N2 c; V: x
step  = 1;
* N2 |' U! {4 I3 S; l( c%ADC
8 R' g$ U6 o2 v( {! Q8 ux=sdm_out(start:step:M);
  {- L- H  K& \: L5 X% s* M. Q
% --------------Using minimum 4-term Blackman-harris Windows -------------
3 l( ~5 D0 n; b2 n, zptst = 1;3 b9 u, e7 o4 i$ S
ptfi = M;
2 Z$ o/ R& C0 A5 T/ |- Z2 E2 ]pts = M;7 C2 L  b* ]9 f6 R5 |( B$ _$ g5 c# }" ^
nb=1:1ts;; X0 O! Y! |% k# w
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
; _" H1 D; V' _7 M' [6 ]* cwin_gain=sum(kb)/pts;
& V3 }" \4 ~; ~# ^kb=kb/win_gain;4 Q6 \9 g2 ^- w. ~" Z
% --------------- Calculated fft --------------------------7 N" x" _. W+ T# w+ Y( P
yb=kb.*x(ptsttfi);  J+ S( g, I. e! J' L9 X
yk=fft(yb);7 U( C  I6 h7 B1 P
fft_no=length(yk);
* y6 F0 Q8 X. I' B3 @f=fs*(0:fft_no-1)/fft_no;4 `( [. Q* ^4 |0 G( u; s
Pyy=yk.*conj(yk)/((fft_no/2)^2);  Y7 k: Z2 t2 Q  ?' C% U5 i& C& N5 K3 S
% ---------- Calculate THD ----------------------------( i: O( S$ d; x/ M6 M
j=1;
; \/ V, X$ C5 s, lfor i=1:1fft_no/2): y$ ?* A: n3 u2 i+ `2 t2 p
    if (f(i) == (fi*j))  " u) T9 O# y* S" b6 q
        HD(j)=Pyy(i);     %% find all harmonic distortion components
* X6 B+ m4 y+ H7 b7 a        j=j+1;, I' @9 N2 L  e, ?9 N3 E1 s& u
    end
, q# f- x" p! |% C; Y/ p) fend
# A6 @3 [! R5 e7 z8 yP_hd=sum(HD(2:9));
: r5 d! F. M# X* t; {- w: y) UTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;; ^2 H) q3 W' L# _/ M2 y
fprintf('THD = %g dB\n',THD);
6 S' Q1 N" {/ H) |4 p4 M% ---------- Calculate SNR ----------------------------* l$ {8 T, u) k/ R/ A0 ?$ P2 |: z
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));: Y5 w: v6 H. y/ ~+ _
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);- Z& E  B- U  x; j* f* o+ }
span=max(round(fft_no/200),5);
) D8 h/ d; i) wP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
5 o! ?+ e; U  KP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
) U, y& D' i) TP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;: v. B0 K/ Q0 S  v: z' Q
SNR=10*log10(P_sig/P_noise);
( W# X5 p+ d/ I# R* pSNDR=10*log10(P_sig/P_noise_hd);
9 M/ ]' m4 F5 {7 t; M- h
fprintf('SNR = %g dB\n',SNR);* z- E( v7 }* N& s% v: w
fprintf('SNDR = %g dB\n',SNDR);
7 h4 V# i0 f+ C& x' I! `3 O
8 y7 o7 k! X, m$ t( e藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:3 K- A9 V; Z  ^' f& a; l
??? Error using ==> times+ O% P* C5 f. w- J9 M1 o2 Y
Matrix dimensions must agree.

. E$ {/ U- Z! }* D) l6 [; ~
: e, \# `/ g' h, k/ ?7 }" lError in ==> sndrtest at 21
2 T# h- G# Y! V  f( qyb=kb.*x(ptsttfi);
$ c4 H. H8 y& ^* N; t, T* d
8 y& X+ Z7 A3 C& Y1 [& i
因x函數是我自行定義的,可否幫我看看要如何修改?
0 z( o( ]3 V2 O另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
; Q% K1 j$ K( X除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
5 Q' ^! e" Y! d; q0 u$ ~附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
: y. S3 ]+ E- D1 J( w以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
) A# B8 O7 q) |, d% s- E那就是你設ptst和ptfi是同一個值是不對的! J& o* u! R$ C6 ?
ptst是計算fft開始的值# m# \$ W+ n4 C( A; ^# y% w1 T- \
而ptfi則是計算fft的range,如8~519,total則為512點* g3 j: G9 f" z$ }# S
故而你在執行MATLAB程式時就會出現錯誤
+ B  a% d5 M; T7 f# K" R
: j- Y  }' E, |* I' r我看了一下你的MATLAB程式,基本上沒有多大問題8 W: M0 t  W% U6 |6 S! ~
不過,要小心計算THD的值和範圍9 n1 l# T6 M) [% G
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤* Y* [4 [3 P& W% r

7 {% Q3 F5 Y7 l最後,計算noise有好幾種定義方式, h0 a( G  ]( [. m0 V: v6 y
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
: r4 y( ]+ b1 j6 T- p) Y我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可' M- g( K8 Q' J: w0 q3 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筆資料,還是說我這樣的寫法不對?
' B, w% G9 G) U1 Q0 ?8 t. D6 J因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
5 ]  I; E) M4 N' ~$ s我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
. m" h; e9 W  M謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
' A# _4 H* P' e9 M/ S, H3 Y( R我列出我當初寫ptst和ptfi的式子關係式
# ]1 U# x  l7 R( u& x( \' [ptst=2^3;          % calculated fft of start point
9 K6 ~9 J( m; Q' _7 e. Q3 ypts=2^9;           % calculated fft of end point
1 ~+ Y$ r% [0 G" K0 [ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point$ I& x5 Y# A* y& f
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
1 b9 ~9 X7 G) N: Q+ ^如此一來才能夠取到足夠運算fft的值8 F$ ~# Q: r. c

# `3 P& z1 L9 A4 T  w另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值% ]8 |( u+ B3 _0 l1 a
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤  B- p. R; l; P/ z' k
2 C6 v" o  q. v% Z4 N! K
如果對於要設的參數仍有問題
" F/ f0 {0 b( Q2 b我可以把我最原始的程式寄給你參考- j' I# L8 i+ ^6 z0 I: N+ d

# L' E+ v. [6 t" X[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:  A" A4 q4 i6 b5 L0 G% Z) [3 E
??? Error using ==> times
$ p# e, S2 p7 q& l9 HMatrix dimensions must agree.
4 q% K# b/ S2 L1 K1 Y- C. ]% K& R- B2 ^6 E$ a. e' b5 o
Error in ==> sndrtest at 264 `" h) z, R8 g  b: W8 s
yb=kb.*x(ptst:ptfi);
  Q  i" C  q1 r那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。  S0 c8 V( t. T5 `- T
∼感激不盡∼
! x, O8 t) l& q1 v, h6 u7 B( @' ^ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?& q- m% Z& Q3 a- C
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下9 S, K, P, j2 Q. k9 \/ V8 z
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
/ w. c& i& a! \, G$ U. [因為沒有MATLAB請問HPICE可以直接做嗎??+ C' K9 l! \* [9 H- U

7 q, ?4 g  D- X9 d% d$ N0 U請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體% _- U0 I; a5 a+ Y
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬/ d3 c3 j4 {( R+ S. U# B% S+ Z' x
但,在業界,個人的建議是,還是要跑HSPICE會比較保險
( T. k/ @1 T. ?  X+ P至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算7 f- k, o( h1 S/ @1 E6 d
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易+ c8 F' n6 h8 r$ z& X" @
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?* d; g/ D' }; I4 _. B, D, A: v: U
                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

2 S8 K1 `( l' @( Q6 I* I4 b; Verror in hs_allocate_sf: unexpected values in block1 header
* `) ]; t0 {' G: |??? One or more output arguments not assigned during call to 'loadsig'.. Q! b" m2 x( L8 h( r& W4 c1 m0 ?, A
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
, Y1 e: f% s3 d( J8 B第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 09:17 AM , Processed in 0.146519 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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