annotate testPrograms/testBM.m @ 38:c2204b18f4a2 tip

End nov big change
author Ray Meddis <rmeddis@essex.ac.uk>
date Mon, 28 Nov 2011 13:34:28 +0000
parents 25d53244d5c8
children
rev   line source
rmeddis@35 1 function testBM (BFlist, paramsName,...
rmeddis@29 2 relativeFrequencies, AN_spikesOrProbability, paramChanges)
rmeddis@29 3 % testBM generates input output functions for DRNL model for any number
rmeddis@38 4 % of locations (BFlist).
rmeddis@38 5 % Each BF is evaluated using a single channel model
rmeddis@38 6 %
rmeddis@38 7 % Peak displacement as a function of pure tone level(peakAmp) is displayed
rmeddis@38 8 %
rmeddis@38 9 % If relative Frequencies is set to a range of values, tuning curves will
rmeddis@38 10 % be computed using these stimulus frequencie.
rmeddis@38 11 %
rmeddis@38 12 % If AN_spikesOrProbability is set to 'spikes' the full model is run (slow)
rmeddis@38 13 % otherwise efferent activity is based on AN pspiking probabilities.
rmeddis@29 14 %
rmeddis@34 15 % testBM (1000, 'Normal', 1, 'probability', [])
rmeddis@38 16 % for tuning curves at 6 locations:
rmeddis@38 17 % testBM ([250 500 1000 2000 4000 8000], 'Normal', [.5 .75 .9 1 1.1 1.25 1.5], 'probability', [])
rmeddis@29 18
rmeddis@29 19 global DRNLParams
rmeddis@29 20
rmeddis@35 21 if nargin<5, paramChanges=[]; end
rmeddis@35 22 if nargin<4, AN_spikesOrProbability='spikes'; end
rmeddis@35 23 if nargin==0, BFlist=1000; paramsName='Normal';
rmeddis@35 24 relativeFrequencies=1; end
rmeddis@29 25
rmeddis@29 26 savePath=path;
rmeddis@29 27 addpath (['..' filesep 'utilities'],['..' filesep 'MAP'])
rmeddis@38 28 tic
rmeddis@29 29
rmeddis@38 30 levels=-10:10:100; nLevels=length(levels);
rmeddis@29 31 % levels= 50; nLevels=length(levels);
rmeddis@29 32
rmeddis@29 33 % refBMdisplacement is the displacement of the BM at threshold
rmeddis@29 34 % 1 nm disp at threshold (9 kHz, Ruggero)
rmeddis@29 35 % ? adjust for frequency
rmeddis@29 36 refBMdisplacement= 1e-8; % adjusted for 10 nm at 1 kHz
rmeddis@29 37
rmeddis@35 38 toneDuration=.5;
rmeddis@35 39 % toneDuration=.050;
rmeddis@29 40 rampDuration=0.01;
rmeddis@29 41 silenceDuration=0.01;
rmeddis@29 42
rmeddis@29 43 sampleRate=30000;
rmeddis@29 44
rmeddis@29 45 dbstop if error
rmeddis@29 46 figure(3), clf
rmeddis@29 47 set(gcf,'position',[280 350 327 326])
rmeddis@29 48 set(gcf,'name','DRNL - BM')
rmeddis@29 49 pause(0.1)
rmeddis@29 50
rmeddis@29 51 finalSummary=[];
rmeddis@35 52 nBFs=length(BFlist);
rmeddis@29 53 BFno=0; plotCount=0;
rmeddis@35 54 for BF=BFlist
rmeddis@29 55 BFno=BFno+1;
rmeddis@29 56 plotCount=plotCount+nBFs;
rmeddis@29 57 stimulusFrequencies=BF* relativeFrequencies;
rmeddis@29 58 nFrequencies=length(stimulusFrequencies);
rmeddis@29 59
rmeddis@29 60 peakAmpBM=zeros(nLevels,nFrequencies);
rmeddis@29 61 peakAmpBMdB=NaN(nLevels,nFrequencies);
rmeddis@29 62 peakEfferent=NaN(nLevels,nFrequencies);
rmeddis@29 63 peakAREfferent=NaN(nLevels,nFrequencies);
rmeddis@29 64
rmeddis@29 65
rmeddis@29 66 levelNo=0;
rmeddis@29 67 for leveldB=levels
rmeddis@29 68 disp(['level= ' num2str(leveldB)])
rmeddis@29 69 levelNo=levelNo+1;
rmeddis@29 70
rmeddis@29 71 freqNo=0;
rmeddis@29 72 for frequency=stimulusFrequencies
rmeddis@29 73 freqNo=freqNo+1;
rmeddis@29 74
rmeddis@29 75 % Generate stimuli
rmeddis@29 76 globalStimParams.FS=sampleRate;
rmeddis@29 77 globalStimParams.overallDuration=...
rmeddis@29 78 toneDuration+silenceDuration; % s
rmeddis@29 79 stim.phases='sin';
rmeddis@29 80 stim.type='tone';
rmeddis@29 81 stim.toneDuration=toneDuration;
rmeddis@29 82 stim.frequencies=frequency;
rmeddis@29 83 stim.amplitudesdB=leveldB;
rmeddis@29 84 stim.beginSilence=silenceDuration;
rmeddis@29 85 stim.rampOnDur=rampDuration;
rmeddis@29 86 % no offset ramp
rmeddis@29 87 stim.rampOffDur=rampDuration;
rmeddis@29 88 doPlot=0;
rmeddis@29 89 inputSignal=stimulusCreate(globalStimParams, stim, doPlot);
rmeddis@29 90 inputSignal=inputSignal(:,1)';
rmeddis@29 91
rmeddis@29 92 %% run the model
rmeddis@29 93 MAPparamsName=paramsName;
rmeddis@29 94
rmeddis@29 95 global DRNLoutput MOCattenuation ARattenuation
rmeddis@29 96 MAP1_14(inputSignal, sampleRate, BF, ...
rmeddis@29 97 MAPparamsName, AN_spikesOrProbability, paramChanges);
rmeddis@29 98
rmeddis@29 99 DRNLresponse=DRNLoutput;
rmeddis@29 100 peakAmp=max(max(...
rmeddis@29 101 DRNLresponse(:, end-round(length(DRNLresponse)/2):end)));
rmeddis@29 102 peakAmpBM(levelNo,freqNo)=peakAmp;
rmeddis@29 103 peakAmpBMdB(levelNo,freqNo)=...
rmeddis@29 104 20*log10(peakAmp/refBMdisplacement);
rmeddis@29 105 peakEfferent(levelNo,freqNo)=min(min(MOCattenuation));
rmeddis@29 106 peakAREfferent(levelNo,freqNo)=min(min(ARattenuation));
rmeddis@29 107
rmeddis@29 108 end % tone frequency
rmeddis@29 109 end % level
rmeddis@29 110
rmeddis@29 111 %% analyses results and plot
rmeddis@33 112 if length(relativeFrequencies)>2
rmeddis@33 113 maxRows=3;
rmeddis@33 114 else
rmeddis@33 115 maxRows=2;
rmeddis@33 116 end
rmeddis@29 117
rmeddis@29 118 % BM I/O plot (top panel)
rmeddis@29 119 figure(3)
rmeddis@33 120 subplot(maxRows,nBFs,BFno), cla
rmeddis@29 121 plot(levels,peakAmpBMdB, 'linewidth',2)
rmeddis@29 122 hold on, plot(levels, repmat(refBMdisplacement,1,length(levels)))
rmeddis@29 123 hold off
rmeddis@29 124 title(['BF=' num2str(BF,'%5.0f') ' - ' paramsName])
rmeddis@29 125 xlabel('level')
rmeddis@29 126 % set(gca,'xtick',levels), grid on
rmeddis@29 127 if length(levels)>1,xlim([min(levels) max(levels)]), end
rmeddis@29 128 ylabel(['dB re:' num2str(refBMdisplacement,'%6.1e') 'm'])
rmeddis@29 129 ylim([-20 50])
rmeddis@29 130 set(gca,'ytick',[-10 0 10 20 40])
rmeddis@29 131 grid on
rmeddis@29 132 % legend({num2str(stimulusFrequencies')}, 'location', 'EastOutside')
rmeddis@38 133 UTIL_printTabTable([levels' peakAmpBMdB peakAmpBM*1e9], ...
rmeddis@29 134 num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f')
rmeddis@29 135 finalSummary=[finalSummary peakAmpBMdB];
rmeddis@29 136
rmeddis@29 137 % Tuning curve
rmeddis@29 138 if length(relativeFrequencies)>2
rmeddis@33 139 figure(3), subplot(maxRows,nBFs, 2*nBFs+BFno)
rmeddis@38 140 contour(stimulusFrequencies,levels,peakAmpBM,...
rmeddis@38 141 [refBMdisplacement refBMdisplacement],'r','linewidth',4)
rmeddis@38 142 ylim([-10 40])
rmeddis@38 143
rmeddis@38 144 % contour(stimulusFrequencies,levels,peakAmpBM,...
rmeddis@38 145 % refBMdisplacement.*[1 5 10 50 100])
rmeddis@38 146 % ylim([-10 90])
rmeddis@38 147
rmeddis@29 148 title(['tuning curve at ' num2str(refBMdisplacement) 'm']);
rmeddis@29 149 ylabel('level (dB) at reference')
rmeddis@29 150 xlim([100 10000])
rmeddis@29 151 grid on
rmeddis@29 152 hold on
rmeddis@29 153 set(gca,'xscale','log')
rmeddis@29 154 end
rmeddis@29 155
rmeddis@29 156
rmeddis@29 157 % MOC contribution
rmeddis@29 158 figure(3)
rmeddis@33 159 subplot(maxRows,nBFs,nBFs+BFno), cla
rmeddis@29 160 plot(levels,20*log10(peakEfferent), 'linewidth',2)
rmeddis@38 161 ylabel('MOC (dB attenuation)'), xlabel('level (dB SPL)')
rmeddis@35 162 title(['MOC: (' AN_spikesOrProbability ') duration= ' ...
rmeddis@35 163 num2str(1000*toneDuration,'%5.0f') ' ms'])
rmeddis@29 164 grid on
rmeddis@29 165 if length(levels)>1, xlim([min(levels) max(levels)]), end
rmeddis@29 166
rmeddis@29 167 % AR contribution
rmeddis@29 168 hold on
rmeddis@29 169 plot(levels,20*log10(peakAREfferent), 'r')
rmeddis@29 170 hold off
rmeddis@29 171
rmeddis@29 172 end % best frequency
rmeddis@29 173
rmeddis@38 174
rmeddis@29 175 UTIL_showStructureSummary(DRNLParams, 'DRNLParams', 10)
rmeddis@29 176
rmeddis@29 177 UTIL_printTabTable([levels' finalSummary], ...
rmeddis@29 178 num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f')
rmeddis@34 179 diff(finalSummary)
rmeddis@34 180 if ~isempty(paramChanges)
rmeddis@34 181 disp(paramChanges)
rmeddis@34 182 end
rmeddis@34 183
rmeddis@38 184 toc
rmeddis@29 185 path(savePath);