function C=buildCHandle(S)
% C=buildC(S)
% Построение матрицы кросс-корреляций (вариант - большая статья)
% Аргументы  : S - исходная матрица
% Результаты : C - матрица коэффициентов кросс-корреляции

[m,n]=size(S);               % Определяем размеры S
n=n-1;

if mod(n,10)~=1
    iG=[1:10:n n];
else
    iG=[1:10:n];
end
if mod(m,10)~=1
    iC=[1:10:m m];
else
    iC=[1:10:m];
end
[miG,niG]=size(iG);
[miC,niC]=size(iC);
addToProgress(0,1,niG+niC+niC-2);

G=zeros(m,n-1);
for t=2:niG
    for i=iG(1,t-1):iG(1,t)  % Строим матрицу G
        G(:,i)=log(S(:,i+1))-log(S(:,i));
    end
    addToProgress(t-1);
end

for t=2:niC
    for j=iC(1,t-1):iC(1,t)  %Строим матрицу g
        sigma=0;
        for k=1:n
            sigma=sigma+G(j,k)*G(j,k);
        end
        sigma=sigma/n;
        avg=sum(G(j,:))/n;
        sigma=sqrt(sigma-avg*avg);
        for i=1:n
            if (sigma~=0)
                g(j,i)=(G(j,i)-avg)/sigma;
            else
                g(j,i)=0;
            end
        end
    end
    addToProgress(niG+t-2);
end

for t=2:niC
    for i=iC(1,t-1):iC(1,t)  % Строим матрицу C
        for j=1:m
            summa=0;
            for k=1:n
                summa=summa+g(i,k)*g(j,k);
            end
            C(i,j)=summa/n;
        end
    end
    addToProgress(niG+niC+t-3);
end

addToProgress(niG+niC+niC-2);