To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

The primary repository for this project is hosted at git://github.com/rmeddis/MAP.git .
This repository is a read-only copy which is updated automatically every hour.

Statistics Download as Zip
| Branch: | Revision:

root / userProgramsASRforDummies / Exp_Tutorial_1.m @ 38:c2204b18f4a2

History | View | Annotate | Download (5.42 KB)

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