function [r,r_min,r_max,lag]=corr_f(x,y,t)
%
%  Вычисление коррел?ционной функции и доверительного интервала
%  по критерию Фишера
%
%  Использование: [r,r_min,r_max,lag]=corr_f(x,y,[t])
%
%  Входные параметры:
%     x - перва? переменна? (вектор длины n);
%     y - втора? переменна? (вектор); если =x - вычисл?етс?
%         автокоррел?ционна? функци?;
%     t - необ?зательный параметр = квантильный множитель дл?
%         оценки доверительного интервала с заданным уровнем
%         значимости (например, t=1.645 дл? ALPHA=10%). По
%         умолчанию = 1.645.
%  Выходные параметры:
%     r - коррел?ционна? функци? (вектор размерностью 2*n+1);
%     r_min,r_max - доверительные границы по критерию Фишера дл?
%         заданного уровн? значимости, определ?емого параметром t;
%   lag - сдвиги (от -n до +n); Положительный сдвиг указывает на то,
%         что Y опережает X.

%
%  14.03.96    Khomutov S.Yu.
%

if nargin<3
   t=1.645;
end
%
r=xcov(x,y,'unbiased'); % cov(lag)/(N-abs(lag))
sd_x=std(x); sd_y=std(y);
N=length(r);
disp('Error -> see next line')
pause
r=r(4:N-3)./(sd_x*sd_y);      % нормировка и удаление по 4 значени? с концов

% Fisher criteria
z = 0.5 .*log( (1+r)./(1-r) );

% Standart deviation of z
n=max(size(x));
lag=[-(n-4):n-4]';            % сдвиги
sd_z=1.0./sqrt((n-abs(lag))-3);
%
z_min=z-t.*sd_z;
z_max=z+t.*sd_z;
r_min=-(1-exp(2*z_min)) ./ (1+exp(2*z_min));
r_max=-(1-exp(2*z_max)) ./ (1+exp(2*z_max));
