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