压缩感知之常用稀疏基及matlab代码

文章目录

  • 前言
  • 一、稀疏基是什么?
  • 二、一些常用的稀疏基
    • 1、DFT(离散傅里叶)稀疏基
    • 2、DCT(离散余弦)稀疏基
    • 3、DWT(小波)稀疏基
    • 4、0-1随机稀疏基(根据稀疏特性觉得也合理)
  • 总结


前言

  压缩感知的第一步是进行信号的稀疏表示,那么寻找稀疏基就显得尤为重要,在此篇博客将介绍经常使用的稀疏基及其matlab代码。


一、稀疏基是什么?

  稀疏基是将可以信号进行稀疏表示的一个矩阵。设一维离散信号 x x x,长度为 N N N,可看作为 N N N维空间 N × 1 N \times1 N×1 的列向量,若此列向量中含有 K K K个不为0元素,且 K < < N K < < N K<<N,则称该信号 x x x K K K-稀疏信号,具有稀疏性。
  如果信号稀疏,则信号 x x x可以表示为: x = Ψ s x=\varPsi s x=Ψs其中, Ψ \varPsi Ψ就是稀疏基(稀疏矩阵)。

二、一些常用的稀疏基

1、DFT(离散傅里叶)稀疏基

%%matlab自带函数
dftmtx(N)/sqrt(N)%%和上面的等同
fft(eye(N))/sqrt(N);

2、DCT(离散余弦)稀疏基

%% matlab 自带函数
dctmtx(N);

%% 展开写为:
[cc,rr] = meshgrid(0:n-1);
c = sqrt(2 / n) * cos(pi * (2*cc + 1) .* rr / (2 * n));
c(1,:) = c(1,:) / sqrt(2);

3、DWT(小波)稀疏基

function ww=DWT(N)

[h,g]= wfilters('sym8','d');       %  分解低通和高通滤波器  

% N=256;                           %  矩阵维数(大小为2的整数幂次)
L=length(h);                       %  滤波器长度
rank_max=log2(N);                  %  最大层数
rank_min=double(int8(log2(L)))+1;  %  最小层数
ww=1;   %  预处理矩阵

%  矩阵构造
for jj=rank_min:rank_max
    
    nn=2^jj;
    
    %  构造向量
    p1_0=sparse([h,zeros(1,nn-L)]);
    p2_0=sparse([g,zeros(1,nn-L)]);
    
    %  向量圆周移位
    for ii=1:nn/2
        p1(ii,:)=circshift(p1_0',2*(ii-1))';
        p2(ii,:)=circshift(p2_0',2*(ii-1))';
    end
    
    %  构造正交矩阵
    w1=[p1;p2];
    mm=2^rank_max-length(w1);
    w=sparse([w1,zeros(length(w1),mm);zeros(mm,length(w1)),eye(mm,mm)]);
    ww=ww*w;
    
    clear p1;clear p2;
end

程序作者为沙威,香港大学电气电子工程学系,[email protected]

4、0-1随机稀疏基(根据稀疏特性觉得也合理)

%%使用rand函数产生0-1区间的数
function A=get01(N)

B=rand(N,N);    %将产生N行N列随机数矩阵
A=round(B);     %将产生的矩阵四舍五入,即可得到非 01 的矩阵

end

总结

  以上就是要展示的稀疏基的内容及代码,如果大家还有其他常用的稀疏基,欢迎大家在下面评论分享~

你可能感兴趣的:(压缩感知,网络,算法,matlab)