|
1 |
% function MAPtwoToneDemo
|
|
2 |
% Not for distribution but code worth keeping
|
|
3 |
% Demonstration of two-tone suppression in the AN using a
|
|
4 |
% single channel
|
|
5 |
%
|
|
6 |
|
|
7 |
dbstop if error
|
|
8 |
% create access to all MAP 1_8 facilities
|
|
9 |
% addpath ('..\modules', '..\utilities', '..\parameterStore', '..\wavFileStore' , '..\testPrograms')
|
|
10 |
addpath (['..' filesep 'modules'], ['..' filesep 'utilities'], ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'] , ['..' filesep 'testPrograms'])
|
|
11 |
|
|
12 |
moduleSequence= 1:7; % up to the AN
|
|
13 |
figure(3), clf
|
|
14 |
primaryToneFrequency=2000;
|
|
15 |
suppressorFrequency=primaryToneFrequency*1.5;
|
|
16 |
|
|
17 |
primaryDB=30;
|
|
18 |
suppressors=20:10:80;
|
|
19 |
frameCount=0;
|
|
20 |
for suppressorDB=suppressors
|
|
21 |
frameCount=frameCount+1;
|
|
22 |
lowestBF=1000; highestBF= 5000; numChannels=30;
|
|
23 |
BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
|
|
24 |
BFlist=2000;
|
|
25 |
duration=.020; % seconds
|
|
26 |
sampleRate= 40000; % Hz (higher sample rate needed for BF>8000 Hz)
|
|
27 |
dt=1/sampleRate; % seconds
|
|
28 |
|
|
29 |
% for conditionNo=1:3 % probe alone/ suppressor alone/ combined
|
|
30 |
for conditionNo=1:3 % probe alone/ suppressor alone/ combined
|
|
31 |
switch conditionNo
|
|
32 |
case 1
|
|
33 |
primaryLevelDB=primaryDB;
|
|
34 |
suppressorLevelDB= -100;
|
|
35 |
plotGuide.subPlotNo= 1; % initialize subplot count
|
|
36 |
figureTitle=['probe alone: ' num2str(primaryToneFrequency) ' Hz; ' num2str(primaryLevelDB) ' dB SPL'];
|
|
37 |
|
|
38 |
case 2
|
|
39 |
primaryLevelDB=-100;
|
|
40 |
suppressorLevelDB=suppressorDB;
|
|
41 |
plotGuide.subPlotNo= 2; % initialize subplot count
|
|
42 |
figureTitle=['suppressor alone: ' num2str(suppressorFrequency) ' Hz; ' num2str(suppressorLevelDB) ' dB SPL'];
|
|
43 |
case 3
|
|
44 |
primaryLevelDB=primaryDB;
|
|
45 |
suppressorLevelDB=suppressorDB;
|
|
46 |
plotGuide.subPlotNo= 3; % initialize subplot count
|
|
47 |
figureTitle=['probe + suppressor'];
|
|
48 |
end
|
|
49 |
|
|
50 |
% primary BF tone
|
|
51 |
time1=dt: dt: duration;
|
|
52 |
amp=10^(primaryLevelDB/20)*28e-6;
|
|
53 |
inputSignal=amp*sin(2*pi*primaryToneFrequency*time1);
|
|
54 |
rampDuration=.005; rampTime=dt:dt:rampDuration;
|
|
55 |
ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ones(1,length(time1)-length(rampTime))];
|
|
56 |
inputSignal=inputSignal.*ramp;
|
|
57 |
inputSignal=inputSignal.*fliplr(ramp);
|
|
58 |
|
|
59 |
% suppressor
|
|
60 |
tone2Duration=duration/2; % s
|
|
61 |
time2= dt: dt: tone2Duration;
|
|
62 |
% B: tone on
|
|
63 |
amp=10^(suppressorLevelDB/20)*28e-6;
|
|
64 |
inputSignal2=amp*sin(2*pi*suppressorFrequency*time2);
|
|
65 |
rampDuration=.005; rampTime=dt:dt:rampDuration;
|
|
66 |
ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ones(1,length(time2)-length(rampTime))];
|
|
67 |
inputSignal2=inputSignal2.*ramp;
|
|
68 |
% A: initial silence (delay to suppressor)
|
|
69 |
silence=zeros(1,length(time2));
|
|
70 |
inputSignal2=[silence inputSignal2];
|
|
71 |
|
|
72 |
% add tone and suppressor components
|
|
73 |
inputSignal=inputSignal+inputSignal2;
|
|
74 |
|
|
75 |
% specify model parameters
|
|
76 |
method=MAPparamsDEMO(BFlist, sampleRate);
|
|
77 |
% parameter change (must be global to take effect)
|
|
78 |
global AN_IHCsynapseParams
|
|
79 |
AN_IHCsynapseParams.mode= 'probability';
|
|
80 |
% method.useEfferent=0;
|
|
81 |
|
|
82 |
method.plotGraphs= 1; % please plot
|
|
83 |
|
|
84 |
figure(4), subplot(3,1,conditionNo)
|
|
85 |
plot(time1, inputSignal, 'k')% *************
|
|
86 |
|
|
87 |
[ANresponse, method, A]=MAPsequenceSeg(inputSignal, method, moduleSequence);
|
|
88 |
response{conditionNo}=ANresponse;
|
|
89 |
% F(frameCount) = getframe(gcf);
|
|
90 |
end
|
|
91 |
|
|
92 |
% peakResponse=max(max([response{1} response{2} response{3}]));
|
|
93 |
% figure(3), subplot(4,1,1)
|
|
94 |
% mesh((response{1}), [0 peakResponse])
|
|
95 |
% title(['primary: ' num2str(primaryDB) ' dB SPL'])
|
|
96 |
% zlim([0 5000]), view([-28 36])
|
|
97 |
%
|
|
98 |
% figure(3), subplot(4,1,2)
|
|
99 |
% mesh((response{2}), [0 peakResponse])
|
|
100 |
% title(['suppressor: ' num2str(suppressorDB) ' dB SPL'])
|
|
101 |
% zlim([0 5000]), view([-28 36])
|
|
102 |
%
|
|
103 |
% figure(3), subplot(4,1,3)
|
|
104 |
% mesh((response{3}), [0 peakResponse])
|
|
105 |
% title([' primary + suppressor '])
|
|
106 |
% zlim([0 5000]), view([-28 36])
|
|
107 |
%
|
|
108 |
% figure(3), subplot(4,1,4)
|
|
109 |
% sum= response{3}-response{1}-response{2};
|
|
110 |
% mesh(sum)
|
|
111 |
% zlim([-2000 2000])
|
|
112 |
% title(' difference matrix (combined - primary - suppressor)')
|
|
113 |
% view([-28 20])
|
|
114 |
% disp( [num2str([ suppressorDB primaryDB max(max(sum))])] )
|
|
115 |
%
|
|
116 |
% colormap(jet)
|
|
117 |
pause(1)
|
|
118 |
end
|
|
119 |
|
|
120 |
figure(4)
|
|
121 |
xlabel('time (s)')
|
|
122 |
figure(3)
|
|
123 |
xlabel('time (s)')
|
|
124 |
|
|
125 |
% figure(99), movie(F, 1, 1)
|
|
126 |
% UTIL_showAllMAPStructures
|