rmeddis@38: function testEfferent(probeFrequency,BFlist, levels, ... rmeddis@38: paramsName,paramChanges) rmeddis@38: % generates rate/level functions for AAR and MOC rmeddis@38: % rmeddis@38: % e.g. rmeddis@38: % testEfferent(1000,1000, -10:10:80,'Normal',[]); rmeddis@38: rmeddis@38: global dtSpikes MOCattenuation ANtauCas rmeddis@38: rmeddis@38: tic rmeddis@38: dbstop if error rmeddis@38: restorePath=path; rmeddis@38: addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ... rmeddis@38: ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],... rmeddis@38: ['..' filesep 'testPrograms']) rmeddis@38: rmeddis@38: if nargin<5, paramChanges=[]; end rmeddis@38: if nargin<4, paramsName='Normal'; end rmeddis@38: if nargin<3, levels=-10:10:100; end rmeddis@38: if nargin==0, rmeddis@38: probeFrequency=1000; rmeddis@38: probeFrequency=100:100:8000; rmeddis@38: lowestBF=250; highestBF= 8000; numChannels=21; rmeddis@38: % 21 chs (250-8k)includes BFs at 250 500 1000 2000 4000 8000 rmeddis@38: BFlist=round(logspace(log10(lowestBF),log10(highestBF),numChannels)); rmeddis@38: keyChannel=round(numChannels/2); rmeddis@38: % BFlist=1000; rmeddis@38: end rmeddis@38: nLevels=length(levels); rmeddis@38: rmeddis@38: toneDuration=.2; rampDuration=0.002; silenceDuration=.02; rmeddis@38: localPSTHbinwidth=0.001; rmeddis@38: rmeddis@38: rmeddis@38: sampleRate=64000; dt=1/sampleRate; rmeddis@38: rmeddis@38: %% delare 'showMap' options to control graphical output rmeddis@38: showMapOptions.printModelParameters=0; % prints all parameters rmeddis@38: showMapOptions.showModelOutput=0; % plot of all stages rmeddis@38: showMapOptions.printFiringRates=1; % prints stage activity levels rmeddis@38: showMapOptions.showACF=0; % shows SACF (probability only) rmeddis@38: showMapOptions.showEfferent=1; % tracks of AR and MOC rmeddis@38: showMapOptions.surfAN=0; % 2D plot of HSR response rmeddis@38: showMapOptions.surfSpikes=0; % 2D plot of spikes histogram rmeddis@38: showMapOptions.ICrates=0; % IC rates by CNtauGk rmeddis@38: rmeddis@38: rmeddis@38: %% pre-allocate storage rmeddis@38: AN_HSRonset=zeros(nLevels,1); rmeddis@38: AN_HSRsaturated=zeros(nLevels,1); rmeddis@38: AN_LSRonset=zeros(nLevels,1); rmeddis@38: AN_LSRsaturated=zeros(nLevels,1); rmeddis@38: CNLSRrate=zeros(nLevels,1); rmeddis@38: CNHSRsaturated=zeros(nLevels,1); rmeddis@38: ICHSRsaturated=zeros(nLevels,1); rmeddis@38: ICLSRsaturated=zeros(nLevels,1); rmeddis@38: vectorStrength=zeros(nLevels,1); rmeddis@38: rmeddis@38: AR=zeros(nLevels,1); rmeddis@38: MOC=zeros(nLevels,1); rmeddis@38: maxMOC=[]; rmeddis@38: rmeddis@38: %% main computational loop (vary level) rmeddis@38: levelNo=0; rmeddis@38: for leveldB=levels rmeddis@38: levelNo=levelNo+1; rmeddis@38: amp=28e-6*10^(leveldB/20); rmeddis@38: fprintf('%4.0f\t', leveldB) rmeddis@38: rmeddis@38: %% generate tone and silences rmeddis@38: time=dt:dt:toneDuration; rmeddis@38: rampTime=dt:dt:rampDuration; rmeddis@38: ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ... rmeddis@38: ones(1,length(time)-length(rampTime))]; rmeddis@38: ramp=ramp.*fliplr(ramp); rmeddis@38: rmeddis@38: silence=zeros(1,round(silenceDuration/dt)); rmeddis@38: rmeddis@38: inputSignal=amp*sin(2*pi*probeFrequency'*time); rmeddis@38: inputSignal=sum(inputSignal); rmeddis@38: inputSignal= ramp.*inputSignal; rmeddis@38: inputSignal=[silence inputSignal]; rmeddis@38: rmeddis@38: %% run the model rmeddis@38: AN_spikesOrProbability='spikes'; rmeddis@38: % nExistingParamChanges=length(paramChanges); rmeddis@38: % paramChanges{nExistingParamChanges+1}=... rmeddis@38: % ['AN_IHCsynapseParams.spikesTargetSampleRate=' ... rmeddis@38: % num2str(spikesSampleRate) ';']; rmeddis@38: rmeddis@38: MAP1_14(inputSignal, 1/dt, BFlist, ... rmeddis@38: paramsName, AN_spikesOrProbability, paramChanges); rmeddis@38: rmeddis@38: maxMOC=[maxMOC min(MOCattenuation(keyChannel,:))]; rmeddis@38: UTIL_showMAP(showMapOptions) rmeddis@38: pause(0.1) rmeddis@38: rmeddis@38: %% Auditory nerve evaluate and display (Fig. 5) rmeddis@38: %LSR (same as HSR if no LSR fibers present) rmeddis@38: nTaus=length(ANtauCas); rmeddis@38: rmeddis@38: rmeddis@38: end % level rmeddis@38: rmeddis@38: %% MOC atten/ level function rmeddis@38: figure(21), subplot(2,1,2) rmeddis@38: plot(levels, 20*log10(maxMOC), 'k'), hold off rmeddis@38: title(' MOC dB attenuation'), ylabel('dB attenuation') rmeddis@38: ylim([-30 0]) rmeddis@38: figure(21), subplot(2,1,1) rmeddis@38: plot(levels, maxMOC, 'k'), hold off rmeddis@38: title(' MOC attenuation (scalar)'), ylabel('attenuation (scalar)') rmeddis@38: ylim([0 1]) rmeddis@38: rmeddis@38: set(gcf,'name','MOC atten/level') rmeddis@38: rmeddis@38: path(restorePath) rmeddis@38: toc