rmeddis@38: % function MAPtwoToneDemo rmeddis@38: % Not for distribution but code worth keeping rmeddis@38: % Demonstration of two-tone suppression in the AN using a rmeddis@38: % single channel rmeddis@38: % rmeddis@38: rmeddis@38: dbstop if error rmeddis@38: % create access to all MAP 1_8 facilities rmeddis@38: % addpath ('..\modules', '..\utilities', '..\parameterStore', '..\wavFileStore' , '..\testPrograms') rmeddis@38: addpath (['..' filesep 'modules'], ['..' filesep 'utilities'], ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'] , ['..' filesep 'testPrograms']) rmeddis@38: rmeddis@38: moduleSequence= 1:7; % up to the AN rmeddis@38: figure(3), clf rmeddis@38: primaryToneFrequency=2000; rmeddis@38: suppressorFrequency=primaryToneFrequency*1.5; rmeddis@38: rmeddis@38: primaryDB=30; rmeddis@38: suppressors=20:10:80; rmeddis@38: frameCount=0; rmeddis@38: for suppressorDB=suppressors rmeddis@38: frameCount=frameCount+1; rmeddis@38: lowestBF=1000; highestBF= 5000; numChannels=30; rmeddis@38: BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels)); rmeddis@38: BFlist=2000; rmeddis@38: duration=.020; % seconds rmeddis@38: sampleRate= 40000; % Hz (higher sample rate needed for BF>8000 Hz) rmeddis@38: dt=1/sampleRate; % seconds rmeddis@38: rmeddis@38: % for conditionNo=1:3 % probe alone/ suppressor alone/ combined rmeddis@38: for conditionNo=1:3 % probe alone/ suppressor alone/ combined rmeddis@38: switch conditionNo rmeddis@38: case 1 rmeddis@38: primaryLevelDB=primaryDB; rmeddis@38: suppressorLevelDB= -100; rmeddis@38: plotGuide.subPlotNo= 1; % initialize subplot count rmeddis@38: figureTitle=['probe alone: ' num2str(primaryToneFrequency) ' Hz; ' num2str(primaryLevelDB) ' dB SPL']; rmeddis@38: rmeddis@38: case 2 rmeddis@38: primaryLevelDB=-100; rmeddis@38: suppressorLevelDB=suppressorDB; rmeddis@38: plotGuide.subPlotNo= 2; % initialize subplot count rmeddis@38: figureTitle=['suppressor alone: ' num2str(suppressorFrequency) ' Hz; ' num2str(suppressorLevelDB) ' dB SPL']; rmeddis@38: case 3 rmeddis@38: primaryLevelDB=primaryDB; rmeddis@38: suppressorLevelDB=suppressorDB; rmeddis@38: plotGuide.subPlotNo= 3; % initialize subplot count rmeddis@38: figureTitle=['probe + suppressor']; rmeddis@38: end rmeddis@38: rmeddis@38: % primary BF tone rmeddis@38: time1=dt: dt: duration; rmeddis@38: amp=10^(primaryLevelDB/20)*28e-6; rmeddis@38: inputSignal=amp*sin(2*pi*primaryToneFrequency*time1); rmeddis@38: rampDuration=.005; rampTime=dt:dt:rampDuration; rmeddis@38: ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ones(1,length(time1)-length(rampTime))]; rmeddis@38: inputSignal=inputSignal.*ramp; rmeddis@38: inputSignal=inputSignal.*fliplr(ramp); rmeddis@38: rmeddis@38: % suppressor rmeddis@38: tone2Duration=duration/2; % s rmeddis@38: time2= dt: dt: tone2Duration; rmeddis@38: % B: tone on rmeddis@38: amp=10^(suppressorLevelDB/20)*28e-6; rmeddis@38: inputSignal2=amp*sin(2*pi*suppressorFrequency*time2); rmeddis@38: rampDuration=.005; rampTime=dt:dt:rampDuration; rmeddis@38: ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ones(1,length(time2)-length(rampTime))]; rmeddis@38: inputSignal2=inputSignal2.*ramp; rmeddis@38: % A: initial silence (delay to suppressor) rmeddis@38: silence=zeros(1,length(time2)); rmeddis@38: inputSignal2=[silence inputSignal2]; rmeddis@38: rmeddis@38: % add tone and suppressor components rmeddis@38: inputSignal=inputSignal+inputSignal2; rmeddis@38: rmeddis@38: % specify model parameters rmeddis@38: method=MAPparamsDEMO(BFlist, sampleRate); rmeddis@38: % parameter change (must be global to take effect) rmeddis@38: global AN_IHCsynapseParams rmeddis@38: AN_IHCsynapseParams.mode= 'probability'; rmeddis@38: % method.useEfferent=0; rmeddis@38: rmeddis@38: method.plotGraphs= 1; % please plot rmeddis@38: rmeddis@38: figure(4), subplot(3,1,conditionNo) rmeddis@38: plot(time1, inputSignal, 'k')% ************* rmeddis@38: rmeddis@38: [ANresponse, method, A]=MAPsequenceSeg(inputSignal, method, moduleSequence); rmeddis@38: response{conditionNo}=ANresponse; rmeddis@38: % F(frameCount) = getframe(gcf); rmeddis@38: end rmeddis@38: rmeddis@38: % peakResponse=max(max([response{1} response{2} response{3}])); rmeddis@38: % figure(3), subplot(4,1,1) rmeddis@38: % mesh((response{1}), [0 peakResponse]) rmeddis@38: % title(['primary: ' num2str(primaryDB) ' dB SPL']) rmeddis@38: % zlim([0 5000]), view([-28 36]) rmeddis@38: % rmeddis@38: % figure(3), subplot(4,1,2) rmeddis@38: % mesh((response{2}), [0 peakResponse]) rmeddis@38: % title(['suppressor: ' num2str(suppressorDB) ' dB SPL']) rmeddis@38: % zlim([0 5000]), view([-28 36]) rmeddis@38: % rmeddis@38: % figure(3), subplot(4,1,3) rmeddis@38: % mesh((response{3}), [0 peakResponse]) rmeddis@38: % title([' primary + suppressor ']) rmeddis@38: % zlim([0 5000]), view([-28 36]) rmeddis@38: % rmeddis@38: % figure(3), subplot(4,1,4) rmeddis@38: % sum= response{3}-response{1}-response{2}; rmeddis@38: % mesh(sum) rmeddis@38: % zlim([-2000 2000]) rmeddis@38: % title(' difference matrix (combined - primary - suppressor)') rmeddis@38: % view([-28 20]) rmeddis@38: % disp( [num2str([ suppressorDB primaryDB max(max(sum))])] ) rmeddis@38: % rmeddis@38: % colormap(jet) rmeddis@38: pause(1) rmeddis@38: end rmeddis@38: rmeddis@38: figure(4) rmeddis@38: xlabel('time (s)') rmeddis@38: figure(3) rmeddis@38: xlabel('time (s)') rmeddis@38: rmeddis@38: % figure(99), movie(F, 1, 1) rmeddis@38: % UTIL_showAllMAPStructures