我可能不会回答这个问题,但我会尽力帮助你进步。
据我所知,Matlab Wavelet Toolbox 仅处理小波操作和系数、增加或减少分辨率级别以及类似操作,但不公开用于从信号和系数进行转换的内部矩阵。
因此,我担心这个问题的答案是否定的。前段时间,我为一些 Hart 类小波做了这个,我实际上是从头开始构建矩阵,然后我比较了使用内置 Matlab 小波工具箱获得的系数,从而确保你的矩阵足够好算法。就我而言,时变模型的递归参数估计。
对于函数ConstructHaarWaveletTransformationMatrix,创建矩阵非常简单,因为 Hart 类可以非常简单地表示为 Kronecker 乘积。我担心的高斯小波案例也应该从头开始......
我建议的步骤是;
尽管 MATLAB 没有明确包含矩阵,但您可以使用 Matlab 内置函数来恢复高斯小波,从而为您的算法组成矩阵。
使用每个高斯小波构建矩阵的每一列,用于您需要的每个分辨率级别(二元尺度)。使用 Matlab Wavelets 工具箱恢复形状。
在此之后,将您获得的系数与工具箱的系数进行比较。这样,您将更正 Matrix 行的顺序。
在数值上,fj是分辨率级别j上Vj(PHI信号空间,缩放函数)上的信号投影,而gj是分辨率级别j上Wj(PSI信号空间,母函数)上的信号投影,我们可以写:
f=fj0+sum_{j0}^{j1-1}{gj}
因此,fj0和gj都会导出两个矩阵,我们称它们为PHIj和PSIj矩阵:
f=PHIj0*cj0+sum_{j0}^{j1-1}{PSIj*dj}
PHIj列包含近似投影(Vj0空间)的缩放和移位缩放小波信号(一个,仅用于 j0),PSIj列包含缩放和移位母小波信号(几个,从j0到j1-1)用于细节投影(到Wj0到Wj1-1空间)。
因此,您需要的矩阵是:
PHI=[PHIj0 PSIj0...PSIj1]
因此,您可以将原始信号表示为:
f=PHI*C
其中C是近似系数和细节系数的向量,用于以下级别:
C=[cj0' dj0'...dj1']'
第一部分,用于解决 PHI 构建可以通过编写来实现:
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 内置函数,为近似和/或细节小波信号提供所需的信号。
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,:);
最后一个矩阵应该包括一些插值程序,以便在每种情况下获得更好的一般结果。
我希望这可以解决您的部分问题......
炒作