rmeddis@38
|
1 function [frequencies fft_ampdB]= ...
|
rmeddis@38
|
2 MAPdemoMultiChOAE (leveldBSPL, toneFrequencies)
|
rmeddis@38
|
3 % MAPdemo runs the MATLAB auditory periphery model
|
rmeddis@38
|
4 %
|
rmeddis@38
|
5 % The OAE is simulated by combining the output from all DRNL channels
|
rmeddis@38
|
6 %
|
rmeddis@38
|
7 % arguments leveldBSPL and toneFrequencies are optional
|
rmeddis@38
|
8 % defaults are 70 and [5000 6000]
|
rmeddis@38
|
9 %
|
rmeddis@38
|
10 % e.g.
|
rmeddis@38
|
11 % MAPdemoMultiChOAE (60, [3000 4000])
|
rmeddis@38
|
12
|
rmeddis@38
|
13
|
rmeddis@38
|
14 global dt DRNLoutput
|
rmeddis@38
|
15 dbstop if error
|
rmeddis@38
|
16 restorePath=path;
|
rmeddis@38
|
17 addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ...
|
rmeddis@38
|
18 ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],...
|
rmeddis@38
|
19 ['..' filesep 'testPrograms'])
|
rmeddis@38
|
20
|
rmeddis@38
|
21 % set parameter file here
|
rmeddis@38
|
22 paramsName='Normal';
|
rmeddis@38
|
23 % choose probability because spikes not used to evaluate BM
|
rmeddis@38
|
24 AN_spikesOrProbability='probability';
|
rmeddis@38
|
25 % add parameter changes here. paramchanges is a cell array of command
|
rmeddis@38
|
26 % strings
|
rmeddis@38
|
27 paramChanges={};
|
rmeddis@38
|
28
|
rmeddis@38
|
29 % DRNL channels
|
rmeddis@38
|
30 lowestBF=1000; highestBF= 8000; numChannels=41;
|
rmeddis@38
|
31 % includes BFs at 250 500 1000 2000 4000 8000 (for 11, 21, 31 BFs)
|
rmeddis@38
|
32 % the output from all these filters will be combined to form the OAE
|
rmeddis@38
|
33 BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
|
rmeddis@38
|
34
|
rmeddis@38
|
35 if nargin<2
|
rmeddis@38
|
36 toneFrequencies= 2000; % single pure tone test
|
rmeddis@38
|
37 toneFrequencies=[ 2000 3000]; % F1 F2 for DPOAEs
|
rmeddis@38
|
38 toneFrequencies=[ 5000 6000]; % F1 F2
|
rmeddis@38
|
39 end
|
rmeddis@38
|
40 duration=0.05; % seconds
|
rmeddis@38
|
41 duration=0.05; % seconds
|
rmeddis@38
|
42 rampDuration=.005;
|
rmeddis@38
|
43
|
rmeddis@38
|
44 if nargin<1
|
rmeddis@38
|
45 leveldBSPL=70; % dB SPL
|
rmeddis@38
|
46 end
|
rmeddis@38
|
47 amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak level)
|
rmeddis@38
|
48
|
rmeddis@38
|
49 % Create pure stimulus
|
rmeddis@38
|
50 sampleRate= 100000;
|
rmeddis@38
|
51 dt=1/sampleRate;
|
rmeddis@38
|
52 time=dt: dt: duration;
|
rmeddis@38
|
53 inputSignal=sum(sin(2*pi*toneFrequencies'*time), 1);
|
rmeddis@38
|
54 inputSignal=amp*inputSignal;
|
rmeddis@38
|
55
|
rmeddis@38
|
56 % apply ramps
|
rmeddis@38
|
57 if rampDuration>0.5*duration, rampDuration=duration/2; end
|
rmeddis@38
|
58 rampTime=dt:dt:rampDuration;
|
rmeddis@38
|
59 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
|
rmeddis@38
|
60 ones(1,length(time)-length(rampTime))];
|
rmeddis@38
|
61 inputSignal=inputSignal.*ramp; % at the beginning
|
rmeddis@38
|
62 ramp=fliplr(ramp);
|
rmeddis@38
|
63 inputSignal=inputSignal.*ramp; % and at the end
|
rmeddis@38
|
64
|
rmeddis@38
|
65 % add 10 ms silence
|
rmeddis@38
|
66 silenceDuration=0.01;
|
rmeddis@38
|
67 silence= zeros(1,round(silenceDuration/dt));
|
rmeddis@38
|
68 inputSignal= [silence inputSignal silence];
|
rmeddis@38
|
69 time=dt: dt: dt*length(inputSignal);
|
rmeddis@38
|
70
|
rmeddis@38
|
71 %% delare 'showMap' options to control graphical output
|
rmeddis@38
|
72 showMapOptions.printModelParameters=0; % prints all parameters
|
rmeddis@38
|
73 showMapOptions.showModelOutput=1; % plot of all stages
|
rmeddis@38
|
74 showMapOptions.printFiringRates=1; % prints stage activity levels
|
rmeddis@38
|
75 showMapOptions.showACF=0; % shows SACF (probability only)
|
rmeddis@38
|
76 showMapOptions.showEfferent=0; % tracks of AR and MOC
|
rmeddis@38
|
77 showMapOptions.surfProbability=0; % 2D plot of HSR response
|
rmeddis@38
|
78 showMapOptions.surfSpikes=0; % 2D plot of spikes histogram
|
rmeddis@38
|
79 showMapOptions.ICrates=0; % IC rates by CNtauGk
|
rmeddis@38
|
80
|
rmeddis@38
|
81
|
rmeddis@38
|
82 MAP1_14(inputSignal, 1/dt, BFlist, ...
|
rmeddis@38
|
83 paramsName, AN_spikesOrProbability, paramChanges);
|
rmeddis@38
|
84
|
rmeddis@38
|
85 UTIL_showMAP(showMapOptions, paramChanges)
|
rmeddis@38
|
86 pause(0.1)
|
rmeddis@38
|
87
|
rmeddis@38
|
88 % use this to produce a comnplete record of model parameters
|
rmeddis@38
|
89 % UTIL_showAllMAPStructures
|
rmeddis@38
|
90
|
rmeddis@38
|
91 OAE=sum(DRNLoutput);
|
rmeddis@38
|
92 figure(5),subplot(2,1,1)
|
rmeddis@38
|
93 plot(time,OAE)
|
rmeddis@38
|
94 title(['F=' num2str(toneFrequencies)])
|
rmeddis@38
|
95 [fft_powerdB, fft_phase, frequencies, fft_ampdB]= UTIL_FFT(OAE, dt, 1e-15);
|
rmeddis@38
|
96 idx=find(frequencies<1e4);
|
rmeddis@38
|
97
|
rmeddis@38
|
98 figure(5),subplot(2,1,2)
|
rmeddis@38
|
99 plot(frequencies(idx),fft_ampdB(idx))
|
rmeddis@38
|
100 title ('FFT of OAE')
|
rmeddis@38
|
101 ylabel('dB')
|
rmeddis@38
|
102 ylim([0 100])
|
rmeddis@38
|
103 grid on
|
rmeddis@38
|
104
|
rmeddis@38
|
105 path(restorePath);
|