diff testPrograms/testLibermanMOC_DPOAE.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/testPrograms/testLibermanMOC_DPOAE.m	Mon Nov 28 13:34:28 2011 +0000
@@ -0,0 +1,189 @@
+function testLibermanMOC_DPOAE
+
+% compares MOC response to LIberman's 1996 data for DPOAE reduction with
+%  contralateral tone stimulation.
+% This program is used mainly as a check on the time constants involved.
+%
+% NB very different time constants are required for 'spikes' and
+% 'probability'
+
+% global dt ANdt  savedBFlist saveAN_spikesOrProbability saveMAPparamsName...
+%     savedInputSignal OMEextEarPressure TMoutput OMEoutput ARattenuation ...
+%     DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
+%     IHCoutput ANprobRateOutput ANoutput savePavailable ANtauCas  ...
+%     CNtauGk CNoutput  ICoutput ICmembraneOutput ICfiberTypeRates ...
+%     MOCattenuation
+global dt dtSpikes   saveAN_spikesOrProbability ANprobRateOutput ICoutput    
+
+global DRNLParams
+
+LibermanData=[
+    2	0.2;
+2.1	0.19;2.2	0.18;2.3	0.18;2.4	0.16;2.5	0.15;2.6	0.15;2.7 0.15;
+2.8	0.12;2.9	0.12;3	0.1;3.1	0.1;3.2	0.05;3.3	0.05;3.4	0;3.5	-0.1;
+3.6	-0.4;3.7	-1.2;3.8	-1.6;3.9	-1.8;4	-1.85;4.1	-2;4.2	-2.05;
+4.3	-2.05;4.4	-2.15;4.5	-2.2;4.6	-2.15;4.7	-2.1;4.8	-2.15;4.9 -2.2;
+5	-2.1;5.1	-2.1;5.2	-2.25;5.3	-2.1;5.4	-2.15;5.5	-2.1;5.6 -2.15;
+5.7	-2.1;5.8	-2.2;5.9	-2.05;6	-2.15;6.1	-2.05;6.2 -2;6.3 -2.2;6.4 -2.1;
+6.5	-2.05;6.6	-2.05;6.7	-2.05;6.8 -2.2;6.9 -2.1;7	-2.05;7.1 -2.05;7.2	-0.7;
+7.3	-0.1;7.4	0;7.5	0.1;7.6	0.2;7.7	0.35;7.8	0.2;7.9	0.15;8	0.2;8.1	0.15;8.2	0.15;
+8.3	0.15;8.4	0.12;8.5	0.1;8.6	0.09;8.7	0.08;8.8	0.07;8.9	0.06;9	0.05;
+];
+
+% Backus2006Data: time	bilateral	contralateral	ipsilateral
+% all % max microPascals
+Backus2006Data=[
+    100	20	15	10;
+    200	36	24	14;
+    300	44	30	18;
+    400	46	32	20;
+    500	48	34	22;
+    1000	50	36	24;
+    1500	52	37	25;
+    2000	54	38	27
+    ];
+
+steadyMinimum=mean(LibermanData(LibermanData(:,1)>4 & LibermanData(:,1)<7,2));
+
+restorePath=path;
+addpath (['..' filesep 'MAP'],    ['..' filesep 'wavFileStore'], ...
+    ['..' filesep 'utilities'])
+
+%%  #1 parameter file name
+MAPparamsName='Normal';
+
+
+%% #2 probability (fast) or spikes (slow) representation
+AN_spikesOrProbability='spikes';
+%   or
+AN_spikesOrProbability='probability';
+
+
+%% #3 pure tone, harmonic sequence or speech file input
+signalType= 'tones';
+sampleRate= 50000;
+rampDuration=.005;              % raised cosine ramp (seconds)
+toneFrequency= 1000;            % or a pure tone (Hz)
+duration=3.6;                   % Lieberman test
+beginSilence=1;                 % 1 for Lieberman
+endSilence=1;                   % 1 for Lieberman
+
+%% #4 rms level
+% signal details
+leveldBSPL= 80;                  % dB SPL (80 for Lieberman)
+
+
+%% #5 number of channels in the model
+
+numChannels=1;
+BFlist=toneFrequency;
+
+
+%% #6 change model parameters
+paramChanges={};
+
+%% delare 'showMap' options to control graphical output
+showMapOptions.printModelParameters=1;   % 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=1;          % tracks of AR and MOC
+showMapOptions.surfAN=1;                % 2D plot of HSR response 
+showMapOptions.surfSpikes=0;            % 2D plot of spikes histogram
+showMapOptions.ICrates=0;               % IC rates by CNtauGk
+
+%% Generate stimuli
+
+        % Create pure tone stimulus
+        dt=1/sampleRate; % seconds
+        time=dt: dt: duration;
+        inputSignal=sum(sin(2*pi*toneFrequency'*time), 1);
+        amp=10^(leveldBSPL/20)*28e-6;   % converts to Pascals (peak)
+        inputSignal=amp*inputSignal;
+        % apply ramps
+        % catch rampTime error
+        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;
+        ramp=fliplr(ramp);
+        inputSignal=inputSignal.*ramp;
+        % add silence
+        intialSilence= zeros(1,round(beginSilence/dt));
+        finalSilence= zeros(1,round(endSilence/dt));
+        inputSignal= [intialSilence inputSignal finalSilence];
+
+%% run the model
+tic
+fprintf('\n')
+disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)])
+disp([num2str(numChannels) ' channel model: ' AN_spikesOrProbability])
+disp('Computing ...')
+
+MAP1_14(inputSignal, sampleRate, BFlist, ...
+    MAPparamsName, AN_spikesOrProbability, paramChanges);
+
+
+%% the model run is now complete. Now display the results
+UTIL_showMAP(showMapOptions)
+
+if strcmp(signalType,'tones')
+    disp(['duration=' num2str(duration)])
+    disp(['level=' num2str(leveldBSPL)])
+    disp(['toneFrequency=' num2str(toneFrequency)])
+    disp(['attenuation factor =' ...
+        num2str(DRNLParams.rateToAttenuationFactor, '%5.3f') ])
+    disp(['attenuation factor (probability)=' ...
+        num2str(DRNLParams.rateToAttenuationFactorProb, '%5.3f') ])
+    disp(AN_spikesOrProbability)
+end
+disp(paramChanges)
+
+
+
+%% superimpose Lieberman (1996) data
+
+global  MOCattenuation
+MOCdB=20*log10(MOCattenuation);
+MOCtime=dt:dt:dt*length(MOCdB);
+
+% scale up DPOAE results to the running maximum MOC dB
+steadyMOCminimum=mean(MOCdB(MOCtime>2 & MOCtime<4.5));
+scalar=steadyMOCminimum/steadyMinimum;
+
+figure(90), clf
+plot(MOCtime,MOCdB), hold on
+plot(LibermanData(:,1)-2.5,scalar*LibermanData(:,2),'r:','linewidth',4)
+legend({'MAP', 'DPOAE'},'location', 'east')
+title('Compare Liberman (1996) DPOAE data with MAP MOC')
+xlabel('time (s)'), ylabel('MOC attenuation/ DPOAE reduction')
+if strcmp(saveAN_spikesOrProbability,'probability')
+text(0,2,['MOCtau= ' num2str(DRNLParams.MOCtauProb)])
+else
+text(0,2,['MOCtau= ' num2str(DRNLParams.MOCtau)])
+end
+set(gcf, 'name', 'Liberman compare')
+
+PSTHbinwidth=0.001;
+
+% show the source of the MOC activity
+figure(89)
+if strcmp(saveAN_spikesOrProbability,'probability')
+    % brainstem activity
+    PSTH=UTIL_PSTHmaker...
+        (ANprobRateOutput(2,:), dt, PSTHbinwidth)*dt/PSTHbinwidth;
+else
+    % AN probability
+    PSTH=UTIL_PSTHmaker(ICoutput(2,:), dtSpikes, PSTHbinwidth)*dt/PSTHbinwidth;
+end
+
+time=PSTHbinwidth:PSTHbinwidth:PSTHbinwidth*length(PSTH);
+plot(time, PSTH)
+set(gcf,'name', 'Lieberman')
+title(saveAN_spikesOrProbability)
+
+toc
+path(restorePath)
+
+% figure(88), plot(MOCattenuation)