rmeddis@38: function test_MAP1_14RAM rmeddis@38: rmeddis@38: global dt DRNLoutput rmeddis@38: global DRNLParams TMoutput rmeddis@38: global peakOutputDisp alignedOutput toneFrequencyList levels leveldBSPL logOutput rmeddis@38: rmeddis@38: rmeddis@38: dbstop if error rmeddis@38: restorePath=path; rmeddis@38: addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'], ... rmeddis@38: ['..' filesep 'utilities']) rmeddis@38: figure(2), clf rmeddis@38: rmeddis@38: %% # BFlist is the BF of the filter to be assessed rmeddis@38: BFlist=8000; rmeddis@38: numChannels=1; rmeddis@38: rmeddis@38: % define probe frequencies rmeddis@38: numFs=6; rmeddis@38: lowestF=BFlist/5; highestF= BFlist*1.4; rmeddis@38: lowestF=4000; highestF= 12600; rmeddis@38: toneFrequencyList=round(logspace(log10(lowestF), log10(highestF), numFs)); rmeddis@38: rmeddis@38: %% # parameter file name rmeddis@38: MAPparamsName='Normal'; rmeddis@38: rmeddis@38: %% # probability representation rmeddis@38: AN_spikesOrProbability='probability'; rmeddis@38: rmeddis@38: %% # tone duration rmeddis@38: sampleRate= 100000; rmeddis@38: duration=0.0200; % seconds rmeddis@38: rampDuration=.005; % raised cosine ramp (seconds) rmeddis@38: beginSilence=0.050; rmeddis@38: endSilence=0.050; rmeddis@38: rmeddis@38: %% # levels rmeddis@38: % probe details rmeddis@38: levels=0:10:80; rmeddis@38: % levels=80; rmeddis@38: rmeddis@38: %% # change model parameters rmeddis@38: % Parameter changes can be used to change one or more model parameters rmeddis@38: % *after* the MAPparams file has been read rmeddis@38: rmeddis@38: % adjust linear path gain (previously g=100) rmeddis@38: % switch off all efferent effects rmeddis@38: paramChanges={... rmeddis@38: 'DRNLParams.rateToAttenuationFactorProb = 0.00; ',... rmeddis@38: 'OMEParams.rateToAttenuationFactorProb=0.0;', ... rmeddis@38: 'DRNLParams.ctBMdB = -10;'... rmeddis@38: 'DRNLParams.g=200;'... rmeddis@38: 'DRNLParams.linCFs=6500;'... rmeddis@38: 'DRNLParams.linBWs=2000;'... rmeddis@38: }; rmeddis@38: % 'DRNLParams.a=0;'... rmeddis@38: rmeddis@38: rmeddis@38: %% delare 'showMap' options to control graphical output rmeddis@38: showMapOptions.printModelParameters=0; % prints all parameters rmeddis@38: showMapOptions.showModelOutput=1; % plot of all stages rmeddis@38: showMapOptions.printFiringRates=0; % prints stage activity levels rmeddis@38: showMapOptions.showACF=0; % shows SACF (probability only) rmeddis@38: showMapOptions.showEfferent=0; % tracks of AR and MOC rmeddis@38: showMapOptions.surfProbability=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: showMapOptions.fileName=[]; rmeddis@38: rmeddis@38: rmeddis@38: %% now vary level and frequency rmeddis@38: peakOutputDisp=zeros(length(levels),length(toneFrequencyList)); rmeddis@38: peakStapesDisp=zeros(length(levels),length(toneFrequencyList)); rmeddis@38: levelNo=0; rmeddis@38: for leveldBSPL=levels rmeddis@38: levelNo=levelNo+1; rmeddis@38: disp(['level: ' num2str(leveldBSPL)]) rmeddis@38: freqNo=0; rmeddis@38: for toneFrequency=toneFrequencyList rmeddis@38: freqNo=freqNo+1; rmeddis@38: rmeddis@38: %% Generate stimuli rmeddis@38: dt=1/sampleRate; rmeddis@38: time=dt: dt: duration; rmeddis@38: inputSignal=sum(sin(2*pi*toneFrequency'*time), 1); rmeddis@38: amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak) rmeddis@38: inputSignal=amp*inputSignal; rmeddis@38: % apply ramps rmeddis@38: if rampDuration>0.5*duration, rampDuration=duration/2; end 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: inputSignal=inputSignal.*ramp; rmeddis@38: ramp=fliplr(ramp); rmeddis@38: inputSignal=inputSignal.*ramp; rmeddis@38: % add silence rmeddis@38: intialSilence= zeros(1,round(beginSilence/dt)); rmeddis@38: finalSilence= zeros(1,round(endSilence/dt)); rmeddis@38: inputSignal= [intialSilence inputSignal finalSilence]; rmeddis@38: rmeddis@38: %% run the model rmeddis@38: % fprintf('\n') rmeddis@38: % disp([num2str(numChannels) ' channel model: ' AN_spikesOrProbability]) rmeddis@38: % disp('Computing ...') rmeddis@38: rmeddis@38: MAP1_14(inputSignal, sampleRate, BFlist, ... rmeddis@38: MAPparamsName, AN_spikesOrProbability, paramChanges); rmeddis@38: rmeddis@38: peakOutputDisp(levelNo,freqNo)=max(DRNLoutput); rmeddis@38: peakStapesDisp(levelNo,freqNo)=max(TMoutput); rmeddis@38: rmeddis@38: %% the model run is complete. Now display the results rmeddis@38: % UTIL_showMAP(showMapOptions, paramChanges) rmeddis@38: end % probe frequencies rmeddis@38: figure(2), loglog(toneFrequencyList, peakOutputDisp), hold on rmeddis@38: xlabel('frequency') rmeddis@38: ylabel('peak DRNL displacement (m)') rmeddis@38: rmeddis@38: end % levels rmeddis@38: %% alignmed plot rmeddis@38: rmeddis@38: rmeddis@38: x=peakOutputDisp./peakStapesDisp; rmeddis@38: logOutput=20*log10(x.*repmat((2*pi*toneFrequencyList),length(levels),1)); rmeddis@38: alignedOutput=logOutput-repmat(logOutput(:,1), 1, length(toneFrequencyList)); rmeddis@38: figure(3), clf, semilogx(toneFrequencyList, alignedOutput), hold on rmeddis@38: ylim([-20 80]) rmeddis@38: xlim([2000 20000]) rmeddis@38: % legend(num2str(levels')) rmeddis@38: xlabel('frequency') rmeddis@38: ylabel('peak DRNL velocity (dB)') rmeddis@38: title(['level ' num2str(leveldBSPL) ' dB SPL']) rmeddis@38: rmeddis@38: disp(['level=' num2str(leveldBSPL)]) rmeddis@38: disp(['toneFrequency=' num2str(toneFrequency)]) rmeddis@38: rmeddis@38: disp(['attenuation factor =' ... rmeddis@38: num2str(DRNLParams.rateToAttenuationFactor, '%5.3f') ]) rmeddis@38: disp(['attenuation factor (probability)=' ... rmeddis@38: num2str(DRNLParams.rateToAttenuationFactorProb, '%5.3f') ]) rmeddis@38: disp(AN_spikesOrProbability) rmeddis@38: disp(paramChanges) rmeddis@38: rmeddis@38: % UTIL_printTabTable([toneFrequencyList' peakOutputDisp']) rmeddis@38: rmeddis@38: path(restorePath) rmeddis@38: