diff 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
line wrap: on
line diff
--- a/DL/two-step DL/SMALL_two_step_DL.m	Tue Sep 20 15:52:33 2011 +0100
+++ b/DL/two-step DL/SMALL_two_step_DL.m	Thu Sep 29 09:46:52 2011 +0100
@@ -30,7 +30,7 @@
 
 % initialize the dictionary %
 
-if (isfield(DL.param,'initdict'))
+if (isfield(DL.param,'initdict')) && ~isempty(DL.param.initdict);
   if (any(size(DL.param.initdict)==1) && all(iswhole(DL.param.initdict(:))))
     dico = sig(:,DL.param.initdict(1:dictsize));
   else
@@ -108,7 +108,7 @@
 % main loop %
 
 for i = 1:iternum
-    disp([num2str(i) '/' num2str(iternum)]);
+    %disp([num2str(i) '/' num2str(iternum)]);
     Problem.A = dico;
     solver = SMALL_solve(Problem, solver);
     [dico, solver.solution] = dico_update(dico, sig, solver.solution, ...
@@ -119,7 +119,13 @@
                 dico = dico_decorr_symetric(dico, mu, solver.solution);
             case 'tropp'
                 [n m] = size(dico);
-                dico = grassmannian(n,m,[],[],[],dico,true);
+                dico = grassmannian(n,m,[],[],[],dico);
+			case 'barchiesi'
+				[n m] = size(dico);
+				params.nIter = 100;
+				dico = iterativeprojections(n,m,[],[],[],dico);
+				[~, ~, W] = rotatematrix(Problem.b,dico*solver.solution,'conjgradlie',params);
+				dico = W*dico;
             otherwise
         end