annotate testPrograms/testPeriphery.m @ 30:1a502830d462

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