rmeddis@38: % function test2toneMovie rmeddis@38: % rmeddis@38: % Demonstration of two-tone suppression in the AN using a rmeddis@38: % F1 tone suppressed by a 1.5*F1 kHz tone rmeddis@38: % rmeddis@38: rmeddis@38: global ANprobRateOutput DRNLoutput rmeddis@38: dbstop if error rmeddis@38: restorePath=path; rmeddis@38: addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'], ... rmeddis@38: ['..' filesep 'utilities']) rmeddis@38: figure(5), clf rmeddis@38: rmeddis@38: disp('') rmeddis@38: primaryToneFrequency=8000; rmeddis@38: rmeddis@38: probedBs=10 :10: 50; rmeddis@38: nProbeLevels=length(probedBs); rmeddis@38: rmeddis@38: % disp(['F1 F1 level= ' num2str([primaryToneFrequency probedB])]) rmeddis@38: rmeddis@38: suppressorLevels=0:10:80; rmeddis@38: rmeddis@38: lowestBF=250; highestBF= 8000; numChannels=21; rmeddis@38: BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels)); rmeddis@38: % fix so that probe is middle range and is at a BF rmeddis@38: BFlist=BFlist*primaryToneFrequency/2000; rmeddis@38: suppressorFrequencies=BFlist; rmeddis@38: BFchannel=find(round(BFlist)==round(primaryToneFrequency)); rmeddis@38: rmeddis@38: sampleRate= 100000; % Hz (higher sample rate needed for BF>8000 Hz) rmeddis@38: dt=1/sampleRate; % seconds rmeddis@38: rmeddis@38: duration=.050; % seconds rmeddis@38: tone2Duration=duration/2; % s rmeddis@38: startSilenceDuration=0.010; rmeddis@38: startSilence=... rmeddis@38: zeros(1,startSilenceDuration*sampleRate); rmeddis@38: suppressorStartsPTR=... rmeddis@38: round((startSilenceDuration+duration/2)*sampleRate); rmeddis@38: rmeddis@38: probedBCount=0; rmeddis@38: for probedB=probedBs rmeddis@38: probedBCount=probedBCount+1; rmeddis@38: rmeddis@38: peakResponse= zeros(length(suppressorLevels),length(suppressorFrequencies)); rmeddis@38: suppFreqCount=0; rmeddis@38: for suppressorFrequency=suppressorFrequencies rmeddis@38: suppFreqCount=suppFreqCount+1; rmeddis@38: rmeddis@38: suppressorLevelCount=0; rmeddis@38: for suppressorDB=suppressorLevels rmeddis@38: suppressorLevelCount=suppressorLevelCount+1; rmeddis@38: rmeddis@38: % primary + suppressor rmeddis@38: primaryLevelDB=probedB; rmeddis@38: suppressorLevelDB=suppressorDB; rmeddis@38: 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: 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: inputSignal2=inputSignal2.*fliplr(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: inputSignal=... rmeddis@38: [startSilence inputSignal ]; rmeddis@38: rmeddis@38: % run MAP rmeddis@38: MAPparamsName='Normal'; rmeddis@38: AN_spikesOrProbability='probability'; rmeddis@38: paramChanges={'IHCpreSynapseParams.tauCa=80e-6;'}; rmeddis@38: MAP1_14(inputSignal, sampleRate, BFlist, ... rmeddis@38: MAPparamsName, AN_spikesOrProbability, paramChanges); rmeddis@38: rmeddis@38: response=ANprobRateOutput; rmeddis@38: peakResponse(suppressorLevelCount,suppFreqCount)=... rmeddis@38: mean(response(BFchannel,suppressorStartsPTR:end)); rmeddis@38: disp(['F2 level= ', num2str([suppressorFrequency suppressorDB ... rmeddis@38: peakResponse(suppressorLevelCount,suppFreqCount)])]) rmeddis@38: rmeddis@38: rmeddis@38: %% make movie rmeddis@38: figure(6), subplot(4,1,2) rmeddis@38: axis tight rmeddis@38: set(gca,'nextplot','replacechildren'); rmeddis@38: plot(dt:dt:dt*length(inputSignal), inputSignal, 'k') rmeddis@38: ylim([-.5 .5]) rmeddis@38: rmeddis@38: figure(6), subplot(2,1,2) rmeddis@38: PSTHbinWidth=0.010; rmeddis@38: PSTH= UTIL_PSTHmakerb(... rmeddis@38: response, dt, PSTHbinWidth); rmeddis@38: [nY nX]=size(PSTH); rmeddis@38: time=PSTHbinWidth*(0:nX-1); rmeddis@38: surf(time, BFlist, PSTH) rmeddis@38: zlim([0 500]), rmeddis@38: caxis([0 500]) rmeddis@38: shading interp rmeddis@38: colormap(jet) rmeddis@38: set(gca, 'yScale','log') rmeddis@38: xlim([0 max(time)+dt]) rmeddis@38: ylim([0 max(BFlist)]) rmeddis@38: view([0 90]) % view([-8 68]) rmeddis@38: title([' primary + suppressor ']) rmeddis@38: rmeddis@38: end rmeddis@38: end rmeddis@38: rmeddis@38: %% plot matrix rmeddis@38: rmeddis@38: peakResponse=peakResponse/peakResponse(1,1); rmeddis@38: rmeddis@38: figure(5), subplot(2,nProbeLevels, probedBCount) rmeddis@38: surf(suppressorFrequencies,suppressorLevels,peakResponse) rmeddis@38: shading interp rmeddis@38: view([0 90]) rmeddis@38: set(gca,'Xscale','log') rmeddis@38: xlim([min(suppressorFrequencies) max(suppressorFrequencies)]) rmeddis@38: set(gca,'Xtick', [1000 4000],'xticklabel',{'1000', '4000'}) rmeddis@38: title([num2str(primaryToneFrequency) ' Hz']) rmeddis@38: rmeddis@38: subplot(2,nProbeLevels,nProbeLevels+probedBCount) rmeddis@38: contourf(suppressorFrequencies,suppressorLevels,peakResponse, ... rmeddis@38: [.1:.1:.9 0.99] ) rmeddis@38: set(gca,'Xscale','log') rmeddis@38: set(gca,'Xtick', [1000 4000],'xticklabel',{'1000', '4000'}) rmeddis@38: set(gcf, 'name',['primaryToneFrequency= ' num2str(primaryToneFrequency)]) rmeddis@38: title([num2str(probedB) ' dB']) rmeddis@38: end rmeddis@38: rmeddis@38: path=restorePath;