【问题标题】:Creating a matrix of Gaussian Wavelets at dyadic scales在二元尺度上创建高斯小波矩阵
【发布时间】:2013-08-27 09:33:06
【问题描述】:

我需要创建一个包含高斯小波函数的傅立叶系数的对角矩阵,但我不确定该怎么做。

目前我正在使用这个函数来生成 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);

如何对高斯小波重复此操作?是否有内置的 Matlab 函数可以为我做这件事?

作为参考,我正在实现本文第 4 节中的算法:

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

【问题讨论】:

  • IEEE 论文的链接已损坏。你能把那个特定的部分作为一个数字包括进来吗?
  • @Schorsch 嗨,我已经解决了这个特殊的问题,但是这篇论文并不是真正需要回答这个问题。这是“宽带认知无线电的压缩感知”Zhi Tian 和 Georgios Giannakis。
  • 您可以回答自己的问题以帮助处于类似情况的其他人。

标签: matlab matrix


【解决方案1】:

我可能不会回答这个问题,但我会尽力帮助你进步。

据我所知,Matlab Wavelet Toolbox 仅处理小波操作和系数、增加或减少分辨率级别以及类似操作,但不公开用于从信号和系数进行转换的内部矩阵。

因此我担心这个问题的答案是否定的。前段时间,我对一些 Hart 类小波做了这个,我实际上是从头开始构建矩阵,然后我比较了使用内置 Matlab 小波工具箱获得的系数,从而确保你的矩阵足够好算法。在我的例子中,时变模型的递归参数估计。

对于函数 ConstructHaarWaveletTransformationMatrix,创建矩阵非常简单,因为 Hart 类可以非常简单地表示为 Kronecker 乘积。 我担心的高斯小波案例也应该从头开始......

我建议的步骤是;

  1. 虽然 MATLAB 没有明确包含矩阵,但您可以使用 Matlab 内置函数来恢复高斯小波,从而为您的算法组合矩阵。

  2. 使用每个高斯小波构建矩阵的每一列,用于您需要的每个分辨率级别(二元尺度)。使用 Matlab Wavelets 工具箱恢复形状。

  3. 在此之后,将您获得的系数与工具箱的系数进行比较。这样您将更正矩阵行的顺序。

在数值上,fj 在分辨率级别 j 和 gj 在分辨率级别 j 上的信号投影(PSI 信号空间,母函数) strong>,我们可以这样写:

f=fj0+sum_{j0}^{j1-1}{gj}

因此,fj0gj 都会导出两个矩阵,我们称它们为 PHIjPSIj 矩阵:

f=PHIj0*cj0+sum_{j0}^{j1-1}{PSIj*dj}

PHIj 列包含 近似 投影( >Vj0 空间),PSIj 列包含缩放和移位的母小波信号(几个,从 j0j1-1) 用于 detail 投影(到 Wj0Wj1-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,:);

最后一个矩阵应该包含一些插值例程,以便在每种情况下获得更好的一般结果。

我希望这能解决您的部分问题.....

炒作

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 2017-12-12
    • 2019-06-20
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2012-06-27
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多