Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
. T9 {5 @1 g; `) a. [所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失6 c9 r& U5 k7 y! y$ E

6 ^, h+ ?8 b# f: r+ ]至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了2 s# E; _! X) O" Q  w% ^
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
. ^7 v1 S4 v- S. b& z* v- G
! |+ L. O( R2 a8 e; }4 X至於另外個問題,我的回答是,對的& H  g% Y* K" E) l. }! h9 Z
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下# e( g: n3 w: Y/ l6 w  a
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣7 G  D* r* p; s7 n9 f* |/ p
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了- K3 Y  ~! p% ~1 E
至少我模擬起來也是這樣, l  d5 Q$ }0 X' I/ T
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC( m7 i) Y  ~( i2 t7 y
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
- m8 Q  S8 I5 K3 j/ {- V: g說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。- z( K# G3 S7 B2 \% S) c: w
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。
  l% n1 l& h. `9 x0 e在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
, k6 S4 i) d4 C& s' n7 I! [此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
/ _0 F$ D/ t: M+ N! j∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:5 q' n( p7 [2 y, A/ P$ p2 h
我依照你提供的程式,修改成我的規格後,程式修改如下:
, Z! J$ N- @, y' j! e) n0 M8 M% --------------The number of FFT -------------
' z. N* Q7 _/ F) Q% `fin=5;% *KHz, d2 Q; F! c4 D
fs=5120; % *KHz
0 j( {* ~7 G* _  Wcycle=1; % cycle = 2^N ; N = 0~5
) c; o5 }. p3 n3 w) M# C2 I# ]M=round(cycle*fs/fin);
) E$ B9 z* v9 s3 j& A* d2 O# v" j% --------------Load the binary code -------------; K* _0 `3 z% p; Y
load sdm_out.txt -ascii
8 ^7 [( t. y, D1 Kstart = 1;
. v: o3 Q4 d3 Sstep  = 1;; q+ n/ N8 {$ x, A8 n  N
%ADC
% ?# f6 s8 J, T. W  ?1 C* Mx=sdm_out(start:step:M);
# ]/ S& X9 t5 s' M% P9 ^
% --------------Using minimum 4-term Blackman-harris Windows -------------
! `' t& h6 |8 J/ E6 a4 Wptst = 1;7 r' }5 u! f2 J8 M4 ]- a
ptfi = M;# t, r& @5 l8 m; z# {6 M0 j
pts = M;
4 |4 p! ]$ N% q. S" E
nb=1:1ts;
6 q9 J0 k2 J9 F7 [/ `- B1 Hkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
% g, C% u/ |6 |. W% K8 x! }win_gain=sum(kb)/pts;
7 K6 e7 k; }7 i( l( Ukb=kb/win_gain;8 ]1 s: z/ J: O: Y' C) @
% --------------- Calculated fft --------------------------
: U# Z; A1 ]0 v" ]' O4 y0 f( j" {yb=kb.*x(ptsttfi);
  R% H2 ?% O2 l* f
yk=fft(yb);
* ^1 w' M8 ]* |+ H4 T( Sfft_no=length(yk);
8 V' S0 o, Q3 M* T3 |' N; U/ ?f=fs*(0:fft_no-1)/fft_no;" s* t- s: ^. L7 E9 q7 c
Pyy=yk.*conj(yk)/((fft_no/2)^2);
2 j+ p! Y' @$ t4 |+ r0 V5 G! p( B% ---------- Calculate THD ----------------------------
5 Q6 k9 b" ?6 yj=1;# u: Z7 m' F# m0 N
for i=1:1fft_no/2)& T) o2 B' S4 b! t' D
    if (f(i) == (fi*j))  1 `; x$ e8 u, ^9 F/ \
        HD(j)=Pyy(i);     %% find all harmonic distortion components& T% M: C) t5 M
        j=j+1;
2 H: @; V( m& v5 t) M    end3 Z* E9 Q& W: V/ W) ^  E
end
7 [, }, i) m1 X" I& f; w1 iP_hd=sum(HD(2:9));+ E7 \+ v8 o7 g- p6 q
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
& B, \; W: q, m/ Q7 r. ]. Pfprintf('THD = %g dB\n',THD);+ ^8 _6 u3 Q4 x  G
% ---------- Calculate SNR ----------------------------
! u5 f1 o! c( ~6 Sfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
+ h& R% E5 D' r4 v9 [0 T/ i# xfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);9 x8 x; e" f" ?
span=max(round(fft_no/200),5);/ o; e9 Q8 j6 M' a
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));& O3 A! r4 _% [
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;% m6 D2 t/ s: ~, E1 r1 k, v& R/ g
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
! j! n* ]8 j2 j3 w  n9 G
SNR=10*log10(P_sig/P_noise);
2 I/ M  r2 X+ U7 A; }SNDR=10*log10(P_sig/P_noise_hd);. y" y+ |6 M% \: H4 k
fprintf('SNR = %g dB\n',SNR);
" F; |1 H* Y3 R$ c$ Pfprintf('SNDR = %g dB\n',SNDR);
* J/ v# D# S! g/ _' N - _+ f% e( h6 j  }
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
# `& g7 O1 S+ D6 @$ q??? Error using ==> times
% c: W8 p9 Q! L! z6 MMatrix dimensions must agree.

% Z5 E& v+ [) G6 r# _# f4 i& |% E9 |
: i* t+ y0 T& d) ]8 cError in ==> sndrtest at 21
$ H9 g1 g8 S. l% Byb=kb.*x(ptsttfi);

$ Z* [% G5 [2 l5 E2 ^% l6 u! \+ H
% A* B8 \! A9 X0 }- t. `因x函數是我自行定義的,可否幫我看看要如何修改?
. l8 |1 b0 G$ e7 y4 p( _4 }另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
- _0 h8 {. }. n; G- s除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。  e" Q8 z. ^" N2 F" o6 \* l2 C
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。# K0 P% E: v3 q9 h
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
2 f8 `7 `3 ^5 p7 J0 V# O+ m7 A那就是你設ptst和ptfi是同一個值是不對的& i2 G- d$ V2 t* V4 S
ptst是計算fft開始的值& F3 S8 J" Y4 K9 s9 F
而ptfi則是計算fft的range,如8~519,total則為512點
% T8 U- y& R' q4 o9 D5 W) b- ?故而你在執行MATLAB程式時就會出現錯誤# ~( E+ N5 d- U; R7 f; K7 O: o0 l3 ~2 Q
  @1 c3 T' e" }* G9 a& `
我看了一下你的MATLAB程式,基本上沒有多大問題
6 H! r3 R) k: e# i" t: @. f4 ]( @不過,要小心計算THD的值和範圍' c" A5 m% S4 z8 h3 F3 i3 U
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
' @1 _6 ]! ]$ }( l! l+ ]
+ w+ i+ Y  W4 I6 \. U最後,計算noise有好幾種定義方式
% C7 `5 k2 o) Z/ t* F6 \3 p原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理8 x+ Z: t/ C0 L% p/ s
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
$ e3 o0 a* v" I; H; \* 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筆資料,還是說我這樣的寫法不對?
/ V& a( U2 b6 i, `0 A6 [因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。, ?& _9 k) I# p/ x, C
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?' j$ `7 o: s6 N9 q+ Y& I
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了- x/ {* D$ Q! E0 g8 H- C' S/ l
我列出我當初寫ptst和ptfi的式子關係式6 n5 \& l2 g2 C* p. D9 Y( Q
ptst=2^3;          % calculated fft of start point
0 a' o- P8 N* A  tpts=2^9;           % calculated fft of end point2 U6 [5 q+ t9 I
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point4 ?. [3 h8 Q8 P* J
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
$ q6 U( |7 o5 j0 I0 A( z* G如此一來才能夠取到足夠運算fft的值9 C4 z8 S; B' b0 f- ~! z

8 l$ o) V9 _! Y, {: Y另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
+ m4 ], _0 i& q- i4 x如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤- {% F. _& Z, Z* e; _- J. N( j

( I) h% b5 s/ f9 X: j如果對於要設的參數仍有問題
2 U4 o- F" {- H3 `' @2 i% {我可以把我最原始的程式寄給你參考' X9 q- X2 ~* {+ W+ K- C
. s5 u& L, e  y5 n& P6 C
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:+ l6 p, F5 Y4 c' G; _! y  ?
??? Error using ==> times
- p  W- U2 [2 E( cMatrix dimensions must agree.3 ?! Z; g  B0 g- ^7 A  N3 l( F" a, b
" E% _6 ]' D$ D
Error in ==> sndrtest at 26" M& u, }. Q0 ?: G+ N- G) B
yb=kb.*x(ptst:ptfi);
+ J" P4 w5 G) P那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。) Z: Q  o* o0 K2 X- p
∼感激不盡∼
; K1 E- {8 K2 |ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?$ o0 \4 x- e) g( _) o- {- H
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下; b5 \( T) K, x3 |  N
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??: }$ g& W3 }  l4 r+ g! m
因為沒有MATLAB請問HPICE可以直接做嗎??
6 \0 R* l8 U/ i- {$ K3 ~* ^
9 M" O- m) W. d9 O$ v* O1 q請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體- l" z$ Q" ?  V4 b% w) ], V: b7 d
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
, {- e- s6 E, h* w4 z0 Q9 e但,在業界,個人的建議是,還是要跑HSPICE會比較保險
% Q6 D# L2 H! u; c至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算5 l7 g* G! I: I& ~9 U
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易( R: `  a9 D$ Q4 ?# Z/ o) t( O) T
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
9 P3 D& {8 |; x- U2 B7 c* P! R                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-5-17 10:48 AM , Processed in 0.129016 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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