Mercurial > hg > map
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/userProgramsASRforDummies/Exp_Tutorial_2.m Mon Nov 28 13:34:28 2011 +0000 @@ -0,0 +1,173 @@ +function Exp_Tutorial_2(isMasterNode) + +% This tutorial recycles a HMM + +%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Set up the basic experiment parameters +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +expName = 'Tutorial'; +dataFolderPrefix = 'recycle_featR'; +if isunix + expFolderPrefix = '/scratch/nrclark/exps/'; +else + expFolderPrefix = 'D:\Exps'; +end + +% expFolderPrefix = pwd; +expFolder = fullfile(expFolderPrefix,expName); +hmmFolder = fullfile(expFolder,'hmm'); + +%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Sort out the training (LEARNING) condition +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +learnFolder = fullfile(expFolder,'featL'); + +xL = cJob('L', learnFolder); + +xL.participant = 'Normal'; +xL.MAPparamChanges= {'DRNLParams.rateToAttenuationFactorProb=0;', 'OMEParams.rateToAttenuationFactorProb=0;' }; + +xL.noiseLevToUse = -200; +xL.speechLevToUse = 60; + +xL.MAPopHSR = 1; +xL.MAPopMSR = 0; +xL.MAPopLSR = 0; + + +xL.numCoeff = 14; +xL.removeEnergyStatic = 0; + +%%%%% Group of params that will influence simulation run time %%%%%%% +xL.numWavs = 12; %MAX=8440 +testWavs = 6; %MAX = 358 +nzLevel = [-200 40:10:70]; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +xL.noisePreDur = 1; +xL.noisePostDur = 0.1; +xL.truncateDur = xL.noisePreDur-0.1; +xL.noiseName = 'pink_demo'; + + +% if isMasterNode && ~isdir(xL.opFolder) +% mkdir(xL.opFolder); +% xL = xL.assignFiles; +% xL.storeSelf; +% end + +%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Sort out the testing (RECOGNITION) conditions +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +recConditions = numel(nzLevel); + +tmpIdx=0; +for nn = 0*recConditions+1:1*recConditions + tmpIdx=tmpIdx+1; + xR{nn} = xL; %simply copy the "Learn" object and change it a bit below + recFolder = fullfile(expFolder,[dataFolderPrefix num2str(nn)]); + xR{nn}.opFolder = recFolder; + + %These are the interesting differences between training and testing + xR{nn}.numWavs = testWavs; %MAX = 358 + xR{nn}.noiseLevToUse = nzLevel(tmpIdx); + xR{nn}.MAPparamChanges= {'DRNLParams.a=400;'}; + + + %Now just to wrap it up ready for processing + if isMasterNode && ~isdir(xR{nn}.opFolder) + mkdir(xR{nn}.opFolder); + xR{nn} = xR{nn}.assignWavPaths('R'); + xR{nn} = xR{nn}.assignFiles; + xR{nn}.storeSelf; + end +end + +tmpIdx=0; +for nn = 1*recConditions+1:2*recConditions + tmpIdx=tmpIdx+1; + xR{nn} = xL; %simply copy the "Learn" object and change it a bit below + recFolder = fullfile(expFolder,[dataFolderPrefix num2str(nn)]); + xR{nn}.opFolder = recFolder; + + %These are the interesting differences between training and testing + xR{nn}.numWavs = testWavs; %MAX = 358 + xR{nn}.noiseLevToUse = nzLevel(tmpIdx); + xR{nn}.MAPparamChanges= {'DRNLParams.a=400;'}; + + xR{nn}.mainGain = [27.2013; 26.0797; 26.0939; 26.7997; 26.0520]; + xR{nn}.TCdBO = [37; 37; 37; 37; 37]; %Compression thresholds (in dB OUTPUT from 2nd filt) + xR{nn}.TMdBO = [20; 20; 20; 20; 20]; %MOC thresholds (in dB OUTPUT from 2nd filt) + xR{nn}.ARthresholddB = 85; % dB SPL (input signal level) =>200 to disable + xR{nn}.MOCtau = 1; + xR{nn}.useAid = 1; + + %Now just to wrap it up ready for processing + if isMasterNode && ~isdir(xR{nn}.opFolder) + mkdir(xR{nn}.opFolder); + xR{nn} = xR{nn}.assignWavPaths('R'); + xR{nn} = xR{nn}.assignFiles; + xR{nn}.storeSelf; + end +end + + + +%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ** Generate features ** +% This is the time consuming, processing intensive portion of the program. +% Nodes that are not the master node are only interested in the opFolder +% member of the jobjects. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% worker(xL.opFolder); +maxConds = nn; +if ~isMasterNode %dont bother wasting master node effort on generating testing features (for now) + for nn = 1:maxConds + worker(xR{nn}.opFolder); + end +end + +%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Train and test the recogniser - a job for the master node only +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if isMasterNode +% while(~all(xL.todoStatus==2)) +% disp('Waiting on straggler nodes to complete their jobs before HMM is trained . . .') +% pause(30); %Wait for 30 seconds before looking again +% xL.lockJobList; +% xL = xL.loadSelf; %Reload incase changed +% xL.unlockJobList; +% end + y = cHMM(hmmFolder); + y.numCoeff = 14*3; +% y.createSCP(xL.opFolder) +% y.createMLF(xL.opFolder) +% y.train(xL.opFolder) %This node can be busy training, even if other jobs are being processed for testing + + % ALLOW MASTER NODE TO MUCK IN WITH GENERATING TESTING FEATURES ONCE + % HMM HAS BEEN TRAINED + for nn = 1:maxConds + worker(xR{nn}.opFolder); + end + + xR{end}.lockJobList; + xR{end} = xR{end}.loadSelf; %Reload changes + xR{end}.unlockJobList; + while(~all(xR{end}.todoStatus==2)) + disp('Waiting on straggler nodes to complete their jobs before HMM is tested . . .') + pause(30); %Wait for 30 seconds before looking again + xR{end}.lockJobList; + xR{end} = xR{end}.loadSelf; %Reload incase changed + xR{end}.unlockJobList; + end + + for nn = 1:maxConds + y.createSCP(xR{nn}.opFolder); + y.test(xR{nn}.opFolder); + end + + %Show all of the scores in the command window at the end + for nn = 1:maxConds + y.score(xR{nn}.opFolder); + end +end