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.
root / userProgramsRM / test_MAP1_14RAM.m @ 38:c2204b18f4a2
History | View | Annotate | Download (5.88 KB)
| 1 | 38:c2204b18f4a2 | rmeddis | function test_DRNL_Ruggero97 |
|---|---|---|---|
| 2 | % test_DRNL_Ruggero97 attempts to match Ruggero's (1992 and 1997) |
||
| 3 | % iso-intensity data by fiddling with the parameters |
||
| 4 | |||
| 5 | % # BF is the BF of the filter to be assessed |
||
| 6 | BF=9000; |
||
| 7 | |||
| 8 | % # test frequencies. check that BF is one of them |
||
| 9 | % copy Ruggero's test tones as fara as possible |
||
| 10 | numFs=6; lowestF=4000; highestF= 11030; |
||
| 11 | toneFrequencyList=round(logspace(log10(lowestF), log10(highestF), numFs)); |
||
| 12 | |||
| 13 | % # parameter file name. this is the base set of parameters |
||
| 14 | MAPparamsName='Normal'; |
||
| 15 | |||
| 16 | % # probability representation (not directly relevant here as only |
||
| 17 | % the DRNL output is used |
||
| 18 | AN_spikesOrProbability='probability'; |
||
| 19 | |||
| 20 | % # tone characteristics |
||
| 21 | sampleRate= 100000; |
||
| 22 | duration=0.0200; % Ruggero uses 5, 10, 25 ms tones |
||
| 23 | rampDuration=0.0015; % raised cosine ramp (seconds) |
||
| 24 | beginSilence=0.050; |
||
| 25 | endSilence=0.020; |
||
| 26 | |||
| 27 | % # levels |
||
| 28 | levels=[3 10:10:80]; |
||
| 29 | |||
| 30 | %% # change model parameters |
||
| 31 | % Parameter changes can be used to change one or more model parameters |
||
| 32 | % *after* the MAPparams file has been read |
||
| 33 | |||
| 34 | paramChanges={};
|
||
| 35 | % switch off all efferent effects and then play with DRNL params |
||
| 36 | paramChanges={...
|
||
| 37 | 'DRNLParams.rateToAttenuationFactorProb = 0.00; ',... |
||
| 38 | 'OMEParams.rateToAttenuationFactorProb=0.0;', ... |
||
| 39 | 'DRNLParams.ctBMdB = -20;'... |
||
| 40 | 'DRNLParams.g=1000;'... |
||
| 41 | 'DRNLParams.linCFs=7000;'... |
||
| 42 | 'DRNLParams.linBWs=3500;'... |
||
| 43 | }; |
||
| 44 | |||
| 45 | % delare 'showMap' options to control graphical output |
||
| 46 | % (not needed but might be useful |
||
| 47 | % showMapOptions.printModelParameters=0; % prints all parameters |
||
| 48 | % showMapOptions.showModelOutput=1; % plot of all stages |
||
| 49 | % showMapOptions.printFiringRates=0; % prints stage activity levels |
||
| 50 | % showMapOptions.showACF=0; % shows SACF (probability only) |
||
| 51 | % showMapOptions.showEfferent=0; % tracks of AR and MOC |
||
| 52 | % showMapOptions.surfProbability=0; % 2D plot of HSR response |
||
| 53 | % showMapOptions.surfSpikes=0; % 2D plot of spikes histogram |
||
| 54 | % showMapOptions.ICrates=0; % IC rates by CNtauGk |
||
| 55 | % showMapOptions.fileName=[]; |
||
| 56 | |||
| 57 | % run the program |
||
| 58 | global dt DRNLoutput DRNLParams TMoutput |
||
| 59 | dbstop if error |
||
| 60 | restorePath=path; |
||
| 61 | addpath (['..' filesep 'MAP'], ['..' filesep 'wavFileStore'], ... |
||
| 62 | ['..' filesep 'utilities']) |
||
| 63 | figure(2), clf,figure(3), clf,figure(4), clf, |
||
| 64 | |||
| 65 | peakOutputDisp=zeros(length(levels),length(toneFrequencyList)); |
||
| 66 | peakStapesDisp=zeros(length(levels),length(toneFrequencyList)); |
||
| 67 | |||
| 68 | %% now vary level and frequency while measuring the response |
||
| 69 | levelNo=0; |
||
| 70 | for leveldBSPL=levels |
||
| 71 | levelNo=levelNo+1; |
||
| 72 | disp(['level: ' num2str(leveldBSPL)]) |
||
| 73 | |||
| 74 | freqNo=0; |
||
| 75 | for toneFrequency=toneFrequencyList |
||
| 76 | freqNo=freqNo+1; |
||
| 77 | |||
| 78 | %% Generate stimuli |
||
| 79 | dt=1/sampleRate; |
||
| 80 | time=dt: dt: duration; |
||
| 81 | inputSignal=sum(sin(2*pi*toneFrequency'*time), 1); |
||
| 82 | amp=10^(leveldBSPL/20)*28e-6; % converts to Pascals (peak) |
||
| 83 | inputSignal=amp*inputSignal; |
||
| 84 | % apply ramps |
||
| 85 | if rampDuration>0.5*duration, rampDuration=duration/2; end |
||
| 86 | rampTime=dt:dt:rampDuration; |
||
| 87 | ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ... |
||
| 88 | ones(1,length(time)-length(rampTime))]; |
||
| 89 | inputSignal=inputSignal.*ramp; |
||
| 90 | ramp=fliplr(ramp); |
||
| 91 | inputSignal=inputSignal.*ramp; |
||
| 92 | % add silence |
||
| 93 | intialSilence= zeros(1,round(beginSilence/dt)); |
||
| 94 | finalSilence= zeros(1,round(endSilence/dt)); |
||
| 95 | inputSignal= [intialSilence inputSignal finalSilence]; |
||
| 96 | |||
| 97 | %% run the model |
||
| 98 | |||
| 99 | MAP1_14(inputSignal, sampleRate, BF, ... |
||
| 100 | MAPparamsName, AN_spikesOrProbability, paramChanges); |
||
| 101 | |||
| 102 | peakOutputDisp(levelNo,freqNo)=max(DRNLoutput); |
||
| 103 | peakStapesDisp(levelNo,freqNo)=max(TMoutput); |
||
| 104 | |||
| 105 | % the model run is complete. Now display the results if debugging |
||
| 106 | % UTIL_showMAP(showMapOptions, paramChanges) |
||
| 107 | end % probe frequencies |
||
| 108 | |||
| 109 | % monitor progress |
||
| 110 | figure(2), loglog(toneFrequencyList, peakOutputDisp), hold on |
||
| 111 | xlabel('frequency')
|
||
| 112 | ylabel('peak DRNL displacement (m)')
|
||
| 113 | title ('DRNL uncorrected displacement')
|
||
| 114 | end % levels |
||
| 115 | figure(2),legend(num2str(toneFrequencyList'),'location','northwest') |
||
| 116 | |||
| 117 | % convert from model BM displacement to Ruggero's velocity |
||
| 118 | DRNLvelocity= peakOutputDisp ... |
||
| 119 | .*repmat(2*pi*toneFrequencyList,length(levels),1); |
||
| 120 | % convert from model stapes displacement to Ruggero's velocity |
||
| 121 | stapesVelocity= peakStapesDisp ... |
||
| 122 | .*repmat(2*pi*toneFrequencyList,length(levels),1); |
||
| 123 | % velocity gain is increased velocity attributable to the DRNL |
||
| 124 | DRNLvelocityGain = DRNLvelocity./stapesVelocity; |
||
| 125 | DRNLvelocityGain_dB= 20*log10(DRNLvelocityGain ); |
||
| 126 | % iso-intensity equates all functions at the same outpu for the lowest |
||
| 127 | % velocity tested |
||
| 128 | isoIntensityDRNLvel_dB= DRNLvelocityGain_dB- ... |
||
| 129 | repmat(DRNLvelocityGain_dB(:,1),1,length(toneFrequencyList)); |
||
| 130 | |||
| 131 | % displays |
||
| 132 | % iso-velocity function (nrmalised by stapes velocity) |
||
| 133 | figure(3), clf, semilogx(toneFrequencyList, isoIntensityDRNLvel_dB) |
||
| 134 | ylim([-10 60]) |
||
| 135 | xlim([2000 20000]) |
||
| 136 | xlabel('frequency')
|
||
| 137 | ylabel('peak DRNL velocity gain (dB)')
|
||
| 138 | title(['CF= ' num2str(BF) ' Hz']) |
||
| 139 | legend(num2str(levels'),'location','northwest') |
||
| 140 | |||
| 141 | % velocity I/O function |
||
| 142 | figure(4), clf, semilogy(levels, (DRNLvelocity*1e6)'), hold on |
||
| 143 | ylim([1e0 1e4]) |
||
| 144 | xlim([0 100]) |
||
| 145 | xlabel('level')
|
||
| 146 | ylabel(' velocity (microm/ s)')
|
||
| 147 | title(['CF= ' num2str(BF) ' Hz']) |
||
| 148 | legend(num2str(toneFrequencyList'),'location','northwest') |
||
| 149 | |||
| 150 | % command window reports |
||
| 151 | disp(''), disp('***')
|
||
| 152 | disp(AN_spikesOrProbability) |
||
| 153 | |||
| 154 | % DRNL parameter set |
||
| 155 | UTIL_showStructureSummary(DRNLParams, 'DRNLParams', 10) |
||
| 156 | |||
| 157 | % stimulus characteristics |
||
| 158 | disp(['CF=' num2str(BF)]) |
||
| 159 | disp(['tone Duration=' num2str(rampDuration)]) |
||
| 160 | disp(['ramp Duration=' num2str(duration)]) |
||
| 161 | |||
| 162 | % particular parameter changes used on this run |
||
| 163 | for i=1:length(paramChanges) |
||
| 164 | disp(paramChanges{i})
|
||
| 165 | end |
||
| 166 | |||
| 167 | % if required dump one or more matrices in tab spaced format |
||
| 168 | % (suitable for pasting directly into EXCEL. |
||
| 169 | % UTIL_printTabTable([toneFrequencyList' peakOutputDisp']) |
||
| 170 | |||
| 171 | % leave the path as you found it |
||
| 172 | path(restorePath) |
||
| 173 |