如何在匹配追踪算法

时间:2015-06-05 00:25:12

标签: matlab dictionary sparse-matrix

我正在尝试在Matlab中实现Matching Pursuit算法。我发现了最大的内积值,我坚持如何找出系数。 帮帮我。 这是算法

D=[1 6 11 16 21 26 31 36 41 46
   2 7 12 17 22 27 32 37 42 47
   3 8 13 18 23 28 33 38 43 48
   4 9 14 19 24 29 34 39 44 49
   5 10 15 20 25 30 35 40 45 50];
b=[16;17;18;19;20];
n=size(D);
A1=zeros(n);
R=b;
x=[];
H=10;
if(H <= 0)
error('The number of iterations needs to be greater then 0')
end;   
[c,d] = max(abs(D'*R)); 

这里我使用了一个预定义的字典。 提前致谢

1 个答案:

答案 0 :(得分:1)

您可以使用此功能基于&#34; S. Mallat,Z。Zhang,1993。在时间频率字典中匹配追求。 IEEE Transactions Signal Processing,Vol。 41,No。12,pp.3397-3415。&#34;

x = MP(b,D,10);

function S = MP(y,Dictionary,iteration)
n = size(Dictionary,2);
S = zeros(n,1);
% Normalize the dictionary atoms (coloumns) to have unit norm
% It's better to implement this part out of function, 
% to normalize the dictionary just one time!
%************************************** 
for j = 1:n;
    Dictionary(:,j) = Dictionary(:,j)/norm(Dictionary(:,j));
end 
% *************************************

for i = 1:iteration
    gn = Dictionary' * y / norm(y);
    [MAX,index] = max(abs(gn));
    y = y - MAX * Dictionary(:,index);
    S(index) = MAX + S(index);
end