Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
, b# s* I- A: ^! w5 t8 x. i/ ~8 {所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
" ~0 w! {- [8 e
+ A8 L0 O4 M4 f% s  ?, O- G& ?8 [至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
- E4 `  `2 x3 u  e8 ]" t& l- \而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久& q5 A) R' t% [1 b$ P8 ^; g  Q2 S

# e# |' A0 z5 [1 _; a" J3 I至於另外個問題,我的回答是,對的
  D% Y# f! Z! S& `但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下# a% v& e1 H3 \+ k4 o
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣; a% T  _0 l# P; r
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
7 J% K: o: `* F' ~至少我模擬起來也是這樣
) U* s' b8 U- f2 F; ?# C而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC/ F4 ]' X0 u+ g+ z
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:
& t& J; Q. L/ c+ ^! a8 w' F我依照你提供的程式,修改成我的規格後,程式修改如下:! A( a0 @5 [, R* v
% --------------The number of FFT -------------4 S) x/ R  e3 V9 `
fin=5;% *KHz
$ \# A/ ~5 @, s5 R4 ]fs=5120; % *KHz
% U( c' N0 J% g1 ocycle=1; % cycle = 2^N ; N = 0~5
2 z( g7 Z; G% c6 V4 N- X  fM=round(cycle*fs/fin);+ m! J, l$ [% F$ ?* r# H
% --------------Load the binary code -------------  o* W& ~' h* r3 E& o1 `
load sdm_out.txt -ascii
* u7 S7 |, O+ |# j3 B$ r/ R* ~start = 1;
% ~: Q) y- X9 m) A3 ]step  = 1;
' |9 E9 G+ j3 W' i8 x* O%ADC
% ^% j1 c8 u0 \8 `/ }x=sdm_out(start:step:M);& q5 B/ r( \& @, w7 h
% --------------Using minimum 4-term Blackman-harris Windows -------------/ r: C" ?$ I0 K2 w& {1 |
ptst = 1;
2 U9 D& f4 D/ f; ^ptfi = M;5 W( J8 T# E# u# O  X  D% S
pts = M;
0 j' D- d  |2 @( `  v
nb=1:1ts;
/ O+ s7 \# H% Nkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));! o! p- G2 s/ ~6 I* l
win_gain=sum(kb)/pts;- H& H8 }  D0 G# D4 s% W1 A6 m
kb=kb/win_gain;" a6 r3 ?7 f- e8 Y6 K4 j- u
% --------------- Calculated fft --------------------------
+ m* w  c, o4 U$ v. N/ Kyb=kb.*x(ptsttfi);, U" h! T2 X* d6 _( f9 {1 R- S
yk=fft(yb);
5 o  \5 T# Z* J9 m) S/ p, s& w; B) [fft_no=length(yk);1 P2 W, `; B8 g4 x3 x8 D) B
f=fs*(0:fft_no-1)/fft_no;
$ |$ Z. u8 ?9 F( J6 h0 z+ {Pyy=yk.*conj(yk)/((fft_no/2)^2);" G% a/ g2 n" b
% ---------- Calculate THD ----------------------------* u; d! i$ m) r- e0 {0 f* v& D6 Y+ a
j=1;0 q6 y1 Q# e! H; n- ?2 L* _
for i=1:1fft_no/2)
  }7 y1 Y! Y% C1 K    if (f(i) == (fi*j))  # w: G6 K3 t9 B( q) F; ^' O5 d
        HD(j)=Pyy(i);     %% find all harmonic distortion components2 Y" D0 y# E5 J" R8 j
        j=j+1;
8 V4 V; S, Q: v' h    end4 L% r/ d) U  A& g  @! V
end
" m) o. B  R* F+ [) ^P_hd=sum(HD(2:9));& j" J9 K; W" B' p
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;4 s, N# I/ `. E6 P8 k  z: W
fprintf('THD = %g dB\n',THD);
8 p. E( p5 l; E9 m- n' O" e% ---------- Calculate SNR ----------------------------- @% D7 @  i* `( S( a; o; H
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));' n9 h; A" ?7 g  `; f
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);7 a" N2 X( V6 q, c
span=max(round(fft_no/200),5);. k1 I. F8 [; X$ W* a* {1 ~6 A
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
" X+ i; x, x/ I( M, ^: rP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
+ t; G$ u2 }# @* c3 s. QP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
% E2 Z8 O1 @9 k2 u# X5 v0 e
SNR=10*log10(P_sig/P_noise);
' l6 m6 r- F5 ]& e- a" LSNDR=10*log10(P_sig/P_noise_hd);) o9 N- }# a# y/ n1 F7 @
fprintf('SNR = %g dB\n',SNR);
  ^6 i( C0 a: C( g0 h, ?2 nfprintf('SNDR = %g dB\n',SNDR);
) Z+ }- T2 u7 A3 g4 A
2 O$ A7 c& Y! v藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:8 t9 N6 `' j5 v
??? Error using ==> times
# L$ H1 T9 X: zMatrix dimensions must agree.
) C& {3 @. G1 G$ v/ t
0 v% N! c/ l- {( ]
Error in ==> sndrtest at 21* d9 j% }$ s) A( N2 n
yb=kb.*x(ptsttfi);
4 S* E6 d1 `3 Q+ w
( `; x" e; O2 F/ x/ \! N
因x函數是我自行定義的,可否幫我看看要如何修改?
& Q4 }- c) j0 B' j! }8 ]另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
  `) H) \# d% R5 O2 }除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
* [! |" V* A, a$ H3 P& t附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
/ ?; |, Y0 j! J以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
" T+ H+ M( a0 {9 i# _! N  O那就是你設ptst和ptfi是同一個值是不對的# |7 h, n+ ~0 [6 |5 `2 _5 c( [- l
ptst是計算fft開始的值8 S5 f& a- Q, ]! i
而ptfi則是計算fft的range,如8~519,total則為512點
* ]1 V; ]$ F8 B& m) |故而你在執行MATLAB程式時就會出現錯誤
( P4 M" \- B' j: V1 `
( J; R+ o: t1 j/ O4 Z- ^, D7 v2 r2 ^我看了一下你的MATLAB程式,基本上沒有多大問題
. V2 L! C* ~8 p1 r0 ]不過,要小心計算THD的值和範圍
, A1 y, ]8 w$ N1 R, e7 {因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
1 h3 N8 ~7 |8 o1 t$ x% @1 q, E7 A% ^: y. N$ m
最後,計算noise有好幾種定義方式+ z8 ?' R1 b8 T: v3 F
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
" T5 |* [, M- v# K6 u; A: R我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可. r: ^. m; U/ Y/ ]. k' y" ]3 h% N
因為目前在計算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* g9 s: u+ W- o* K4 a4 r% Z因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
0 a( z5 ?; k2 m& l0 o, B我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
0 g: N2 }6 P3 V5 V( r8 Y謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
4 F: z4 c9 r8 j8 n7 A& Z我列出我當初寫ptst和ptfi的式子關係式
9 h+ N, Z7 }9 s+ w7 P6 O8 \6 Vptst=2^3;          % calculated fft of start point
7 }) Y3 Y4 x8 X  N; ?/ R7 Epts=2^9;           % calculated fft of end point' l5 O+ s6 K( v  w+ R
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
, R' n" T4 g0 L3 d/ P/ a因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值' A  r, F( R  w3 c
如此一來才能夠取到足夠運算fft的值
; z5 P! v: f; |5 Y$ o* E) f7 d
3 T- \. K8 q7 ?, m$ u另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
3 m$ A, q. _2 J( I4 R7 G& K如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤
6 M, }. T, X# e0 d2 \, A( D' i' b' P' E! u2 I
如果對於要設的參數仍有問題4 j& x/ D7 r) E3 Q; p  _$ O
我可以把我最原始的程式寄給你參考! R3 H% }7 h! r$ W8 V8 C% ^( b

# E6 |: S& `2 L2 z# r5 u5 I4 k[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:2 g1 G$ f7 {: m' z7 E7 [
??? Error using ==> times0 ^% O! e* \- ^9 N# H, G
Matrix dimensions must agree.
+ s, ^; O+ e$ b8 s
8 n- P1 X+ H! J! iError in ==> sndrtest at 268 T# [; }/ B3 V
yb=kb.*x(ptst:ptfi);
1 v( d* u( e7 _$ j3 ^% ?6 G那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
* Z3 W2 ~8 A* i3 o∼感激不盡∼7 i- }' k6 G# Z5 f
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?& u5 P, B3 v& ?: z& n
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下8 D, Q- V0 _3 Z" J% j
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
6 {* E/ ]; g6 T& P2 J" M因為沒有MATLAB請問HPICE可以直接做嗎??6 v0 X; a( c/ z# l' W
* l1 d* y/ V; }: H0 L5 U4 ]3 w
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體0 E: |8 q; O; j4 x
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬2 y; l/ x5 R2 Y+ m
但,在業界,個人的建議是,還是要跑HSPICE會比較保險
7 v: I, |. i2 l" \5 i至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算" k+ [0 G' D6 b1 ~4 }$ ?% C7 I
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
1 B+ @. ~; [- d& l( x3 e; }而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
( E: t- K! t& b" u+ F. z4 i                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-6-17 03:36 AM , Processed in 0.157520 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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