annotate userProgramsASRforDummies/Exp_Tutorial_1.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_1(isMasterNode)
rmeddis@38 2
rmeddis@38 3 % Some description of the experiment goes here
rmeddis@38 4
rmeddis@38 5 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 6 % Set up the basic folders
rmeddis@38 7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 8 expName = 'Tutorial';
rmeddis@38 9 dataFolderPrefix = '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 expFolder = fullfile(expFolderPrefix,expName);
rmeddis@38 17 hmmFolder = fullfile(expFolder,'hmm');
rmeddis@38 18
rmeddis@38 19 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 20 % Sort out the training (LEARNING) condition
rmeddis@38 21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 22 learnFolder = fullfile(expFolder,'featL');
rmeddis@38 23
rmeddis@38 24 xL = cJob('L', learnFolder);
rmeddis@38 25
rmeddis@38 26 xL.participant = 'Normal';
rmeddis@38 27 xL.MAPparamChanges= {'DRNLParams.rateToAttenuationFactorProb=0;', 'OMEParams.rateToAttenuationFactorProb=0;' };
rmeddis@38 28
rmeddis@38 29 xL.noiseLevToUse = -200;
rmeddis@38 30 xL.speechLevToUse = 60;
rmeddis@38 31
rmeddis@38 32 xL.MAPopHSR = 1;
rmeddis@38 33 xL.MAPopMSR = 0;
rmeddis@38 34 xL.MAPopLSR = 0;
rmeddis@38 35
rmeddis@38 36
rmeddis@38 37 xL.numCoeff = 14;
rmeddis@38 38 xL.removeEnergyStatic = 0;
rmeddis@38 39
rmeddis@38 40 %%%%% Group of params that will influence simulation run time %%%%%%%
rmeddis@38 41 xL.numWavs = 12; %MAX=8440
rmeddis@38 42 testWavs = 6; %MAX = 358
rmeddis@38 43 nzLevel = [-200 40:10:70];
rmeddis@38 44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 45
rmeddis@38 46 xL.noisePreDur = 1;
rmeddis@38 47 xL.noisePostDur = 0.1;
rmeddis@38 48 xL.truncateDur = xL.noisePreDur-0.1;
rmeddis@38 49
rmeddis@38 50 xL.noiseName = 'pink_demo';
rmeddis@38 51
rmeddis@38 52 if isMasterNode && ~isdir(xL.opFolder)
rmeddis@38 53 mkdir(xL.opFolder);
rmeddis@38 54 xL = xL.assignFiles;
rmeddis@38 55 xL.storeSelf; % This is a call to a member function and is not a pointless line of code!
rmeddis@38 56 end
rmeddis@38 57
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.rateToAttenuationFactorProb=0;'};
rmeddis@38 75
rmeddis@38 76 %Now just to wrap it up ready for processing
rmeddis@38 77 if isMasterNode && ~isdir(xR{nn}.opFolder)
rmeddis@38 78 mkdir(xR{nn}.opFolder);
rmeddis@38 79 xR{nn} = xR{nn}.assignWavPaths('R');
rmeddis@38 80 xR{nn} = xR{nn}.assignFiles;
rmeddis@38 81 xR{nn}.storeSelf;
rmeddis@38 82 end
rmeddis@38 83 end
rmeddis@38 84
rmeddis@38 85 tmpIdx=0;
rmeddis@38 86 for nn = 1*recConditions+1:2*recConditions
rmeddis@38 87 tmpIdx=tmpIdx+1;
rmeddis@38 88 xR{nn} = xL; %simply copy the "Learn" object and change it a bit below
rmeddis@38 89 recFolder = fullfile(expFolder,[dataFolderPrefix num2str(nn)]);
rmeddis@38 90 xR{nn}.opFolder = recFolder;
rmeddis@38 91
rmeddis@38 92 %These are the interesting differences between training and testing
rmeddis@38 93 xR{nn}.numWavs = testWavs; %MAX = 358
rmeddis@38 94 xR{nn}.noiseLevToUse = nzLevel(tmpIdx);
rmeddis@38 95 xR{nn}.MAPparamChanges= {'DRNLParams.rateToAttenuationFactorProb=-10^(-10/20);'};
rmeddis@38 96
rmeddis@38 97
rmeddis@38 98 %Now just to wrap it up ready for processing
rmeddis@38 99 if isMasterNode && ~isdir(xR{nn}.opFolder)
rmeddis@38 100 mkdir(xR{nn}.opFolder);
rmeddis@38 101 xR{nn} = xR{nn}.assignWavPaths('R');
rmeddis@38 102 xR{nn} = xR{nn}.assignFiles;
rmeddis@38 103 xR{nn}.storeSelf;
rmeddis@38 104 end
rmeddis@38 105 end
rmeddis@38 106
rmeddis@38 107
rmeddis@38 108 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 109 % ** Generate features **
rmeddis@38 110 % This is the time consuming, processing intensive portion of the program.
rmeddis@38 111 % Nodes that are not the master node are only interested in the opFolder
rmeddis@38 112 % member of the jobjects.
rmeddis@38 113 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 114 worker(xL.opFolder);
rmeddis@38 115 maxConds = nn;
rmeddis@38 116 if ~isMasterNode %dont bother wasting master node effort on generating testing features (for now)
rmeddis@38 117 for nn = 1:maxConds
rmeddis@38 118 worker(xR{nn}.opFolder);
rmeddis@38 119 end
rmeddis@38 120 end
rmeddis@38 121
rmeddis@38 122 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 123 % Train and test the recogniser - a job for the master node only
rmeddis@38 124 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@38 125 if isMasterNode
rmeddis@38 126 while(~all(xL.todoStatus==2))
rmeddis@38 127 disp('Waiting on straggler nodes to complete their jobs before HMM is trained . . .')
rmeddis@38 128 pause(30); %Wait for 30 seconds before looking again
rmeddis@38 129 xL.lockJobList;
rmeddis@38 130 xL = xL.loadSelf; %Reload incase changed
rmeddis@38 131 xL.unlockJobList;
rmeddis@38 132 end
rmeddis@38 133 y = cHMM(hmmFolder);
rmeddis@38 134 y.numCoeff = (xL.numCoeff-logical(xL.removeEnergyStatic)) * 3;
rmeddis@38 135 y.createSCP(xL.opFolder)
rmeddis@38 136 y.createMLF(xL.opFolder)
rmeddis@38 137 y.train(xL.opFolder) %This node can be busy training, even if other jobs are being processed for testing
rmeddis@38 138
rmeddis@38 139 % ALLOW MASTER NODE TO MUCK IN WITH GENERATING TESTING FEATURES ONCE
rmeddis@38 140 % HMM HAS BEEN TRAINED
rmeddis@38 141 for nn = 1:maxConds
rmeddis@38 142 worker(xR{nn}.opFolder);
rmeddis@38 143 end
rmeddis@38 144
rmeddis@38 145 xR{end}.lockJobList;
rmeddis@38 146 xR{end} = xR{end}.loadSelf; %Reload changes
rmeddis@38 147 xR{end}.unlockJobList;
rmeddis@38 148 while(~all(xR{end}.todoStatus==2))
rmeddis@38 149 disp('Waiting on straggler nodes to complete their jobs before HMM is tested . . .')
rmeddis@38 150 pause(30); %Wait for 30 seconds before looking again
rmeddis@38 151 xR{end}.lockJobList;
rmeddis@38 152 xR{end} = xR{end}.loadSelf; %Reload incase changed
rmeddis@38 153 xR{end}.unlockJobList;
rmeddis@38 154 end
rmeddis@38 155
rmeddis@38 156 for nn = 1:maxConds
rmeddis@38 157 y.createSCP(xR{nn}.opFolder);
rmeddis@38 158 y.test(xR{nn}.opFolder);
rmeddis@38 159 end
rmeddis@38 160
rmeddis@38 161 %Show all of the scores in the command window at the end
rmeddis@38 162 for nn = 1:maxConds
rmeddis@38 163 y.score(xR{nn}.opFolder);
rmeddis@38 164 end
rmeddis@38 165 end