www.pudn.com > code.zip > OMP.m, change:2014-05-10,size:1425b


function [A]=OMP(D,X,Q);  
%============================================= 
% Sparse coding of a group of signals based on a given  
% dictionary and specified number of atoms to use.  
% input arguments:  
%       D - the dictionary (its columns MUST be normalized). 
%                       字典/测量矩阵(已知)必须要归一化么????? 
%       X - the signals to represent    测量值矩阵(已知) 
%       Q - the max. number of coefficients for each signal. 
% output arguments:     
%       A - sparse coefficient matrix.    稀疏系数矩阵 
%       K-  稀疏度 
%============================================= 
[n,P]=size(X);         % 本算法中,n=9,P=1 
[n,K]=size(D);         % 本算法中,n=9,K=25 
for k=1:1:P, 
    a=[]; 
    x=X(:,k);          % y(:,k)表示取数组y中第k列的所有元素 
    residual=x;        % 残差 
    indx=zeros(Q,1);   % 索引集 
    for j=1:1:Q, 
        proj=D'*residual;   %D转置与residual相乘,得到与residual与D每一列的内积值 
        [maxVal,pos]=max(abs(proj));   %找到内积最大值的位置 
        pos=pos(1);         %若最大值不止一个,取第一个 
        indx(j)=pos;        %将这个位置存入索引集的第j个值 
        a=pinv(D(:,indx(1:j)))*x;    %indx(1:j)表示第一列前j个元素 
        residual=x-D(:,indx(1:j))*a; 
        if sum(residual.^2) < 1e-6 
            break; 
        end 
    end; 
    temp=zeros(K,1); 
    temp(indx(1:j))=a; 
    A(:,k)=sparse(temp);   %只显示非零值及其位置 
end; 
return;