IHT算子程序
function [a3] =IHT_Opeator(a,s)
%UNTITLED 此处显示有关此函数的摘要
% 此处显示详细说明
%a 向量
%s s项最佳逼近
[a1,index1]=sort(abs(a),'descend');%降序排列
a2=a(index1(1:s));%提取系数最大的s项
index2=index1(index1(1:s));%系数最大的s项对应索引
a3=zeros(length(a),1);%生成与输入向量等长的0向量
a3(index1(1:s))=a2;%生成输入向量的s项最佳逼近
end
IHT函数
function [y2] =IHT(K,k,A,y)
%UNTITLED4 此处显示有关此函数的摘要
% 此处显示详细说明
[row,col]=size(A);
y1=zeros(col,1);%0向量作为初始迭代向量
for i=1:k
y1=y1+A'*(y-A*y1);
y2=IHT_Opeator(y1,K);
y1=y2;
end
end
主程序
clear;
clc;
N=1024*0.5;%待观测目标信号长度
K=10*1;%目标信号稀疏度
k=100;%迭代次数
M=120*1;%观测值个数
M1=0.28*K*log(N/K);
A=randn(M,N);%生成M*N的服从高斯分布的测量矩阵
A=orth(A')';%把测量矩阵按行正交化
c=ones(N,1);%生成全1向量
c1=zeros(N,1);%生成全0向量
delta=0;
gama=0;
s=1:K;
x=zeros(N,1);
q=randperm(N);%随机打乱排序
t=1:N;
x(q(1:K))=s;
x(q(1:K))=sign(randn(K,1));%生成幅值为1K个非0元素的目标信号y
b=A*x;
y2=IHT(K,k,A,b);
plot(t,x,'r',t,y2,'g *');
legend('red 代表原始信号','green 代表IHT恢复的信号');
测试结果
[1]Blumensath T , Davies M E . Iterative Hard Thresholding for Compressed Sensing[J]. 2008.