annotate multithreshold 1.46/testPeriphery.m @ 5:ded8411bbd19

Ignoring correctly
author Ray Meddis <rmeddis@essex.ac.uk>
date Fri, 27 May 2011 13:56:21 +0100
parents f233164f4c86
children
rev   line source
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);