To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

The primary repository for this project is hosted at git://github.com/rmeddis/MAP.git .
This repository is a read-only copy which is updated automatically every hour.

Statistics Download as Zip
| Branch: | Revision:

root / testPrograms / test_MAP1_14.m @ 29:b51bf546ca3f

History | View | Annotate | Download (5.42 KB)

1
function test_MAP1_14
2
% test_MAP1_14 is a general purpose test routine that can be adjusted to
3
% test a number of different applications of MAP1_14
4
%
5
% A range of options are supplied in the early part of the program
6
%
7
% One use of the function is to create demonstrations; filenames <demoxx>
8
%  to illustrate particular features
9
%
10
% #1
11
% Identify the file (in 'MAPparamsName') containing the model parameters
12
%
13
% #2
14
% Identify the kind of model required (in 'AN_spikesOrProbability').
15
%  A full brainstem model (spikes) can be computed or a shorter model
16
%  (probability) that computes only so far as the auditory nerve
17
%
18
% #3
19
% Choose between a tone signal or file input (in 'signalType')
20
%
21
% #4
22
% Set the signal rms level (in leveldBSPL)
23
%
24
% #5
25
% Identify the channels in terms of their best frequencies in the vector
26
%  BFlist.
27
%
28
% Last minute changes to the parameters fetched earlier can be made using
29
%  the cell array of strings 'paramChanges'.
30
%  Each string must have the same format as the corresponding line in the
31
%  file identified in 'MAPparamsName'
32
%
33
% When the demonstration is satisfactory, freeze it by renaming it <demoxx>
34

    
35
dbstop if error
36
restorePath=path;
37
addpath (['..' filesep 'MAP'],    ['..' filesep 'wavFileStore'], ...
38
    ['..' filesep 'utilities'])
39

    
40
%%  #1 parameter file name
41
MAPparamsName='Normal';
42

    
43

    
44
%% #2 probability (fast) or spikes (slow) representation
45
% AN_spikesOrProbability='spikes';
46

    
47
% or
48
% NB probabilities are not corrected for refractory effects
49
AN_spikesOrProbability='probability';
50

    
51

    
52
%% #3 pure tone, harmonic sequence or speech file input
53
signalType= 'tones';
54
sampleRate= 50000;
55
duration=0.250;                 % seconds
56
% toneFrequency= 250:250:8000;    % harmonic sequence (Hz)
57
toneFrequency= 1000;            % or a pure tone (Hz8
58
rampDuration=.005;              % seconds
59

    
60
% or
61

    
62
% signalType= 'file';
63
% fileName='twister_44kHz';
64

    
65

    
66
%% #4 rms level
67
% signal details
68
leveldBSPL= 90;                  % dB SPL
69

    
70

    
71
%% #5 number of channels in the model
72
%   21-channel model (log spacing)
73
numChannels=21;
74
lowestBF=250; 	highestBF= 8000;
75
BFlist=round(logspace(log10(lowestBF), log10(highestBF), numChannels));
76

    
77
%   or specify your own channel BFs
78
% numChannels=1;
79
% BFlist=toneFrequency;
80

    
81

    
82
%% #6 change model parameters
83
paramChanges=[];
84

    
85
% or
86
% Parameter changes can be used to change one or more model parameters
87
%  *after* the MAPparams file has been read
88
% This example declares only one fiber type with a calcium clearance time
89
% constant of 80e-6 s (HSR fiber) when the probability option is selected.
90

    
91
% paramChanges={'AN_IHCsynapseParams.ANspeedUpFactor=5;', ...
92
%     'IHCpreSynapseParams.tauCa=86e-6;'};
93

    
94
% paramChanges={'DRNLParams.rateToAttenuationFactorProb = 0;'};
95

    
96
% paramChanges={'IHCpreSynapseParams.tauCa=86e-6;',
97
%     'AN_IHCsynapseParams.numFibers=	1000;'};
98

    
99
% fixed MOC attenuation(using negative factor)
100
paramChanges={'DRNLParams.rateToAttenuationFactorProb=-0.005;'};
101

    
102
%% delare 'showMap' options to control graphical output
103

    
104
showMapOptions.printModelParameters=1;   % prints all parameters
105
showMapOptions.showModelOutput=1;       % plot of all stages
106
showMapOptions.printFiringRates=1;      % prints stage activity levels
107
showMapOptions.showACF=0;               % shows SACF (probability only)
108
showMapOptions.showEfferent=1;          % tracks of AR and MOC
109
showMapOptions.surfProbability=1;       % 2D plot of HSR response 
110
showMapOptions.surfSpikes=1;            % 2D plot of spikes histogram
111

    
112
% disable certain silly options
113
if strcmp(AN_spikesOrProbability, 'spikes')
114
    % avoid nonsensical options
115
    showMapOptions.surfProbability=0;
116
    showMapOptions.showACF=0;
117
else
118
    showMapOptions.surfSpikes=0;
119
end
120
if strcmp(signalType, 'file')
121
    % needed for labeling plot
122
    showMapOptions.fileName=fileName;
123
else
124
    showMapOptions.fileName=[];
125
end
126

    
127
%% Generate stimuli
128

    
129
switch signalType
130
    case 'tones'
131
        inputSignal=createMultiTone(sampleRate, toneFrequency, ...
132
            leveldBSPL, duration, rampDuration);
133

    
134
    case 'file'
135
        %% file input simple or mixed
136
        [inputSignal sampleRate]=wavread(fileName);
137
        dt=1/sampleRate;
138
        inputSignal=inputSignal(:,1);
139
        targetRMS=20e-6*10^(leveldBSPL/20);
140
        rms=(mean(inputSignal.^2))^0.5;
141
        amp=targetRMS/rms;
142
        inputSignal=inputSignal*amp;
143
        silence= zeros(1,round(0.1/dt));
144
        inputSignal= [silence inputSignal' silence];
145
end
146

    
147

    
148
%% run the model
149
tic
150

    
151
fprintf('\n')
152
disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)])
153
disp([num2str(numChannels) ' channel model'])
154
disp('Computing ...')
155

    
156
MAP1_14(inputSignal, sampleRate, BFlist, ...
157
    MAPparamsName, AN_spikesOrProbability, paramChanges);
158

    
159

    
160
% the model run is now complete. Now display the results
161
UTIL_showMAP(showMapOptions, paramChanges)
162

    
163
toc
164
path(restorePath)
165

    
166

    
167
function inputSignal=createMultiTone(sampleRate, toneFrequency, ...
168
    leveldBSPL, duration, rampDuration)
169
% Create pure tone stimulus
170
dt=1/sampleRate; % seconds
171
time=dt: dt: duration;
172
inputSignal=sum(sin(2*pi*toneFrequency'*time), 1);
173
amp=10^(leveldBSPL/20)*28e-6;   % converts to Pascals (peak)
174
inputSignal=amp*inputSignal;
175

    
176
% apply ramps
177
% catch rampTime error
178
if rampDuration>0.5*duration, rampDuration=duration/2; end
179
rampTime=dt:dt:rampDuration;
180
ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
181
    ones(1,length(time)-length(rampTime))];
182
inputSignal=inputSignal.*ramp;
183
ramp=fliplr(ramp);
184
inputSignal=inputSignal.*ramp;
185

    
186
% add 10 ms silence
187
silence= zeros(1,round(0.05/dt));
188
inputSignal= [silence inputSignal silence];
189