annotate userProgramsASRforDummies/Exp_Tutorial_2.m @ 38:c2204b18f4a2 tip

End nov big change
author Ray Meddis <rmeddis@essex.ac.uk>
date Mon, 28 Nov 2011 13:34:28 +0000
parents
children
rev   line source
rmeddis@38 1 function Exp_Tutorial_2(isMasterNode)
rmeddis@38 2
rmeddis@38 3 % This tutorial recycles a HMM
rmeddis@38 4
rmeddis@38 5 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 6 % Set up the basic experiment parameters
rmeddis@38 7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 8 expName = 'Tutorial';
rmeddis@38 9 dataFolderPrefix = 'recycle_featR';
rmeddis@38 10 if isunix
rmeddis@38 11 expFolderPrefix = '/scratch/nrclark/exps/';
rmeddis@38 12 else
rmeddis@38 13 expFolderPrefix = 'D:\Exps';
rmeddis@38 14 end
rmeddis@38 15
rmeddis@38 16 % expFolderPrefix = pwd;
rmeddis@38 17 expFolder = fullfile(expFolderPrefix,expName);
rmeddis@38 18 hmmFolder = fullfile(expFolder,'hmm');
rmeddis@38 19
rmeddis@38 20 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 21 % Sort out the training (LEARNING) condition
rmeddis@38 22 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 23 learnFolder = fullfile(expFolder,'featL');
rmeddis@38 24
rmeddis@38 25 xL = cJob('L', learnFolder);
rmeddis@38 26
rmeddis@38 27 xL.participant = 'Normal';
rmeddis@38 28 xL.MAPparamChanges= {'DRNLParams.rateToAttenuationFactorProb=0;', 'OMEParams.rateToAttenuationFactorProb=0;' };
rmeddis@38 29
rmeddis@38 30 xL.noiseLevToUse = -200;
rmeddis@38 31 xL.speechLevToUse = 60;
rmeddis@38 32
rmeddis@38 33 xL.MAPopHSR = 1;
rmeddis@38 34 xL.MAPopMSR = 0;
rmeddis@38 35 xL.MAPopLSR = 0;
rmeddis@38 36
rmeddis@38 37
rmeddis@38 38 xL.numCoeff = 14;
rmeddis@38 39 xL.removeEnergyStatic = 0;
rmeddis@38 40
rmeddis@38 41 %%%%% Group of params that will influence simulation run time %%%%%%%
rmeddis@38 42 xL.numWavs = 12; %MAX=8440
rmeddis@38 43 testWavs = 6; %MAX = 358
rmeddis@38 44 nzLevel = [-200 40:10:70];
rmeddis@38 45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 46
rmeddis@38 47 xL.noisePreDur = 1;
rmeddis@38 48 xL.noisePostDur = 0.1;
rmeddis@38 49 xL.truncateDur = xL.noisePreDur-0.1;
rmeddis@38 50 xL.noiseName = 'pink_demo';
rmeddis@38 51
rmeddis@38 52
rmeddis@38 53 % if isMasterNode && ~isdir(xL.opFolder)
rmeddis@38 54 % mkdir(xL.opFolder);
rmeddis@38 55 % xL = xL.assignFiles;
rmeddis@38 56 % xL.storeSelf;
rmeddis@38 57 % end
rmeddis@38 58
rmeddis@38 59 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 60 % Sort out the testing (RECOGNITION) conditions
rmeddis@38 61 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 62 recConditions = numel(nzLevel);
rmeddis@38 63
rmeddis@38 64 tmpIdx=0;
rmeddis@38 65 for nn = 0*recConditions+1:1*recConditions
rmeddis@38 66 tmpIdx=tmpIdx+1;
rmeddis@38 67 xR{nn} = xL; %simply copy the "Learn" object and change it a bit below
rmeddis@38 68 recFolder = fullfile(expFolder,[dataFolderPrefix num2str(nn)]);
rmeddis@38 69 xR{nn}.opFolder = recFolder;
rmeddis@38 70
rmeddis@38 71 %These are the interesting differences between training and testing
rmeddis@38 72 xR{nn}.numWavs = testWavs; %MAX = 358
rmeddis@38 73 xR{nn}.noiseLevToUse = nzLevel(tmpIdx);
rmeddis@38 74 xR{nn}.MAPparamChanges= {'DRNLParams.a=400;'};
rmeddis@38 75
rmeddis@38 76
rmeddis@38 77 %Now just to wrap it up ready for processing
rmeddis@38 78 if isMasterNode && ~isdir(xR{nn}.opFolder)
rmeddis@38 79 mkdir(xR{nn}.opFolder);
rmeddis@38 80 xR{nn} = xR{nn}.assignWavPaths('R');
rmeddis@38 81 xR{nn} = xR{nn}.assignFiles;
rmeddis@38 82 xR{nn}.storeSelf;
rmeddis@38 83 end
rmeddis@38 84 end
rmeddis@38 85
rmeddis@38 86 tmpIdx=0;
rmeddis@38 87 for nn = 1*recConditions+1:2*recConditions
rmeddis@38 88 tmpIdx=tmpIdx+1;
rmeddis@38 89 xR{nn} = xL; %simply copy the "Learn" object and change it a bit below
rmeddis@38 90 recFolder = fullfile(expFolder,[dataFolderPrefix num2str(nn)]);
rmeddis@38 91 xR{nn}.opFolder = recFolder;
rmeddis@38 92
rmeddis@38 93 %These are the interesting differences between training and testing
rmeddis@38 94 xR{nn}.numWavs = testWavs; %MAX = 358
rmeddis@38 95 xR{nn}.noiseLevToUse = nzLevel(tmpIdx);
rmeddis@38 96 xR{nn}.MAPparamChanges= {'DRNLParams.a=400;'};
rmeddis@38 97
rmeddis@38 98 xR{nn}.mainGain = [27.2013; 26.0797; 26.0939; 26.7997; 26.0520];
rmeddis@38 99 xR{nn}.TCdBO = [37; 37; 37; 37; 37]; %Compression thresholds (in dB OUTPUT from 2nd filt)
rmeddis@38 100 xR{nn}.TMdBO = [20; 20; 20; 20; 20]; %MOC thresholds (in dB OUTPUT from 2nd filt)
rmeddis@38 101 xR{nn}.ARthresholddB = 85; % dB SPL (input signal level) =>200 to disable
rmeddis@38 102 xR{nn}.MOCtau = 1;
rmeddis@38 103 xR{nn}.useAid = 1;
rmeddis@38 104
rmeddis@38 105 %Now just to wrap it up ready for processing
rmeddis@38 106 if isMasterNode && ~isdir(xR{nn}.opFolder)
rmeddis@38 107 mkdir(xR{nn}.opFolder);
rmeddis@38 108 xR{nn} = xR{nn}.assignWavPaths('R');
rmeddis@38 109 xR{nn} = xR{nn}.assignFiles;
rmeddis@38 110 xR{nn}.storeSelf;
rmeddis@38 111 end
rmeddis@38 112 end
rmeddis@38 113
rmeddis@38 114
rmeddis@38 115
rmeddis@38 116 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 117 % ** Generate features **
rmeddis@38 118 % This is the time consuming, processing intensive portion of the program.
rmeddis@38 119 % Nodes that are not the master node are only interested in the opFolder
rmeddis@38 120 % member of the jobjects.
rmeddis@38 121 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 122 % worker(xL.opFolder);
rmeddis@38 123 maxConds = nn;
rmeddis@38 124 if ~isMasterNode %dont bother wasting master node effort on generating testing features (for now)
rmeddis@38 125 for nn = 1:maxConds
rmeddis@38 126 worker(xR{nn}.opFolder);
rmeddis@38 127 end
rmeddis@38 128 end
rmeddis@38 129
rmeddis@38 130 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 131 % Train and test the recogniser - a job for the master node only
rmeddis@38 132 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 133 if isMasterNode
rmeddis@38 134 % while(~all(xL.todoStatus==2))
rmeddis@38 135 % disp('Waiting on straggler nodes to complete their jobs before HMM is trained . . .')
rmeddis@38 136 % pause(30); %Wait for 30 seconds before looking again
rmeddis@38 137 % xL.lockJobList;
rmeddis@38 138 % xL = xL.loadSelf; %Reload incase changed
rmeddis@38 139 % xL.unlockJobList;
rmeddis@38 140 % end
rmeddis@38 141 y = cHMM(hmmFolder);
rmeddis@38 142 y.numCoeff = 14*3;
rmeddis@38 143 % y.createSCP(xL.opFolder)
rmeddis@38 144 % y.createMLF(xL.opFolder)
rmeddis@38 145 % y.train(xL.opFolder) %This node can be busy training, even if other jobs are being processed for testing
rmeddis@38 146
rmeddis@38 147 % ALLOW MASTER NODE TO MUCK IN WITH GENERATING TESTING FEATURES ONCE
rmeddis@38 148 % HMM HAS BEEN TRAINED
rmeddis@38 149 for nn = 1:maxConds
rmeddis@38 150 worker(xR{nn}.opFolder);
rmeddis@38 151 end
rmeddis@38 152
rmeddis@38 153 xR{end}.lockJobList;
rmeddis@38 154 xR{end} = xR{end}.loadSelf; %Reload changes
rmeddis@38 155 xR{end}.unlockJobList;
rmeddis@38 156 while(~all(xR{end}.todoStatus==2))
rmeddis@38 157 disp('Waiting on straggler nodes to complete their jobs before HMM is tested . . .')
rmeddis@38 158 pause(30); %Wait for 30 seconds before looking again
rmeddis@38 159 xR{end}.lockJobList;
rmeddis@38 160 xR{end} = xR{end}.loadSelf; %Reload incase changed
rmeddis@38 161 xR{end}.unlockJobList;
rmeddis@38 162 end
rmeddis@38 163
rmeddis@38 164 for nn = 1:maxConds
rmeddis@38 165 y.createSCP(xR{nn}.opFolder);
rmeddis@38 166 y.test(xR{nn}.opFolder);
rmeddis@38 167 end
rmeddis@38 168
rmeddis@38 169 %Show all of the scores in the command window at the end
rmeddis@38 170 for nn = 1:maxConds
rmeddis@38 171 y.score(xR{nn}.opFolder);
rmeddis@38 172 end
rmeddis@38 173 end