Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....* e+ m  T" o* C% h/ i& p
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
8 X- h- a- D1 ^& e2 E; f- \2 ?) [
至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
7 s  |2 P  ~: I1 X" J7 `- X. i+ u6 Y而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
: Y7 p. v4 J5 f- c5 d) @7 a1 ]( _3 d* L8 i, {, L$ K! ]1 C5 b
至於另外個問題,我的回答是,對的
* b4 A# A8 A! n+ d- M但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下% X1 K) K/ ?4 ~+ i
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣2 T5 ?4 J, q: Z5 j2 s  V
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
& l6 k! b& ?, A# J0 X# B  L; Y0 |; E* |至少我模擬起來也是這樣% c! X% f2 t% O2 S$ `
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
- b) P. c% M% B% x1 T所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

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

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

請問finster副版主:
$ o; T) u6 h) ^5 m  u9 m我依照你提供的程式,修改成我的規格後,程式修改如下:
  B: V! z! M6 y3 w. a% --------------The number of FFT -------------
5 G( ]7 ^' F2 L& Xfin=5;% *KHz
  X0 }7 L! {5 {8 Y) }8 Gfs=5120; % *KHz
$ c' ^% a% A9 y  x  Scycle=1; % cycle = 2^N ; N = 0~5 ! f( J8 J/ _8 J4 v; l$ Q$ O2 ]
M=round(cycle*fs/fin);
, Z6 F( p9 q1 {9 q% --------------Load the binary code -------------, {4 L) t' g! L: ], J$ Q
load sdm_out.txt -ascii4 I/ z' f* `0 C& [# k% l! \. V+ v
start = 1;
8 ^1 M5 s: _* E+ ^# Jstep  = 1;; M: ~% w+ R; r1 x5 e
%ADC6 |4 W# l: O% y" e4 K& W9 ]+ l4 b
x=sdm_out(start:step:M);
( _# J! F; `2 d( z
% --------------Using minimum 4-term Blackman-harris Windows -------------" Y. `- w4 T4 _
ptst = 1;) y1 P0 }- z8 h- _' V1 m/ _* D  N
ptfi = M;7 b- i5 X# E( Y! m% }) {
pts = M;1 w: q* i) Q, h5 E3 q& R
nb=1:1ts;2 T$ e; p5 O# @% F7 [* ]1 _
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));; }# i6 C# [; C& E: F
win_gain=sum(kb)/pts;4 o( ]2 N1 t, j! w
kb=kb/win_gain;
; [( j3 r1 o+ l9 }# f8 i0 J( E* {% --------------- Calculated fft --------------------------
8 g$ ^$ |  w  D' \: Vyb=kb.*x(ptsttfi);9 S! i$ y! P0 \
yk=fft(yb);
3 e+ V7 z4 C. }8 {3 Ifft_no=length(yk);1 y/ t2 S1 I6 k9 p/ D1 }; }! P8 F& X
f=fs*(0:fft_no-1)/fft_no;
5 A8 }& P, b" j. ^- Y! f& v+ ePyy=yk.*conj(yk)/((fft_no/2)^2);
( o( G& C/ ^- C* e, x0 L% ---------- Calculate THD ----------------------------
( h6 q. V  j5 d9 C( O% [. @j=1;
6 l* x; N9 ?4 G% mfor i=1:1fft_no/2)
8 M4 ]$ F/ l$ H+ `' @$ T# m    if (f(i) == (fi*j))  
! v# C1 N: Y+ q3 R: m2 N        HD(j)=Pyy(i);     %% find all harmonic distortion components
" x7 x0 H3 c2 j2 i8 k        j=j+1;
2 s4 \2 u0 i8 t5 m; s    end+ f  a+ _: _, u# ^( Y! L
end
0 \9 v' g- D: s: O$ i6 e" LP_hd=sum(HD(2:9));! ~2 s0 E3 ~% ]! N
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;& p& R7 O* r/ P/ ~9 v% n. E
fprintf('THD = %g dB\n',THD);9 V3 A& [) r3 ~$ b, l
% ---------- Calculate SNR ----------------------------
. O) e) M0 H: |( I8 Lfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
9 T4 Q8 s4 x. i; Z- O& z! Mfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);% g) q  E: Z5 Y
span=max(round(fft_no/200),5);* w" \, D. t& r9 k+ I$ \; H3 |
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));+ F( x' j6 b1 D  c& ~
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;; `8 c8 U7 `+ v; y' @! O# ~3 X5 g
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;( J2 ?3 z8 \4 {. V: k
SNR=10*log10(P_sig/P_noise);5 j2 v+ Q( G8 A& i4 U3 o
SNDR=10*log10(P_sig/P_noise_hd);
3 _$ `! B( t! w: Y
fprintf('SNR = %g dB\n',SNR);
/ D7 Q$ v1 _4 M% @  y( F6 wfprintf('SNDR = %g dB\n',SNDR);
& h5 i3 M/ ~, ?5 P ( ]9 M' c, K/ |, P# }' c
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
4 W+ p/ X+ _+ V/ X( N5 j# z??? Error using ==> times' a: _; M. V( b# j/ s" f
Matrix dimensions must agree.

6 K: D. m$ X, j0 c( b' a" o4 t 9 o1 E7 v" L0 a5 ]
Error in ==> sndrtest at 21  ?3 Z. v6 g: `
yb=kb.*x(ptsttfi);
( q5 E2 Q6 b+ u3 U' q
2 D' p/ ~& {3 g
因x函數是我自行定義的,可否幫我看看要如何修改?
: w4 o$ R( q7 A( S& t: G3 G" w2 R另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
& d* ^) `. b; c) z5 v( C除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。" z5 M' I7 j7 G! j9 |+ R
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
" A- v4 L2 y! A( o4 |以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
$ v& Z* ~0 F; |" V& n. b那就是你設ptst和ptfi是同一個值是不對的
. Q  o/ n  ^+ }9 y4 ~/ y4 E; gptst是計算fft開始的值/ O- o+ h7 ^& s$ U
而ptfi則是計算fft的range,如8~519,total則為512點) ]8 |; Y! M% g, h+ K
故而你在執行MATLAB程式時就會出現錯誤# v& P9 y; K# B* r
! A' L$ p7 V2 E0 F0 R% t! T; u% k! _* H
我看了一下你的MATLAB程式,基本上沒有多大問題8 x) R% l( b: |3 ^5 O$ R% e( s- D
不過,要小心計算THD的值和範圍! F' [( ?9 B3 |( s  |
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤( c1 s- X* h) L: s, A

# x5 g" p  \+ ~4 t/ d1 y! d2 i( e最後,計算noise有好幾種定義方式) N# C2 ^* q/ w0 N* u) K
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
9 G* `5 A5 O& b我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
& M, i8 I) K. F因為目前在計算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筆資料,還是說我這樣的寫法不對?
9 Q) L" [0 s6 Z, ?7 C- c: ^" {因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。
" |% M' {- k4 F3 |我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
" k9 w3 F& T' P2 @" S7 ^( j% q5 h謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了& z# f  m/ u2 F5 ~6 g
我列出我當初寫ptst和ptfi的式子關係式, W% Z  A5 d) c: w$ s) p
ptst=2^3;          % calculated fft of start point# z/ f" u9 ~4 v7 i0 I. L, W! i3 I4 I7 s
pts=2^9;           % calculated fft of end point7 T# E% B4 O0 A( [
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point
  |) t, D9 i; R0 V/ P+ r  ?! A因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
5 r9 x/ L9 Z; d* ]' S如此一來才能夠取到足夠運算fft的值
9 \$ `4 i# C8 i. h5 s0 B. j6 |1 ]3 h% A
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
; S3 o1 N6 n# H; N如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤% k; |' q, O( N/ ^

( f; K' v0 c& n# ~如果對於要設的參數仍有問題1 K5 j5 q1 ]; u) K7 M. ]
我可以把我最原始的程式寄給你參考) v6 K0 `2 O9 g0 G) c$ }9 A  ^
- X2 s) n6 f7 T8 ~8 Y7 g4 I
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:! A3 Z- Q8 N# h- J
??? Error using ==> times9 o- f. @2 e% Q2 e4 f9 D$ ?( m$ J
Matrix dimensions must agree.% A* R$ B2 @1 y1 ^  W4 k
% O# @; n6 ^+ `! p) M6 }
Error in ==> sndrtest at 26
6 U( \+ o- d/ {) |9 Wyb=kb.*x(ptst:ptfi);
' A+ z& Z/ m% t. V' P那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
  l' U4 m: W$ i5 I0 y2 d+ u7 W  p∼感激不盡∼& @" S1 ^0 g7 @( G: V
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?, Q9 W3 [7 f- B- s
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
# h/ f) I) H, y( w如果要在HSPICE模擬ADC的INL及DNL的流程及作法??& B4 y# Y9 S6 K  G8 e$ \- |8 I
因為沒有MATLAB請問HPICE可以直接做嗎??
5 i$ b% O& |- _$ n* j
" V$ I6 q/ [- W+ s$ i請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
% P/ U$ B3 |; P: R: R7 l7 x& j9 N+ E至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
. k/ W& [/ \7 N9 s* S( d* T但,在業界,個人的建議是,還是要跑HSPICE會比較保險( ^) Z7 ^: n' A( `
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算3 g1 Q7 l* _" b" h, U2 R; y" v
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易& A8 |3 N* ]# p* x
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
$ ~$ _* ^9 {% L! a; k: _                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-4-24 01:53 PM , Processed in 0.137008 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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