rmeddis@29
|
1 function testBM (BMlocations, paramsName,...
|
rmeddis@29
|
2 relativeFrequencies, AN_spikesOrProbability, paramChanges)
|
rmeddis@29
|
3 % testBM generates input output functions for DRNL model for any number
|
rmeddis@29
|
4 % of locations.
|
rmeddis@29
|
5 % Computations are bast on a single channel model (channelBFs=BF)
|
rmeddis@29
|
6 % peak displacement (peakAmp) is measured.
|
rmeddis@29
|
7 % if DRNLParams.useMOC is chosen, the full model is run (slow)
|
rmeddis@29
|
8 % otherwise only DRNL is computed.
|
rmeddis@29
|
9 % Tuning curves are generated based on a range of frequencies reletove to
|
rmeddis@29
|
10 % the BF of the location.
|
rmeddis@29
|
11 %
|
rmeddis@29
|
12
|
rmeddis@29
|
13 global DRNLParams
|
rmeddis@29
|
14
|
rmeddis@29
|
15 if nargin<5
|
rmeddis@29
|
16 paramChanges=[];
|
rmeddis@29
|
17 end
|
rmeddis@29
|
18
|
rmeddis@29
|
19 if nargin<4
|
rmeddis@29
|
20 AN_spikesOrProbability='probability';
|
rmeddis@29
|
21 end
|
rmeddis@29
|
22
|
rmeddis@29
|
23 savePath=path;
|
rmeddis@29
|
24 addpath (['..' filesep 'utilities'],['..' filesep 'MAP'])
|
rmeddis@29
|
25
|
rmeddis@29
|
26 levels=-10:10:90; nLevels=length(levels);
|
rmeddis@29
|
27 % levels= 50; nLevels=length(levels);
|
rmeddis@29
|
28
|
rmeddis@29
|
29 % refBMdisplacement is the displacement of the BM at threshold
|
rmeddis@29
|
30 % 1 nm disp at threshold (9 kHz, Ruggero)
|
rmeddis@29
|
31 % ? adjust for frequency
|
rmeddis@29
|
32 refBMdisplacement= 1e-8; % adjusted for 10 nm at 1 kHz
|
rmeddis@29
|
33
|
rmeddis@29
|
34 toneDuration=.200;
|
rmeddis@29
|
35 rampDuration=0.01;
|
rmeddis@29
|
36 silenceDuration=0.01;
|
rmeddis@29
|
37
|
rmeddis@29
|
38 sampleRate=30000;
|
rmeddis@29
|
39
|
rmeddis@29
|
40 dbstop if error
|
rmeddis@29
|
41 figure(3), clf
|
rmeddis@29
|
42 set(gcf,'position',[280 350 327 326])
|
rmeddis@29
|
43 set(gcf,'name','DRNL - BM')
|
rmeddis@29
|
44 pause(0.1)
|
rmeddis@29
|
45
|
rmeddis@29
|
46 finalSummary=[];
|
rmeddis@29
|
47 nBFs=length(BMlocations);
|
rmeddis@29
|
48 BFno=0; plotCount=0;
|
rmeddis@29
|
49 for BF=BMlocations
|
rmeddis@29
|
50 BFno=BFno+1;
|
rmeddis@29
|
51 plotCount=plotCount+nBFs;
|
rmeddis@29
|
52 stimulusFrequencies=BF* relativeFrequencies;
|
rmeddis@29
|
53 nFrequencies=length(stimulusFrequencies);
|
rmeddis@29
|
54
|
rmeddis@29
|
55 peakAmpBM=zeros(nLevels,nFrequencies);
|
rmeddis@29
|
56 peakAmpBMdB=NaN(nLevels,nFrequencies);
|
rmeddis@29
|
57 peakEfferent=NaN(nLevels,nFrequencies);
|
rmeddis@29
|
58 peakAREfferent=NaN(nLevels,nFrequencies);
|
rmeddis@29
|
59
|
rmeddis@29
|
60
|
rmeddis@29
|
61 levelNo=0;
|
rmeddis@29
|
62 for leveldB=levels
|
rmeddis@29
|
63 disp(['level= ' num2str(leveldB)])
|
rmeddis@29
|
64 levelNo=levelNo+1;
|
rmeddis@29
|
65
|
rmeddis@29
|
66 freqNo=0;
|
rmeddis@29
|
67 for frequency=stimulusFrequencies
|
rmeddis@29
|
68 freqNo=freqNo+1;
|
rmeddis@29
|
69
|
rmeddis@29
|
70 % Generate stimuli
|
rmeddis@29
|
71 globalStimParams.FS=sampleRate;
|
rmeddis@29
|
72 globalStimParams.overallDuration=...
|
rmeddis@29
|
73 toneDuration+silenceDuration; % s
|
rmeddis@29
|
74 stim.phases='sin';
|
rmeddis@29
|
75 stim.type='tone';
|
rmeddis@29
|
76 stim.toneDuration=toneDuration;
|
rmeddis@29
|
77 stim.frequencies=frequency;
|
rmeddis@29
|
78 stim.amplitudesdB=leveldB;
|
rmeddis@29
|
79 stim.beginSilence=silenceDuration;
|
rmeddis@29
|
80 stim.rampOnDur=rampDuration;
|
rmeddis@29
|
81 % no offset ramp
|
rmeddis@29
|
82 stim.rampOffDur=rampDuration;
|
rmeddis@29
|
83 doPlot=0;
|
rmeddis@29
|
84 inputSignal=stimulusCreate(globalStimParams, stim, doPlot);
|
rmeddis@29
|
85 inputSignal=inputSignal(:,1)';
|
rmeddis@29
|
86
|
rmeddis@29
|
87 %% run the model
|
rmeddis@29
|
88 MAPparamsName=paramsName;
|
rmeddis@29
|
89
|
rmeddis@29
|
90 global DRNLoutput MOCattenuation ARattenuation
|
rmeddis@29
|
91 MAP1_14(inputSignal, sampleRate, BF, ...
|
rmeddis@29
|
92 MAPparamsName, AN_spikesOrProbability, paramChanges);
|
rmeddis@29
|
93
|
rmeddis@29
|
94 DRNLresponse=DRNLoutput;
|
rmeddis@29
|
95 peakAmp=max(max(...
|
rmeddis@29
|
96 DRNLresponse(:, end-round(length(DRNLresponse)/2):end)));
|
rmeddis@29
|
97 peakAmpBM(levelNo,freqNo)=peakAmp;
|
rmeddis@29
|
98 peakAmpBMdB(levelNo,freqNo)=...
|
rmeddis@29
|
99 20*log10(peakAmp/refBMdisplacement);
|
rmeddis@29
|
100 peakEfferent(levelNo,freqNo)=min(min(MOCattenuation));
|
rmeddis@29
|
101 peakAREfferent(levelNo,freqNo)=min(min(ARattenuation));
|
rmeddis@29
|
102
|
rmeddis@29
|
103 end % tone frequency
|
rmeddis@29
|
104 end % level
|
rmeddis@29
|
105
|
rmeddis@29
|
106 %% analyses results and plot
|
rmeddis@29
|
107
|
rmeddis@29
|
108 % BM I/O plot (top panel)
|
rmeddis@29
|
109 figure(3)
|
rmeddis@29
|
110 subplot(3,nBFs,BFno), cla
|
rmeddis@29
|
111 plot(levels,peakAmpBMdB, 'linewidth',2)
|
rmeddis@29
|
112 hold on, plot(levels, repmat(refBMdisplacement,1,length(levels)))
|
rmeddis@29
|
113 hold off
|
rmeddis@29
|
114 title(['BF=' num2str(BF,'%5.0f') ' - ' paramsName])
|
rmeddis@29
|
115 xlabel('level')
|
rmeddis@29
|
116 % set(gca,'xtick',levels), grid on
|
rmeddis@29
|
117 if length(levels)>1,xlim([min(levels) max(levels)]), end
|
rmeddis@29
|
118 ylabel(['dB re:' num2str(refBMdisplacement,'%6.1e') 'm'])
|
rmeddis@29
|
119 ylim([-20 50])
|
rmeddis@29
|
120 set(gca,'ytick',[-10 0 10 20 40])
|
rmeddis@29
|
121 grid on
|
rmeddis@29
|
122 % legend({num2str(stimulusFrequencies')}, 'location', 'EastOutside')
|
rmeddis@29
|
123 UTIL_printTabTable([levels' peakAmpBMdB], ...
|
rmeddis@29
|
124 num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f')
|
rmeddis@29
|
125 finalSummary=[finalSummary peakAmpBMdB];
|
rmeddis@29
|
126
|
rmeddis@29
|
127 % Tuning curve
|
rmeddis@29
|
128 if length(relativeFrequencies)>2
|
rmeddis@29
|
129 figure(3), subplot(3,nBFs, 2*nBFs+BFno)
|
rmeddis@29
|
130 % contour(stimulusFrequencies,levels,peakAmpBM,...
|
rmeddis@29
|
131 % [refBMdisplacement refBMdisplacement],'r')
|
rmeddis@29
|
132 contour(stimulusFrequencies,levels,peakAmpBM,...
|
rmeddis@29
|
133 refBMdisplacement.*[1 5 10 50 100])
|
rmeddis@29
|
134 title(['tuning curve at ' num2str(refBMdisplacement) 'm']);
|
rmeddis@29
|
135 ylabel('level (dB) at reference')
|
rmeddis@29
|
136 xlim([100 10000])
|
rmeddis@29
|
137 grid on
|
rmeddis@29
|
138 hold on
|
rmeddis@29
|
139 set(gca,'xscale','log')
|
rmeddis@29
|
140 end
|
rmeddis@29
|
141
|
rmeddis@29
|
142
|
rmeddis@29
|
143 % MOC contribution
|
rmeddis@29
|
144 figure(3)
|
rmeddis@29
|
145 subplot(3,nBFs,nBFs+BFno), cla
|
rmeddis@29
|
146 plot(levels,20*log10(peakEfferent), 'linewidth',2)
|
rmeddis@29
|
147 ylabel('MOC (dB attenuation)'), xlabel('level')
|
rmeddis@29
|
148 title(['peak MOC: model= ' AN_spikesOrProbability])
|
rmeddis@29
|
149 grid on
|
rmeddis@29
|
150 if length(levels)>1, xlim([min(levels) max(levels)]), end
|
rmeddis@29
|
151
|
rmeddis@29
|
152 % AR contribution
|
rmeddis@29
|
153 hold on
|
rmeddis@29
|
154 plot(levels,20*log10(peakAREfferent), 'r')
|
rmeddis@29
|
155 hold off
|
rmeddis@29
|
156
|
rmeddis@29
|
157 end % best frequency
|
rmeddis@29
|
158
|
rmeddis@29
|
159 UTIL_showStructureSummary(DRNLParams, 'DRNLParams', 10)
|
rmeddis@29
|
160
|
rmeddis@29
|
161 UTIL_printTabTable([levels' finalSummary], ...
|
rmeddis@29
|
162 num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f')
|
rmeddis@29
|
163
|
rmeddis@29
|
164 path(savePath);
|