rmeddis@38
|
1 function testEfferent(probeFrequency,BFlist, levels, ...
|
rmeddis@38
|
2 paramsName,paramChanges)
|
rmeddis@38
|
3 % generates rate/level functions for AAR and MOC
|
rmeddis@38
|
4 %
|
rmeddis@38
|
5 % e.g.
|
rmeddis@38
|
6 % testEfferent(1000,1000, -10:10:80,'Normal',[]);
|
rmeddis@38
|
7
|
rmeddis@38
|
8 global dtSpikes MOCattenuation ANtauCas
|
rmeddis@38
|
9
|
rmeddis@38
|
10 tic
|
rmeddis@38
|
11 dbstop if error
|
rmeddis@38
|
12 restorePath=path;
|
rmeddis@38
|
13 addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ...
|
rmeddis@38
|
14 ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],...
|
rmeddis@38
|
15 ['..' filesep 'testPrograms'])
|
rmeddis@38
|
16
|
rmeddis@38
|
17 if nargin<5, paramChanges=[]; end
|
rmeddis@38
|
18 if nargin<4, paramsName='Normal'; end
|
rmeddis@38
|
19 if nargin<3, levels=-10:10:100; end
|
rmeddis@38
|
20 if nargin==0,
|
rmeddis@38
|
21 probeFrequency=1000;
|
rmeddis@38
|
22 probeFrequency=100:100:8000;
|
rmeddis@38
|
23 lowestBF=250; highestBF= 8000; numChannels=21;
|
rmeddis@38
|
24 % 21 chs (250-8k)includes BFs at 250 500 1000 2000 4000 8000
|
rmeddis@38
|
25 BFlist=round(logspace(log10(lowestBF),log10(highestBF),numChannels));
|
rmeddis@38
|
26 keyChannel=round(numChannels/2);
|
rmeddis@38
|
27 % BFlist=1000;
|
rmeddis@38
|
28 end
|
rmeddis@38
|
29 nLevels=length(levels);
|
rmeddis@38
|
30
|
rmeddis@38
|
31 toneDuration=.2; rampDuration=0.002; silenceDuration=.02;
|
rmeddis@38
|
32 localPSTHbinwidth=0.001;
|
rmeddis@38
|
33
|
rmeddis@38
|
34
|
rmeddis@38
|
35 sampleRate=64000; dt=1/sampleRate;
|
rmeddis@38
|
36
|
rmeddis@38
|
37 %% delare 'showMap' options to control graphical output
|
rmeddis@38
|
38 showMapOptions.printModelParameters=0; % prints all parameters
|
rmeddis@38
|
39 showMapOptions.showModelOutput=0; % plot of all stages
|
rmeddis@38
|
40 showMapOptions.printFiringRates=1; % prints stage activity levels
|
rmeddis@38
|
41 showMapOptions.showACF=0; % shows SACF (probability only)
|
rmeddis@38
|
42 showMapOptions.showEfferent=1; % tracks of AR and MOC
|
rmeddis@38
|
43 showMapOptions.surfAN=0; % 2D plot of HSR response
|
rmeddis@38
|
44 showMapOptions.surfSpikes=0; % 2D plot of spikes histogram
|
rmeddis@38
|
45 showMapOptions.ICrates=0; % IC rates by CNtauGk
|
rmeddis@38
|
46
|
rmeddis@38
|
47
|
rmeddis@38
|
48 %% pre-allocate storage
|
rmeddis@38
|
49 AN_HSRonset=zeros(nLevels,1);
|
rmeddis@38
|
50 AN_HSRsaturated=zeros(nLevels,1);
|
rmeddis@38
|
51 AN_LSRonset=zeros(nLevels,1);
|
rmeddis@38
|
52 AN_LSRsaturated=zeros(nLevels,1);
|
rmeddis@38
|
53 CNLSRrate=zeros(nLevels,1);
|
rmeddis@38
|
54 CNHSRsaturated=zeros(nLevels,1);
|
rmeddis@38
|
55 ICHSRsaturated=zeros(nLevels,1);
|
rmeddis@38
|
56 ICLSRsaturated=zeros(nLevels,1);
|
rmeddis@38
|
57 vectorStrength=zeros(nLevels,1);
|
rmeddis@38
|
58
|
rmeddis@38
|
59 AR=zeros(nLevels,1);
|
rmeddis@38
|
60 MOC=zeros(nLevels,1);
|
rmeddis@38
|
61 maxMOC=[];
|
rmeddis@38
|
62
|
rmeddis@38
|
63 %% main computational loop (vary level)
|
rmeddis@38
|
64 levelNo=0;
|
rmeddis@38
|
65 for leveldB=levels
|
rmeddis@38
|
66 levelNo=levelNo+1;
|
rmeddis@38
|
67 amp=28e-6*10^(leveldB/20);
|
rmeddis@38
|
68 fprintf('%4.0f\t', leveldB)
|
rmeddis@38
|
69
|
rmeddis@38
|
70 %% generate tone and silences
|
rmeddis@38
|
71 time=dt:dt:toneDuration;
|
rmeddis@38
|
72 rampTime=dt:dt:rampDuration;
|
rmeddis@38
|
73 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
|
rmeddis@38
|
74 ones(1,length(time)-length(rampTime))];
|
rmeddis@38
|
75 ramp=ramp.*fliplr(ramp);
|
rmeddis@38
|
76
|
rmeddis@38
|
77 silence=zeros(1,round(silenceDuration/dt));
|
rmeddis@38
|
78
|
rmeddis@38
|
79 inputSignal=amp*sin(2*pi*probeFrequency'*time);
|
rmeddis@38
|
80 inputSignal=sum(inputSignal);
|
rmeddis@38
|
81 inputSignal= ramp.*inputSignal;
|
rmeddis@38
|
82 inputSignal=[silence inputSignal];
|
rmeddis@38
|
83
|
rmeddis@38
|
84 %% run the model
|
rmeddis@38
|
85 AN_spikesOrProbability='spikes';
|
rmeddis@38
|
86 % nExistingParamChanges=length(paramChanges);
|
rmeddis@38
|
87 % paramChanges{nExistingParamChanges+1}=...
|
rmeddis@38
|
88 % ['AN_IHCsynapseParams.spikesTargetSampleRate=' ...
|
rmeddis@38
|
89 % num2str(spikesSampleRate) ';'];
|
rmeddis@38
|
90
|
rmeddis@38
|
91 MAP1_14(inputSignal, 1/dt, BFlist, ...
|
rmeddis@38
|
92 paramsName, AN_spikesOrProbability, paramChanges);
|
rmeddis@38
|
93
|
rmeddis@38
|
94 maxMOC=[maxMOC min(MOCattenuation(keyChannel,:))];
|
rmeddis@38
|
95 UTIL_showMAP(showMapOptions)
|
rmeddis@38
|
96 pause(0.1)
|
rmeddis@38
|
97
|
rmeddis@38
|
98 %% Auditory nerve evaluate and display (Fig. 5)
|
rmeddis@38
|
99 %LSR (same as HSR if no LSR fibers present)
|
rmeddis@38
|
100 nTaus=length(ANtauCas);
|
rmeddis@38
|
101
|
rmeddis@38
|
102
|
rmeddis@38
|
103 end % level
|
rmeddis@38
|
104
|
rmeddis@38
|
105 %% MOC atten/ level function
|
rmeddis@38
|
106 figure(21), subplot(2,1,2)
|
rmeddis@38
|
107 plot(levels, 20*log10(maxMOC), 'k'), hold off
|
rmeddis@38
|
108 title(' MOC dB attenuation'), ylabel('dB attenuation')
|
rmeddis@38
|
109 ylim([-30 0])
|
rmeddis@38
|
110 figure(21), subplot(2,1,1)
|
rmeddis@38
|
111 plot(levels, maxMOC, 'k'), hold off
|
rmeddis@38
|
112 title(' MOC attenuation (scalar)'), ylabel('attenuation (scalar)')
|
rmeddis@38
|
113 ylim([0 1])
|
rmeddis@38
|
114
|
rmeddis@38
|
115 set(gcf,'name','MOC atten/level')
|
rmeddis@38
|
116
|
rmeddis@38
|
117 path(restorePath)
|
rmeddis@38
|
118 toc
|