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