Contents
function [sigmT, Result, fit_range, err] = GaussFit(g2, freqshift, fit_range_limit,fit_range_offset, sigmT)
global DEBUG
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
G2_fun_g = @(sigmT,Xvector)1+(exp(-Xvector.^2*2*(sigmT*1e-15).^2/2))*double(g2(1)-1);
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 for optimal time parameter
[sigmT,temp]=(lsq(freqshift(1:fit_range),double(g2(1:fit_range)),G2_fun_g,sigmT));
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