Mercurial > hg > smallbox
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],... |