rmeddis@38: function [frequencies fft_ampdB]= ... rmeddis@38: MAPdemoMultiChOAE (leveldBSPL, toneFrequencies) rmeddis@38: % MAPdemo runs the MATLAB auditory periphery model rmeddis@38: % rmeddis@38: % The OAE is simulated by combining the output from all DRNL channels rmeddis@38: % rmeddis@38: % arguments leveldBSPL and toneFrequencies are optional rmeddis@38: % defaults are 70 and [5000 6000] rmeddis@38: % rmeddis@38: % e.g. rmeddis@38: % MAPdemoMultiChOAE (60, [3000 4000]) rmeddis@38: rmeddis@38: rmeddis@38: global dt DRNLoutput rmeddis@38: dbstop if error rmeddis@38: restorePath=path; rmeddis@38: addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ... rmeddis@38: ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],... rmeddis@38: ['..' filesep 'testPrograms']) rmeddis@38: rmeddis@38: % set parameter file here rmeddis@38: paramsName='Normal'; rmeddis@38: % choose probability because spikes not used to evaluate BM rmeddis@38: AN_spikesOrProbability='probability'; rmeddis@38: % add parameter changes here. paramchanges is a cell array of command rmeddis@38: % strings rmeddis@38: paramChanges={}; rmeddis@38: rmeddis@38: % DRNL channels rmeddis@38: lowestBF=1000; highestBF= 8000; numChannels=41; rmeddis@38: % includes BFs at 250 500 1000 2000 4000 8000 (for 11, 21, 31 BFs) rmeddis@38: % the output from all these filters will be combined to form the OAE rmeddis@38: BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels)); rmeddis@38: rmeddis@38: if nargin<2 rmeddis@38: toneFrequencies= 2000; % single pure tone test rmeddis@38: toneFrequencies=[ 2000 3000]; % F1 F2 for DPOAEs rmeddis@38: toneFrequencies=[ 5000 6000]; % F1 F2 rmeddis@38: end rmeddis@38: duration=0.05; % seconds rmeddis@38: duration=0.05; % seconds rmeddis@38: rampDuration=.005; rmeddis@38: rmeddis@38: if nargin<1 rmeddis@38: leveldBSPL=70; % dB SPL rmeddis@38: end rmeddis@38: amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak level) rmeddis@38: rmeddis@38: % Create pure stimulus rmeddis@38: sampleRate= 100000; rmeddis@38: dt=1/sampleRate; rmeddis@38: time=dt: dt: duration; rmeddis@38: inputSignal=sum(sin(2*pi*toneFrequencies'*time), 1); rmeddis@38: inputSignal=amp*inputSignal; rmeddis@38: rmeddis@38: % apply ramps rmeddis@38: if rampDuration>0.5*duration, rampDuration=duration/2; end rmeddis@38: rampTime=dt:dt:rampDuration; rmeddis@38: ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ... rmeddis@38: ones(1,length(time)-length(rampTime))]; rmeddis@38: inputSignal=inputSignal.*ramp; % at the beginning rmeddis@38: ramp=fliplr(ramp); rmeddis@38: inputSignal=inputSignal.*ramp; % and at the end rmeddis@38: rmeddis@38: % add 10 ms silence rmeddis@38: silenceDuration=0.01; rmeddis@38: silence= zeros(1,round(silenceDuration/dt)); rmeddis@38: inputSignal= [silence inputSignal silence]; rmeddis@38: time=dt: dt: dt*length(inputSignal); rmeddis@38: rmeddis@38: %% delare 'showMap' options to control graphical output rmeddis@38: showMapOptions.printModelParameters=0; % prints all parameters rmeddis@38: showMapOptions.showModelOutput=1; % plot of all stages rmeddis@38: showMapOptions.printFiringRates=1; % prints stage activity levels rmeddis@38: showMapOptions.showACF=0; % shows SACF (probability only) rmeddis@38: showMapOptions.showEfferent=0; % tracks of AR and MOC rmeddis@38: showMapOptions.surfProbability=0; % 2D plot of HSR response rmeddis@38: showMapOptions.surfSpikes=0; % 2D plot of spikes histogram rmeddis@38: showMapOptions.ICrates=0; % IC rates by CNtauGk rmeddis@38: rmeddis@38: rmeddis@38: MAP1_14(inputSignal, 1/dt, BFlist, ... rmeddis@38: paramsName, AN_spikesOrProbability, paramChanges); rmeddis@38: rmeddis@38: UTIL_showMAP(showMapOptions, paramChanges) rmeddis@38: pause(0.1) rmeddis@38: rmeddis@38: % use this to produce a comnplete record of model parameters rmeddis@38: % UTIL_showAllMAPStructures rmeddis@38: rmeddis@38: OAE=sum(DRNLoutput); rmeddis@38: figure(5),subplot(2,1,1) rmeddis@38: plot(time,OAE) rmeddis@38: title(['F=' num2str(toneFrequencies)]) rmeddis@38: [fft_powerdB, fft_phase, frequencies, fft_ampdB]= UTIL_FFT(OAE, dt, 1e-15); rmeddis@38: idx=find(frequencies<1e4); rmeddis@38: rmeddis@38: figure(5),subplot(2,1,2) rmeddis@38: plot(frequencies(idx),fft_ampdB(idx)) rmeddis@38: title ('FFT of OAE') rmeddis@38: ylabel('dB') rmeddis@38: ylim([0 100]) rmeddis@38: grid on rmeddis@38: rmeddis@38: path(restorePath);