annotate testPrograms/MAPtwoToneDemo.m @ 38:c2204b18f4a2 tip

End nov big change
author Ray Meddis <rmeddis@essex.ac.uk>
date Mon, 28 Nov 2011 13:34:28 +0000
parents
children
rev   line source
rmeddis@38 1 % function MAPtwoToneDemo
rmeddis@38 2 %
rmeddis@38 3 % Demonstration of two-tone suppression in the AN using a
rmeddis@38 4 % F1 tone suppressed by a 1.5*F1 kHz tone
rmeddis@38 5 %
rmeddis@38 6
rmeddis@38 7 global ANprobRateOutput DRNLoutput
rmeddis@38 8 dbstop if error
rmeddis@38 9 restorePath=path;
rmeddis@38 10 addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'], ...
rmeddis@38 11 ['..' filesep 'utilities'])
rmeddis@38 12 figure(5), clf
rmeddis@38 13
rmeddis@38 14 disp('')
rmeddis@38 15 primaryToneFrequency=2000;
rmeddis@38 16
rmeddis@38 17 probedBs=[-100 20 :20: 90];
rmeddis@38 18 nProbeLevels=length(probedBs);
rmeddis@38 19
rmeddis@38 20 % disp(['F1 F1 level= ' num2str([primaryToneFrequency probedB])])
rmeddis@38 21
rmeddis@38 22 suppressorLevels=0:10:80;
rmeddis@38 23 suppressorLevels=0:10:80;
rmeddis@38 24
rmeddis@38 25 lowestBF=250; highestBF= 8000; numChannels=21;
rmeddis@38 26 BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
rmeddis@38 27
rmeddis@38 28 suppressorFrequencies=BFlist;
rmeddis@38 29 BFchannel=find(BFlist==primaryToneFrequency);
rmeddis@38 30
rmeddis@38 31 sampleRate= 40000; % Hz (higher sample rate needed for BF>8000 Hz)
rmeddis@38 32 dt=1/sampleRate; % seconds
rmeddis@38 33
rmeddis@38 34 duration=.050; % seconds
rmeddis@38 35 tone2Duration=duration/2; % s
rmeddis@38 36 startSilenceDuration=0.010;
rmeddis@38 37 startSilence=...
rmeddis@38 38 zeros(1,startSilenceDuration*sampleRate);
rmeddis@38 39 suppressorStartsPTR=...
rmeddis@38 40 round((startSilenceDuration+duration/2)*sampleRate);
rmeddis@38 41
rmeddis@38 42 probedBCount=0;
rmeddis@38 43 for probedB=probedBs
rmeddis@38 44 probedBCount=probedBCount+1;
rmeddis@38 45
rmeddis@38 46 peakResponse= zeros(length(suppressorLevels),length(suppressorFrequencies));
rmeddis@38 47 suppFreqCount=0;
rmeddis@38 48 for suppressorFrequency=suppressorFrequencies
rmeddis@38 49 suppFreqCount=suppFreqCount+1;
rmeddis@38 50
rmeddis@38 51 suppressorLevelCount=0;
rmeddis@38 52 for suppressorDB=suppressorLevels
rmeddis@38 53 suppressorLevelCount=suppressorLevelCount+1;
rmeddis@38 54
rmeddis@38 55 % primary + suppressor
rmeddis@38 56 primaryLevelDB=probedB;
rmeddis@38 57 suppressorLevelDB=suppressorDB;
rmeddis@38 58
rmeddis@38 59
rmeddis@38 60 % primary BF tone
rmeddis@38 61 time1=dt: dt: duration;
rmeddis@38 62 amp=10^(primaryLevelDB/20)*28e-6;
rmeddis@38 63 inputSignal=amp*sin(2*pi*primaryToneFrequency*time1);
rmeddis@38 64 rampDuration=.005; rampTime=dt:dt:rampDuration;
rmeddis@38 65 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ones(1,length(time1)-length(rampTime))];
rmeddis@38 66 inputSignal=inputSignal.*ramp;
rmeddis@38 67 inputSignal=inputSignal.*fliplr(ramp);
rmeddis@38 68
rmeddis@38 69 % suppressor
rmeddis@38 70 time2= dt: dt: tone2Duration;
rmeddis@38 71 % B: tone on
rmeddis@38 72 amp=10^(suppressorLevelDB/20)*28e-6;
rmeddis@38 73 inputSignal2=amp*sin(2*pi*suppressorFrequency*time2);
rmeddis@38 74 rampDuration=.005; rampTime=dt:dt:rampDuration;
rmeddis@38 75 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ones(1,length(time2)-length(rampTime))];
rmeddis@38 76 inputSignal2=inputSignal2.*ramp;
rmeddis@38 77 inputSignal2=inputSignal2.*fliplr(ramp);
rmeddis@38 78 % A: initial silence (delay to suppressor)
rmeddis@38 79 silence=zeros(1,length(time2));
rmeddis@38 80 inputSignal2=[silence inputSignal2];
rmeddis@38 81
rmeddis@38 82 % add tone and suppressor components
rmeddis@38 83 inputSignal=inputSignal+inputSignal2;
rmeddis@38 84
rmeddis@38 85 inputSignal=...
rmeddis@38 86 [startSilence inputSignal ];
rmeddis@38 87
rmeddis@38 88 % run MAP
rmeddis@38 89 MAPparamsName='Normal';
rmeddis@38 90 AN_spikesOrProbability='probability';
rmeddis@38 91 paramChanges={'IHCpreSynapseParams.tauCa=80e-6;'};
rmeddis@38 92 MAP1_14(inputSignal, sampleRate, BFlist, ...
rmeddis@38 93 MAPparamsName, AN_spikesOrProbability, paramChanges);
rmeddis@38 94
rmeddis@38 95 response=ANprobRateOutput;
rmeddis@38 96 peakResponse(suppressorLevelCount,suppFreqCount)=...
rmeddis@38 97 mean(response(BFchannel,suppressorStartsPTR:end));
rmeddis@38 98 disp(['F2 level= ', num2str([suppressorFrequency suppressorDB ...
rmeddis@38 99 peakResponse(suppressorLevelCount,suppFreqCount)])])
rmeddis@38 100
rmeddis@38 101
rmeddis@38 102 %% make movie
rmeddis@38 103 figure(6), subplot(4,1,2)
rmeddis@38 104 axis tight
rmeddis@38 105 set(gca,'nextplot','replacechildren');
rmeddis@38 106 plot(dt:dt:dt*length(inputSignal), inputSignal, 'k')
rmeddis@38 107 title('probe - suppressor')
rmeddis@38 108 ylim([-.5 .5])
rmeddis@38 109
rmeddis@38 110 figure(6), subplot(2,1,2)
rmeddis@38 111 PSTHbinWidth=0.010;
rmeddis@38 112 PSTH= UTIL_PSTHmakerb(...
rmeddis@38 113 response, dt, PSTHbinWidth);
rmeddis@38 114 [nY nX]=size(PSTH);
rmeddis@38 115 time=PSTHbinWidth*(0:nX-1);
rmeddis@38 116 surf(time, BFlist, PSTH)
rmeddis@38 117 zlim([0 500]),
rmeddis@38 118 caxis([0 500])
rmeddis@38 119 shading interp
rmeddis@38 120 colormap(jet)
rmeddis@38 121 set(gca, 'yScale','log')
rmeddis@38 122 xlim([0 max(time)+dt])
rmeddis@38 123 ylim([0 max(BFlist)])
rmeddis@38 124 view([0 90]) % view([-8 68])
rmeddis@38 125 title('probe - suppressor')
rmeddis@38 126 pause(0.05)
rmeddis@38 127 end
rmeddis@38 128 end
rmeddis@38 129
rmeddis@38 130 %% plot matrix
rmeddis@38 131
rmeddis@38 132 peakResponse=peakResponse/peakResponse(1,1);
rmeddis@38 133
rmeddis@38 134 figure(5), subplot(2,nProbeLevels, probedBCount)
rmeddis@38 135 surf(suppressorFrequencies,suppressorLevels,peakResponse)
rmeddis@38 136 shading interp
rmeddis@38 137 view([0 90])
rmeddis@38 138 set(gca,'Xscale','log')
rmeddis@38 139 xlim([min(suppressorFrequencies) max(suppressorFrequencies)])
rmeddis@38 140 set(gca,'Xtick', [1000 4000],'xticklabel',{'1000', '4000'})
rmeddis@38 141 ylim([min(suppressorLevels) max(suppressorLevels)])
rmeddis@38 142
rmeddis@38 143 subplot(2,nProbeLevels,nProbeLevels+probedBCount)
rmeddis@38 144 contour(suppressorFrequencies,suppressorLevels,peakResponse, ...
rmeddis@38 145 [.1:.1:.9 1.1] )
rmeddis@38 146 set(gca,'Xscale','log')
rmeddis@38 147 set(gca,'Xtick', [1000 4000],'xticklabel',{'1000', '4000'})
rmeddis@38 148 set(gcf, 'name',['primaryToneFrequency= ' num2str(primaryToneFrequency)])
rmeddis@38 149 title([num2str(probedB) ' dB'])
rmeddis@38 150 end
rmeddis@38 151
rmeddis@38 152 path=restorePath;