Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
/ [' j; H/ d- N+ X# n0 U$ x# Q所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
* R, \9 ~/ Y: b, b$ _# w* A6 s4 |
3 z2 I* D$ p4 S/ `+ u+ D+ d至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
+ B- L8 B2 k/ V& Q8 [. K) K而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
! O' [. H2 S8 j! o3 H8 M
* a  p7 Z) z4 ?1 V3 @至於另外個問題,我的回答是,對的: m/ b8 n  `$ C* C. B8 ]
但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下
+ f' v/ M; f- o' `$ w( o/ j緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣/ W1 o( \( V8 ]4 J" g$ U4 Y
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了5 f, h+ C2 x& {- l: W8 v
至少我模擬起來也是這樣
$ b' y/ e8 A; F9 t2 }) U9 a' g而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC( r$ o) q* q3 r/ ^# ]. P
所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。5 l& {3 ?6 {" v' b
說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。7 l8 @$ m  h3 p8 }7 J. |; ?
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。
  ~9 ~, Q; ?" E/ J在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。/ l  i" s8 o" t1 O
此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
* B, H# l1 b5 L* r9 S/ d( h∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:- J* k2 A; E' g
我依照你提供的程式,修改成我的規格後,程式修改如下:1 E- ^2 U3 v2 w  B7 _2 B
% --------------The number of FFT -------------9 t- ~* q# Z2 u
fin=5;% *KHz
1 }: ~, J- u, H9 Wfs=5120; % *KHz
3 T& c3 Y2 P6 j: lcycle=1; % cycle = 2^N ; N = 0~5 " z# a5 P, h1 r* U# A+ p6 P4 U
M=round(cycle*fs/fin);
# W1 W5 p! M5 G$ D0 H% |  \% --------------Load the binary code -------------* _0 }. O* v. n  ?
load sdm_out.txt -ascii
+ h- ^8 l- z. W( d1 ?start = 1;# j* L6 h  n; O+ |  k
step  = 1;
% I' U% v- |7 I%ADC
# z: i3 O* O& m; v; Ux=sdm_out(start:step:M);
5 N/ C  g' \- l  i4 B% m5 V) G8 g$ i
% --------------Using minimum 4-term Blackman-harris Windows -------------
; R3 E( J  w7 A. u: D. U0 Zptst = 1;  d8 V  h) K6 L+ u# Z
ptfi = M;
! V; x- C$ F3 b1 L0 }/ f9 epts = M;
" ?; W  y- e) |1 n
nb=1:1ts;" j1 y/ C# P  V, e8 z- l3 D) R$ Z
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
% B* r$ y% U* E9 n' mwin_gain=sum(kb)/pts;
0 N  P0 ^; @  Y/ v9 C5 qkb=kb/win_gain;% Y6 E3 d+ F# |0 C- u) [! ?
% --------------- Calculated fft --------------------------
6 @" c2 {0 E1 ^% x. nyb=kb.*x(ptsttfi);
( t: d& ]$ T  F, w$ d) k
yk=fft(yb);+ i, _1 b. k) N2 M$ Q" f
fft_no=length(yk);
8 u7 S: {* ^  [8 _/ xf=fs*(0:fft_no-1)/fft_no;
8 E$ \8 N# H! r& {9 N8 u& |: XPyy=yk.*conj(yk)/((fft_no/2)^2);
* P9 e) M4 K( |" v1 V; L% ---------- Calculate THD ----------------------------6 h" k$ |! F: z, r
j=1;
. }! }8 O3 b" l; L& Pfor i=1:1fft_no/2)
6 j( ]/ g7 @* A$ j# j" R* f4 a/ b    if (f(i) == (fi*j))  
3 L" o- s+ y0 A" ^$ S        HD(j)=Pyy(i);     %% find all harmonic distortion components- |+ N7 T9 n; A. J" u& A1 V
        j=j+1;% I, c5 X! d- f# d* H) v5 d- M- f; x
    end
2 O  O- @( Y% w) `4 Wend
6 E) J* w3 i% c( A' u3 K) ?0 b8 uP_hd=sum(HD(2:9));
# @; p1 [# f! s- ?  E" W! HTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
: _4 M- r% a- O8 @) i) ]fprintf('THD = %g dB\n',THD);$ L; b; U9 i, ?
% ---------- Calculate SNR ----------------------------6 W4 J+ [$ ]$ _& F( `4 X
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
2 i& @4 I! m; E* i0 Tfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
* b: H4 R  V$ _, ^! @/ dspan=max(round(fft_no/200),5);. A8 m; T$ d6 A% x
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));% |7 K! l' A" T' A! m6 z6 b* ~: V! w
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;$ u* t' B+ m! e0 g
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
( k+ z0 k1 K+ _
SNR=10*log10(P_sig/P_noise);
/ s/ \2 W* K9 r. @0 _7 q+ ZSNDR=10*log10(P_sig/P_noise_hd);7 A( U1 i. D% U' F/ K% c
fprintf('SNR = %g dB\n',SNR);: V6 Q$ O2 P9 o/ z( j
fprintf('SNDR = %g dB\n',SNDR);1 V# M# b/ }+ M2 u
/ e6 x7 u0 A5 H- P
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:$ ^& K; g+ U1 P
??? Error using ==> times
1 |5 w- o  ?  F  [) E8 F. YMatrix dimensions must agree.
: e, d8 q, I6 R- G, ?

! Z4 I6 m5 ~4 J$ R  CError in ==> sndrtest at 216 j! V8 [7 ^) T/ [
yb=kb.*x(ptsttfi);

2 K0 ^8 i7 V( v9 c# B  }! `
' H/ g9 j2 ]9 U7 e2 N因x函數是我自行定義的,可否幫我看看要如何修改?9 Q# x4 U1 n0 ]0 I' ^
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
6 F3 g# _- Y1 b除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
' ], |* v% N9 i. e7 D附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
, E4 M6 g  A4 l7 x+ w& @7 C+ D% |以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題# y+ F' y- C5 S( h
那就是你設ptst和ptfi是同一個值是不對的
+ B' V% j/ H# j$ iptst是計算fft開始的值
8 Y& U& A" D0 s0 e3 z而ptfi則是計算fft的range,如8~519,total則為512點6 `* F5 Y- {( b) h
故而你在執行MATLAB程式時就會出現錯誤
4 J; t# |# c9 n, r, Q, J! W3 O* E* c0 q/ p( u
我看了一下你的MATLAB程式,基本上沒有多大問題
$ C* i4 H  r& O' S& [3 t; w  D不過,要小心計算THD的值和範圍$ q2 P2 y' o5 I0 ~' U! P* R' D
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤; ^9 _0 a$ n# A" i" F

6 `' T% ?1 u$ w6 c8 k最後,計算noise有好幾種定義方式
" `% D& N: a. s. i( s原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
5 C+ @/ M9 Q* m我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
" I% R' ?2 D; [3 s$ W因為目前在計算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筆資料,還是說我這樣的寫法不對?- u9 h( o. V1 ^. e6 ^
因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。" t* t- q/ o1 M8 _" }
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?% c, T/ d0 p% ]
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了$ W# Z, D( q% y+ T. V
我列出我當初寫ptst和ptfi的式子關係式1 s  y' w9 p, P) x, Q
ptst=2^3;          % calculated fft of start point- u" G2 i$ n5 U2 _  [
pts=2^9;           % calculated fft of end point
. |; _1 p- V  N6 Mptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point# l1 i9 s* p$ x8 [/ V
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值; A7 }$ k# G. B$ e/ l' [$ z& m
如此一來才能夠取到足夠運算fft的值
8 d& S7 ^! [1 I1 L7 Z/ r2 d
/ [4 R4 h& ?* c' @- C" ~. r( e) p另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
/ o1 w* P. m$ ?; P) ]9 H$ R2 Z如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤% E6 f* z$ Q2 Q6 n  d" q4 g7 @: X! Q
$ ~7 |! T' h5 B/ \6 J4 j/ x
如果對於要設的參數仍有問題
0 D( A/ [& D1 U; g1 l! B. s) m, N我可以把我最原始的程式寄給你參考% d/ |: _) t' c1 z  S' f

% K) N/ h6 g. G; b6 p  k[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
! f4 g- J  n6 O: @; W8 x2 k??? Error using ==> times
# B& K' y# Q- b& T. {% W( \Matrix dimensions must agree.
% \7 r2 J" t" S) E9 p
4 K. {; G: y# d3 e+ T# AError in ==> sndrtest at 26
  |& ]3 x4 P- Cyb=kb.*x(ptst:ptfi);4 G3 Y8 I  W8 j1 @
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
  P2 s+ X7 r8 u7 |∼感激不盡∼
* S$ y6 t  Q4 S6 C. s% {9 Hps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
. y' C1 o8 l+ I; M/ }特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下; ?( _; u1 Z8 |  h* F4 x1 w2 @
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??  k" M* m% w0 n, W
因為沒有MATLAB請問HPICE可以直接做嗎??( O! `/ D5 q, a% C* \( Y

( }: t' v: ~* `2 V8 r請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體! y" ~6 a% Z! S/ N: c
至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬, ~7 @3 E: Y% e+ W
但,在業界,個人的建議是,還是要跑HSPICE會比較保險. v6 F- \  y6 r7 L+ K
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算+ K2 l  _, Q3 q1 \
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
. f& X1 _/ [" m/ p. P# P2 s/ H而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
6 A* Y' E8 X. c% I- V" ^( n# w4 |                請各位了解的高手幫忙,謝謝.
33#
 樓主| 發表於 2008-4-24 16:16:29 | 只看該作者

回復 32# 的帖子

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

本版積分規則

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

GMT+8, 2024-9-25 02:09 AM , Processed in 0.197012 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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