Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
6 w; H# ]- Z7 B所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失+ v( M3 i6 h1 _  c

1 @+ E$ A# c5 @7 o4 F* X至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了: c: a" x; E0 B+ t
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久/ c0 N; {* L, s! K5 D( E# |# D
1 ]& q# Z7 e" }, V. q4 A" e6 O& M* }
至於另外個問題,我的回答是,對的% {9 P, }6 M# L5 `/ x+ ^; L7 _
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下  A$ Z$ N+ \) |
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣8 z7 U! i7 W! O& o8 a9 B2 a
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了4 ]& M# d  x9 o+ c+ T1 |# H; o
至少我模擬起來也是這樣3 ?/ e. h6 |/ n% M  r$ n/ k, M/ c( F
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
5 L3 \5 r# _0 b所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。& f% i7 v, @. W1 s) o
說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。
, [1 L8 ^) h9 z+ j1 R說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 0 C% j; ~: ]- k/ k# W/ m1 Q3 B
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
7 ?) I7 X0 f8 ^9 y* H$ c, S) E此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
# U3 t! e) P% M$ e+ b* P∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:# @- k3 j/ z% `! D3 }: E
我依照你提供的程式,修改成我的規格後,程式修改如下:) [' y  @, k( l4 J1 J* e
% --------------The number of FFT -------------
- Y* V8 M6 `  mfin=5;% *KHz  |5 v9 @' f% P$ `/ z
fs=5120; % *KHz
! o; E: U* [9 [+ `cycle=1; % cycle = 2^N ; N = 0~5 % b4 b" ~4 @' P5 C9 U
M=round(cycle*fs/fin);
* ^$ H8 a6 h2 d' g) w- D1 A! V2 s6 I# c% --------------Load the binary code -------------$ |+ g. D4 g  F" L; Z2 u2 x+ |' L
load sdm_out.txt -ascii! M/ V  H9 w5 |. D0 L$ ]9 C
start = 1;
$ W( \9 Z" S; K$ ~2 ]& p7 ustep  = 1;9 J  A: d0 `% `! ~+ q
%ADC- `7 R+ @# \8 L1 w
x=sdm_out(start:step:M);
2 k/ C# e& J4 o3 H6 I
% --------------Using minimum 4-term Blackman-harris Windows -------------
  q) ?+ |- k/ U; C. y( ?% Lptst = 1;/ f: C5 r; i: B3 O* W. [$ n+ P& q
ptfi = M;$ d9 x* O- P$ g; q! |3 j
pts = M;
1 g. P6 p: K0 Y, y- l( h# S
nb=1:1ts;
3 S/ {' m% v; N! s& J8 ikb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
0 |/ n8 j8 p  e+ T% l- T9 Cwin_gain=sum(kb)/pts;3 ^5 S- \, T( W; h' }
kb=kb/win_gain;6 H2 ?& {: ]: q( m
% --------------- Calculated fft --------------------------6 n  m' e' d; U
yb=kb.*x(ptsttfi);( _4 f1 G3 K2 ~& B
yk=fft(yb);- K1 ]  k+ g: q7 d
fft_no=length(yk);
8 R; \4 V" `8 L8 C9 C) e3 Mf=fs*(0:fft_no-1)/fft_no;
6 {8 Q8 d! _1 qPyy=yk.*conj(yk)/((fft_no/2)^2);9 {9 I  q- W0 x: n5 P
% ---------- Calculate THD ----------------------------8 t( Y/ U1 [$ R0 d; u8 j. y
j=1;
5 c& i" b0 X6 K+ h- g2 ofor i=1:1fft_no/2)
. h7 L. X! @  C' p& M* |/ M  c    if (f(i) == (fi*j))  
# @; x& D3 Y: J. Z5 L1 |' V- ~        HD(j)=Pyy(i);     %% find all harmonic distortion components
, d( J" K  P6 G7 ]        j=j+1;
6 j! t" }5 B* E3 N9 D    end
4 M0 M; s- i  V1 g% Wend
" K  D; C( j/ l5 aP_hd=sum(HD(2:9));
6 r: E0 l/ k3 H) oTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;- `; S  \2 z/ p2 \4 c. }1 `& T( |. o
fprintf('THD = %g dB\n',THD);& ^8 l5 L1 l4 ^* d! H
% ---------- Calculate SNR ----------------------------
; }- J; E9 W0 }$ b% T# ofundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
" ~/ A- R* c% G0 C. _( t- Pfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
( v! I: t: @2 J6 Jspan=max(round(fft_no/200),5);) |, x0 _1 O* [/ [
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));3 C% y5 w* b8 ?" Y6 n) `; c, U- k) c
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
+ a+ U% v5 A' ]) Z& H! TP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
4 r* J* z0 I  \) V( \5 U- z
SNR=10*log10(P_sig/P_noise);
- I" j# B) }" Y6 N( BSNDR=10*log10(P_sig/P_noise_hd);
6 v: |( l1 j) m! Q. y
fprintf('SNR = %g dB\n',SNR);4 y; k: k, }9 R3 X( K5 S1 P
fprintf('SNDR = %g dB\n',SNDR);( v- p( m7 J% g5 J, T8 @6 q+ ^

0 Z: Q1 ]; C3 T藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:5 c* ^1 u' s$ m( J! x
??? Error using ==> times& m1 ]2 p& C2 J* d6 V
Matrix dimensions must agree.

2 V: S5 Z; K7 r  r
1 I/ B  d; J# [2 c$ j6 s' F' a+ x& QError in ==> sndrtest at 21( B) N6 \4 p. a6 p4 n
yb=kb.*x(ptsttfi);
! Z- c- R" z# B* t
" y# ^/ A$ Z2 P
因x函數是我自行定義的,可否幫我看看要如何修改?' L* W# q9 O( E: p9 }1 p! Z
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?+ [0 ~' L0 L" z8 i) c4 C
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。' M! H  N  v: L. s2 E$ U
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
) G0 {$ w3 K# P* d1 {以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
6 q* `6 {- ^1 E# t; Y" @5 T那就是你設ptst和ptfi是同一個值是不對的: a% y3 W' b) Q. D6 f
ptst是計算fft開始的值
! U  A& n4 n! N7 u% H1 H" R4 I; E而ptfi則是計算fft的range,如8~519,total則為512點0 j  z0 D9 t+ }! R2 i
故而你在執行MATLAB程式時就會出現錯誤
( A5 M) P" ]! N# C+ y
7 f8 p1 D2 Y- I5 `% S我看了一下你的MATLAB程式,基本上沒有多大問題
% `0 ]3 d9 b8 E不過,要小心計算THD的值和範圍
2 W3 r+ y( u* Z9 f1 `" N因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤9 _& ~5 g' |; M4 P2 C! B

% S2 D* t& O7 J3 U3 S最後,計算noise有好幾種定義方式# r9 ~& s) W7 y7 E
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
6 X& }+ z4 K8 u9 y# w我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可% ]: ?+ I* ~' a% ]4 k" N9 I
因為目前在計算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筆資料,還是說我這樣的寫法不對?4 g: @+ ^/ e; K3 Y7 E6 A
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。9 |9 \% a$ F! R, p( T) j
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?; y% P: |: `7 W5 N9 k! z
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了1 a% u8 u8 ^8 _) R; v# M  W
我列出我當初寫ptst和ptfi的式子關係式
+ j! m8 k4 Y( ]ptst=2^3;          % calculated fft of start point1 G- Z. Q* T/ b1 U  [
pts=2^9;           % calculated fft of end point
( I0 R, N9 [4 F: @' x% N8 cptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point- b/ M& t1 S" C' c
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
0 }& I/ W7 W4 N7 q  V" s7 r4 |如此一來才能夠取到足夠運算fft的值
/ a( ~+ a9 c$ S7 s; |( u6 u' n2 I* {
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值4 T7 n' o& z: L! h# l: V
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤& p$ e8 t1 c: i6 C- l; q

4 U" I( @$ ^- E* a/ V, }3 L2 p如果對於要設的參數仍有問題! L5 W7 D9 {+ R8 ^1 |; _
我可以把我最原始的程式寄給你參考
4 Y' X( h4 c6 I' h9 C6 L& q# w0 f; x4 C2 J( G& b5 U
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:, \" K) A0 l2 q' w0 F1 [
??? Error using ==> times2 X" F1 _6 u; s) F' U3 u' O, ?
Matrix dimensions must agree.9 S7 a0 K" g. y7 E4 P1 [; {/ R- M

! s+ a3 _# k+ R% B- _( k: lError in ==> sndrtest at 26
, @7 z7 F& b& k; y7 E8 A+ g9 myb=kb.*x(ptst:ptfi);
1 p. W  m# c& J- r那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
2 T% f5 Z' P" b& @- d" @+ |∼感激不盡∼1 v$ J* f& R5 u+ [5 P. V
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
4 a! w4 N& E% J8 x特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
3 t2 w: h9 I6 ^3 v* ~  n. s如果要在HSPICE模擬ADC的INL及DNL的流程及作法??0 F: ?  p/ i3 v! k; ^* b
因為沒有MATLAB請問HPICE可以直接做嗎??
! V2 q$ I. Y3 o, c ( d) X- h+ \+ ^! S9 O1 ?# A
請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體" D4 ]/ @7 ~- }: p2 b! `) w
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
% F5 X- B/ m+ [/ e# G* j3 b! e8 z但,在業界,個人的建議是,還是要跑HSPICE會比較保險
  x+ o" \  a/ X; n至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算% U6 ]$ H" h+ D  y* S
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
5 m1 E) D# E7 N: t而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?
$ K& u# T) p# e8 c# {9 A還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
# F' L# c, c! Q5 ^5 I請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:
7 L0 K3 p. n5 g" W' F: f- L1 v( z如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。1 J* n% [; ?9 @/ C0 `: P/ l4 n* n, ~6 g
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
8 A3 O% a/ T$ y9 U
. c8 z5 x) z) W6 C4 z[ 本帖最後由 緣緣 於 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的檔案。
  G7 ]( O7 u6 E2.然後開啟matlab軟體。, k9 p# B9 h' y1 ?: Q$ k
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。" g3 O  \- L, y1 h( J/ S
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
8 M$ G3 K$ r7 w. a$ o5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?* u3 g! _$ \+ ~+ l# `1 P/ }0 x

) A8 F# J+ K7 T" J9 o% derror in hs_allocate_sf: unexpected values in block1 header# X" v" E1 B# }& p
??? One or more output arguments not assigned during call to 'loadsig'.
) h- O/ t9 \, K+ y! _# L3 V這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。+ |8 |- W* ^3 P8 k
第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-14 01:53 PM , Processed in 0.132517 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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