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 / testBM.m @ 29:b51bf546ca3f

History | View | Annotate | Download (4.97 KB)

1 29:b51bf546ca3f rmeddis
function testBM (BMlocations, paramsName,...
2
    relativeFrequencies, AN_spikesOrProbability, paramChanges)
3
% testBM generates input output functions for DRNL model for any number
4
% of locations.
5
% Computations are bast on a single channel model (channelBFs=BF)
6
% peak displacement (peakAmp) is measured.
7
%  if DRNLParams.useMOC is chosen, the full model is run (slow)
8
%  otherwise only DRNL is computed.
9
% Tuning curves are generated based on a range of frequencies reletove to
10
% the BF of the location.
11
%
12
13
global    DRNLParams
14
15
if nargin<5
16
    paramChanges=[];
17
end
18
19
if nargin<4
20
    AN_spikesOrProbability='probability';
21
end
22
23
savePath=path;
24
addpath (['..' filesep 'utilities'],['..' filesep 'MAP'])
25
26
levels=-10:10:90;   nLevels=length(levels);
27
% levels= 50;   nLevels=length(levels);
28
29
% refBMdisplacement is the displacement of the BM at threshold
30
% 1 nm disp at  threshold (9 kHz, Ruggero)
31
% ? adjust for frequency
32
refBMdisplacement= 1e-8; % adjusted for 10 nm at 1 kHz
33
34
toneDuration=.200;
35
rampDuration=0.01;
36
silenceDuration=0.01;
37
38
sampleRate=30000;
39
40
dbstop if error
41
figure(3), clf
42
set(gcf,'position',[280   350   327   326])
43
set(gcf,'name','DRNL - BM')
44
pause(0.1)
45
46
finalSummary=[];
47
nBFs=length(BMlocations);
48
BFno=0; plotCount=0;
49
for BF=BMlocations
50
    BFno=BFno+1;
51
    plotCount=plotCount+nBFs;
52
    stimulusFrequencies=BF* relativeFrequencies;
53
    nFrequencies=length(stimulusFrequencies);
54
55
    peakAmpBM=zeros(nLevels,nFrequencies);
56
    peakAmpBMdB=NaN(nLevels,nFrequencies);
57
    peakEfferent=NaN(nLevels,nFrequencies);
58
    peakAREfferent=NaN(nLevels,nFrequencies);
59
60
61
    levelNo=0;
62
    for leveldB=levels
63
        disp(['level= ' num2str(leveldB)])
64
        levelNo=levelNo+1;
65
66
        freqNo=0;
67
        for frequency=stimulusFrequencies
68
            freqNo=freqNo+1;
69
70
            % Generate stimuli
71
            globalStimParams.FS=sampleRate;
72
            globalStimParams.overallDuration=...
73
                toneDuration+silenceDuration;  % s
74
            stim.phases='sin';
75
            stim.type='tone';
76
            stim.toneDuration=toneDuration;
77
            stim.frequencies=frequency;
78
            stim.amplitudesdB=leveldB;
79
            stim.beginSilence=silenceDuration;
80
            stim.rampOnDur=rampDuration;
81
            % no offset ramp
82
            stim.rampOffDur=rampDuration;
83
            doPlot=0;
84
            inputSignal=stimulusCreate(globalStimParams, stim, doPlot);
85
            inputSignal=inputSignal(:,1)';
86
87
            %% run the model
88
            MAPparamsName=paramsName;
89
90
            global DRNLoutput MOCattenuation ARattenuation
91
            MAP1_14(inputSignal, sampleRate, BF, ...
92
                MAPparamsName, AN_spikesOrProbability, paramChanges);
93
94
            DRNLresponse=DRNLoutput;
95
            peakAmp=max(max(...
96
                DRNLresponse(:, end-round(length(DRNLresponse)/2):end)));
97
            peakAmpBM(levelNo,freqNo)=peakAmp;
98
            peakAmpBMdB(levelNo,freqNo)=...
99
                20*log10(peakAmp/refBMdisplacement);
100
            peakEfferent(levelNo,freqNo)=min(min(MOCattenuation));
101
            peakAREfferent(levelNo,freqNo)=min(min(ARattenuation));
102
103
        end  % tone frequency
104
    end  % level
105
106
    %% analyses results and plot
107
108
    % BM I/O plot (top panel)
109
    figure(3)
110
    subplot(3,nBFs,BFno), cla
111
    plot(levels,peakAmpBMdB, 'linewidth',2)
112
    hold on, plot(levels, repmat(refBMdisplacement,1,length(levels)))
113
    hold off
114
    title(['BF=' num2str(BF,'%5.0f') ' - ' paramsName])
115
    xlabel('level')
116
    %     set(gca,'xtick',levels),  grid on
117
    if length(levels)>1,xlim([min(levels) max(levels)]), end
118
    ylabel(['dB re:' num2str(refBMdisplacement,'%6.1e') 'm'])
119
    ylim([-20 50])
120
    set(gca,'ytick',[-10 0 10 20 40])
121
    grid on
122
    %     legend({num2str(stimulusFrequencies')}, 'location', 'EastOutside')
123
    UTIL_printTabTable([levels' peakAmpBMdB], ...
124
        num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f')
125
    finalSummary=[finalSummary peakAmpBMdB];
126
127
    % Tuning curve
128
    if length(relativeFrequencies)>2
129
        figure(3), subplot(3,nBFs, 2*nBFs+BFno)
130
        %         contour(stimulusFrequencies,levels,peakAmpBM,...
131
        %             [refBMdisplacement refBMdisplacement],'r')
132
        contour(stimulusFrequencies,levels,peakAmpBM,...
133
            refBMdisplacement.*[1 5 10 50 100])
134
        title(['tuning curve at ' num2str(refBMdisplacement) 'm']);
135
        ylabel('level (dB) at reference')
136
        xlim([100 10000])
137
        grid on
138
        hold on
139
        set(gca,'xscale','log')
140
    end
141
142
143
    % MOC contribution
144
    figure(3)
145
    subplot(3,nBFs,nBFs+BFno), cla
146
    plot(levels,20*log10(peakEfferent), 'linewidth',2)
147
    ylabel('MOC (dB attenuation)'), xlabel('level')
148
    title(['peak MOC: model= ' AN_spikesOrProbability])
149
    grid on
150
    if length(levels)>1, xlim([min(levels) max(levels)]), end
151
152
    % AR contribution
153
    hold on
154
    plot(levels,20*log10(peakAREfferent), 'r')
155
    hold off
156
157
end % best frequency
158
159
UTIL_showStructureSummary(DRNLParams, 'DRNLParams', 10)
160
161
    UTIL_printTabTable([levels' finalSummary], ...
162
        num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f')
163
164
path(savePath);