2013-08-27 37 views
3

我需要創建一個包含高斯小波函數的傅立葉係數的對角矩陣,但我不確定要做什麼。在二進尺度創建高斯小波矩陣

目前我使用這個功能來生成Haar小矩陣

http://www.mathworks.co.uk/matlabcentral/fileexchange/33625-haar-wavelet-transformation-matrix-implementation/content/ConstructHaarWaveletTransformationMatrix.m

和變換服用排在二進尺度(2,4,8,16):

M= 256 
H = ConstructHaarWaveletTransformationMatrix(M); 
fi = conj(dftmtx(M))/M; 
H = fi*H; 
H = H(4,:); 
H = diag(H); 

etc

如何對高斯小波重複此操作?是否有一個內置的Matlab函數可以爲我做到這一點?

僅供參考,我在本文的第4節執行算法:

http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=04218361

+1

鏈接到IEEE紙被打破。你能把這個特定的部分作爲一個數字嗎? – Schorsch

+1

@Schorsch嗨,我已經解決了這個問題,但論文並不是真的有必要回答這個問題。這是'寬帶認知無線電的壓縮感知'智天和Georgios Giannakis。 –

+0

你可以回答你自己的問題,以幫助其他人在類似的情況。 – Schorsch

回答

2

我也許就不會被回答的問題,但我會盡力幫助你前進。

據我所知,Matlab Wavelet Toolbox只處理小波運算和係數,增加或減少分辨率級別,以及類似的操作,但不公開用於從信號和係數進行轉換的內部矩陣。

因此,我擔心這個問題的答案是否定的。前一段時間,我爲某些Hart類小波做了這個工作,我實際上是從零開始構建矩陣,然後我將得到的係數與內置的Matlab小波工具箱進行比較,從而確保您的矩陣足夠滿足您的要求算法。在我的情況下,時變模型的遞歸參數估計。

對於函數ConstructHaarWaveletTransformationMatrix創建矩陣非常簡單,因爲Hart類可以非常簡單地表示爲Kronecker產品。 高斯小波的情況下,我應該從頭開始做...

我建議的步驟是;

  1. 雖然MATLAB不要包括明確地矩陣,可以使用Matlab的內置功能恢復高斯小波,從而組成矩陣爲你的算法。

  2. 對於每個需要的分辨率級別(二進制尺度),使用每個高斯小波構建矩陣的每一列。使用Matlab Wavelets工具箱恢復形狀。

  3. 之後,將您獲得的係數與工具箱的係數進行比較。這樣你將糾正矩陣行的順序。

在數值上,爲FJ信號投射在VJ(所述PHI信號空間,縮放函數)在分辨率級Ĵ,和GJ信號投射在WJPSI信號空間,母函數)在分辨率水平j,我們可以這樣寫:

F = fj0 + sum_ {J0}^{J1-1} {GJ}

因此,兩個fj0GJ將引起兩個矩陣,讓調用它們PHIjPSIJ矩陣:

F = PHIj0 * CJ0 + sum_ {J0}^{J1-1} {PSIJ * DJ}

PHIj列包含縮放和移位縮放小波信號(一個,僅用於J0)爲近似投影(該Vj0空間),並且PSIJ列包含縮放和移位母小波信號(幾個,從J0J1-1)爲細節投影(到Wj0Wj1-1空格)。

因此,需要的矩陣是:

PHI = [PHIj0 PSIj0 ... PSIj1]

因此你可以表達你原始信號爲:

f = PHI * C

其中Ç是近似和細節係數的向量,對於級別:

C = [CJ0' dj0' ...

function PHI=MakePhi(l,str,Jmin,Jmax) 
% [PHI]=MakePhi(l,str,Jmin,Jmax) 
% 
% Build full PHI Wavelet Matrix for obtaining wavelet coefficients 
% (extract) 
%FILTER 
[LO_R,HI_R] = wfilters(str,'r'); 
lf=length(LO_R); 

%PHI BUILD 
PHI=[]; 
laux=l([end-Jmax end-Jmax:end]); 
PHI=[PHI MakeWMatrix('a',str,laux)]; 

for j=Jmax:-1:Jmin 
    laux=l([end-j end-j:end]); 
    PHI=[PHI MakeWMatrix('d',str,laux)]; 
end 

的wfilters是MATLAB內置函數,給人爲近似所需要的信號,並且:DJ1「]」

第一部分,用於尋址PHI構建可通過書面實現或細節小波信號。

的MakeWMatrix功能是:

function M=MakeWMatrix(typestr,str,laux) 
% M=MakeWMatrix(typestr,str,laux) 
% 
% Build Wavelet Matrix for obtaining wavelet coefficients 
% for a single level vector. 
% (extract) 
[LO_R,HI_R] = wfilters(str,'r'); 
if typestr=='a' 
    F_R=LO_R'; 
else 
    F_R=HI_R'; 
end 

la=length(laux); 
lin=laux(2); lout=laux(3); 
M=MakeCMatrix(F_R,lin,lout); 

for i=3:la-1 
    lin=laux(i); lout=laux(i+1); 
    Mi=MakeCMatrix(LO_R',lin,lout); 
    M=Mi*M; 
end 

終於MakeCMatrix是:

function [M]=MakeCMatrix(F_R,lin,lout) 
% Convolucion Matrix 
% (extract) 
lf=length(F_R); 

M=[]; 
for i=1:lin 
    M(:,i)=[zeros(2*(i-1),1) ;F_R ;zeros(2*(lin-i),1)]; 
end 

M=[zeros(1,lin); M ;zeros(1,lin)]; 

[ltot,lin]=size(M); 

lmin=floor((ltot-lout)/2)+1; 
lmax=floor((ltot-lout)/2)+lout; 

M=M(lmin:lmax,:); 

最後這個矩陣應該包括一些插值程序爲每種情況下具有更好的統計結果。

我希望這個解決你的問題的一部分.....

羥脯氨酸