Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
% b* }1 L' r5 p' r所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失  q  A2 r; B$ |4 a9 S! T( z

3 m3 ?: P! \; q& j9 ^至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了7 r7 P, i6 r! Q; a
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久: Y! X7 R) {8 f: g/ d
' q- I, r2 V, Y# B) d' n
至於另外個問題,我的回答是,對的
  d. ~+ |+ E1 ~: n% F但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
; j# M1 m& S/ z2 A* e( U3 a3 ~" S- m緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣  U6 w% L' p9 ?  q/ a% _- R
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了3 u" L( Y5 u! s% w
至少我模擬起來也是這樣  o, ~) J+ \3 q  Y& f
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
! B: c) [, U6 K: X5 I所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:, p6 Z( Q& F& p  w. s9 N9 p
我依照你提供的程式,修改成我的規格後,程式修改如下:
0 H! O- ~  A* i: K4 X1 t% --------------The number of FFT -------------
3 \7 K( E3 _$ C/ U4 Qfin=5;% *KHz5 v  F. r  J6 O  O0 b4 E
fs=5120; % *KHz
0 R! H; S" l8 @8 {! b2 O7 B  ecycle=1; % cycle = 2^N ; N = 0~5 8 q1 |, m7 Y6 W9 f
M=round(cycle*fs/fin);: q6 k6 L4 }+ s& N: v0 {7 O* L8 I
% --------------Load the binary code -------------+ M- q5 s$ x8 `; W' T
load sdm_out.txt -ascii
* z; P+ J6 |  D' ~start = 1;
" s# K# z. H1 U2 d# T! \. bstep  = 1;
2 Z2 T. q* `. W  I& B9 i& _; ^%ADC
* ?4 p# {4 M; u/ k7 K6 Xx=sdm_out(start:step:M);
0 X* g2 n# y# K4 m
% --------------Using minimum 4-term Blackman-harris Windows -------------! ~+ f& `6 C2 e7 c0 R1 Q
ptst = 1;
. [! h" h+ E7 F6 O. a! Pptfi = M;5 c0 w7 R1 ?$ J7 l7 f
pts = M;
4 ~1 [! m7 b- o( Y7 B
nb=1:1ts;3 x% c9 ]8 G& }, J# p$ e
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
* r- f, `% V- {6 x0 [& X5 mwin_gain=sum(kb)/pts;
) h2 r/ h8 ~! E; _/ z  Akb=kb/win_gain;
& f- k1 a$ u# J1 \% --------------- Calculated fft --------------------------
* S9 s( n# z! {) e: y! ]0 _yb=kb.*x(ptsttfi);
9 U, L1 c0 v8 R, f& Z& [. F
yk=fft(yb);
" b- K2 u- ~# X" ^) A" a/ W: zfft_no=length(yk);
5 _, W8 ]# P+ N% x5 I5 |$ u; xf=fs*(0:fft_no-1)/fft_no;
  w) D- S/ ^- p# d+ {Pyy=yk.*conj(yk)/((fft_no/2)^2);
3 u' ^7 B% F) c/ T) L4 e% ---------- Calculate THD ----------------------------
  i9 g: X# }; G) ]j=1;
: l, y% @1 e. M% v0 `" Dfor i=1:1fft_no/2)
7 s3 a. n2 j: h    if (f(i) == (fi*j))  ) d9 v/ S9 B3 C  T3 m
        HD(j)=Pyy(i);     %% find all harmonic distortion components
) ?, U7 Y% c6 `2 d1 a' P" P        j=j+1;
3 ]* M6 Z& w9 Z/ v0 p4 \' H7 c    end
% a5 p1 C6 C+ K6 y7 Eend
) w; c9 K7 t! y9 A: `' SP_hd=sum(HD(2:9));
5 Z3 J& k* X1 m$ y- K+ ^THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;  i* o+ \" f" {5 Q3 c6 q2 v; W
fprintf('THD = %g dB\n',THD);- L+ p6 S7 G! e' W6 i
% ---------- Calculate SNR ----------------------------! t1 i: L$ p3 p% x2 K4 I+ ~
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));* H/ i" p! T. D- C* R! |
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
! a1 k# ]) X3 H) E3 D8 Cspan=max(round(fft_no/200),5);2 @3 [1 E/ f  |0 j- X2 Z
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
* ?( T$ W; J/ r4 e8 r& C5 R- IP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
& m7 {+ {1 c' w5 V# e; e) eP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
! @' y1 h. W# Q6 M3 I! _& V
SNR=10*log10(P_sig/P_noise);+ z) [6 d  V+ V
SNDR=10*log10(P_sig/P_noise_hd);7 V7 s4 f" {' s- `
fprintf('SNR = %g dB\n',SNR);
  J( C6 Y) q! z  X  |fprintf('SNDR = %g dB\n',SNDR);
! h( s% C0 p* \" y
$ E, o6 R2 `4 s( T- |$ K; r0 q藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
4 N( d6 x/ y3 L1 e??? Error using ==> times
  ^# c8 B  B" j9 h4 M9 bMatrix dimensions must agree.

$ A" m, U0 Y3 \, K, `4 I 6 e+ f$ @5 F4 G
Error in ==> sndrtest at 21
; G0 H* z, @+ U: W# Byb=kb.*x(ptsttfi);
; \3 D; o( y# O( k. Z) i

" ?9 E# n0 c2 R' T5 }7 B因x函數是我自行定義的,可否幫我看看要如何修改?
3 G: j5 z4 v' T! y1 s; T6 n6 l另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
3 ~: @# D, K6 a9 {除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。2 Q: s' e9 @/ e# F  A
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。3 V. L$ z3 `% G$ c- }
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
3 T9 G% z1 P7 ]9 q2 {那就是你設ptst和ptfi是同一個值是不對的/ G) N! V4 B  n
ptst是計算fft開始的值3 B; d- f! y' H! D, _3 _
而ptfi則是計算fft的range,如8~519,total則為512點& g" |2 S- Z' f0 q& X, y
故而你在執行MATLAB程式時就會出現錯誤
/ m( P( s  k3 b0 s% r" D
# B$ i- d, ~. D2 v4 G4 X我看了一下你的MATLAB程式,基本上沒有多大問題
3 [/ E, C  p( C* z& y# q不過,要小心計算THD的值和範圍
7 _" b- y+ k7 [* e因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤% S  W3 V; s9 }. K+ U
1 }3 B; x$ _# f: M5 t0 h
最後,計算noise有好幾種定義方式
" y" Y7 _/ x% `, p原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理0 T! D2 K7 A! g3 M) U& F
我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
+ y3 b: W  m( w0 `3 a; 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筆資料,還是說我這樣的寫法不對?" ~: V- w+ M; _* Y( a* `' I( ~# P
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。& J8 t+ c) E) ~9 c2 w
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?  L& B4 I0 @) _4 t# J$ Q* `
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
. Y0 h3 d; A6 v$ x) C$ i( H5 J我列出我當初寫ptst和ptfi的式子關係式
; q& O+ n5 c% ^3 x+ f7 l  Xptst=2^3;          % calculated fft of start point
) z" x0 U$ S( n  B/ W) Epts=2^9;           % calculated fft of end point( i  }! V  k% {5 f3 ~- c1 s
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point! i1 g  w2 L' r$ q2 ]5 P
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值0 a$ ?7 D& Q$ k2 q# E% C- Q
如此一來才能夠取到足夠運算fft的值
* d" k% z9 v9 b3 M6 ?8 I3 q
7 e+ h$ A/ t* H. Z* V2 \另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值* K: |3 @/ g, v4 B& R- b
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
& z: K% a- H0 H! ?8 A: p+ o0 W# E' _: ~8 I- A. f  O0 n1 t
如果對於要設的參數仍有問題
% p1 E& E/ C8 @5 w8 S: [  X: I我可以把我最原始的程式寄給你參考) _* b/ L/ S- t2 ]9 j! `
( `' n/ `* K  l$ t3 o
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:3 {" e/ Q+ f# X& \: o5 A8 i
??? Error using ==> times) f. G! E: q9 K
Matrix dimensions must agree.
$ O8 {: k3 {' `4 ]: @
$ D3 W; P& z' lError in ==> sndrtest at 26* d% y: G! e& A, G- _( l
yb=kb.*x(ptst:ptfi);
) m+ C1 c$ b$ S那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。3 x, x# |& I6 P: g
∼感激不盡∼
. u& y' ~+ i; c7 K; E8 k# Bps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
$ E. I' y& q" ~特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
4 s5 G5 X6 T$ K- r' c如果要在HSPICE模擬ADC的INL及DNL的流程及作法??8 @; I5 }% |5 V3 y- `! I) Q
因為沒有MATLAB請問HPICE可以直接做嗎??
" v5 U0 t9 Q  g4 A1 U / l2 m. ]7 I& u& C
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
) v0 L: ^5 W* T* m4 l& y至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬/ G7 N: m/ V  Z/ W8 T4 m
但,在業界,個人的建議是,還是要跑HSPICE會比較保險& B; l3 d" E- c* v9 F7 Y
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
9 N: d4 A0 ~3 t: h; m8 X1 R6 A  c2 y一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
8 A1 w1 {+ H" ?- S" D而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
2 p/ P: O# r1 G& ?, d0 F                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-5-17 06:04 AM , Processed in 0.133517 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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