THE AUDITORY MODELING TOOLBOX

Applies to version: 1.3.0

View the help

Go to function

DEMO_BREEBAART2001 - Demo for binaural processingmodel from Breebaart et al. (2001)

Program code:

function demo_breebaart2001(varargin)
%DEMO_BREEBAART2001 Demo for binaural processingmodel from Breebaart et al. (2001)
%
%   DEMO_BREEBAART2001(flags) demonstrates how to compute N0S0, N0Spi and
%   NpiS0 thresholds for different combinations of the monaural and
%   binaural central processor for a center frequency of 1000 or 4000 Hz 
%   using the model from Breebaart et al. (2014).
%
%   
%   The N0Spi condition is default. The following combinations for 4000 Hz 
%   are calculated:
%
%     'lbr'  Compute decision from combination of left, binaural and
%            right result. If the binaural result is zero, don't use it. 
%            In this condition lbr is equal to lBr, because the binaural
%            result is not zero.
%
%     'b'    Compute decision from binaural result only.
%
%     'lr'   Compute decision from left and right result.
%
%   
%   Set flag to the following flags to shows other conditions:
%
%     'N0S0'  N0S0 thresholds for differnt combinations of the monaural and
%             binaural processor for a center frequency of 4000 Hz.
%             The following combinations are calculated:
%
%             - lbr Compute decision from combination of left, binaural and
%               right result. If the binaural result is zero, don't use
%               it. In this condition lbr is equal to lr.
%
%             - lBr Compute decision from combination of left, binaural and
%               right result even if the binaural result is zero. 
%           
%     'NpiS0' NpiS0 thresholds for different combinations of the monaural and
%             binaural processor for a center frequency of 1000 Hz.
%             The following combinations are calculated:
%
%             - lbr Compute decision from combination of left, binaural and
%               right result. If the binaural result is zero, don't use it. 
%               In this condition lbr is equal to lBr, because the binaural
%               result is not zero.
%
%             - b Compute decision from binaural result only.
%
%             - lr Compute decision from left and right result.
%
%     'exact' The threshold is computed as a mean value of 6 repetitions per
%             bandwidth. To get results faster the computational results are
%             stored in cache and can be downloaded.
%
%     'fast' The threshold as the result of one experimental run per bandwidth.
%            The number of bandwidth values is half the number of values at the
%            'exact' computation.  The fast computation is default.
%
% 
%   demo_breebaart2001('N0Spi') shows: 
%
%     demo_breebaart2001('N0Spi');
%
%   N0Spi thresholds  as a function of the masker bandwidth for a center
%   frequency of 4000 Hz and lbr, b and lr conditions in comparison with
%   the model results of Breebaart et al. (2001b).
%
%
%   demo_breebaart2001('N0S0') shows: 
%
%     demo_breebaart2001('N0S0');
%
%   N0S0 thresholds  as a function of the masker bandwidth for a center
%   frequency of 4000 Hz and lbr and lBr conditions in comparison with
%   experimental results of van de Par and Kohlrausch (1999).
%
%
%   demo_breebaart2001('NpiS0') shows: 
%
%     demo_breebaart2001('NpiS0');
%
%   NpiS0 thresholds  as a function of the masker bandwidth for a center
%   frequency of 4000 Hz and lbr, b and lr conditions in comparison with
%   the model results of Breebaart et al. (2001b).
%
%   See also: breebaart2001_centralproc breebaart2001
%   sig_breebaart2001
%
%   References:
%     J. Breebaart, S. van de Par, and A. Kohlrausch. Binaural processing
%     model based on contralateral inhibition. II. Dependence on spectral
%     parameters. J. Acoust. Soc. Am., 110:1089--1104, August 2001.
%     
%     S. van de Par and A. Kohlrausch. Dependence of binaural masking level
%     differences on center frequency, masker bandwidth, and interaural
%     parameters. J. Acoust. Soc. Am., 106(4):1940--1947, 1999.
%     
%
%   Url: http://amtoolbox.org/amt-1.3.0/doc/demos/demo_breebaart2001.php

%   #Author : Martina Kreuzbichler (2016)

% This file is licensed unter the GNU General Public License (GPL) either 
% version 3 of the license, or any later version as published by the Free Software 
% Foundation. Details of the GPLv3 can be found in the AMT directory "licences" and 
% at <https://www.gnu.org/licenses/gpl-3.0.html>. 
% You can redistribute this file and/or modify it under the terms of the GPLv3. 
% This file is distributed without any warranty; without even the implied warranty 
% of merchantability or fitness for a particular purpose. 

definput.import={'amt_cache'};
definput.flags.type = {'N0Spi','N0S0','NpiS0'};
definput.flags.speed = {'fast','exact'};
definput.flags.interface = {'AMT', 'BInit'};
definput.keyvals.directory=tempdir;

% Parse input options
[flags,kv]  = ltfatarghelper({},definput,{});


if flags.do_fast
    
    if flags.do_N0Spi
        % set experimental paramters
        parout = [];
        switch flags.interface
          case 'AMT'
            expset = {'intnum',3,'rule',[2 1],'expvarstepstart',8,...
                'expvarsteprule',[0.5 2],'stepmin',[1 8],'expvarstart',65};
          case 'BInit'
            expset = {'intnum',3,'rule',[2 1],'expvarstepstart',8,...
                'expvarsteprule',[0.5 2],'stepmin',[1 8],'expvarstart',65, ...
                'interface','BInit','directory',kv.directory,'fs',32000};
        end
        parout = amt_emuexp('expinit',parout,expset);

        % set model parameters
        % input2 = fs; input3 = tau; input4 = ild; 
        modelset = {'name','breebaart2001','input1',...
            'expsignal', 'input2',32000,'input3',0,'input4',0,...
            'outputs',[1 3 4]};
        parout = amt_emuexp('modelinit',parout,modelset);

        % run model
        centerfreq = 4000;
        bw = [5 25 100 500 2000];
        centralprocstring = {'lbr','b','lr'};
        nl = 65;

    amt_disp('demo_breebaart2001 will calculate 15 thresholds');
		output = amt_cache('get','N0Spi_fast',flags.cachemode);		
		if isempty(output)
      runcounter=1;
			% loop for all centralprocstring conditions.
			for stringcount = 1:length(centralprocstring)

				% set decision parameters
				decisionset = {'name','breebaart2001_centralproc',...
					'input1','modelout','input2','modelout','input3',...
					'modelout','input4',centralprocstring{stringcount}};
				parout = amt_emuexp('decisioninit',parout,decisionset);
				
				resultbwvec = zeros(1,1);
				resultvec = zeros(5,1);
				
				%loop for all bandwidths
				for bwcount = 1:length(bw)

					% set signal parameters
					%input3 = signallevel; input4 = signalduration;
					%input5 = signalphase; input7 = noiselevel;
					%input8 = noiseduration; input9 = noisephase;
					%input10 = hanning ramp duration; input11 = fs;
					signalset = {'name','sig_breebaart2001','input1',...
						'inttyp', 'input2',centerfreq,'input3',...
						'expvar','input4',0.15,'input5',pi,'input6',...
						bw(bwcount),'input7',nl,'input8',0.2,'input9',0,...
						'input10',0.025,'input11', 32000};
					parout = amt_emuexp('signalinit',parout,signalset);

          amt_disp(['Threshold ' num2str(runcounter) ': for bw=' num2str(bw(bwcount)) 'Hz and decision=' centralprocstring{stringcount} '.']);
					result = amt_emuexp('run',parout);
					resultbwvec(1) = result(1)-nl;

					resultvec(bwcount) = resultbwvec;
					resultbwvec = zeros(1,1);
					amt_disp(sprintf(['Progress for central processor condition ' ...
						centralprocstring{stringcount} ':' num2str(round(bwcount/length(bw)*100)) ...
						'%% calculated']));
          runcounter=runcounter+1;
					result_temp =sprintf(['N0Spi4000' centralprocstring{stringcount}]);
					output.(result_temp) = resultvec;

				end
			end
			amt_cache('set','N0Spi_fast',output);
		end

        N0Spi4000lbr = output.N0Spi4000lbr;
        N0Spi4000b = output.N0Spi4000b;
        N0Spi4000lr = output.N0Spi4000lr;
        
        % plot

        %get model data
        N0Spimodeldata4000 = data_breebaart2001('fig3','nfc4000');

        bw_model = [5 10 25 50 100 250 500 1000 2000 4000];
        bw_demo = [5 25 100 500 2000];

        figure
        plot(bw_demo,N0Spi4000lbr,'-x','MarkerSize',10);
        set(gca,'xscal','log')
        set(gca,'XTick',[5 10 25 50 100 250 1000 4000]);
        axis([4 5000 -35 20])
        hold on;
        plot(bw_demo,N0Spi4000b,'-o','MarkerSize',10,'Color',[0,0.7,1]);
        plot(bw_demo,N0Spi4000lr,'-dc','MarkerSize',10);
        plot(bw_model,N0Spimodeldata4000,'-sr','MarkerSize',10,'MarkerFaceColor','r');
        xlabel('Masker Bandwidth [Hz]');
        ylabel('Threshold S/N [dB]');
        legend('N0Spi condition lbr','N0Spi condition b',...
            'N0Spi condition lr','model data from Breebaart (2001)')
        title('N0Spi 4000 Hz thresholds: monaural factor = 0.0003 - fast computation')
    
    elseif flags.do_N0S0
        % set experimental paramters
        parout = [];
        expset = {'intnum',3,'rule',[2 1],'expvarstepstart',8,...
            'expvarsteprule',[0.5 2],'stepmin',[1 8],'expvarstart',90};
        parout = amt_emuexp('expinit',parout,expset);

        % set model parameters
        % input2 = fs; input3 = tau; input4 = ild; 
        modelset = {'name','breebaart2001','input1',...
            'expsignal', 'input2',32000,'input3',0,'input4',0,...
            'outputs',[1 3 4]};
        parout = amt_emuexp('modelinit',parout,modelset);

        % run model
        centerfreq = 4000;
        bw = [5 25 100 500 2000];
        centralprocstring = {'lbr', 'lBr'};
        nl = 70;

		output = amt_cache('get','N0S0_fast',flags.cachemode);		
		if isempty(output)
			% loop for all centralprocstring conditions.
			for stringcount = 1:length(centralprocstring)

				% set decision parameters
				decisionset = {'name','breebaart2001_centralproc',...
					'input1','modelout','input2','modelout','input3',...
					'modelout','input4',centralprocstring{stringcount}};
				parout = amt_emuexp('decisioninit',parout,decisionset);
				
				resultbwvec = zeros(1,1);
				resultvec = zeros(5,1);

				%loop for all bandwidths
				for bwcount = 1:length(bw)

					% set signal parameters
					%input3 = signallevel; input4 = signalduration;
					%input5 = signalphase; input7 = noiselevel;
					%input8 = noiseduration; input9 = noisephase;
					%input10 = hanning ramp duration; input11 = fs;
					signalset = {'name','sig_breebaart2001','input1',...
						'inttyp', 'input2',centerfreq,'input3',...
						'expvar','input4',0.15,'input5',0,'input6',...
						bw(bwcount),'input7',nl,'input8',0.2,'input9',0,...
						'input10',0.025,'input11', 32000};
					parout = amt_emuexp('signalinit',parout,signalset);

					result = amt_emuexp('run',parout);
					resultbwvec(1) = result(1)-nl;

					resultvec(bwcount) = resultbwvec;
					resultbwvec = zeros(1,1);


					amt_disp(sprintf(['Progress for central processor condition ' ...
						centralprocstring{stringcount} ': ' ...
						num2str(round(bwcount/length(bw)*100)) ...
						'%% calculated']));

					result_temp =sprintf(['N0S04000' centralprocstring{stringcount}]);
					output.(result_temp) = resultvec;

				end
			end
			amt_cache('set','N0S0_fast',output);
		end
        N0S04000lbr = output.N0S04000lbr;
        N0S04000lBr = output.N0S04000lBr;
        
        %plot
        N0S0expdata4000 = data_vandepar1999('fig1_N0S0','nfc4000');

        bw_model = [5 10 25 50 100 250 500 1000 2000 4000];
        bw_demo = [5 25 100 500 2000];

        figure
        plot(bw_demo,N0S04000lbr,'-x','MarkerSize',10);
        set(gca,'xscal','log')
        set(gca,'XTick',[5 10 25 50 100 250 1000 4000]);
        axis([4 5000 -15 10])
        hold on;
        plot(bw_demo,N0S04000lBr,'-o','MarkerSize',10,'Color',[0,0.7,1]);
        plot(bw_model,N0S0expdata4000,'-sg','MarkerSize',10,'MarkerFaceColor','g');
        xlabel('Masker Bandwidth [Hz]');
        ylabel('Threshold S/N [dB]');
        legend('N0S0 condition lbr','N0S0 condition lBr','experimental data from van de Par and Kohlrausch (1999)')
        title('N0S0 4000 Hz thresholds: monaural factor = 0.0003 - fast computation')
        
        
    elseif flags.do_NpiS0
        % set experimental paramters
        parout = [];
        expset = {'intnum',3,'rule',[2 1],'expvarstepstart',8,...
            'expvarsteprule',[0.5 2],'stepmin',[1 8],'expvarstart',85};
        parout = amt_emuexp('expinit',parout,expset);

        % set model parameters
        % input2 = fs; input3 = tau; input4 = ild; 
        modelset = {'name','breebaart2001','input1',...
            'expsignal', 'input2',32000,'input3',0.0005,'input4',0,...
            'outputs',[1 3 4]};
        parout = amt_emuexp('modelinit',parout,modelset);

        % run model
        centerfreq = 1000;
        bw = [5 25 100 500 2000];
        centralprocstring = {'lbr','b','lr'};
        nl = 70;

		output = amt_cache('get','NpiS0_fast',flags.cachemode);		
		if isempty(output)
			% loop for all centralprocstring conditions.
			for stringcount = 1:length(centralprocstring)

				% set decision parameters
				decisionset = {'name','breebaart2001_centralproc',...
					'input1','modelout','input2','modelout','input3',...
					'modelout','input4',centralprocstring{stringcount}};
				parout = amt_emuexp('decisioninit',parout,decisionset);
				
				resultbwvec = zeros(1,1);
				resultvec = zeros(5,1);

				%loop for all bandwidths
				for bwcount = 1:length(bw)

					% set signal parameters
					%input3 = signallevel; input4 = signalduration;
					%input5 = signalphase; input7 = noiselevel;
					%input8 = noiseduration; input9 = noisephase;
					%input10 = hanning ramp duration; input11 = fs;
					signalset = {'name','sig_breebaart2001','input1',...
						'inttyp', 'input2',centerfreq,'input3',...
						'expvar','input4',0.15,'input5',0,'input6',...
						bw(bwcount),'input7',nl,'input8',0.2,'input9',pi,...
						'input10',0.025,'input11', 32000};
					parout = amt_emuexp('signalinit',parout,signalset);
					
					result = amt_emuexp('run',parout);
					resultbwvec(1) = result(1)-nl;

					resultvec(bwcount) = resultbwvec;
					resultbwvec = zeros(1,1);


					amt_disp(sprintf(['Progress for central processor condition ' ...
						centralprocstring{stringcount} ': ' ...
						num2str(round(bwcount/length(bw)*100)) ...
						'%% calculated']));

					result_temp =sprintf(['NpiS01000' centralprocstring{stringcount}]);
					output.(result_temp) = resultvec;

				end
			end
			amt_cache('set','NpiS0_fast',output);
		end

        NpiS01000lbr = output.NpiS01000lbr;
        NpiS01000b = output.NpiS01000b;
        NpiS01000lr = output.NpiS01000lr;

        % plot

        %get model data
        NpiS0modeldata1000 = data_breebaart2001('fig6','nfc1000');

        bw_model = [5 10 25 50 100 250 500 1000 2000];
        bw_demo = [5 25 100 500 2000];

        figure
        plot(bw_demo,NpiS01000lbr,'-x','MarkerSize',10);
        set(gca,'xscal','log')
        set(gca,'XTick',[5 10 25 50 100 250 1000 4000]);
        axis([4 5000 -30 10])
        hold on;
        plot(bw_demo,NpiS01000b,'-o','MarkerSize',10,'Color',[0,0.7,1]);
        plot(bw_demo,NpiS01000lr,'-dc','MarkerSize',10);
        plot(bw_model,NpiS0modeldata1000,'-sr','MarkerSize',10,'MarkerFaceColor','r');
        xlabel('Masker Bandwidth [Hz]');
        ylabel('Threshold S/N [dB]');
        legend({'NpiS0 condition lbr','NpiS0 condition b',...
            'NpiS0 condition lr','model data from Breebaart (2001)'},...
            [290,170,0.1,0.05]);
        title('NpiS0 1000 Hz thresholds: monaural factor = 0.0003 - fast computation')
    end


elseif flags.do_exact

    if flags.do_N0Spi
        [N0Spi4000lbr,N0Spi4000b,N0Spi4000lr] = amt_cache('get','N0Spi',flags.cachemode);
        if isempty(N0Spi4000lbr)
            % do computation

            % set experimental paramters
            parout = [];
            expset = {'intnum',3,'rule',[2 1],'expvarstepstart',8,...
                'expvarsteprule',[0.5 2],'stepmin',[1 8],'expvarstart',65};
            parout = amt_emuexp('expinit',parout,expset);

            % set model parameters
            % input2 = fs; input3 = tau; input4 = ild; 
            modelset = {'name','breebaart2001','input1',...
                'expsignal', 'input2',32000,'input3',0,'input4',0,...
                'outputs',[1 3 4]};
            parout = amt_emuexp('modelinit',parout,modelset);

            % run model
            centerfreq = 4000;
            bw = [5 10 25 50 100 250 500 1000 2000 4000];
            centralprocstring = {'lbr','b','lr'};
            nl = 65;

            % loop for all centralprocstring conditions.
            for stringcount = 1:length(centralprocstring)

                % set decision parameters
                decisionset = {'name','breebaart2001_centralproc',...
                    'input1','modelout','input2','modelout','input3',...
                    'modelout','input4',centralprocstring{stringcount}};
                parout = amt_emuexp('decisioninit',parout,decisionset);

                %loop for all bandwidths
                for bwcount = 1:length(bw)

                    % set signal parameters
                    %input3 = signallevel; input4 = signalduration;
                    %input5 = signalphase; input7 = noiselevel;
                    %input8 = noiseduration; input9 = noisephase;
                    %input10 = hanning ramp duration; input11 = fs;
                    signalset = {'name','sig_breebaart2001','input1',...
                        'inttyp', 'input2',centerfreq,'input3',...
                        'expvar','input4',0.3,'input5',pi,'input6',...
                        bw(bwcount),'input7',nl,'input8',0.4,'input9',0,...
                        'input10',0.05,'input11', 32000};
                    parout = amt_emuexp('signalinit',parout,signalset);

                    % loop for experimental runs
                    for runcounter = 1:6
                        result = amt_emuexp('run',parout);
                        resultbwvec(runcounter) = result(1)-nl;
                    end

                    resultvec(bwcount) = mean(resultbwvec);
                    resultvecstd(bwcount) = std(resultbwvec,1);
                    resultbwvec = zeros(6,1);
                    amt_disp(sprintf(['Progress for central processor condition ' ...
                        centralprocstring{stringcount} ':' num2str(round(bwcount/length(bw)*100)) ...
                        '%% calculated']));

                    result_temp =sprintf(['N0Spi4000' centralprocstring{stringcount}]);
                    output.(result_temp) = [resultvec; resultvecstd]';

                end
            end

            N0Spi4000lbr = output.N0Spi4000lbr;
            N0Spi4000b = output.N0Spi4000b;
            N0Spi4000lr = output.N0Spi4000lr;

            amt_cache('set','N0Spi',N0Spi4000lbr,N0Spi4000b,N0Spi4000lr);
        end

        % plot

        %get model data
        N0Spimodeldata4000 = data_breebaart2001('fig3','nfc4000');

        bw = [5 10 25 50 100 250 500 1000 2000 4000];

        figure
        errorbar(bw,N0Spi4000lbr(:,1),N0Spi4000lbr(:,2),'-x','MarkerSize',10);
        set(gca,'xscal','log')
        set(gca,'XTick',[5 10 25 50 100 250 1000 4000]);
        axis([4 5000 -35 20])
        hold on;
        errorbar(bw,N0Spi4000b(:,1),N0Spi4000b(:,2),'-o','MarkerSize',10,'Color',[0,0.7,1]);
        errorbar(bw,N0Spi4000lr(:,1),N0Spi4000lr(:,2),'-dc','MarkerSize',10);
        plot(bw,N0Spimodeldata4000,'-sr','MarkerSize',10,'MarkerFaceColor','r');
        xlabel('Masker Bandwidth [Hz]');
        ylabel('Threshold S/N [dB]');
        legend('N0Spi condition lbr','N0Spi condition b',...
            'N0Spi condition lr','model data from Breebaart (2001)')
        title('N0Spi 4000 Hz thresholds: monaural factor = 0.0003')

    elseif flags.do_N0S0
        [N0S04000lbr,N0S04000lBr] = amt_cache('get','N0S0',flags.cachemode);
        if isempty(N0S04000lbr)
            % do computation

            % set experimental paramters
            parout = [];
            expset = {'intnum',3,'rule',[2 1],'expvarstepstart',8,...
                'expvarsteprule',[0.5 2],'stepmin',[1 8],'expvarstart',90};
            parout = amt_emuexp('expinit',parout,expset);

            % set model parameters
            % input2 = fs; input3 = tau; input4 = ild; 
            modelset = {'name','breebaart2001','input1',...
                'expsignal', 'input2',32000,'input3',0,'input4',0,...
                'outputs',[1 3 4]};
            parout = amt_emuexp('modelinit',parout,modelset);

            % run model
            centerfreq = 4000;
            bw = [5 10 25 50 100 250 500 1000 2000 4000];
            centralprocstring = {'lbr', 'lBr'};
            nl = 70;

            % loop for all centralprocstring conditions.
            for stringcount = 1:length(centralprocstring)

                % set decision parameters
                decisionset = {'name','breebaart2001_centralproc',...
                    'input1','modelout','input2','modelout','input3',...
                    'modelout','input4',centralprocstring{stringcount}};
                parout = amt_emuexp('decisioninit',parout,decisionset);

                %loop for all bandwidths
                for bwcount = 1:length(bw)

                    % set signal parameters
                    %input3 = signallevel; input4 = signalduration;
                    %input5 = signalphase; input7 = noiselevel;
                    %input8 = noiseduration; input9 = noisephase;
                    %input10 = hanning ramp duration; input11 = fs;
                    signalset = {'name','sig_breebaart2001','input1',...
                        'inttyp', 'input2',centerfreq,'input3',...
                        'expvar','input4',0.3,'input5',0,'input6',...
                        bw(bwcount),'input7',nl,'input8',0.4,'input9',0,...
                        'input10',0.05,'input11', 32000};
                    parout = amt_emuexp('signalinit',parout,signalset);

                    % loop for experimental runs
                    for runcounter = 1:6
                        result = amt_emuexp('run',parout);
                        resultbwvec(runcounter) = result(1)-nl;
                    end

                    resultvec(bwcount) = mean(resultbwvec);
                    resultvecstd(bwcount) = std(resultbwvec,1);
                    resultbwvec = zeros(6,1);
                    amt_disp(sprintf(['Progress for central processor condition ' ...
                        centralprocstring{stringcount} ': ' ...
                        num2str(round(bwcount/length(bw)*100)) ...
                        '%% calculated']));

                    result_temp =sprintf(['N0S04000' centralprocstring{stringcount}]);
                    output.(result_temp) = [resultvec; resultvecstd]';

                end
            end
            N0S04000lbr = output.N0S04000lbr;
            N0S04000lBr = output.N0S04000lBr;


            amt_cache('set','N0S0',N0S04000lbr,N0S04000lBr);
        end

        % plot

        % get experimental data
        N0S0expdata4000 = data_vandepar1999('fig1_N0S0','nfc4000');

        bw = [5 10 25 50 100 250 500 1000 2000 4000];

        figure
        errorbar(bw,N0S04000lbr(:,1),N0S04000lbr(:,2),'-x','MarkerSize',10);
        set(gca,'xscal','log')
        set(gca,'XTick',[5 10 25 50 100 250 1000 4000]);
        axis([4 5000 -15 10])
        hold on;
        errorbar(bw,N0S04000lBr(:,1),N0S04000lBr(:,2),'-o','MarkerSize',10,'Color',[0,0.7,1]);
        plot(bw,N0S0expdata4000,'-sg','MarkerSize',10,'MarkerFaceColor','g');
        xlabel('Masker Bandwidth [Hz]');
        ylabel('Threshold S/N [dB]');
        legend('N0S0 condition lbr','N0S0 condition lBr','experimental data from van de Par and Kohlrausch (1999)')
        title('N0S0 4000 Hz thresholds: monaural factor = 0.0003')


    elseif flags.do_NpiS0
        [NpiS01000lbr,NpiS01000b,NpiS01000lr] = amt_cache('get','NpiS0',flags.cachemode);
        if isempty(NpiS01000lbr)
            % do computation

            % set experimental paramters
            parout = [];
            expset = {'intnum',3,'rule',[2 1],'expvarstepstart',8,...
                'expvarsteprule',[0.5 2],'stepmin',[1 8],'expvarstart',85};
            parout = amt_emuexp('expinit',parout,expset);

            % set model parameters
            % input2 = fs; input3 = tau; input4 = ild; 
            modelset = {'name','breebaart2001','input1',...
                'expsignal', 'input2',32000,'input3',0.0005,'input4',0,...
                'outputs',[1 3 4]};
            parout = amt_emuexp('modelinit',parout,modelset);

            % run model
            centerfreq = 1000;
            bw = [5 10 25 50 100 250 500 1000 2000];
            centralprocstring = {'lbr','b','lr'};
            nl = 70;

            % loop for all centralprocstring conditions.
            for stringcount = 1:length(centralprocstring)

                % set decision parameters
                decisionset = {'name','breebaart2001_centralproc',...
                    'input1','modelout','input2','modelout','input3',...
                    'modelout','input4',centralprocstring{stringcount}};
                parout = amt_emuexp('decisioninit',parout,decisionset);

                %loop for all bandwidths
                for bwcount = 1:length(bw)

                    % set signal parameters
                    %input3 = signallevel; input4 = signalduration;
                    %input5 = signalphase; input7 = noiselevel;
                    %input8 = noiseduration; input9 = noisephase;
                    %input10 = hanning ramp duration; input11 = fs;
                    signalset = {'name','sig_breebaart2001','input1',...
                        'inttyp', 'input2',centerfreq,'input3',...
                        'expvar','input4',0.3,'input5',0,'input6',...
                        bw(bwcount),'input7',nl,'input8',0.4,'input9',pi,...
                        'input10',0.05,'input11', 32000};
                    parout = amt_emuexp('signalinit',parout,signalset);

                    % loop for experimental runs
                    for runcounter = 1:6
                        result = amt_emuexp('run',parout);
                        resultbwvec(runcounter) = result(1)-nl;
                    end

                    resultvec(bwcount) = mean(resultbwvec);
                    resultvecstd(bwcount) = std(resultbwvec,1);
                    resultbwvec = zeros(6,1);
                    amt_disp(sprintf(['Progress for central processor condition ' ...
                        centralprocstring{stringcount} ':' num2str(round(bwcount/length(bw)*100)) ...
                        '%% calculated']));

                    result_temp =sprintf(['NpiS01000' centralprocstring{stringcount}]);
                    output.(result_temp) = [resultvec; resultvecstd]';

                end
            end

            NpiS01000lbr = output.NpiS01000lbr;
            NpiS01000b = output.NpiS01000b;
            NpiS01000lr = output.NpiS01000lr;

            amt_cache('set','NpiS0',NpiS01000lbr,NpiS01000b,NpiS01000lr);
        end

        % plot

        %get model data
        NpiS0modeldata1000 = data_breebaart2001('fig6','nfc1000');

        bw = [5 10 25 50 100 250 500 1000 2000];

        figure
        errorbar(bw,NpiS01000lbr(:,1),NpiS01000lbr(:,2),'-x','MarkerSize',10);
        set(gca,'xscal','log')
        set(gca,'XTick',[5 10 25 50 100 250 1000 4000]);
        axis([4 5000 -30 10])
        hold on;
        errorbar(bw,NpiS01000b(:,1),NpiS01000b(:,2),'-o','MarkerSize',10,'Color',[0,0.7,1]);
        errorbar(bw,NpiS01000lr(:,1),NpiS01000lr(:,2),'-dc','MarkerSize',10);
        plot(bw,NpiS0modeldata1000,'-sr','MarkerSize',10,'MarkerFaceColor','r');
        xlabel('Masker Bandwidth [Hz]');
        ylabel('Threshold S/N [dB]');
        legend({'NpiS0 condition lbr','NpiS0 condition b',...
            'NpiS0 condition lr','model data from Breebaart (2001)'},...
            [290,170,0.1,0.05]);
        title('NpiS0 1000 Hz thresholds: monaural factor = 0.0003')
    end

end