comparison testPrograms/test2toneSuppression.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
comparison
equal deleted inserted replaced
37:771a643d5c29 38:c2204b18f4a2
1 % function test2toneSuppression
2 %
3 % Demonstration of two-tone suppression
4 %
5 % A probe tone is played at a fixed level and a second tone is introduced
6 % half way through the presentation. The response to the combined signal
7 % is recorded and analysed.
8 %
9 % The second tone called the seeep tone is presented at a reange of
10 % frequencies and levels. In a linear system we might expect the addition
11 % of a second tone to increase the magnitude of the output.
12 % In fact, it often results in a reduction in the response.
13 % This is called two-tone suppression.
14 %
15 % The effect of the sweep tone is represented in a countour plot showing
16 % both reductions and increases in response.
17 % The background colour in this plot is the response to the
18 % fixed tone alone
19
20
21 % Ruggero et al 1992 (Fig 2)
22 fixedToneFrequency=8600;
23 fixedToneLevelsdB=[45 :5: 90];
24 % fixedToneLevelsdB=[30];
25 fixedToneDuration=.050; % seconds
26 sweeptoneLevelsdB=[ 0 : 10:90];
27 nSweepToneFrequencies=21;
28 sampleSweepFrequency=10600;
29
30 global ANprobRateOutput DRNLoutput
31 dbstop if error
32 restorePath=path;
33 addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'], ...
34 ['..' filesep 'utilities'])
35 figure(5), clf
36 figure(87), clf
37
38 nFixedToneLevels=length(fixedToneLevelsdB);
39
40 lowestSweepFrequency=fixedToneFrequency/6;
41 highestSweepFrequency=fixedToneFrequency*3;
42 sweepToneFrequencies=round(logspace(log10(lowestSweepFrequency), ...
43 log10(highestSweepFrequency), nSweepToneFrequencies));
44
45 % key channels for snapshots
46 [a BFchannel]=min((sweepToneFrequencies-fixedToneFrequency).^2);
47 [a sampleChannel]=min((sweepToneFrequencies-sampleSweepFrequency).^2);
48
49 sampleRate= max(44100, 4*highestSweepFrequency);
50 dt=1/sampleRate; % seconds
51
52 startSilenceDuration=0.010;
53 startSilence= zeros(1,startSilenceDuration*sampleRate);
54
55 sweepStartPTR=...
56 round((startSilenceDuration + fixedToneDuration/2)*sampleRate);
57
58 BF_BMresponse=zeros(length(sweepToneFrequencies), ...
59 length(fixedToneLevelsdB), length(sweeptoneLevelsdB));
60
61 fixedTonedBCount=0;
62 for fixedTonedB=fixedToneLevelsdB
63 fixedTonedBCount=fixedTonedBCount+1;
64
65 BMpeakResponse= zeros(length(sweeptoneLevelsdB),length(sweepToneFrequencies));
66 ANpeakResponse= zeros(length(sweeptoneLevelsdB),length(sweepToneFrequencies));
67 sweepToneLevelCount=0;
68 for sweepToneDB=sweeptoneLevelsdB
69 sweepToneLevelCount=sweepToneLevelCount+1;
70 suppFreqCount=0;
71 for sweepToneFrequency=sweepToneFrequencies
72 suppFreqCount=suppFreqCount+1;
73
74 % fixedTone tone
75 time1=dt: dt: fixedToneDuration;
76 amp=10^(fixedTonedB/20)*28e-6;
77 inputSignal=amp*sin(2*pi*fixedToneFrequency*time1);
78 rampDuration=.005; rampTime=dt:dt:rampDuration;
79 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ones(1,length(time1)-length(rampTime))];
80 inputSignal=inputSignal.*ramp;
81 inputSignal=inputSignal.*fliplr(ramp);
82 nsignalPoints=length(inputSignal);
83 sweepStart=round(nsignalPoints/2);
84 nSweepPoints=nsignalPoints-sweepStart;
85
86 % sweepTone
87 time2= dt: dt: dt*nSweepPoints;
88 % B: tone on
89 amp=10^(sweepToneDB/20)*28e-6;
90 inputSignal2=amp*sin(2*pi*sweepToneFrequency*time2);
91 rampDuration=.005; rampTime=dt:dt:rampDuration;
92 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ones(1,length(time2)-length(rampTime))];
93 inputSignal2=inputSignal2.*ramp;
94 inputSignal2=inputSignal2.*fliplr(ramp);
95 % add tone and sweepTone components
96 inputSignal(sweepStart+1:end)= inputSignal(sweepStart+1:end)+inputSignal2;
97
98 inputSignal=...
99 [startSilence inputSignal ];
100
101 %% run MAP
102 MAPparamsName='Normal';
103 AN_spikesOrProbability='probability';
104 % only use HSR fibers (NB no acoustic reflex)
105 paramChanges={'IHCpreSynapseParams.tauCa=80e-6;'};
106 paramChanges={'IHCpreSynapseParams.tauCa=80e-6;',...
107 'DRNLParams.g=0;'};
108 MAP1_14(inputSignal, sampleRate, fixedToneFrequency, ...
109 MAPparamsName, AN_spikesOrProbability, paramChanges);
110
111 % find toneAlone response
112 if sweepToneLevelCount==1 && suppFreqCount==1
113 BMfixedToneAloneRate=...
114 mean(abs(DRNLoutput(sweepStartPTR:end)));
115 ANfixedToneAloneRate=...
116 mean(abs(ANprobRateOutput(sweepStartPTR:end)));
117 end
118
119 BF_BMresponse(suppFreqCount,fixedTonedBCount, ...
120 sweepToneLevelCount)=...
121 mean(abs(DRNLoutput(sweepStartPTR:end)));
122
123 BMpeakResponse(sweepToneLevelCount,suppFreqCount)=...
124 mean(abs(DRNLoutput(sweepStartPTR:end)))...
125 /BMfixedToneAloneRate;
126 ANpeakResponse(sweepToneLevelCount,suppFreqCount)=...
127 mean(abs(ANprobRateOutput(sweepStartPTR:end)))...
128 /ANfixedToneAloneRate;
129 disp(['F2: ', num2str([sweepToneFrequency sweepToneDB ...
130 BMpeakResponse(sweepToneLevelCount,suppFreqCount)...
131 ANpeakResponse(sweepToneLevelCount,suppFreqCount)])...
132 ' dB'])
133
134 figure(5)
135 time=dt:dt:dt*length(inputSignal);
136 subplot(3,1,1), plot(time, inputSignal)
137 title(['stimulus: Suppressor=' ...
138 num2str([sweepToneFrequency, sweepToneDB]) ' Hz/ dB'])
139
140 time=dt:dt:dt*length(DRNLoutput);
141 subplot(3,1,2), plot(time, DRNLoutput)
142 xlim([0 fixedToneDuration])
143 ylim([0 inf])
144
145 time=dt:dt:dt*length(ANprobRateOutput);
146 subplot(3,1,2), plot(time, ANprobRateOutput)
147 xlim([0 fixedToneDuration])
148 ylim([0 500])
149 title(['ANresponse: fixedTone' num2str([fixedToneFrequency, fixedTonedB]) ' Hz/ dB'])
150
151 subplot(3,2,5)
152 contourf(sweepToneFrequencies,sweeptoneLevelsdB,BMpeakResponse, ...
153 [.1:.1:.9 1.05] )
154 set(gca,'Xscale','log')
155 set(gca,'Xtick', [1000 4000],'xticklabel',{'1000', '4000'})
156 set(gcf, 'name',['fixedToneFrequency= ' num2str(fixedToneFrequency)])
157 title(['BM' num2str(fixedTonedB) ' dB'])
158
159 subplot(3,2,6)
160 contourf(sweepToneFrequencies,sweeptoneLevelsdB,ANpeakResponse, ...
161 [.1:.1:.9 1.05] )
162 set(gca,'Xscale','log')
163 set(gca,'Xtick', [1000 4000],'xticklabel',{'1000', '4000'})
164 set(gcf, 'name',['fixedToneFrequency= ' num2str(fixedToneFrequency)])
165 title(['AN:' num2str(fixedTonedB) ' dB'])
166 drawnow
167 end
168 end
169
170 %% plot matrix
171
172 figure (87)
173 subplot(3, nFixedToneLevels, fixedTonedBCount)
174 surf(sweepToneFrequencies,sweeptoneLevelsdB,BMpeakResponse)
175 set(gca,'Xscale','log')
176 zlabel('gain')
177 xlim([lowestSweepFrequency highestSweepFrequency])
178 ylim([min(sweeptoneLevelsdB) max(sweeptoneLevelsdB)])
179 title('BM response')
180 view([-11 52])
181
182 subplot(3, nFixedToneLevels, nFixedToneLevels+fixedTonedBCount)
183 contourf(sweepToneFrequencies,sweeptoneLevelsdB,BMpeakResponse, ...
184 [.1:.5:.9 0.99 1.05] )
185 hold on
186 plot(fixedToneFrequency, fixedTonedB, 'or', 'markerfacecolor','w')
187 set(gca,'Xscale','log')
188 set(gca,'Xtick', [1000 5000],'xticklabel',{'1000', '5000'})
189 ylabel('(BM) sweep level')
190 xlabel('(BM) sweep freq')
191 title(['fixed tone level=' num2str(fixedTonedB) ' dB'])
192 % colorbar
193
194 subplot(3, nFixedToneLevels, 2*nFixedToneLevels+fixedTonedBCount)
195 contourf(sweepToneFrequencies,sweeptoneLevelsdB,ANpeakResponse, ...
196 [.1:.5:.9 0.99 1.05] )
197 hold on
198 plot(fixedToneFrequency, fixedTonedB, 'or', 'markerfacecolor','w')
199 set(gca,'Xscale','log')
200 set(gca,'Xtick', [1000 5000],'xticklabel',{'1000', '5000'})
201 ylabel('(AN) sweep level')
202 xlabel('(AN) sweep freq')
203 title(['fixed tone level=' num2str(fixedTonedB) ' dB'])
204 % colorbar
205
206 end
207
208 % Ruggero fig 2 (probe tone level is x-axis, sweep tone level is y-axis
209 figure(1),semilogy(fixedToneLevelsdB,squeeze(BF_BMresponse(sampleChannel,:,:)))
210 ylim([-inf inf])
211 legend(num2str(sweeptoneLevelsdB'),'location','southeast')
212 xlabel('probe SPL')
213 ylabel ('displacement (m)')
214 title(['Probe ' num2str(fixedToneFrequency) ' Hz. Sweep ' ...
215 num2str(sweepToneFrequencies(sampleChannel)) ' Hz.'])
216 path=restorePath;