comparison DL/two-step DL/SMALL_two_step_DL.m @ 169:290cca7d3469 danieleb

Added dictionary decorrelation functions and test script for ICASSP paper.
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Thu, 29 Sep 2011 09:46:52 +0100
parents 8324c7ea6602
children 68fb71aa5339
comparison
equal deleted inserted replaced
168:ff866a412be5 169:290cca7d3469
28 end 28 end
29 29
30 30
31 % initialize the dictionary % 31 % initialize the dictionary %
32 32
33 if (isfield(DL.param,'initdict')) 33 if (isfield(DL.param,'initdict')) && ~isempty(DL.param.initdict);
34 if (any(size(DL.param.initdict)==1) && all(iswhole(DL.param.initdict(:)))) 34 if (any(size(DL.param.initdict)==1) && all(iswhole(DL.param.initdict(:))))
35 dico = sig(:,DL.param.initdict(1:dictsize)); 35 dico = sig(:,DL.param.initdict(1:dictsize));
36 else 36 else
37 if (size(DL.param.initdict,1)~=size(sig,1) || size(DL.param.initdict,2)<dictsize) 37 if (size(DL.param.initdict,1)~=size(sig,1) || size(DL.param.initdict,2)<dictsize)
38 error('Invalid initial dictionary'); 38 error('Invalid initial dictionary');
106 solver.profile = 0; 106 solver.profile = 0;
107 107
108 % main loop % 108 % main loop %
109 109
110 for i = 1:iternum 110 for i = 1:iternum
111 disp([num2str(i) '/' num2str(iternum)]); 111 %disp([num2str(i) '/' num2str(iternum)]);
112 Problem.A = dico; 112 Problem.A = dico;
113 solver = SMALL_solve(Problem, solver); 113 solver = SMALL_solve(Problem, solver);
114 [dico, solver.solution] = dico_update(dico, sig, solver.solution, ... 114 [dico, solver.solution] = dico_update(dico, sig, solver.solution, ...
115 typeUpdate, flow, learningRate); 115 typeUpdate, flow, learningRate);
116 dico = normcols(dico); 116 dico = normcols(dico);
117 switch DL.param.decFcn 117 switch DL.param.decFcn
118 case 'mailhe' 118 case 'mailhe'
119 dico = dico_decorr_symetric(dico, mu, solver.solution); 119 dico = dico_decorr_symetric(dico, mu, solver.solution);
120 case 'tropp' 120 case 'tropp'
121 [n m] = size(dico); 121 [n m] = size(dico);
122 dico = grassmannian(n,m,[],[],[],dico,true); 122 dico = grassmannian(n,m,[],[],[],dico);
123 case 'barchiesi'
124 [n m] = size(dico);
125 params.nIter = 100;
126 dico = iterativeprojections(n,m,[],[],[],dico);
127 [~, ~, W] = rotatematrix(Problem.b,dico*solver.solution,'conjgradlie',params);
128 dico = W*dico;
123 otherwise 129 otherwise
124 end 130 end
125 131
126 if ((show_dictionary)&&(mod(i,show_iter)==0)) 132 if ((show_dictionary)&&(mod(i,show_iter)==0))
127 dictimg = SMALL_showdict(dico,[8 8],... 133 dictimg = SMALL_showdict(dico,[8 8],...