%基于MP算法
clcclear
%观测向量y的长度M=80,即采样率M/N=0.3
N=256
K=15%信号稀疏度为15
M=80%
x = zeros(N,1)
q = randperm(N)
x(q(1:K)) =randn(K,1) %原始信号
%构造高斯测量矩阵,用以随机采样
Phi = randn(M,N)*sqrt(1/M)
for i = 1:N
Phi(:,i) = Phi(:,i)/norm(Phi(:,i))
end
y=Phi*x %获得线性测量
%用MP算法开始迭代重构
m=2*K %总的迭代次数
r_n=y % 残差值初始值
x_find=zeros(N,1) %x_find为MP算法恢复的信号
for times=1:m
for col=1:N
neiji(col)=Phi(:,col)'*r_n %计算当前残差和感知矩阵每一列的内积
end
[val,pos]=max(abs(neiji)) %找出内积中绝对值最大的元素和它的对应的感知矩阵的列pos
x_find(pos)=x_find(pos)+neiji(pos) %计算新的近似x_find
r_n=r_n-neiji(pos)*Phi(:,pos) %更新残差
end
subplot(3,1,1)plot(x)title('target')
subplot(3,1,2)plot(x_find)title('reconstruct')
subplot(3,1,3)plot(r_n)title('残差')
将重构次数重复500次就行ii=0
for ij=1:500
%% 3.用MP算法重构信号
iterations=2*K % 算法迭代次数(m>=K)
。。。。。。。。。
。。。。。。。。。
r_n=r_n-innerpro(pos)*Phi(:,pos) %更新残差
end
s1=norm(x_rec-x)/norm(x) % 重构误差
ii=ii+s1
end
avg=ii/500
avg即是所求
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)