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 @ 24:a5e4a43c1673

History | View | Annotate | Download (5.35 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
restorePath=path;
36
addpath (['..' filesep 'MAP'],    ['..' filesep 'wavFileStore'], ...
37
    ['..' filesep 'utilities'])
38

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

    
42

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

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

    
50

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

    
59
% or
60
% signalType= 'file';
61
% fileName='twister_44kHz';
62

    
63

    
64
%% #4 rms level
65
% signal details
66
leveldBSPL= 90;                  % dB SPL
67

    
68

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

    
75
%   or specify your own channel BFs
76
% BFlist=toneFrequency;
77

    
78

    
79
%% #6 change model parameters
80
paramChanges=[];
81

    
82
% or
83
% Parameter changes can be used to change one or more model parameters
84
%  *after* the MAPparams file has been read
85
% This example declares only one fiber type with a calcium clearance time
86
% constant of 80e-6 s (HSR fiber) when the probability option is selected.
87
% paramChanges={'AN_IHCsynapseParams.ANspeedUpFactor=5;', ...
88
%     'IHCpreSynapseParams.tauCa=86e-6;'};
89
% paramChanges={'DRNLParams.rateToAttenuationFactorProb = 0;'};
90

    
91

    
92
%% delare 'showMap' options to control graphical output
93
global showMapOptions
94

    
95
% or (example: show everything including an smoothed SACF output
96
showMapOptions.printModelParameters=1;   % prints all parameters
97
showMapOptions.showModelOutput=1;       % plot of all stages
98
showMapOptions.printFiringRates=1;      % prints stage activity levels
99
showMapOptions.showACF=0;               % shows SACF (probability only)
100
showMapOptions.showEfferent=1;          % tracks of AR and MOC
101
showMapOptions.surfProbability=1;       % 2D plot of HSR response 
102
if strcmp(AN_spikesOrProbability, 'spikes')
103
    % avoid nonsensical options
104
    showMapOptions.surfProbability=0;
105
    showMapOptions.showACF=0;
106
end
107
if strcmp(signalType, 'file')
108
    % needed for labeling plot
109
    showMapOptions.fileName=fileName;
110
else
111
    showMapOptions.fileName=[];
112
end
113

    
114
%% Generate stimuli
115

    
116
dbstop if error
117
restorePath=path;
118
addpath (['..' filesep 'MAP'],    ['..' filesep 'wavFileStore'])
119
switch signalType
120
    case 'tones'
121
        inputSignal=createMultiTone(sampleRate, toneFrequency, ...
122
            leveldBSPL, duration, rampDuration);
123

    
124
    case 'file'
125
        %% file input simple or mixed
126
        [inputSignal sampleRate]=wavread(fileName);
127
        dt=1/sampleRate;
128
        inputSignal=inputSignal(:,1);
129
        targetRMS=20e-6*10^(leveldBSPL/20);
130
        rms=(mean(inputSignal.^2))^0.5;
131
        amp=targetRMS/rms;
132
        inputSignal=inputSignal*amp;
133
        silence= zeros(1,round(0.1/dt));
134
        inputSignal= [silence inputSignal' silence];
135
end
136

    
137

    
138
%% run the model
139
tic
140

    
141
fprintf('\n')
142
disp(['Signal duration= ' num2str(length(inputSignal)/sampleRate)])
143
disp([num2str(numChannels) ' channel model'])
144
disp('Computing ...')
145

    
146
MAP1_14(inputSignal, sampleRate, BFlist, ...
147
    MAPparamsName, AN_spikesOrProbability, paramChanges);
148
toc
149

    
150
% the model run is now complete. Now display the results
151
disp(' param changes to list of parameters below')
152
for i=1:length(paramChanges)
153
    disp(paramChanges{i})
154
end
155
UTIL_showMAP(showMapOptions)
156

    
157

    
158
toc
159
path(restorePath)
160

    
161

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

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

    
181
% add 10 ms silence
182
silence= zeros(1,round(0.03/dt));
183
silence= zeros(1,round(0.01/dt));
184
inputSignal= [silence inputSignal silence];
185