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
|