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 @ 26:b03ef38fe497

History | View | Annotate | Download (5.31 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= 30;                  % 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

    
100
%% delare 'showMap' options to control graphical output
101

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

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

    
125
%% Generate stimuli
126

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

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

    
145

    
146
%% run the model
147
tic
148

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

    
154
MAP1_14(inputSignal, sampleRate, BFlist, ...
155
    MAPparamsName, AN_spikesOrProbability, paramChanges);
156

    
157

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

    
161
toc
162
path(restorePath)
163

    
164

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

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

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