前言
压缩感知的第一步是进行信号的稀疏表示,那么寻找稀疏基就显得尤为重要,在此篇博客将介绍经常使用的稀疏基及其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
程序作者为沙威,香港大学电气电子工程学系,wsha@eee.hku.hk
4、0-1随机稀疏基(根据稀疏特性觉得也合理)
%%使用rand函数产生0-1区间的数
function A=get01(N)
B=rand(N,N); %将产生N行N列随机数矩阵
A=round(B); %将产生的矩阵四舍五入,即可得到非 0 即 1 的矩阵
end
总结
以上就是要展示的稀疏基的内容及代码,如果大家还有其他常用的稀疏基,欢迎大家在下面评论分享~