Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
21#
發表於 2007-11-14 06:03:39 | 只看該作者
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....
6 u! l$ N* c" r7 v  Z5 U所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失
  q  k) U- ]  t( B# f
- a" j& g6 @0 A- t2 l  M至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了& Z2 e1 i! ^5 h! ]4 j
而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
1 o% @8 C: J$ N% h, t: [, `& {: s" ^& K# D: ~; D- c6 B
至於另外個問題,我的回答是,對的
$ W5 M- Z# W/ H: S; ]  V但,要先把一些參數改成你們自己的規格才行

評分

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

查看全部評分

22#
發表於 2007-11-14 17:04:48 | 只看該作者
我補充一下% b2 o# b, X6 |/ e2 Q
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣
- u, e2 i* u; Qvideo DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
9 Z9 N) E+ r; H8 ?* i& Q8 d% g至少我模擬起來也是這樣  @% b9 A; |! {
而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
4 ~! |1 A: u# p/ K. y所以我想取樣點很多應該是正常的吧

評分

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

查看全部評分

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

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

再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
( e( y2 e, B% h& Q6 o說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。  N. r: w& \5 T2 W
說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。
8 I! D0 R2 ^5 J0 U2 X在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。
0 R  w  Q: U$ \& Y此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
  i1 |2 E; w: O) K9 w∼謝謝!∼
24#
 樓主| 發表於 2007-11-28 21:24:43 | 只看該作者

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

請問finster副版主:
/ p: L5 y8 S- H. R5 ?6 R3 _我依照你提供的程式,修改成我的規格後,程式修改如下:
4 |2 `+ A/ Y- J2 u3 K$ `! |% --------------The number of FFT -------------5 p% N- @( w3 p, a/ S/ k
fin=5;% *KHz! G$ @8 ~$ s0 r: p  n8 l) o
fs=5120; % *KHz
8 n1 L+ _" Q, p4 k2 T8 ^- `; icycle=1; % cycle = 2^N ; N = 0~5
% e7 X7 y, z; o- `* fM=round(cycle*fs/fin);. h6 m/ F; K1 z
% --------------Load the binary code -------------  e  z" M* t: Y* X& ^3 j
load sdm_out.txt -ascii
5 k* U- t( C( q0 }1 Qstart = 1;1 R' S8 L7 O5 G
step  = 1;) f; l; {3 b/ O7 b
%ADC
& ^& ]5 L7 P0 Q0 q* zx=sdm_out(start:step:M);
. P' _0 n* i0 O1 p8 W
% --------------Using minimum 4-term Blackman-harris Windows -------------
- Y: L2 v. _4 ]* Lptst = 1;
# Y& Z  b) U6 hptfi = M;. t# W0 R7 \4 b  u$ n
pts = M;
% ~+ h( h4 H4 f# J8 Q
nb=1:1ts;
: H2 f7 Q5 V( Z5 c4 {kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
8 M+ L& m- v$ j3 M% n& Fwin_gain=sum(kb)/pts;/ S8 W& a2 o7 t) `4 d) n
kb=kb/win_gain;) P+ ]* j+ K* Q
% --------------- Calculated fft --------------------------3 C3 {8 D) ^; e
yb=kb.*x(ptsttfi);
3 h9 p8 k# U8 z1 W% y$ P; y
yk=fft(yb);
0 ]" J6 m) f9 {3 Bfft_no=length(yk);
: I) e. [" N9 b0 h7 @& B5 k( v" Zf=fs*(0:fft_no-1)/fft_no;
% u" A' ]0 y4 a) Z7 UPyy=yk.*conj(yk)/((fft_no/2)^2);' q5 M& R: H8 V# Z* ^8 E3 ~  Q, _% [
% ---------- Calculate THD ----------------------------. P( ?) e/ ^* w- ?4 K
j=1;
( j3 h: X7 r, i- ]for i=1:1fft_no/2)7 [* l# n6 y9 _$ m& N/ T' g! e, J7 @
    if (f(i) == (fi*j))  . @# d$ P* Y) F' [& P; N
        HD(j)=Pyy(i);     %% find all harmonic distortion components
' U) F. D- r. j1 [9 Q5 {        j=j+1;
" n& x6 j' i/ q. P# Q# z6 a' w    end" x# K( M! t  |' S; u
end2 z8 \( u- y/ N- g0 B% }
P_hd=sum(HD(2:9));
; l& C) `( I- z$ a5 B9 j5 {THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;
) u/ B* p0 @- v$ b2 wfprintf('THD = %g dB\n',THD);
2 ]1 w8 h3 h  a+ P* t% ---------- Calculate SNR ----------------------------
5 ?. R. K/ ~& |! ifundamen_dB=max(10*log10(Pyy(1:fft_no/2)));( U) R) |, ~) }+ Q$ Q' ?
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);! l  T" t  L' V% l  p% v: m0 |+ q
span=max(round(fft_no/200),5);( D) f; M1 ?4 g/ X4 v; I/ ^0 H% |
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
- N6 \7 q1 W/ y4 L- g% GP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
) P% [  N; a' vP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;- H8 H. }2 I: Z: j, N
SNR=10*log10(P_sig/P_noise);' K  Z# D! A" g9 V  j
SNDR=10*log10(P_sig/P_noise_hd);% A1 H9 i# l  U  x
fprintf('SNR = %g dB\n',SNR);" l* V3 O9 m: l0 A  [
fprintf('SNDR = %g dB\n',SNDR);' c1 s  V% {9 S# U( C% K+ \4 [

) l* l! b. Y" e藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
- Q1 G; E( Y1 P. H' |! T??? Error using ==> times) y2 p1 ~! l3 l
Matrix dimensions must agree.
: ^% ]- X; x% t+ ^3 O+ q, j# `
5 q8 H3 h# D* P# A& v4 K
Error in ==> sndrtest at 21; w5 d9 x- z7 L% n3 C
yb=kb.*x(ptsttfi);
& P. p) g0 t; \1 V' R
; q1 a7 {  a0 X/ F+ n7 X
因x函數是我自行定義的,可否幫我看看要如何修改?
8 }( e" Q; J( K3 v: t另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?  x0 V& O7 B& T! d6 z
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。
, \, B# G4 T9 v9 B, ^附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。7 J; D& V2 R; ]% J/ ]3 U1 o
以上麻煩finster副版主賜教。

本帖子中包含更多資源

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

x
25#
發表於 2007-11-30 00:54:55 | 只看該作者
我看了一下你的MATLAB程式,發覺到有一個地方有問題
/ a3 M$ L4 K  G3 h那就是你設ptst和ptfi是同一個值是不對的+ X7 j* e/ G% Q# i; m8 \
ptst是計算fft開始的值6 F; T# [4 O# E9 G
而ptfi則是計算fft的range,如8~519,total則為512點, D! r7 {% y! y6 o4 B, F
故而你在執行MATLAB程式時就會出現錯誤0 v8 _: K3 @+ p4 w

+ r- \5 d. T' Q; d$ p- W8 g" X我看了一下你的MATLAB程式,基本上沒有多大問題
* L6 E- w& J4 e" n不過,要小心計算THD的值和範圍3 }" l9 d% B1 B4 u# c. i# v, V
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤
: F! D" s: @! K& J1 o2 P: @# }  M+ F/ ~# v7 j1 n
最後,計算noise有好幾種定義方式! c& B; N! C. Y5 [
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
/ ]) q7 Q# N7 x: j我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
$ t- a4 ^/ m% E4 G$ X; 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筆資料,還是說我這樣的寫法不對?
8 e5 J' J- h3 B% Q; v# `7 P因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。$ d) P3 V# b) Q: W
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?5 M- j- ]3 e8 H" P
謝謝!
27#
發表於 2007-12-2 21:33:33 | 只看該作者
我想,你可能有點誤解了我的意思了
7 D% Y0 Z" x7 X( z3 z我列出我當初寫ptst和ptfi的式子關係式
8 E+ o. i+ v( Tptst=2^3;          % calculated fft of start point  t) t: ?0 M' ~, W: z
pts=2^9;           % calculated fft of end point
) b5 i, Y- F) y! }* P, ^0 R8 U3 dptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point! C9 M% @4 }+ m
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值2 e5 ^, S/ N! d! n2 D. W) w
如此一來才能夠取到足夠運算fft的值3 j+ |6 F: I# W" |$ T- b
) f% D; U! K, H; |
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
) Q6 t7 k! s: v( F  ~) f& ~' {如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤& \0 I- `9 f- [2 f
# H, M  d2 t6 O( a
如果對於要設的參數仍有問題
* x0 F6 B. T+ O! q) {我可以把我最原始的程式寄給你參考
1 A/ p: |4 m+ d% Z; }- b" s$ ?. N% j
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]

評分

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

查看全部評分

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

謝謝finster的指導

謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:& I" o8 ~' k1 l  W# r
??? Error using ==> times
" d, X& r/ V* y; k1 nMatrix dimensions must agree.+ z" b! w) |/ O1 J. f1 a1 @3 l

" M7 i/ J1 s6 {7 WError in ==> sndrtest at 26* E5 o  T2 n* E/ f0 h
yb=kb.*x(ptst:ptfi);, ?# [4 o. U* k* ^+ K0 b
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。9 a( ~$ u. I" m: x; d1 U4 V
∼感激不盡∼1 H" X4 h! F. L. O$ D9 ]( f, w$ Q+ {
ps.我的E-mail address我會以短消息傳給你,謝謝!
29#
發表於 2008-3-23 15:06:25 | 只看該作者
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?
, W8 m" E6 z; D) }$ R6 I特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
30#
發表於 2008-3-24 12:18:21 | 只看該作者
請問一下
/ p! n% m8 c; I' g" H如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
( W/ s& @! W5 W$ v3 _0 O因為沒有MATLAB請問HPICE可以直接做嗎??
/ l) Y" A- o3 L8 g5 |( ]
. m/ w- |6 i* y請各位做過ADC的高手幫忙回覆..
31#
發表於 2008-3-24 13:21:54 | 只看該作者
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
0 [% m" Y( d# W% Z4 z5 X8 k6 w) H, k至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
2 H: f% L: v6 g. Y! ?但,在業界,個人的建議是,還是要跑HSPICE會比較保險
- q' Z# \9 E9 F1 v) q至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算$ l; I% v! u" W1 n" N5 r( |
一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易6 F, k- b8 O3 i) z
而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
32#
發表於 2008-4-23 22:59:14 | 只看該作者

Hspice轉進matlab

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

回復 32# 的帖子

請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?8 M$ v0 f9 R7 i9 Q: R
還是要將hspice模擬出來的數據,然後使用matlab做分析?
34#
發表於 2008-4-28 11:34:36 | 只看該作者
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
35#
發表於 2008-4-28 12:18:21 | 只看該作者
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析3 _' R* S# D3 _4 k# n$ j4 }- W3 P& A! O
請各位高手幫忙,謝謝.
36#
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:# x+ R. O6 r5 E2 Y6 d2 g
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
0 b+ Z" S9 {2 A關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。3 r/ s  |0 Z5 c  A$ E( R. ?

+ h+ w0 u# |8 A  v8 M8 S' ^[ 本帖最後由 緣緣 於 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的檔案。; o; k3 h8 N3 r2 x0 k1 a% k
2.然後開啟matlab軟體。
% b9 s  [6 ]8 q# F" i0 |6 [3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。
7 X$ J( R" g" N% m7 o4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。( W9 r- C# C; ?. {
5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
39#
發表於 2008-4-29 16:17:54 | 只看該作者
請問結構x是什麼意思呢?' E/ Z) p# o9 a& X
7 R7 }2 r, Z7 n# c: B1 V- H
error in hs_allocate_sf: unexpected values in block1 header
! M/ S, f# V2 f( M) B??? One or more output arguments not assigned during call to 'loadsig'.! d4 ]/ ]+ ]6 H: T! O
這是怎樣的錯誤呢?
40#
 樓主| 發表於 2008-4-30 13:42:31 | 只看該作者
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
6 k, E, V8 R$ h1 J第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 08:30 AM , Processed in 0.148019 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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