求用MP算法分解重建图像的matlab代码

求用MP算法分解重建图像的matlab代码,第1张

这里是一维信号的重建:

%基于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即是所求


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11392663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存