annotate aim-mat/modules/usermodule/mellin/MIpack/For Tim/CalNAPghll.m @ 4:537f939baef0 tip

various bug fixes and changed copyright message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:37:17 +0100
parents 74dedb26614d
children
rev   line source
tomwalters@0 1 %
tomwalters@0 2 % Calculation of NAP
tomwalters@0 3 % (gammatone, halfwave rectification, lowpass, log compression)
tomwalters@0 4 % 7 Jan 2002
tomwalters@0 5 % Toshio Irino
tomwalters@0 6 %
tomwalters@0 7 function [NAP, NAPparam, BMM] = CalNAPghll(Snd, NAPparam)
tomwalters@0 8
tomwalters@0 9 fs = NAPparam.fs;
tomwalters@0 10 if isfield(NAPparam,'NumCh') == 0, NAPparam.NumCh = []; end;
tomwalters@0 11 if length(NAPparam.NumCh) == 0,
tomwalters@0 12 NAPparam.NumCh = 75;
tomwalters@0 13 end;
tomwalters@0 14 if isfield(NAPparam,'cf_afb') == 0, NAPparam.cf_afb = []; end;
tomwalters@0 15 if length(NAPparam.cf_afb) == 0,
tomwalters@0 16 NAPparam.cf_afb = [100 6000];
tomwalters@0 17 end;
tomwalters@0 18 if isfield(NAPparam,'SubBase') == 0, NAPparam.SubBase = []; end;
tomwalters@0 19 if length(NAPparam.SubBase) == 0,
tomwalters@0 20 NAPparam.SubBase = 0;
tomwalters@0 21 end;
tomwalters@0 22
tomwalters@0 23 fs = NAPparam.fs;
tomwalters@0 24 NumCh = NAPparam.NumCh;
tomwalters@0 25 cf_afb = NAPparam.cf_afb;
tomwalters@0 26
tomwalters@0 27 %%%%% Outer-Mid Ear Compensation %%%%
tomwalters@0 28 CmpnOutMid = OutMidCrctFilt('ELC',fs,0);
tomwalters@0 29 Snd_om = filter(CmpnOutMid,1,Snd);
tomwalters@0 30 % Snd_om = Snd; % if unnecessary
tomwalters@0 31
tomwalters@0 32
tomwalters@0 33 %%%%% BMM %%%
tomwalters@0 34 disp('*** BMM & NAP Calculation ***');
tomwalters@0 35 disp(NAPparam)
tomwalters@0 36 tic;
tomwalters@0 37 %% dERB = (Freq2ERB(max(cf_afb))-Freq2ERB(min(cf_afb)))/(NumCh-1);
tomwalters@0 38 %% Frs = ERB2Freq( Freq2ERB(min(cf_afb)):dERB:Freq2ERB(max(cf_afb)) );
tomwalters@0 39 Frs = FcNch2EqERB(min(cf_afb),max(cf_afb),NumCh);
tomwalters@0 40 NAPparam.Frs = Frs;
tomwalters@0 41 NAPparam.b = 1.019; % default gammatone
tomwalters@0 42
tomwalters@0 43 % IIR implementation
tomwalters@0 44 % disp('BMM : Start calculation, Wait a minute');
tomwalters@0 45 % fcoefs = MakeERBFilters98B(fs,Frs,[],b); % new version
tomwalters@0 46 % BMM = ERBFilterBank(Snd_om, fcoefs);
tomwalters@0 47 % disp(['BMM : elapsed_time = ' num2str(toc,3) ' (sec)']);
tomwalters@0 48
tomwalters@0 49 %%%%% Lowpass filter for representing Phase-lock property %%%
tomwalters@0 50 flpcut = 1200;
tomwalters@0 51 [bzLP apLP] = butter(1,flpcut/(fs/2));
tomwalters@0 52 bzLP2 = [bzLP(1)^2, 2*bzLP(1)*bzLP(2), bzLP(2)^2];
tomwalters@0 53 apLP2 = [apLP(1)^2, 2*apLP(1)*apLP(2), apLP(2)^2];
tomwalters@0 54
tomwalters@0 55 %%%%% NAP %%%%
tomwalters@0 56 tic;
tomwalters@0 57 LenSnd = length(Snd_om);
tomwalters@0 58 bias = 0.1;
tomwalters@0 59 for nch = 1:NumCh
tomwalters@0 60 if rem(nch, 20) == 0 | nch == 1 | nch == NumCh
tomwalters@0 61 disp(['BMM-NAP #' int2str(nch) '/#' int2str(NumCh) ': ' ...
tomwalters@0 62 'elapsed_time = ' num2str(toc,3) ' (sec)']);
tomwalters@0 63 end;
tomwalters@0 64
tomwalters@0 65 gt = GammaChirp(Frs(nch),fs,4,NAPparam.b,0,0,[],'peak');
tomwalters@0 66 % BMM(nch,:) = filter(gt,1,Snd_om);
tomwalters@0 67 BMM(nch,:) = fftfilt(gt,Snd_om);
tomwalters@0 68 NAPraw = log10(max(BMM(nch,:),bias)) - log10(bias);
tomwalters@0 69 NAP(nch,1:LenSnd) = filter(bzLP2,apLP2,NAPraw); % LP filtered
tomwalters@0 70
tomwalters@0 71 % [Frs(nch) max(max(NAPraw)) max(max(NAP(nch,:)))]
tomwalters@0 72 end;
tomwalters@0 73
tomwalters@0 74
tomwalters@0 75 if NAPparam.SubBase ~= 0,
tomwalters@0 76 disp([ '=== Baseline subtraction : Max NAP = ' num2str( max(max(NAP))) ...
tomwalters@0 77 ', NAPparam.SubBase = ' num2str(NAPparam.SubBase) ' ===']);
tomwalters@0 78 end;
tomwalters@0 79
tomwalters@0 80 NAP0 = NAP;
tomwalters@0 81 NAP = max((NAP0 - NAPparam.SubBase),0);
tomwalters@0 82
tomwalters@0 83 NAPparam.height = max(max(NAP));
tomwalters@0 84 NAPparam.tms = (0:LenSnd-1)/fs*1000;
tomwalters@0 85
tomwalters@0 86 return
tomwalters@0 87
tomwalters@0 88 %%%%%%%%%%%%
tomwalters@0 89
tomwalters@0 90 if 1
tomwalters@0 91 ProfNAP0 = mean(NAP0')';
tomwalters@0 92 ProfNAP = mean(NAP')';
tomwalters@0 93 plot(NAPparam.Frs,ProfNAP0,NAPparam.Frs,ProfNAP0)
tomwalters@0 94 subplot(2,1,1)
tomwalters@0 95 image(flipud(NAP0(:,1:100:LenSnd))*15)
tomwalters@0 96 subplot(2,1,2)
tomwalters@0 97 image(flipud(NAP(:,1:100:LenSnd))*20)
tomwalters@0 98 end;
tomwalters@0 99
tomwalters@0 100
tomwalters@0 101 return
tomwalters@0 102
tomwalters@0 103 %%%%%%%%%%%%%%%%%%%%
tomwalters@0 104
tomwalters@0 105 % [bzGT, apGT, Frs, ERBw] = MakeERBFiltersB(fs,NumCh,Frs,b); % NG for low freq
tomwalters@0 106
tomwalters@0 107 %%Simple pre-emphasis
tomwalters@0 108 %%CoefPreEmph = [1, -0.97];
tomwalters@0 109 %%Snd = filter(CoefPreEmph,1,Snd);
tomwalters@0 110
tomwalters@0 111 % [frsp, freq] = freqz(bzLP,apLP,1024,fs);
tomwalters@0 112 % [frsp2, freq] = freqz(bzLP2,apLP2,1024,fs);
tomwalters@0 113 % plot(freq,20*log10(abs(frsp)),freq,20*log10(abs(frsp2)))
tomwalters@0 114 % axis([0 2000 -10 2]);
tomwalters@0 115 % grid;