rmeddis@38
|
1 % function test2toneMovie
|
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=8000;
|
rmeddis@38
|
16
|
rmeddis@38
|
17 probedBs=10 :10: 50;
|
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
|
rmeddis@38
|
24 lowestBF=250; highestBF= 8000; numChannels=21;
|
rmeddis@38
|
25 BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
|
rmeddis@38
|
26 % fix so that probe is middle range and is at a BF
|
rmeddis@38
|
27 BFlist=BFlist*primaryToneFrequency/2000;
|
rmeddis@38
|
28 suppressorFrequencies=BFlist;
|
rmeddis@38
|
29 BFchannel=find(round(BFlist)==round(primaryToneFrequency));
|
rmeddis@38
|
30
|
rmeddis@38
|
31 sampleRate= 100000; % 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 ylim([-.5 .5])
|
rmeddis@38
|
108
|
rmeddis@38
|
109 figure(6), subplot(2,1,2)
|
rmeddis@38
|
110 PSTHbinWidth=0.010;
|
rmeddis@38
|
111 PSTH= UTIL_PSTHmakerb(...
|
rmeddis@38
|
112 response, dt, PSTHbinWidth);
|
rmeddis@38
|
113 [nY nX]=size(PSTH);
|
rmeddis@38
|
114 time=PSTHbinWidth*(0:nX-1);
|
rmeddis@38
|
115 surf(time, BFlist, PSTH)
|
rmeddis@38
|
116 zlim([0 500]),
|
rmeddis@38
|
117 caxis([0 500])
|
rmeddis@38
|
118 shading interp
|
rmeddis@38
|
119 colormap(jet)
|
rmeddis@38
|
120 set(gca, 'yScale','log')
|
rmeddis@38
|
121 xlim([0 max(time)+dt])
|
rmeddis@38
|
122 ylim([0 max(BFlist)])
|
rmeddis@38
|
123 view([0 90]) % view([-8 68])
|
rmeddis@38
|
124 title([' primary + suppressor '])
|
rmeddis@38
|
125
|
rmeddis@38
|
126 end
|
rmeddis@38
|
127 end
|
rmeddis@38
|
128
|
rmeddis@38
|
129 %% plot matrix
|
rmeddis@38
|
130
|
rmeddis@38
|
131 peakResponse=peakResponse/peakResponse(1,1);
|
rmeddis@38
|
132
|
rmeddis@38
|
133 figure(5), subplot(2,nProbeLevels, probedBCount)
|
rmeddis@38
|
134 surf(suppressorFrequencies,suppressorLevels,peakResponse)
|
rmeddis@38
|
135 shading interp
|
rmeddis@38
|
136 view([0 90])
|
rmeddis@38
|
137 set(gca,'Xscale','log')
|
rmeddis@38
|
138 xlim([min(suppressorFrequencies) max(suppressorFrequencies)])
|
rmeddis@38
|
139 set(gca,'Xtick', [1000 4000],'xticklabel',{'1000', '4000'})
|
rmeddis@38
|
140 title([num2str(primaryToneFrequency) ' Hz'])
|
rmeddis@38
|
141
|
rmeddis@38
|
142 subplot(2,nProbeLevels,nProbeLevels+probedBCount)
|
rmeddis@38
|
143 contourf(suppressorFrequencies,suppressorLevels,peakResponse, ...
|
rmeddis@38
|
144 [.1:.1:.9 0.99] )
|
rmeddis@38
|
145 set(gca,'Xscale','log')
|
rmeddis@38
|
146 set(gca,'Xtick', [1000 4000],'xticklabel',{'1000', '4000'})
|
rmeddis@38
|
147 set(gcf, 'name',['primaryToneFrequency= ' num2str(primaryToneFrequency)])
|
rmeddis@38
|
148 title([num2str(probedB) ' dB'])
|
rmeddis@38
|
149 end
|
rmeddis@38
|
150
|
rmeddis@38
|
151 path=restorePath;
|