rmeddis@35: function test_speechInNoise rmeddis@35: % test_MAP1_14 is a general purpose test routine that can be adjusted to rmeddis@35: % test a number of different applications of MAP1_14 rmeddis@35: % rmeddis@35: % A range of options are supplied in the early part of the program rmeddis@35: % rmeddis@35: % One use of the function is to create demonstrations; filenames rmeddis@35: % to illustrate particular features rmeddis@35: % rmeddis@35: % #1 rmeddis@35: % Identify the file (in 'MAPparamsName') containing the model parameters rmeddis@35: % rmeddis@35: % #2 rmeddis@35: % Identify the kind of model required (in 'AN_spikesOrProbability'). rmeddis@35: % A full brainstem model (spikes) can be computed or a shorter model rmeddis@35: % (probability) that computes only so far as the auditory nerve rmeddis@35: % rmeddis@35: % #3 rmeddis@35: % Choose between a tone signal or file input (in 'signalType') rmeddis@35: % rmeddis@35: % #4 rmeddis@35: % Set the signal rms level (in leveldBSPL) rmeddis@35: % rmeddis@35: % #5 rmeddis@35: % Identify the channels in terms of their best frequencies in the vector rmeddis@35: % BFlist. rmeddis@35: % rmeddis@35: % Last minute changes to the parameters fetched earlier can be made using rmeddis@35: % the cell array of strings 'paramChanges'. rmeddis@35: % Each string must have the same format as the corresponding line in the rmeddis@35: % file identified in 'MAPparamsName' rmeddis@35: % rmeddis@35: % When the demonstration is satisfactory, freeze it by renaming it rmeddis@35: rmeddis@35: dbstop if error rmeddis@35: restorePath=path; rmeddis@35: addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'], ... rmeddis@35: ['..' filesep 'utilities']) rmeddis@35: rmeddis@35: %% #1 parameter file name rmeddis@35: MAPparamsName='Normal'; rmeddis@35: rmeddis@35: rmeddis@35: %% #2 probability (fast) or spikes (slow) representation rmeddis@35: AN_spikesOrProbability='spikes'; rmeddis@35: % or rmeddis@35: % AN_spikesOrProbability='probability'; rmeddis@35: rmeddis@35: rmeddis@35: %% #3 pure tone, harmonic sequence or speech file input rmeddis@35: % signalType= 'tones'; rmeddis@35: % sampleRate= 50000; rmeddis@35: % toneFrequency= 1000; % or a pure tone (Hz8 rmeddis@35: % duration=.5; % seconds rmeddis@35: % beginSilence=.2; rmeddis@35: % endSilence=0.5; rmeddis@35: rmeddis@35: % F0=210; rmeddis@35: % toneFrequency= F0:F0:8000; % harmonic sequence (Hz) rmeddis@35: rmeddis@35: rampDuration=.005; % raised cosine ramp (seconds) rmeddis@35: rmeddis@35: % or rmeddis@35: signalType= 'file'; rmeddis@35: fileName='twister_44kHz'; rmeddis@35: beginSilence=1; rmeddis@35: endSilence=0.5; rmeddis@35: rmeddis@35: %% #4 rms level rmeddis@35: % signal details rmeddis@35: leveldBSPL= 60; % dB SPL rmeddis@35: rmeddis@35: % leveldBSPLNoise=leveldBSPL; rmeddis@35: leveldBSPLNoise=0; rmeddis@35: rmeddis@35: %% #5 number of channels in the model rmeddis@35: % 21-channel model (log spacing) rmeddis@35: numChannels=21; rmeddis@35: lowestBF=300; highestBF= 6000; rmeddis@35: BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels)); rmeddis@35: rmeddis@35: % or specify your own channel BFs rmeddis@35: % numChannels=1; rmeddis@35: % BFlist=toneFrequency; rmeddis@35: rmeddis@35: rmeddis@35: %% #6 change model parameters rmeddis@35: % Parameter changes can be used to change one or more model parameters rmeddis@35: % *after* the MAPparams file has been read rmeddis@35: % This example declares only one fiber type with a calcium clearance time rmeddis@35: % constant of 80e-6 s (HSR fiber) when the probability option is selected. rmeddis@35: % paramChanges={'AN_IHCsynapseParams.ANspeedUpFactor=5;', ... rmeddis@35: % 'IHCpreSynapseParams.tauCa=86e-6;'}; rmeddis@35: rmeddis@35: % paramChanges={}; rmeddis@35: rmeddis@35: paramChanges{1}='DRNLParams.MOCtau =.3;'; rmeddis@35: paramChanges{2}='IHCpreSynapseParams.tauCa= IHCpreSynapseParams.tauCa(2);'; rmeddis@35: paramChanges{3}='DRNLParams.rateToAttenuationFactorProb = 0.05;'; rmeddis@35: paramChanges{3}='DRNLParams.rateToAttenuationFactorProb = 0;'; rmeddis@35: rmeddis@35: % paramChanges={... rmeddis@35: % 'DRNLParams.MOCtau =.055;DRNLParams.rateToAttenuationFactor = 002;'}; rmeddis@35: % paramChanges=... rmeddis@35: % {'DRNLParams.MOCtau =.3; DRNLParams.rateToAttenuationFactor=0.0123;'}; rmeddis@35: rmeddis@35: %% delare 'showMap' options to control graphical output rmeddis@35: showMapOptions.printModelParameters=1; % prints all parameters rmeddis@35: showMapOptions.showModelOutput=1; % plot of all stages rmeddis@35: showMapOptions.printFiringRates=1; % prints stage activity levels rmeddis@35: showMapOptions.showACF=0; % shows SACF (probability only) rmeddis@35: showMapOptions.showEfferent=1; % tracks of AR and MOC rmeddis@35: showMapOptions.surfProbability=0; % 2D plot of HSR response rmeddis@35: showMapOptions.surfSpikes=0; % 2D plot of spikes histogram rmeddis@35: showMapOptions.ICrates=0; % IC rates by CNtauGk rmeddis@35: rmeddis@35: % disable certain silly options rmeddis@35: if strcmp(AN_spikesOrProbability, 'spikes') rmeddis@35: % avoid nonsensical options rmeddis@35: showMapOptions.surfProbability=0; rmeddis@35: showMapOptions.showACF=0; rmeddis@35: else rmeddis@35: showMapOptions.surfSpikes=0; rmeddis@35: end rmeddis@35: if strcmp(signalType, 'file') rmeddis@35: % needed for labeling plot rmeddis@35: showMapOptions.fileName=fileName; rmeddis@35: else rmeddis@35: showMapOptions.fileName=[]; rmeddis@35: end rmeddis@35: rmeddis@35: %% Generate stimuli rmeddis@35: rmeddis@35: switch signalType rmeddis@35: case 'tones' rmeddis@35: % inputSignal=createMultiTone(sampleRate, toneFrequency, ... rmeddis@35: % leveldBSPL, duration, rampDuration); rmeddis@35: % Create pure tone stimulus rmeddis@35: dt=1/sampleRate; % seconds rmeddis@35: time=dt: dt: duration; rmeddis@35: inputSignal=sum(sin(2*pi*toneFrequency'*time), 1); rmeddis@35: amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak) rmeddis@35: inputSignal=amp*inputSignal; rmeddis@35: rmeddis@35: % apply ramps rmeddis@35: % catch rampTime error rmeddis@35: if rampDuration>0.5*duration, rampDuration=duration/2; end rmeddis@35: rampTime=dt:dt:rampDuration; rmeddis@35: ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ... rmeddis@35: ones(1,length(time)-length(rampTime))]; rmeddis@35: inputSignal=inputSignal.*ramp; rmeddis@35: ramp=fliplr(ramp); rmeddis@35: inputSignal=inputSignal.*ramp; rmeddis@35: rmeddis@35: % add silences rmeddis@35: intialSilence= zeros(1,round(beginSilence/dt)); rmeddis@35: finalSilence= zeros(1,round(endSilence/dt)); rmeddis@35: inputSignal= [intialSilence inputSignal finalSilence]; rmeddis@35: rmeddis@35: case 'file' rmeddis@35: %% file input simple or mixed rmeddis@35: [inputSignal sampleRate]=wavread(fileName); rmeddis@35: dt=1/sampleRate; rmeddis@35: inputSignal=inputSignal(:,1); rmeddis@35: targetRMS=20e-6*10^(leveldBSPL/20); rmeddis@35: rms=(mean(inputSignal.^2))^0.5; rmeddis@35: amp=targetRMS/rms; rmeddis@35: inputSignal=inputSignal*amp; rmeddis@35: rmeddis@35: % add silences rmeddis@35: intialSilence= zeros(1,round(beginSilence*sampleRate)); rmeddis@35: finalSilence= zeros(1,round(endSilence*sampleRate)); rmeddis@35: inputSignal= [intialSilence inputSignal' finalSilence]; rmeddis@35: rmeddis@35: [inputNoise sampleRateN]=wavread('babble'); rmeddis@35: inputNoise=inputNoise(1:length(inputSignal)); rmeddis@35: inputNoise=inputNoise(:,1); rmeddis@35: targetRMS=20e-6*10^(leveldBSPLNoise/20); rmeddis@35: rms=(mean(inputNoise.^2))^0.5; rmeddis@35: amp=targetRMS/rms; rmeddis@35: inputNoise=inputNoise*amp; rmeddis@35: inputSignal=inputSignal+inputNoise'; rmeddis@35: rmeddis@35: end rmeddis@35: rmeddis@35: rmeddis@35: %% run the model rmeddis@35: tic rmeddis@35: rmeddis@35: fprintf('\n') rmeddis@35: disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)]) rmeddis@35: disp([num2str(numChannels) ' channel model']) rmeddis@35: disp('Computing ...') rmeddis@35: rmeddis@35: MAP1_14(inputSignal, sampleRate, BFlist, ... rmeddis@35: MAPparamsName, AN_spikesOrProbability, paramChanges); rmeddis@35: rmeddis@35: rmeddis@35: %% the model run is now complete. Now display the results rmeddis@35: UTIL_showMAP(showMapOptions, paramChanges) rmeddis@35: disp(['duration=' num2str(duration)]) rmeddis@35: disp(['level=' num2str(leveldBSPL)]) rmeddis@35: disp(['noise level=' num2str(leveldBSPLNoise)]) rmeddis@35: rmeddis@35: disp(['toneFrequency=' num2str(toneFrequency)]) rmeddis@35: global DRNLParams rmeddis@35: disp(['attenuation factor =' ... rmeddis@35: num2str(DRNLParams.rateToAttenuationFactor, '%5.3f') ]) rmeddis@35: disp(['attenuation factor (probability)=' ... rmeddis@35: num2str(DRNLParams.rateToAttenuationFactorProb, '%5.3f') ]) rmeddis@35: disp(AN_spikesOrProbability) rmeddis@35: disp(paramChanges) rmeddis@35: toc rmeddis@35: path(restorePath) rmeddis@35: