Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....9 s! t) q" G3 [& c" i  _
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
/ f" u7 x# o. D6 Y- S1 C% W7 J' H* r4 u
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了/ m% A5 x+ V( t5 [' D7 N
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
( w" `$ z9 ~4 D' l$ M9 P/ Z0 S- T# Z9 h1 ]7 K  H
至於另外個問題,我的回答是,對的; _% n: o. Y* G9 T
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下# T7 S1 _! f3 c* @# z4 v
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣! G2 l5 h6 k8 W+ `& @
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了. @3 E( }  |1 R4 Q1 Q
至少我模擬起來也是這樣
" v" Y, J! U6 N  c6 w而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
' M' [$ @8 M! k& g% g所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:
1 |' P3 _1 I* N( F我依照你提供的程式,修改成我的規格後,程式修改如下:
$ b- n; H5 A/ L6 V/ S% --------------The number of FFT -------------
* P9 C: Y; u9 P# u; Mfin=5;% *KHz
, R$ ]" {& \$ F' c5 [fs=5120; % *KHz
' p, s% F% r' fcycle=1; % cycle = 2^N ; N = 0~5
/ _1 q6 U6 }, d# t9 z% Y: ]M=round(cycle*fs/fin);
" D$ [# Q6 R8 L  u- a8 g% --------------Load the binary code -------------/ T) Q, I  ^! V* I5 N. j# \
load sdm_out.txt -ascii* ]( y2 e( p* n/ c* F2 b
start = 1;! O, I. f% C# w( s
step  = 1;
; j) C2 ~% a* O" x4 h% I4 Z%ADC/ c  X9 [! E& ^' h, P
x=sdm_out(start:step:M);
, ~6 t' T$ ^! r- R* ~2 M
% --------------Using minimum 4-term Blackman-harris Windows -------------
) o- r  h; y1 s% h" l4 Y3 u( }3 u# Rptst = 1;2 o( x: `5 D4 k( V* f
ptfi = M;
7 G# ]- ^- f+ t0 Mpts = M;
: K2 S  h4 [, y0 ?  ?! G! L
nb=1:1ts;- O+ a- @) q6 M; }
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));' B& O5 G; n) A- Y
win_gain=sum(kb)/pts;, i7 i$ |- A$ l% z/ G* A; c: n
kb=kb/win_gain;7 i# y; ?5 L1 p$ f& g# ~
% --------------- Calculated fft --------------------------
  Q$ P5 l4 z9 c7 b" e2 \yb=kb.*x(ptsttfi);
; Y6 s6 ]( H% Y! _
yk=fft(yb);
  u2 K$ q5 C0 B. n7 Dfft_no=length(yk);
4 J  p( d" B0 Q4 [1 x/ w  Df=fs*(0:fft_no-1)/fft_no;( r2 ]: e2 p0 U+ C' k$ w
Pyy=yk.*conj(yk)/((fft_no/2)^2);
8 G; F0 t6 B  D; A9 i% ---------- Calculate THD ----------------------------9 m1 F: G' y- Z0 I
j=1;% ?& L& C! `- d( `8 l
for i=1:1fft_no/2)6 U* i* E( Y+ ]
    if (f(i) == (fi*j))  ' _# z- R) d! x% W) D4 y
        HD(j)=Pyy(i);     %% find all harmonic distortion components$ \1 C& y3 d& q& `: f1 S+ y7 p- T; A
        j=j+1;
& V* Q) d* j! F. H    end
$ v0 h8 ], G$ D+ s/ n5 Wend
, |- G" n3 Y: P+ N7 A. d/ AP_hd=sum(HD(2:9));
3 b" G( o$ d% z/ O  N) d* d+ KTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
3 X6 r' G- e: z# g- e6 F+ Rfprintf('THD = %g dB\n',THD);
- P' H! @4 e1 e5 l% ---------- Calculate SNR ----------------------------/ V; u1 ^! J7 k4 f) F! e" g$ g7 G7 C4 C5 U
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));  |' T8 e1 L  x
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
6 j) Y" W  b7 V+ Pspan=max(round(fft_no/200),5);
$ W# v: G3 [& l: Z( b5 b2 PP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
" h1 B! b; Q$ u2 @P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
( }8 c/ z1 V+ U, X) wP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
3 R5 O; U2 i! B
SNR=10*log10(P_sig/P_noise);
6 _1 K  h8 V; F; |# D7 @( l, zSNDR=10*log10(P_sig/P_noise_hd);
5 r' `% C0 }( Y9 Q
fprintf('SNR = %g dB\n',SNR);: Y5 b% f5 z1 Z+ }
fprintf('SNDR = %g dB\n',SNDR);9 S: g' a: N! K
. F, }5 n, B" ]) K. j' e) ~" ]
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
( o  f4 E& E" w4 P1 H??? Error using ==> times
7 N3 R8 y5 s3 Y) D. R3 VMatrix dimensions must agree.
2 n4 n) w( w5 [$ f# i" g6 E( {

: l$ T; K! v& ~& a% qError in ==> sndrtest at 21
+ [* x) A# z2 p& L+ H) K; O6 J9 dyb=kb.*x(ptsttfi);
: ]- Q! t8 V) h& J3 e2 U% t$ F

* t4 {2 k3 v; s* p, ?8 }因x函數是我自行定義的,可否幫我看看要如何修改?
$ a8 f7 B! C9 i/ Y7 r; U另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
: T8 w$ U7 g# S, S3 [除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
) N+ n1 ?+ `) {( c3 ^2 d附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
* [' J1 x9 |; P以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題4 g) ~7 |% A  r6 z& F6 R. ^* b
那就是你設ptst和ptfi是同一個值是不對的
8 y. y9 [8 }2 k& H/ P2 Bptst是計算fft開始的值
  ^3 H+ F- d9 C+ D而ptfi則是計算fft的range,如8~519,total則為512點, J! |& s& s3 h$ Q; @
故而你在執行MATLAB程式時就會出現錯誤
' D  r. d! r( f3 ^2 d8 r7 ~+ W1 |7 d$ A9 V
我看了一下你的MATLAB程式,基本上沒有多大問題
" C# K8 P( ]" ^# C8 P' \$ h不過,要小心計算THD的值和範圍
5 w+ [- M& ~; w( f' N% {因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
# O0 W9 k1 c4 ]! t+ e  k, n
# ?+ G: M6 F# |  Y最後,計算noise有好幾種定義方式
( {' y7 c1 z% Q# |3 r& H# ^/ f原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理0 @* ^; r' I2 @. s
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可+ i9 F1 d  `8 v, l$ E- 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筆資料,還是說我這樣的寫法不對?# d) l5 j% L& [$ t0 H
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
8 r+ X# @; X' D' u' O6 r我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
  w2 b# r, Y. ?  P" B) [6 Q謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
4 ]: c" ^6 H- Q" Z" y我列出我當初寫ptst和ptfi的式子關係式8 C4 v3 _  g: T7 N/ M
ptst=2^3;          % calculated fft of start point; c. p0 U. F% Z8 c; s5 ?" j. j
pts=2^9;           % calculated fft of end point2 `9 C  n6 p3 c6 ?$ W: @& }5 Q
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point+ K8 |- |5 q" k8 k
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
1 a( f8 I. R! e5 ^1 ]0 U如此一來才能夠取到足夠運算fft的值
- @* H  V, E' M7 f6 N' k" L- X6 ?( e  d& U+ W+ w( U" s
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
' y1 X$ `& x# C如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
% @' d2 t+ |2 {" O. x6 |4 ^' I! d& N8 z0 f+ }! {- _
如果對於要設的參數仍有問題
+ Q9 G: W; Z( i# C我可以把我最原始的程式寄給你參考
4 F8 [5 `) F% S& {" i% m! y4 N7 z3 i% \1 M  D! `3 f! x
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:) q* s0 y: |7 R6 O/ A4 o
??? Error using ==> times
+ g) }" x' D1 {, m2 lMatrix dimensions must agree.2 K9 C& P8 B8 [/ x" _6 V; D0 i

. P& Q0 \; U* Q- z/ k; ~; F' ?Error in ==> sndrtest at 26
. ~; y9 y) c- Q! G; \yb=kb.*x(ptst:ptfi);
& q; |' \' V; L8 N* ?那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。7 y1 k& b( E+ T# G5 V3 F! U. Q
∼感激不盡∼
% n" H5 }, V1 x& @! D4 bps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
/ p7 p& A8 l1 M/ W5 [* H9 Y# y- n特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下6 V4 i1 |) o0 ^, n
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
; S1 d& ~: }' l8 T0 S+ V因為沒有MATLAB請問HPICE可以直接做嗎??% _3 ^8 p5 ^8 L% i8 s6 G4 W+ p7 N
# Z! x* o3 ^. m4 e
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
" f+ f- e% N  P) F7 W4 Q至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬1 H" O  q4 j# ?
但,在業界,個人的建議是,還是要跑HSPICE會比較保險6 X" E, W1 u* C. V! }( X, e
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
2 G4 w0 Y1 y  L/ T! p! v1 Q& M一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易7 i3 R, N* K/ n, n; S, @: W
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?1 O# _6 S6 B2 n8 }. k
                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-6-13 11:06 PM , Processed in 0.135517 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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