annotate Code/Descriptors/Matlab/MPEG7/FromWeb/VoiceSauce/func_buildMData.m @ 4:92ca03a8fa99 tip

Update to ICASSP 2013 benchmark
author Dawn Black
date Wed, 13 Feb 2013 11:02:39 +0000
parents
children
rev   line source
Dawn@4 1 function mdata = func_buildMData(matfile, smoothwin)
Dawn@4 2 % mdata = func_buildMData(matfile, smoothwin)
Dawn@4 3 % Input: mat filename
Dawn@4 4 % smoothing window size (0 denotes no smoothing)
Dawn@4 5 % Output: mat data structure
Dawn@4 6 % Notes: Function tries to construct as many parameters as possible based
Dawn@4 7 % on the parameters currently in the mat file. Some parameters will have a
Dawn@4 8 % different variable name to what is originally stored in the mat file:
Dawn@4 9 % e.g. H1 is actually the uncorrected harmonic (H1u), it is stored this way
Dawn@4 10 % for compatability reasons.
Dawn@4 11 %
Dawn@4 12 % Author: Yen-Liang Shue, Speech Processing and Auditory Perception Laboratory, UCLA
Dawn@4 13 % Copyright UCLA SPAPL 2009
Dawn@4 14
Dawn@4 15 mdata = load(matfile);
Dawn@4 16
Dawn@4 17 % these are for compatibility with VS0 matfiles
Dawn@4 18 if (~isfield(mdata, 'HF0algorithm'))
Dawn@4 19 mdata.HF0algorithm = 'F0 (Straight)';
Dawn@4 20 end
Dawn@4 21
Dawn@4 22 if (~isfield(mdata, 'AFMTalgorithm'))
Dawn@4 23 mdata.AFMTalgorithm = 'F1, F2, F3, F4 (Snack)';
Dawn@4 24 end
Dawn@4 25
Dawn@4 26 if (~isfield(mdata, 'Fs'))
Dawn@4 27 mdata.Fs = 16000;
Dawn@4 28 end
Dawn@4 29
Dawn@4 30 % get the right F0
Dawn@4 31 F0 = func_parseF0(mdata, mdata.HF0algorithm);
Dawn@4 32 [F1, F2, F3] = func_parseFMT(mdata, mdata.AFMTalgorithm);
Dawn@4 33
Dawn@4 34 % can't do much without F0 or FMTs
Dawn@4 35 if (isempty(F0) || isempty(F1))
Dawn@4 36 return;
Dawn@4 37 end
Dawn@4 38
Dawn@4 39 % get bandwidth mapping
Dawn@4 40 B1 = func_getBWfromFMT(F1, F0, 'hm');
Dawn@4 41 B2 = func_getBWfromFMT(F2, F0, 'hm');
Dawn@4 42 B3 = func_getBWfromFMT(F3, F0, 'hm');
Dawn@4 43
Dawn@4 44 % Hx
Dawn@4 45 if (isfield(mdata, 'H1'))
Dawn@4 46 mdata.H1u = mdata.H1; % H1 is actually the uncorrected harmonic
Dawn@4 47 mdata.H1c = mdata.H1u - func_correct_iseli_z(F0, F1, B1, mdata.Fs); % correct for F1
Dawn@4 48 mdata.H1c = mdata.H1c - func_correct_iseli_z(F0, F2, B2, mdata.Fs); % correct for F2
Dawn@4 49 if (smoothwin~=0)
Dawn@4 50 mdata.H1u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1u);
Dawn@4 51 mdata.H1c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1c);
Dawn@4 52 end
Dawn@4 53 %mdata = rmfield(mdata, 'H1'); % remove H1 to remove confusion
Dawn@4 54 end
Dawn@4 55
Dawn@4 56 if (isfield(mdata, 'H2'))
Dawn@4 57 mdata.H2u = mdata.H2; % H2 is actually the uncorrected harmonic
Dawn@4 58 mdata.H2c = mdata.H2u - func_correct_iseli_z(2*F0, F1, B1, mdata.Fs);
Dawn@4 59 mdata.H2c = mdata.H2c - func_correct_iseli_z(2*F0, F2, B2, mdata.Fs);
Dawn@4 60 if (smoothwin~=0)
Dawn@4 61 mdata.H2u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H2u);
Dawn@4 62 mdata.H2c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H2c);
Dawn@4 63 end
Dawn@4 64 %mdata = rmfield(mdata, 'H2');
Dawn@4 65 end
Dawn@4 66
Dawn@4 67 if (isfield(mdata, 'H4'))
Dawn@4 68 mdata.H4u = mdata.H4; % H4 is actually the uncorrected harmonic
Dawn@4 69 mdata.H4c = mdata.H4u - func_correct_iseli_z(4*F0, F1, B1, mdata.Fs);
Dawn@4 70 mdata.H4c = mdata.H4c - func_correct_iseli_z(4*F0, F2, B2, mdata.Fs);
Dawn@4 71 if (smoothwin~=0)
Dawn@4 72 mdata.H4u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H4u);
Dawn@4 73 mdata.H4c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H4c);
Dawn@4 74 end
Dawn@4 75 %mdata = rmfield(mdata, 'H4');
Dawn@4 76 end
Dawn@4 77
Dawn@4 78
Dawn@4 79 % Ax
Dawn@4 80 if (isfield(mdata, 'A1'))
Dawn@4 81 mdata.A1u = mdata.A1; % A1 is actually the uncorrected amplitude
Dawn@4 82 mdata.A1c = mdata.A1u - func_correct_iseli_z(F1, F1, B1, mdata.Fs);
Dawn@4 83 mdata.A1c = mdata.A1c - func_correct_iseli_z(F1, F2, B3, mdata.Fs);
Dawn@4 84 if (smoothwin~=0)
Dawn@4 85 mdata.A1u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.A1u);
Dawn@4 86 mdata.A1c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.A1c);
Dawn@4 87 end
Dawn@4 88 %mdata = rmfield(mdata, 'A1');
Dawn@4 89 end
Dawn@4 90
Dawn@4 91 if (isfield(mdata, 'A2'))
Dawn@4 92 mdata.A2u = mdata.A2; % A2 is acutally the uncorrected amplitude
Dawn@4 93 mdata.A2c = mdata.A2u - func_correct_iseli_z(F2, F1, B1, mdata.Fs);
Dawn@4 94 mdata.A2c = mdata.A2c - func_correct_iseli_z(F2, F2, B2, mdata.Fs);
Dawn@4 95 if (smoothwin~=0)
Dawn@4 96 mdata.A2u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.A2u);
Dawn@4 97 mdata.A2c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.A2c);
Dawn@4 98 end
Dawn@4 99 %mdata = rmfield(mdata, 'A2');
Dawn@4 100 end
Dawn@4 101
Dawn@4 102 if (isfield(mdata, 'A3'))
Dawn@4 103 mdata.A3u = mdata.A3; % A3 is actually the uncorrected amplitude
Dawn@4 104 mdata.A3c = mdata.A3u - func_correct_iseli_z(F3, F1, B1, mdata.Fs);
Dawn@4 105 mdata.A3c = mdata.A3c - func_correct_iseli_z(F3, F2, B2, mdata.Fs);
Dawn@4 106 mdata.A3c = mdata.A3c - func_correct_iseli_z(F3, F3, B3, mdata.Fs);
Dawn@4 107 if (smoothwin~=0)
Dawn@4 108 mdata.A3u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.A3u);
Dawn@4 109 mdata.A3c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.A3c);
Dawn@4 110 end
Dawn@4 111 %mdata = rmfield(mdata, 'A3');
Dawn@4 112 end
Dawn@4 113
Dawn@4 114
Dawn@4 115 % the uncorrected combo parameters
Dawn@4 116 if (isfield(mdata, 'H1') && isfield(mdata, 'H2'))
Dawn@4 117 mdata.H1H2u = mdata.H1 - mdata.H2;
Dawn@4 118 if (smoothwin ~= 0)
Dawn@4 119 mdata.H1H2u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1H2u);
Dawn@4 120 end
Dawn@4 121 end
Dawn@4 122
Dawn@4 123 if (isfield(mdata, 'H2') && isfield(mdata, 'H4'))
Dawn@4 124 mdata.H2H4u = mdata.H2 - mdata.H4;
Dawn@4 125 if (smoothwin ~= 0)
Dawn@4 126 mdata.H2H4u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H2H4u);
Dawn@4 127 end
Dawn@4 128 end
Dawn@4 129
Dawn@4 130 if (isfield(mdata, 'H1') && isfield(mdata, 'A1'))
Dawn@4 131 mdata.H1A1u = mdata.H1 - mdata.A1;
Dawn@4 132 if (smoothwin ~= 0)
Dawn@4 133 mdata.H1A1u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1A1u);
Dawn@4 134 end
Dawn@4 135 end
Dawn@4 136
Dawn@4 137 if (isfield(mdata, 'H1') && isfield(mdata, 'A2'))
Dawn@4 138 mdata.H1A2u = mdata.H1 - mdata.A2;
Dawn@4 139 if (smoothwin ~= 0)
Dawn@4 140 mdata.H1A2u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1A2u);
Dawn@4 141 end
Dawn@4 142 end
Dawn@4 143
Dawn@4 144 if (isfield(mdata, 'H1') && isfield(mdata, 'A3'))
Dawn@4 145 mdata.H1A3u = mdata.H1 - mdata.A3;
Dawn@4 146 if (smoothwin ~= 0)
Dawn@4 147 mdata.H1A3u = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1A3u);
Dawn@4 148 end
Dawn@4 149 end
Dawn@4 150
Dawn@4 151 % this section is included for old VS compatibility, previously, the
Dawn@4 152 % corrected versions of HxHx and HxAx were stored as HxHx and HxAx (i.e.
Dawn@4 153 % without the "c"
Dawn@4 154 if (isfield(mdata, 'H1H2'))
Dawn@4 155 mdata.H1H2c = mdata.H1H2;
Dawn@4 156 end
Dawn@4 157
Dawn@4 158 if (isfield(mdata, 'H2H4'))
Dawn@4 159 mdata.H2H4c = mdata.H2H4;
Dawn@4 160 end
Dawn@4 161
Dawn@4 162 if (isfield(mdata, 'H1A1'))
Dawn@4 163 mdata.H1A1c = mdata.H1A1;
Dawn@4 164 end
Dawn@4 165
Dawn@4 166 if (isfield(mdata, 'H1A2'))
Dawn@4 167 mdata.H1A2c = mdata.H1A2;
Dawn@4 168 end
Dawn@4 169
Dawn@4 170 if (isfield(mdata, 'H1A3'))
Dawn@4 171 mdata.H1A3c = mdata.H1A3;
Dawn@4 172 end
Dawn@4 173
Dawn@4 174
Dawn@4 175 % check if the others require smoothing
Dawn@4 176 if (smoothwin ~= 0)
Dawn@4 177 if (isfield(mdata, 'H1H2c'))
Dawn@4 178 mdata.H1H2c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1H2c);
Dawn@4 179 end
Dawn@4 180
Dawn@4 181 if (isfield(mdata, 'H2H4c'))
Dawn@4 182 mdata.H2H4c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H2H4c);
Dawn@4 183 end
Dawn@4 184
Dawn@4 185 if (isfield(mdata, 'H1A1c'))
Dawn@4 186 mdata.H1A1c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1A1c);
Dawn@4 187 end
Dawn@4 188
Dawn@4 189 if (isfield(mdata, 'H1A2c'))
Dawn@4 190 mdata.H1A2c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1A2c);
Dawn@4 191 end
Dawn@4 192
Dawn@4 193 if (isfield(mdata, 'H1A3c'))
Dawn@4 194 mdata.H1A3c = filter(ones(smoothwin,1)/smoothwin, 1, mdata.H1A3c);
Dawn@4 195 end
Dawn@4 196
Dawn@4 197 if (isfield(mdata, 'CPP'))
Dawn@4 198 mdata.CPP = filter(ones(smoothwin,1)/smoothwin, 1, mdata.CPP);
Dawn@4 199 end
Dawn@4 200
Dawn@4 201 if (isfield(mdata, 'HNR05'))
Dawn@4 202 mdata.HNR05 = filter(ones(smoothwin,1)/smoothwin, 1, mdata.HNR05);
Dawn@4 203 end
Dawn@4 204
Dawn@4 205 if (isfield(mdata, 'HNR15'))
Dawn@4 206 mdata.HNR15 = filter(ones(smoothwin,1)/smoothwin, 1, mdata.HNR15);
Dawn@4 207 end
Dawn@4 208
Dawn@4 209 if (isfield(mdata, 'HNR25'))
Dawn@4 210 mdata.HNR25 = filter(ones(smoothwin,1)/smoothwin, 1, mdata.HNR25);
Dawn@4 211 end
Dawn@4 212
Dawn@4 213 if (isfield(mdata, 'HNR35'))
Dawn@4 214 mdata.HNR35 = filter(ones(smoothwin,1)/smoothwin, 1, mdata.HNR35);
Dawn@4 215 end
Dawn@4 216
Dawn@4 217 end