Contents

function [sigmT, Result, fit_range, err] = GaussFit(g2, freqshift, fit_range_limit,fit_range_offset, sigmT)
global DEBUG
%least-squares fitting:
beforeFit =toc;
err = 'ok\n';
fit_range = 1;

Check Input

if numel(g2) <= 1
    Result = -1;
    err = 'numel(g2)<=1\n';
    return
end

Define function

% The factor 1e15 sets calculations to fs and makes calculations faster
%G2_fun_g = @(sigmT,Xvector)1+(exp(-Xvector.^2*(sigmT*1e-15).^2/2)).^2*double(g2(1)-1);
G2_fun_g = @(sigmT,Xvector)1+(exp(-Xvector.^2*2*(sigmT*1e-15).^2/2))*double(g2(1)-1); %simplified

Find correlation range

while g2(fit_range) >=  g2(1)-(g2(1)-1)*fit_range_limit
    fit_range = fit_range+1;
    if fit_range==length(g2), break, end
end
fit_range = fit_range + fit_range_offset;
temp = 'ok';
if fit_range < 1
    fit_range = 1;
    temp = 'Fit range negative';
end
if fit_range > length(g2)
    fit_range = length(g2);
    temp = 'Fit range too large';
end

if ~(strcmp(temp,'ok')),
    err = temp;
end

%fit_range = length(g2); %Disable limited fit range

Fit for optimal time parameter

%[Messages,sigmT]=evalc('lsqcurvefit(G2_fun_g,sigmT,freqshift,double(g2))');               % Theoretical Values
[sigmT,temp]=(lsq(freqshift(1:fit_range),double(g2(1:fit_range)),G2_fun_g,sigmT));               % Theoretical Values  %self-written function

if ~(strcmp(temp,'ok\n')),
    err = sprintf('%s, %s \n',err,temp);
    if(DEBUG~=0),fprintf(temp),end
end

Result = G2_fun_g(sigmT,freqshift);
switch DEBUG
    case 8
        fprintf('Fitting took %f ms \n',(toc-beforeFit)*1000)
    case 6
        fprintf(err);
end