annotate examples/SMALL_test_coherence.m @ 159:23763c5fbda5 danieleb

Merge
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Wed, 31 Aug 2011 10:43:32 +0100
parents a4d0977d4595
children 8324c7ea6602
rev   line source
danieleb@156 1 clear
danieleb@156 2
danieleb@156 3 %% Parameteres
danieleb@156 4
danieleb@156 5 % Dictionary learning parameters
danieleb@156 6 toolbox = 'TwoStepDL'; %dictionary learning toolbox
danieleb@156 7 dicUpdate = {'ksvd','mailhe'}; %dictionary updates
danieleb@156 8 iterNum = 20; %number of iterations
danieleb@156 9
danieleb@156 10 % Test signal parameters
danieleb@156 11 signal = audio('music03_16kHz.wav'); %audio signal
danieleb@156 12 blockSize = 256; %size of audio frames
danieleb@156 13 dictSize = 512; %number of atoms in the dictionary
danieleb@156 14 overlap = 0.5; %overlap between consecutive frames
danieleb@156 15 sigma = 1e6; %snr of noise (set to be negligible so that the problem becomes approximation rather than denoising)
danieleb@156 16 percActiveAtoms = 5; %percentage of active atoms
danieleb@156 17
danieleb@156 18 % Dependent parameters
danieleb@156 19 nActiveAtoms = fix(blockSize/100*percActiveAtoms); %number of active atoms
danieleb@156 20 epsilon = 1/sigma; %error constraint for sparse representation step (corresponds to noise applied to signals)
danieleb@156 21 minCoherence = sqrt((dictSize-blockSize)/(blockSize*(dictSize-1))); %target coherence (based on coherence lower bound)
danieleb@156 22
danieleb@156 23 % Initial dictionaries
danieleb@156 24 dctDict = dictionary('dct',blockSize,dictSize);
danieleb@156 25 dctDict = dctDict.phi;
danieleb@156 26 gaborParam = struct('N',blockSize,'redundancyFactor',2,'wd',@rectwin);
danieleb@156 27 gaborDict = Gabor_Dictionary(gaborParam);
danieleb@156 28
danieleb@156 29 %% Generate audio denoising problem with low noise (audio representation)
danieleb@156 30 SMALL.Problem = generateAudioDenoiseProblem(signal.s,[],blockSize,...
danieleb@156 31 dictSize,overlap,sigma); % generate representation problem
danieleb@156 32 SMALL.Problem.b1 = SMALL.Problem.b; % copy signals from training set b to test set b1 (needed for later functions)
danieleb@156 33
danieleb@156 34 % omp2 sparse representation solver
danieleb@156 35 ompParam = struct('X',SMALL.Problem.b,'epsilon',epsilon,'maxatoms',nActiveAtoms); %parameters
danieleb@156 36 solver = SMALL_init_solver('ompbox','omp2',ompParam,false); %solver structure
danieleb@156 37
danieleb@156 38
danieleb@156 39 %% Test ksvd dictionary update
danieleb@156 40 name = dicUpdate{1}; %use ksvd update
danieleb@156 41 SMALL.DL(1:9) = SMALL_init_DL(toolbox,name); %create dictionary learning structures
danieleb@156 42
danieleb@156 43 % learn with random initialisation and no decorrelation
danieleb@156 44 SMALL.DL(1).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 45 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 46 'decFcn','none'); %parameters for the dictionary learning
danieleb@156 47 SMALL.DL(1) = SMALL_learn(SMALL.Problem,SMALL.DL(1)); %learn dictionary
danieleb@156 48
danieleb@156 49 % learn with random initialisation and mailhe decorrelation
danieleb@156 50 SMALL.DL(2).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 51 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 52 'decFcn','mailhe','coherence',minCoherence); %parameters for the dictionary learning
danieleb@156 53 SMALL.DL(2) = SMALL_learn(SMALL.Problem,SMALL.DL(2)); %learn dictionary
danieleb@156 54
danieleb@156 55 % learn with random initialisation and tropp decorrelation
danieleb@156 56 SMALL.DL(3).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 57 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 58 'decFcn','tropp','coherence',minCoherence); %parameters for the dictionary learning
danieleb@156 59 SMALL.DL(3) = SMALL_learn(SMALL.Problem,SMALL.DL(3)); %learn dictionary
danieleb@156 60
danieleb@156 61 % Learn with dct initialisation and no decorrelation
danieleb@156 62 SMALL.DL(4).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 63 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 64 'decFcn','none','initdict',dctDict); %parameters for the dictionary learning
danieleb@156 65 SMALL.DL(4) = SMALL_learn(SMALL.Problem,SMALL.DL(4)); %learn dictionary
danieleb@156 66
danieleb@156 67 % learn with dct initialisation and mailhe decorrelation
danieleb@156 68 SMALL.DL(5).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 69 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 70 'decFcn','mailhe','coherence',minCoherence,'initdict',dctDict); %parameters for the dictionary learning
danieleb@156 71 SMALL.DL(5) = SMALL_learn(SMALL.Problem,SMALL.DL(5)); %learn dictionary
danieleb@156 72
danieleb@156 73 % learn with dct initialisation and tropp decorrelation
danieleb@156 74 SMALL.DL(6).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 75 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 76 'decFcn','tropp','coherence',minCoherence,'initdict',dctDict); %parameters for the dictionary learning
danieleb@156 77 SMALL.DL(6) = SMALL_learn(SMALL.Problem,SMALL.DL(6)); %learn dictionary
danieleb@156 78
danieleb@156 79 % Learn with gabor initialisation and no decorrelation
danieleb@156 80 SMALL.DL(7).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 81 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 82 'decFcn','none','initdict',gaborDict); %parameters for the dictionary learning
danieleb@156 83 SMALL.DL(7) = SMALL_learn(SMALL.Problem,SMALL.DL(7)); %learn dictionary
danieleb@156 84
danieleb@156 85 % learn with gabor initialisation and mailhe decorrelation
danieleb@156 86 SMALL.DL(8).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 87 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 88 'decFcn','mailhe','coherence',minCoherence,'initdict',gaborDict); %parameters for the dictionary learning
danieleb@156 89 SMALL.DL(8) = SMALL_learn(SMALL.Problem,SMALL.DL(8)); %learn dictionary
danieleb@156 90
danieleb@156 91 % learn with gabor initialisation and tropp decorrelation
danieleb@156 92 SMALL.DL(9).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 93 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 94 'decFcn','tropp','coherence',minCoherence,'initdict',gaborDict); %parameters for the dictionary learning
danieleb@156 95 SMALL.DL(9) = SMALL_learn(SMALL.Problem,SMALL.DL(9)); %learn dictionary
danieleb@156 96
danieleb@156 97 %% Test mailhe dictionary update
danieleb@156 98 name = dicUpdate{2}; %use mailhe update
danieleb@156 99 SMALL.DL(10:18) = SMALL_init_DL(toolbox,name); %create dictionary learning structure
danieleb@156 100
danieleb@156 101 % learn with random initialisation and no decorrelation
danieleb@156 102 SMALL.DL(10).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 103 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 104 'decFcn','none'); %parameters for the dictionary learning
danieleb@156 105 SMALL.DL(10) = SMALL_learn(SMALL.Problem,SMALL.DL(10)); %learn dictionary
danieleb@156 106
danieleb@156 107 % learn with random initialisation and mailhe decorrelation
danieleb@156 108 SMALL.DL(11).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 109 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 110 'decFcn','mailhe','coherence',minCoherence); %parameters for the dictionary learning
danieleb@156 111 SMALL.DL(11) = SMALL_learn(SMALL.Problem,SMALL.DL(11)); %learn dictionary
danieleb@156 112
danieleb@156 113 % learn with random initialisation and tropp decorrelation
danieleb@156 114 SMALL.DL(12).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 115 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 116 'decFcn','tropp','coherence',minCoherence); %parameters for the dictionary learning
danieleb@156 117 SMALL.DL(12) = SMALL_learn(SMALL.Problem,SMALL.DL(12)); %learn dictionary
danieleb@156 118
danieleb@156 119 % Learn with dct initialisation and no decorrelation
danieleb@156 120 SMALL.DL(13).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 121 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 122 'decFcn','none','initdict',dctDict); %parameters for the dictionary learning
danieleb@156 123 SMALL.DL(13) = SMALL_learn(SMALL.Problem,SMALL.DL(13)); %learn dictionary
danieleb@156 124
danieleb@156 125 % learn with dct initialisation and mailhe decorrelation
danieleb@156 126 SMALL.DL(14).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 127 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 128 'decFcn','mailhe','coherence',minCoherence,'initdict',dctDict); %parameters for the dictionary learning
danieleb@156 129 SMALL.DL(14) = SMALL_learn(SMALL.Problem,SMALL.DL(14)); %learn dictionary
danieleb@156 130
danieleb@156 131 % learn with dct initialisation and tropp decorrelation
danieleb@156 132 SMALL.DL(15).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 133 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 134 'decFcn','tropp','coherence',minCoherence,'initdict',dctDict); %parameters for the dictionary learning
danieleb@156 135 SMALL.DL(15) = SMALL_learn(SMALL.Problem,SMALL.DL(15)); %learn dictionary
danieleb@156 136
danieleb@156 137 % Learn with gabor initialisation and no decorrelation
danieleb@156 138 SMALL.DL(16).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 139 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 140 'decFcn','none','initdict',gaborDict); %parameters for the dictionary learning
danieleb@156 141 SMALL.DL(16) = SMALL_learn(SMALL.Problem,SMALL.DL(16)); %learn dictionary
danieleb@156 142
danieleb@156 143 % learn with gabor initialisation and mailhe decorrelation
danieleb@156 144 SMALL.DL(17).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 145 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 146 'decFcn','mailhe','coherence',minCoherence,'initdict',gaborDict); %parameters for the dictionary learning
danieleb@156 147 SMALL.DL(17) = SMALL_learn(SMALL.Problem,SMALL.DL(17)); %learn dictionary
danieleb@156 148
danieleb@156 149 % learn with gabor initialisation and tropp decorrelation
danieleb@156 150 SMALL.DL(18).param = struct('data',SMALL.Problem.b,'Tdata',nActiveAtoms,...
danieleb@156 151 'dictsize',dictSize,'iternum',iterNum,'memusage','high','solver',solver,...
danieleb@156 152 'decFcn','tropp','coherence',minCoherence,'initdict',gaborDict); %parameters for the dictionary learning
danieleb@156 153 SMALL.DL(18) = SMALL_learn(SMALL.Problem,SMALL.DL(18)); %learn dictionary
danieleb@156 154
danieleb@156 155 %% Evaluate coherence and snr of representation for the various methods
danieleb@156 156 sigNoiseRatio = zeros(18,1);
danieleb@156 157 mu = zeros(18,1);
danieleb@156 158 for i=1:18
danieleb@156 159 SMALL.Problem.A = SMALL.DL(i).D;
danieleb@156 160 tempSolver = SMALL_solve(SMALL.Problem,solver);
danieleb@156 161 sigNoiseRatio(i) = snr(SMALL.Problem.b,SMALL.DL(i).D*tempSolver.solution);
danieleb@156 162 dic(i) = dictionary(SMALL.DL(i).D);
danieleb@156 163 mu(i) = dic(i).coherence;
danieleb@156 164 end
danieleb@156 165
danieleb@156 166 %% Plot results
danieleb@156 167 minMu = sqrt((dictSize-blockSize)/(blockSize*(dictSize-1)));
danieleb@156 168 maxSNR = max(sigNoiseRatio);
danieleb@156 169
danieleb@156 170 figure, subplot(2,2,1)
danieleb@156 171 snrMat = buffer(sigNoiseRatio(1:9),3);
danieleb@156 172 bar(snrMat');
danieleb@156 173 title('SNR - KSVD Update')
danieleb@156 174 xlabel('Initial dictionary')
danieleb@156 175 ylabel('SNR (dB)')
danieleb@156 176 set(gca,'XTickLabel',{'data','dct','gabor'},'YLim',[0 maxSNR+1]);
danieleb@156 177 legend('none','Mailhe','Tropp')
danieleb@156 178 grid on
danieleb@156 179
danieleb@156 180 subplot(2,2,2), grid on
danieleb@156 181 snrMat = buffer(sigNoiseRatio(10:18),3);
danieleb@156 182 bar(snrMat');
danieleb@156 183 title('SNR - Mailhe Update')
danieleb@156 184 xlabel('Initial dictionary')
danieleb@156 185 ylabel('SNR (dB)')
danieleb@156 186 set(gca,'XTickLabel',{'data','dct','gabor'},'YLim',[0 maxSNR+1]);
danieleb@156 187 legend('none','Mailhe','Tropp')
danieleb@156 188 grid on
danieleb@156 189
danieleb@156 190 subplot(2,2,3), hold on, grid on
danieleb@156 191 title('Coherence - KSVD Update')
danieleb@156 192 muMat = buffer(mu(1:9),3);
danieleb@156 193 line([0.5 3.5],[1 1],'Color','r');
danieleb@156 194 bar(muMat');
danieleb@156 195 line([0.5 3.5],[minMu minMu],'Color','k');
danieleb@156 196 set(gca,'XTick',1:3,'XTickLabel',{'data','dct','gabor'},'YLim',[0 1.05])
danieleb@156 197 legend('\mu_{max}','none','Mailhe','Tropp','\mu_{min}')
danieleb@156 198 ylabel('\mu')
danieleb@156 199 xlabel('Initial dictionary')
danieleb@156 200
danieleb@156 201 subplot(2,2,4), hold on, grid on
danieleb@156 202 title('Coherence - Mailhe Update')
danieleb@156 203 muMat = buffer(mu(10:18),3);
danieleb@156 204 line([0.5 3.5],[1 1],'Color','r');
danieleb@156 205 bar(muMat');
danieleb@156 206 line([0.5 3.5],[minMu minMu],'Color','k');
danieleb@156 207 set(gca,'XTick',1:3,'XTickLabel',{'data','dct','gabor'},'YLim',[0 1.05])
danieleb@156 208 legend('\mu_{max}','none','Mailhe','Tropp','\mu_{min}')
danieleb@156 209 ylabel('\mu')
danieleb@156 210 xlabel('Initial dictionary')