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