annotate testPrograms/test_speechInNoise.m @ 35:25d53244d5c8

latest parameters
author Ray Meddis <rmeddis@essex.ac.uk>
date Thu, 15 Sep 2011 13:50:20 +0100
parents
children
rev   line source
rmeddis@35 1 function test_speechInNoise
rmeddis@35 2 % test_MAP1_14 is a general purpose test routine that can be adjusted to
rmeddis@35 3 % test a number of different applications of MAP1_14
rmeddis@35 4 %
rmeddis@35 5 % A range of options are supplied in the early part of the program
rmeddis@35 6 %
rmeddis@35 7 % One use of the function is to create demonstrations; filenames <demoxx>
rmeddis@35 8 % to illustrate particular features
rmeddis@35 9 %
rmeddis@35 10 % #1
rmeddis@35 11 % Identify the file (in 'MAPparamsName') containing the model parameters
rmeddis@35 12 %
rmeddis@35 13 % #2
rmeddis@35 14 % Identify the kind of model required (in 'AN_spikesOrProbability').
rmeddis@35 15 % A full brainstem model (spikes) can be computed or a shorter model
rmeddis@35 16 % (probability) that computes only so far as the auditory nerve
rmeddis@35 17 %
rmeddis@35 18 % #3
rmeddis@35 19 % Choose between a tone signal or file input (in 'signalType')
rmeddis@35 20 %
rmeddis@35 21 % #4
rmeddis@35 22 % Set the signal rms level (in leveldBSPL)
rmeddis@35 23 %
rmeddis@35 24 % #5
rmeddis@35 25 % Identify the channels in terms of their best frequencies in the vector
rmeddis@35 26 % BFlist.
rmeddis@35 27 %
rmeddis@35 28 % Last minute changes to the parameters fetched earlier can be made using
rmeddis@35 29 % the cell array of strings 'paramChanges'.
rmeddis@35 30 % Each string must have the same format as the corresponding line in the
rmeddis@35 31 % file identified in 'MAPparamsName'
rmeddis@35 32 %
rmeddis@35 33 % When the demonstration is satisfactory, freeze it by renaming it <demoxx>
rmeddis@35 34
rmeddis@35 35 dbstop if error
rmeddis@35 36 restorePath=path;
rmeddis@35 37 addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'], ...
rmeddis@35 38 ['..' filesep 'utilities'])
rmeddis@35 39
rmeddis@35 40 %% #1 parameter file name
rmeddis@35 41 MAPparamsName='Normal';
rmeddis@35 42
rmeddis@35 43
rmeddis@35 44 %% #2 probability (fast) or spikes (slow) representation
rmeddis@35 45 AN_spikesOrProbability='spikes';
rmeddis@35 46 % or
rmeddis@35 47 % AN_spikesOrProbability='probability';
rmeddis@35 48
rmeddis@35 49
rmeddis@35 50 %% #3 pure tone, harmonic sequence or speech file input
rmeddis@35 51 % signalType= 'tones';
rmeddis@35 52 % sampleRate= 50000;
rmeddis@35 53 % toneFrequency= 1000; % or a pure tone (Hz8
rmeddis@35 54 % duration=.5; % seconds
rmeddis@35 55 % beginSilence=.2;
rmeddis@35 56 % endSilence=0.5;
rmeddis@35 57
rmeddis@35 58 % F0=210;
rmeddis@35 59 % toneFrequency= F0:F0:8000; % harmonic sequence (Hz)
rmeddis@35 60
rmeddis@35 61 rampDuration=.005; % raised cosine ramp (seconds)
rmeddis@35 62
rmeddis@35 63 % or
rmeddis@35 64 signalType= 'file';
rmeddis@35 65 fileName='twister_44kHz';
rmeddis@35 66 beginSilence=1;
rmeddis@35 67 endSilence=0.5;
rmeddis@35 68
rmeddis@35 69 %% #4 rms level
rmeddis@35 70 % signal details
rmeddis@35 71 leveldBSPL= 60; % dB SPL
rmeddis@35 72
rmeddis@35 73 % leveldBSPLNoise=leveldBSPL;
rmeddis@35 74 leveldBSPLNoise=0;
rmeddis@35 75
rmeddis@35 76 %% #5 number of channels in the model
rmeddis@35 77 % 21-channel model (log spacing)
rmeddis@35 78 numChannels=21;
rmeddis@35 79 lowestBF=300; highestBF= 6000;
rmeddis@35 80 BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
rmeddis@35 81
rmeddis@35 82 % or specify your own channel BFs
rmeddis@35 83 % numChannels=1;
rmeddis@35 84 % BFlist=toneFrequency;
rmeddis@35 85
rmeddis@35 86
rmeddis@35 87 %% #6 change model parameters
rmeddis@35 88 % Parameter changes can be used to change one or more model parameters
rmeddis@35 89 % *after* the MAPparams file has been read
rmeddis@35 90 % This example declares only one fiber type with a calcium clearance time
rmeddis@35 91 % constant of 80e-6 s (HSR fiber) when the probability option is selected.
rmeddis@35 92 % paramChanges={'AN_IHCsynapseParams.ANspeedUpFactor=5;', ...
rmeddis@35 93 % 'IHCpreSynapseParams.tauCa=86e-6;'};
rmeddis@35 94
rmeddis@35 95 % paramChanges={};
rmeddis@35 96
rmeddis@35 97 paramChanges{1}='DRNLParams.MOCtau =.3;';
rmeddis@35 98 paramChanges{2}='IHCpreSynapseParams.tauCa= IHCpreSynapseParams.tauCa(2);';
rmeddis@35 99 paramChanges{3}='DRNLParams.rateToAttenuationFactorProb = 0.05;';
rmeddis@35 100 paramChanges{3}='DRNLParams.rateToAttenuationFactorProb = 0;';
rmeddis@35 101
rmeddis@35 102 % paramChanges={...
rmeddis@35 103 % 'DRNLParams.MOCtau =.055;DRNLParams.rateToAttenuationFactor = 002;'};
rmeddis@35 104 % paramChanges=...
rmeddis@35 105 % {'DRNLParams.MOCtau =.3; DRNLParams.rateToAttenuationFactor=0.0123;'};
rmeddis@35 106
rmeddis@35 107 %% delare 'showMap' options to control graphical output
rmeddis@35 108 showMapOptions.printModelParameters=1; % prints all parameters
rmeddis@35 109 showMapOptions.showModelOutput=1; % plot of all stages
rmeddis@35 110 showMapOptions.printFiringRates=1; % prints stage activity levels
rmeddis@35 111 showMapOptions.showACF=0; % shows SACF (probability only)
rmeddis@35 112 showMapOptions.showEfferent=1; % tracks of AR and MOC
rmeddis@35 113 showMapOptions.surfProbability=0; % 2D plot of HSR response
rmeddis@35 114 showMapOptions.surfSpikes=0; % 2D plot of spikes histogram
rmeddis@35 115 showMapOptions.ICrates=0; % IC rates by CNtauGk
rmeddis@35 116
rmeddis@35 117 % disable certain silly options
rmeddis@35 118 if strcmp(AN_spikesOrProbability, 'spikes')
rmeddis@35 119 % avoid nonsensical options
rmeddis@35 120 showMapOptions.surfProbability=0;
rmeddis@35 121 showMapOptions.showACF=0;
rmeddis@35 122 else
rmeddis@35 123 showMapOptions.surfSpikes=0;
rmeddis@35 124 end
rmeddis@35 125 if strcmp(signalType, 'file')
rmeddis@35 126 % needed for labeling plot
rmeddis@35 127 showMapOptions.fileName=fileName;
rmeddis@35 128 else
rmeddis@35 129 showMapOptions.fileName=[];
rmeddis@35 130 end
rmeddis@35 131
rmeddis@35 132 %% Generate stimuli
rmeddis@35 133
rmeddis@35 134 switch signalType
rmeddis@35 135 case 'tones'
rmeddis@35 136 % inputSignal=createMultiTone(sampleRate, toneFrequency, ...
rmeddis@35 137 % leveldBSPL, duration, rampDuration);
rmeddis@35 138 % Create pure tone stimulus
rmeddis@35 139 dt=1/sampleRate; % seconds
rmeddis@35 140 time=dt: dt: duration;
rmeddis@35 141 inputSignal=sum(sin(2*pi*toneFrequency'*time), 1);
rmeddis@35 142 amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak)
rmeddis@35 143 inputSignal=amp*inputSignal;
rmeddis@35 144
rmeddis@35 145 % apply ramps
rmeddis@35 146 % catch rampTime error
rmeddis@35 147 if rampDuration>0.5*duration, rampDuration=duration/2; end
rmeddis@35 148 rampTime=dt:dt:rampDuration;
rmeddis@35 149 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
rmeddis@35 150 ones(1,length(time)-length(rampTime))];
rmeddis@35 151 inputSignal=inputSignal.*ramp;
rmeddis@35 152 ramp=fliplr(ramp);
rmeddis@35 153 inputSignal=inputSignal.*ramp;
rmeddis@35 154
rmeddis@35 155 % add silences
rmeddis@35 156 intialSilence= zeros(1,round(beginSilence/dt));
rmeddis@35 157 finalSilence= zeros(1,round(endSilence/dt));
rmeddis@35 158 inputSignal= [intialSilence inputSignal finalSilence];
rmeddis@35 159
rmeddis@35 160 case 'file'
rmeddis@35 161 %% file input simple or mixed
rmeddis@35 162 [inputSignal sampleRate]=wavread(fileName);
rmeddis@35 163 dt=1/sampleRate;
rmeddis@35 164 inputSignal=inputSignal(:,1);
rmeddis@35 165 targetRMS=20e-6*10^(leveldBSPL/20);
rmeddis@35 166 rms=(mean(inputSignal.^2))^0.5;
rmeddis@35 167 amp=targetRMS/rms;
rmeddis@35 168 inputSignal=inputSignal*amp;
rmeddis@35 169
rmeddis@35 170 % add silences
rmeddis@35 171 intialSilence= zeros(1,round(beginSilence*sampleRate));
rmeddis@35 172 finalSilence= zeros(1,round(endSilence*sampleRate));
rmeddis@35 173 inputSignal= [intialSilence inputSignal' finalSilence];
rmeddis@35 174
rmeddis@35 175 [inputNoise sampleRateN]=wavread('babble');
rmeddis@35 176 inputNoise=inputNoise(1:length(inputSignal));
rmeddis@35 177 inputNoise=inputNoise(:,1);
rmeddis@35 178 targetRMS=20e-6*10^(leveldBSPLNoise/20);
rmeddis@35 179 rms=(mean(inputNoise.^2))^0.5;
rmeddis@35 180 amp=targetRMS/rms;
rmeddis@35 181 inputNoise=inputNoise*amp;
rmeddis@35 182 inputSignal=inputSignal+inputNoise';
rmeddis@35 183
rmeddis@35 184 end
rmeddis@35 185
rmeddis@35 186
rmeddis@35 187 %% run the model
rmeddis@35 188 tic
rmeddis@35 189
rmeddis@35 190 fprintf('\n')
rmeddis@35 191 disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)])
rmeddis@35 192 disp([num2str(numChannels) ' channel model'])
rmeddis@35 193 disp('Computing ...')
rmeddis@35 194
rmeddis@35 195 MAP1_14(inputSignal, sampleRate, BFlist, ...
rmeddis@35 196 MAPparamsName, AN_spikesOrProbability, paramChanges);
rmeddis@35 197
rmeddis@35 198
rmeddis@35 199 %% the model run is now complete. Now display the results
rmeddis@35 200 UTIL_showMAP(showMapOptions, paramChanges)
rmeddis@35 201 disp(['duration=' num2str(duration)])
rmeddis@35 202 disp(['level=' num2str(leveldBSPL)])
rmeddis@35 203 disp(['noise level=' num2str(leveldBSPLNoise)])
rmeddis@35 204
rmeddis@35 205 disp(['toneFrequency=' num2str(toneFrequency)])
rmeddis@35 206 global DRNLParams
rmeddis@35 207 disp(['attenuation factor =' ...
rmeddis@35 208 num2str(DRNLParams.rateToAttenuationFactor, '%5.3f') ])
rmeddis@35 209 disp(['attenuation factor (probability)=' ...
rmeddis@35 210 num2str(DRNLParams.rateToAttenuationFactorProb, '%5.3f') ])
rmeddis@35 211 disp(AN_spikesOrProbability)
rmeddis@35 212 disp(paramChanges)
rmeddis@35 213 toc
rmeddis@35 214 path(restorePath)
rmeddis@35 215