tomwalters@0: % generating function for 'aim-mat' tomwalters@0: % tomwalters@0: % (c) 2011, University of Southampton bleeck@3: % Maintained by Stefan Bleeck (bleeck@gmail.com) bleeck@3: % download of current version is on the soundsoftware site: bleeck@3: % http://code.soundsoftware.ac.uk/projects/aimmat bleeck@3: % documentation and everything is on http://www.acousticscale.org tomwalters@0: tomwalters@0: tomwalters@0: function fr=gen_gtfb(sig,options) tomwalters@0: tomwalters@0: NumCh=options.nr_channels; tomwalters@0: fre1=options.lowest_frequency; tomwalters@0: fre2=options.highest_frequency; tomwalters@0: FRange = [fre1 fre2]; tomwalters@0: tomwalters@0: tomwalters@0: samplerate=getsr(sig); tomwalters@0: Snd=getvalues(sig); tomwalters@0: Snd=Snd'; %- do we need this transpose? tomwalters@0: tomwalters@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tomwalters@0: tomwalters@0: fs = samplerate; tomwalters@0: NAPparam.cf_afb = [fre1 fre2]; tomwalters@0: cf_afb=NAPparam.cf_afb; tomwalters@0: NAPparam.SubBase = 0.5; tomwalters@0: tomwalters@0: %%%%% Outer-Mid Ear Compensation %%%% tomwalters@0: %CmpnOutMid = OutMidCrctFilt('ELC',fs,0); tomwalters@0: %Snd_om = filter(CmpnOutMid,1,Snd); tomwalters@0: tomwalters@0: %we are already applying filter in PCP module tomwalters@0: Snd_om = Snd; % if unnecessary tomwalters@0: tomwalters@0: tomwalters@0: %%%%% BMM %%% tomwalters@0: % disp('*** BMM & NAP Calculation ***'); tomwalters@0: % disp(NAPparam) tomwalters@0: % tic; tomwalters@0: Frs = FcNch2EqERB(min(cf_afb),max(cf_afb),NumCh); tomwalters@0: NAPparam.Frs = Frs; tomwalters@0: NAPparam.b = options.b; % maah: 1.019; % default gammatone tomwalters@0: tomwalters@0: % IIR implementation tomwalters@0: % disp('BMM : Start calculation, Wait a minute'); tomwalters@0: % fcoefs = MakeERBFilters98B(fs,Frs,[],b); % new version tomwalters@0: % BMM = ERBFilterBank(Snd_om, fcoefs); tomwalters@0: % disp(['BMM : elapsed_time = ' num2str(toc,3) ' (sec)']); tomwalters@0: tomwalters@0: % %%%% Lowpass filter for representing Phase-lock property %%% tomwalters@0: % flpcut = 1200; tomwalters@0: % [bzLP apLP] = butter(1,flpcut/(fs/2)); tomwalters@0: % bzLP2 = [bzLP(1)^2, 2*bzLP(1)*bzLP(2), bzLP(2)^2]; tomwalters@0: % apLP2 = [apLP(1)^2, 2*apLP(1)*apLP(2), apLP(2)^2]; tomwalters@0: tomwalters@0: tomwalters@0: LenSnd = length(Snd_om); tomwalters@0: bias = 0.1; tomwalters@0: waithand=waitbar(0,'generating basilar membrane motion'); tomwalters@0: tomwalters@0: for nch = 1:NumCh tomwalters@0: if mod(nch,10)==0 tomwalters@0: waitbar(nch/NumCh); tomwalters@0: end tomwalters@0: gt = GammaChirp(Frs(nch),fs,4,NAPparam.b,0,0,[],'peak'); tomwalters@0: BMM(nch,:) = fftfilt(gt,Snd_om); tomwalters@0: end; tomwalters@0: tomwalters@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tomwalters@0: %now we convert all the stuff into the form that aim mat wants it tomwalters@0: fr=frame(BMM); tomwalters@0: fr=setsr(fr,samplerate); tomwalters@0: fr=setstarttime(fr,getminimumtime(sig)); tomwalters@0: tomwalters@0: fr=setcf(fr,Frs); tomwalters@0: tomwalters@0: tomwalters@0: if ~strcmp(options.do_phase_alignment,'off') tomwalters@0: fr=phasealign(fr,options); tomwalters@0: end tomwalters@0: tomwalters@0: tomwalters@0: close(waithand); tomwalters@0: tomwalters@0: tomwalters@0: