How to get a Daubechies4 discrete wavelet transform MATRIX?

16 ビュー (過去 30 日間)
sn at
sn at 2017 年 3 月 5 日
回答済み: Kristupas Bajarunas 2019 年 6 月 23 日
I need a matrix that when I multiply it with X, gives me the coefficients of X in wavelet domain. It means that this matrix contains wavelet bases so that I can expand my signal with them. And this wavelet should be Daubechies4 ('Daubechies',4).
Coefficients=(Wavelet_Matrix)*X;
X=(Wavelet_Matrix)'*(Coefficients);
---------------------------------------------------------------------
There is a toolbox for this purpose called "Wavelab850". By using this toolbox I should write:
%http://ccm.ucdenver.edu/wiki/How_to_get_started_with_wavelets_and_Wavelab
n=256;
qmf= MakeONFilter('Daubechies',4) ;
XI=eye(n);W=zeros(n);for i=1:n,W(:,i)=FWT_PO(XI(:,i),1,qmf);end
------------------------------------------------------------------
But this Error happens:
Error using reverse (line 35)
First argument must be a string array, character vector, or cell array of character vectors.
Error in aconv (line 31)
fflip = reverse(f);
Error in DownDyadLo (line 14)
d = aconv(qmf,x);
Error in FWT_PO (line 26)
beta = DownDyadLo(beta,qmf) ;
%------------------------------------------------------------
How can I get this matrix?
The matrix should be W*W (W is 256), suppose its name is Psi;
X is a matrix (N*W);
Teta is the coefficients matrix and is (W*N).
------------------------------------------------------------
I want to expand X like X=Psi*Teta.
------------------------------------------------------------
There exists two more toolboxes but I have to use this one and the results of those two are not the same (They give different matrices).
  1 件のコメント
aneesh moideen
aneesh moideen 2019 年 2 月 28 日
編集済み: aneesh moideen 2019 年 2 月 28 日
For 2 years, no answers to this question. can anybody help it out?

サインインしてコメントする。

回答 (1 件)

Kristupas Bajarunas
Kristupas Bajarunas 2019 年 6 月 23 日
function [a,d,matrix]=daub(signal,level)
len=length(signal);
if mod(length(signal),2)
error('Singal must have even length')
end
if mod(level,2)
error('Level must have even length')
end
wMatrix=zeros(len);
zz=dbaux(level/2,sqrt(2));
zz1=zz(end:-1:1);
zz1(2:2:end)=zz1(2:2:end)*-1;
shft=level/2;
for i =1:2:len-level+2
% if
%
%
% end
wMatrix(i,i:i+level-1)=zz
wMatrix(i+1,i:i+level-1)=zz1
end
fart=len-level+3:len;
shift=2;
for j=len-level+3:2:len
wMatrix(j,end-level+1:end)=zz
wMatrix(j,:)=circshift(wMatrix(j,:),shift);
wMatrix(j+1,end-level+1:end)=zz1
wMatrix(j+1,:)=circshift(wMatrix(j+1,:),shift);
shift=shift+2
end
% wMatrix(end-1,end-1:end)=zz(1:2);
% wMatrix(end-1,1:2)=zz(3:4);
% wMatrix(end,end-1:end)=zz1(1:2);
% wMatrix(end,1:2)=zz1(3:4);
matrix=wMatrix
Vec=wMatrix*signal;
a=Vec(1:2:end-1);
d=Vec(2:2:end);
back=wMatrix'*Vec
eror=mean((back-signal).^2)
end

カテゴリ

Help Center および File ExchangeContinuous Wavelet Transforms についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by