rmeddis@0: function test_MAP1_14 rmeddis@0: rmeddis@0: % MAPdemo runs the MATLAB auditory periphery model (MAP1_14) as far as rmeddis@0: % the AN (probabilities) or IC (spikes) with graphical output rmeddis@0: rmeddis@0: % Things you might want to change; #1 - #5 rmeddis@0: rmeddis@0: %% #1 parameter file name rmeddis@0: MAPparamsName='Normal'; rmeddis@0: rmeddis@0: rmeddis@0: %% #2 probability (fast) or spikes (slow) representation rmeddis@0: AN_spikesOrProbability='spikes'; rmeddis@0: % or rmeddis@9: % AN_spikesOrProbability='probability'; rmeddis@0: rmeddis@0: rmeddis@0: %% #3 pure tone, harmonic sequence or speech file input rmeddis@0: signalType= 'tones'; rmeddis@0: duration=0.100; % seconds rmeddis@9: duration=0.020; % seconds rmeddis@9: sampleRate= 64000; rmeddis@0: % toneFrequency= 250:250:8000; % harmonic sequence (Hz) rmeddis@9: toneFrequency= 2000; % or a pure tone (Hz8 rmeddis@0: rmeddis@0: rampDuration=.005; % seconds rmeddis@0: rmeddis@0: % or rmeddis@0: signalType= 'file'; rmeddis@0: fileName='twister_44kHz'; rmeddis@0: % fileName='new-da-44khz'; rmeddis@0: rmeddis@0: rmeddis@0: %% #4 rms level rmeddis@0: % signal details rmeddis@0: leveldBSPL=70; % dB SPL rmeddis@0: rmeddis@0: rmeddis@0: %% #5 number of channels in the model rmeddis@0: % 21-channel model (log spacing) rmeddis@0: numChannels=21; rmeddis@0: lowestBF=250; highestBF= 8000; rmeddis@0: BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels)); rmeddis@0: rmeddis@0: % or specify your own channel BFs rmeddis@17: BFlist=toneFrequency; rmeddis@0: rmeddis@0: rmeddis@0: %% #6 change model parameters rmeddis@0: paramChanges=[]; rmeddis@0: rmeddis@0: % or rmeddis@0: % Parameter changes can be used to change one or more model parameters rmeddis@0: % *after* the MAPparams file has been read rmeddis@0: % This example declares only one fiber type with a calcium clearance time rmeddis@0: % constant of 80e-6 s (HSR fiber) when the probability option is selected. rmeddis@9: % switch AN_spikesOrProbability rmeddis@9: % case 'probability' rmeddis@9: % paramChanges={'IHCpreSynapseParams.tauCa=80e-6;'}; rmeddis@9: % otherwise rmeddis@9: % paramChanges=[]; rmeddis@9: % end rmeddis@0: rmeddis@0: %% delare showMap options rmeddis@0: showMapOptions=[]; % use defaults rmeddis@0: rmeddis@0: % or (example: show everything including an smoothed SACF output rmeddis@0: showMapOptions.showModelParameters=1; rmeddis@0: showMapOptions.showModelOutput=1; rmeddis@0: showMapOptions.printFiringRates=1; rmeddis@9: showMapOptions.showACF=0; rmeddis@0: showMapOptions.showEfferent=1; rmeddis@0: rmeddis@0: %% Generate stimuli rmeddis@0: rmeddis@0: dbstop if error rmeddis@0: restorePath=path; rmeddis@0: addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore']) rmeddis@0: switch signalType rmeddis@0: case 'tones' rmeddis@0: inputSignal=createMultiTone(sampleRate, toneFrequency, ... rmeddis@0: leveldBSPL, duration, rampDuration); rmeddis@0: rmeddis@0: case 'file' rmeddis@0: [inputSignal sampleRate]=wavread(fileName); rmeddis@0: inputSignal(:,1); rmeddis@0: targetRMS=20e-6*10^(leveldBSPL/20); rmeddis@0: rms=(mean(inputSignal.^2))^0.5; rmeddis@0: amp=targetRMS/rms; rmeddis@0: inputSignal=inputSignal*amp; rmeddis@0: end rmeddis@0: rmeddis@0: rmeddis@0: %% run the model rmeddis@0: tic rmeddis@0: rmeddis@9: fprintf('\n') rmeddis@9: disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)]) rmeddis@9: disp([num2str(numChannels) ' channel model']) rmeddis@9: disp('Computing ...') rmeddis@0: MAP1_14(inputSignal, sampleRate, BFlist, ... rmeddis@0: MAPparamsName, AN_spikesOrProbability, paramChanges); rmeddis@0: toc rmeddis@0: rmeddis@0: % the model run is now complete. Now display the results rmeddis@0: showMAP(showMapOptions) rmeddis@0: rmeddis@9: toc rmeddis@0: path(restorePath) rmeddis@0: rmeddis@0: rmeddis@0: function inputSignal=createMultiTone(sampleRate, toneFrequency, ... rmeddis@0: leveldBSPL, duration, rampDuration) rmeddis@0: % Create pure tone stimulus rmeddis@0: dt=1/sampleRate; % seconds rmeddis@0: time=dt: dt: duration; rmeddis@0: inputSignal=sum(sin(2*pi*toneFrequency'*time), 1); rmeddis@0: amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak) rmeddis@0: inputSignal=amp*inputSignal; rmeddis@0: rmeddis@0: % apply ramps rmeddis@0: % catch rampTime error rmeddis@0: if rampDuration>0.5*duration, rampDuration=duration/2; end rmeddis@0: rampTime=dt:dt:rampDuration; rmeddis@0: ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ... rmeddis@0: ones(1,length(time)-length(rampTime))]; rmeddis@0: inputSignal=inputSignal.*ramp; rmeddis@0: ramp=fliplr(ramp); rmeddis@0: inputSignal=inputSignal.*ramp; rmeddis@0: rmeddis@0: % add 10 ms silence rmeddis@0: silence= zeros(1,round(0.03/dt)); rmeddis@9: % inputSignal= [silence inputSignal silence]; rmeddis@0: