diff userProgramsRM/MAPdemoMultiChOAE.m @ 38:c2204b18f4a2 tip

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