annotate multithreshold 1.46/testBM.m @ 7:573c75007cf4

new intpow functions
author Ray Meddis <rmeddis@essex.ac.uk>
date Fri, 27 May 2011 14:29:28 +0100
parents f233164f4c86
children ecad0ea62b43
rev   line source
rmeddis@0 1 function testBM (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.phases='sin';
rmeddis@0 68 stim.type='tone';
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 % no offset ramp
rmeddis@0 75 stim.rampOffDur=rampDuration;
rmeddis@0 76 doPlot=0;
rmeddis@0 77 inputSignal=stimulusCreate(globalStimParams, stim, doPlot);
rmeddis@0 78 inputSignal=inputSignal(:,1)';
rmeddis@0 79
rmeddis@0 80 %% run the model
rmeddis@0 81 MAPparamsName=paramsName;
rmeddis@0 82 AN_spikesOrProbability='probability';
rmeddis@0 83 % spikes are slow but can be used to study MOC using IC units
rmeddis@0 84 AN_spikesOrProbability='spikes';
rmeddis@0 85
rmeddis@0 86 global DRNLoutput MOCattenuation ARattenuation
rmeddis@0 87 MAP1_14(inputSignal, sampleRate, BF, ...
rmeddis@0 88 MAPparamsName, AN_spikesOrProbability);
rmeddis@0 89
rmeddis@0 90 DRNLresponse=DRNLoutput;
rmeddis@0 91 peakAmp=max(max(...
rmeddis@0 92 DRNLresponse(:, end-round(length(DRNLresponse)/2):end)));
rmeddis@0 93 peakAmpBM(levelNo,freqNo)=peakAmp;
rmeddis@0 94 peakAmpBMdB(levelNo,freqNo)=...
rmeddis@0 95 20*log10(peakAmp/refBMdisplacement);
rmeddis@0 96 peakEfferent(levelNo,freqNo)=min(min(MOCattenuation));
rmeddis@0 97 peakAREfferent(levelNo,freqNo)=min(min(ARattenuation));
rmeddis@0 98
rmeddis@0 99 end % tone frequency
rmeddis@0 100 end % level
rmeddis@0 101
rmeddis@0 102 %% analyses results and plot
rmeddis@0 103
rmeddis@0 104 % BM I/O plot (top panel)
rmeddis@0 105 figure(3)
rmeddis@0 106 subplot(3,nBFs,BFno), cla
rmeddis@0 107 plot(levels,peakAmpBMdB, 'linewidth',2)
rmeddis@0 108 hold on, plot(levels, repmat(refBMdisplacement,1,length(levels)))
rmeddis@0 109 hold off
rmeddis@0 110 title(['BF=' num2str(BF,'%5.0f') ' - ' paramsName])
rmeddis@0 111 xlabel('level')
rmeddis@0 112 % set(gca,'xtick',levels), grid on
rmeddis@0 113 if length(levels)>1,xlim([min(levels) max(levels)]), end
rmeddis@0 114 ylabel(['dB re:' num2str(refBMdisplacement,'%6.1e') 'm'])
rmeddis@0 115 ylim([-20 50])
rmeddis@0 116 set(gca,'ytick',[-10 0 10 20 40])
rmeddis@0 117 grid on
rmeddis@0 118 % legend({num2str(stimulusFrequencies')}, 'location', 'EastOutside')
rmeddis@0 119 UTIL_printTabTable([levels' peakAmpBMdB], ...
rmeddis@0 120 num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f')
rmeddis@0 121 finalSummary=[finalSummary peakAmpBMdB];
rmeddis@0 122
rmeddis@0 123 % Tuning curve
rmeddis@0 124 if length(relativeFrequencies)>2
rmeddis@0 125 figure(3), subplot(3,nBFs, nBFs+BFno)
rmeddis@0 126 % contour(stimulusFrequencies,levels,peakAmpBM,...
rmeddis@0 127 % [refBMdisplacement refBMdisplacement],'r')
rmeddis@0 128 contour(stimulusFrequencies,levels,peakAmpBM,...
rmeddis@0 129 refBMdisplacement.*[1 5 10 50 100])
rmeddis@0 130 title(['tuning curve at ' num2str(refBMdisplacement) 'm']);
rmeddis@0 131 ylabel('level (dB) at reference')
rmeddis@0 132 xlim([100 10000])
rmeddis@0 133 grid on
rmeddis@0 134 hold on
rmeddis@0 135 set(gca,'xscale','log')
rmeddis@0 136 end
rmeddis@0 137
rmeddis@0 138
rmeddis@0 139 % MOC contribution
rmeddis@0 140 figure(3)
rmeddis@0 141 subplot(3,nBFs,2*nBFs+BFno), cla
rmeddis@0 142 plot(levels,20*log10(peakEfferent), 'linewidth',2)
rmeddis@0 143 ylabel('MOC (dB attenuation)'), xlabel('level')
rmeddis@0 144 title(['peak MOC: model= ' AN_spikesOrProbability])
rmeddis@0 145 grid on
rmeddis@0 146 if length(levels)>1, xlim([min(levels) max(levels)]), end
rmeddis@0 147
rmeddis@0 148 % AR contribution
rmeddis@0 149 hold on
rmeddis@0 150 plot(levels,20*log10(peakAREfferent), 'r')
rmeddis@0 151 hold off
rmeddis@0 152
rmeddis@0 153 end % best frequency
rmeddis@0 154
rmeddis@0 155 UTIL_showStructureSummary(DRNLParams, 'DRNLParams', 10)
rmeddis@0 156
rmeddis@0 157 UTIL_printTabTable([levels' finalSummary], ...
rmeddis@0 158 num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f')
rmeddis@0 159
rmeddis@0 160 path(savePath);