annotate testPrograms/testBM.m @ 31:c54a34161e4a

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