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