赞
踩
OMP算法:
% OMP的函数 % s-测量;T-观测矩阵;N-向量大小 function hat_y=omp_fun(s,T,K) N = size(T,2); Size=size(T); % 观测矩阵大小 M=Size(1); % 测量 hat_y=zeros(1,N); % 待重构的谱域(变换域)向量 Aug_t=[]; % 增量矩阵(初始值为空矩阵) r_n=s; % 残差值 for times=1:K % 迭代次数(稀疏度是测量的1/4) for col=1: N % 恢复矩阵的所有列向量 product(col)=abs(T(:,col)'*r_n); % 恢复矩阵的列向量和残差的投影系数(内积值) end [~, pos]=max(product); % 最大投影系数对应的位置 Aug_t=[Aug_t,T(:,pos)]; % 矩阵扩充 T(:,pos)=zeros(M,1); % 选中的列置零(实质上应该去掉,为了简单我把它置零) aug_y=(Aug_t'*Aug_t)^(-1)*Aug_t'*s; % 最小二乘,使残差最小 r_n=s-Aug_t*aug_y; % 残差 pos_array(times)=pos; % 纪录最大投影系数的位置 if sum(r_n.^2) < 1e-6 % 残差足够小 break; end end hat_y(pos_array)=aug_y; % 重构的向量 end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。