annotate Copy_of_multithreshold 1.46/testPeriphery.m @ 30:1a502830d462

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