This documentation page applies to an outdated major AMT version. We show it for archival purposes only.
Click here for the documentation menu and here to download the latest AMT (1.6.0).
function [ei_map, fc] = breebaart2001preproc(insig, fs, tau, ild, varargin);
%BREEBAART2001PREPROC Auditory model from Breebaart et. al. 2001
% Usage: [outsig, fc] = breebaart2001preproc(insig,fs);
% [outsig, fc] = breebaart2001preproc(insig,fs,...);
%
% Input parameters:
% insig : input acoustic signal.
% fs : sampling rate.
% tau : characteristic delay in seconds (positive: left is leading)
% ild : characteristic ILD in dB (positive: left is louder)
%
% BREEBAART2001PREPROC(insig,fs,tau,ild) computes the EI-cell
% representation of the signal insig sampled with a frequency of fs Hz
% as described in Breebaart (2001). The parameters tau and ild define
% the sensitivity of the EI-cell.
%
% The input must have dimensions time x left/right channel
% x signal no.
%
% The output has dimensions time x frequency x signal no.
%
% [outsig,fc]=BREEBAART2001PREPROC(...) additionally returns the center
% frequencies of the filter bank.
%
% The Breebaart 2001 model consists of the following stages:
%
% 1) a gammatone filter bank with 1-erb spaced filters.
%
% 2) an envelope extraction stage done by half-wave rectification
% followed by low-pass filtering to 770 Hz.
%
% 3) an adaptation stage modelling nerve adaptation by a cascade of 5
% loops.
%
% 4) an excitation-inhibition (EI) cell model.
%
% Parameters for AUDITORYFILTERBANK, IHCENVELOPE, ADAPTLOOP and
% EICELL can be passed at the end of the line of input arguments.
%
% Examples
% --------
%
% The following code sets up a simple test example :
%
% % Setup parameters
% fs = 44100; % Sampling rate
% T = 0.3; % Duration
% Spl1 = 75; % SPL of input signal 1
% Spl2 = 75; % SPL of input signal 2
% rho = 0; % normalized correlation of signals
% tau = 0;
% ild = 0;
%
% % Generate signals:
% t = [0:1/fs:T];
% n1 = setdbspl(randn(length(t),1),Spl1);
% n2 = setdbspl(randn(length(t),1),Spl2);
% x1 = n1*sqrt((1+rho)/2) + n2*sqrt((1-rho)/2);
% x2 = n1*sqrt((1+rho)/2) - n2*sqrt((1-rho)/2);
%
% % Run the model and plot it
% [ei_map, fc] = breebaart2001preproc([x1,x2], fs, tau, ild);
% plotfilterbank(ei_map,1,fc,fs,'audtick','lin');
%
% See also: eicell, auditoryfilterbank, ihcenvelope, adaptloop
%
% Url: http://amtoolbox.sourceforge.net/amt-0.9.6/doc/binaural/breebaart2001preproc.php
% Copyright (C) 2009-2014 Peter L. Søndergaard.
% This file is part of AMToolbox version 1.0.0
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see <http://www.gnu.org/licenses/>.
% References: breebaart2001binaural
% AUTHOR : Peter L. Søndergaard
% ------ Checking of input parameters ------------
if nargin<4
error('%s: Too few input arguments.',upper(mfilename));
end;
if ~isnumeric(insig)
error('%s: insig must be numeric.',upper(mfilename));
end;
if ~isnumeric(fs) || ~isscalar(fs) || fs<=0
error('%s: fs must be a positive scalar.',upper(mfilename));
end;
definput.import = {'auditoryfilterbank','ihcenvelope','adaptloop','eicell'};
definput.importdefaults={'fhigh',8000,'ihc_breebaart','adt_breebaart'};
[flags,keyvals,flow,fhigh,basef] = ltfatarghelper({'flow', 'fhigh', ...
'basef'},definput,varargin);
% ------ do the computation -------------------------
%% Apply the auditory filterbank
[outsig, fc] = auditoryfilterbank(insig,fs,'argimport',flags,keyvals);
%% 'haircell' envelope extraction
outsig = ihcenvelope(outsig,fs,'argimport',flags,keyvals);
%% non-linear adaptation loops
outsig = adaptloop(outsig,fs,'argimport',flags,keyvals);
[siglen,nfreqchannels,naudiochannels,nsignals] = size(outsig);
ei_map = zeros(siglen, nfreqchannels, nsignals);
for k=1:nsignals
for g=1:nfreqchannels
ei_map(:,g,k) = eicell(squeeze(outsig(:,g,:,k)),fs,tau,ild);
end
end