function [F2,Ns]=MFDFAOneStep(Y,S,ORDER)
% Мультифрактальний DFA (MF-DFA) за статтею
% "Multifractal detrended fluctuation analysis of nonstationary time series"
% ДОПОМІЖНА ФУНКЦІЯ
% Обчислює значення F^2(s,nu) (кроки 2 та 3 статті)
% Аргументи:
%   Y     - вектор профілю
%   S     - ширина вікна
%   ORDER - степінь поліному, що описує тренд
% Результати:
%   F2    - вектор значень функції F^2(s,nu)
%   Ns    - кількість вікон вказаної ширини
% Обмеження:
%   1) вектор Y повинен мати 1 рядок

% визначаємо кількість елементів вектора профілю
[m,n]=size(Y);
% визначаємо кількість вікон, що поміщаються на векторі не перекриваючись
Ns=floor(n/S);
% виділяємо пам"ять для вектора F, що міститиме значень 2*Ns
F2=zeros(1,Ns);

                    %YPolyG=Y; %%%%%
                    %TEMPG=Y;  %%%%%

% КРОК 2-3
% проходимо по вікнам зліва-направо. Формула (2)
windowBegin=1; windowEnd=S; index=1;
XtStart=[1:S];
while (windowEnd<=n)
    Xt=[windowBegin:windowEnd];
    Yt=Y(1,Xt);
    % у поточному вікні знаходимо тренд порядку ORDER
    A=GeneralMinSquare(XtStart,Yt,ORDER);
    % знаходимо точки тренду
    YPoly=GetPoly(A,XtStart);
                    %YPolyG(1,Xt)=YPoly; %%%%%
    % знаходимо квадрати відхилень точок тренду від реальних значень
    TEMP=Yt-YPoly;
                    %TEMPG(1,Xt)=TEMP; %%%%%
    TEMP=TEMP.*TEMP;
    % шукаємо середнє значення квадратів відхилень і записуємо його у відповідне місце масиву F
    F2(1,index)=sum(TEMP)/S;
    % переходимо до наступного вікна та до наступного елементу масиву F
    windowBegin=windowBegin+S; windowEnd=windowEnd+S; index=index+1;
end

if (windowBegin~=n+1)
    F2=[F2 zeros(1,Ns)];
    % проходимо по вікнам справа-наліво
    windowBegin=n-S+1; windowEnd=n;
    XtStart=[1:S];
    while (windowBegin>=1)
        Xt=[windowBegin:windowEnd];
        Yt=Y(1,Xt);
        % у поточному вікні знаходимо тренд порядку ORDER
        A=GeneralMinSquare(XtStart,Yt,ORDER);
        % знаходимо точки тренду
        YPoly=GetPoly(A,XtStart);
                    %YPolyG(1,Xt)=YPoly; %%%%%
        % знаходимо квадрати відхилень точок тренду від реальних значень
        TEMP=Yt-YPoly;
                    %TEMPG(1,Xt)=TEMP; %%%%%
        TEMP=TEMP.*TEMP;
        % шукаємо середнє значення квадратів відхилень і записуємо його у відповідне місце масиву F
        F2(1,index)=sum(TEMP)/S;
        % переходимо до наступного вікна та до наступного елементу масиву F
        windowBegin=windowBegin-S; windowEnd=windowEnd-S; index=index+1;
    end
    % у векторі F2 знаходяться значення F^2(s,nu) для вікон ширини S
    % збільшуємо вдвічі кількість вікон, оскільки двічі використовувався цикл
    Ns=Ns*2;
end

%%%%%
%figure;
%plot(Y);
%hold on
%plot(YPolyG,'r');
%plot(TEMPG,'k');
%xlabel(max(TEMPG));
%ylabel(sum(abs(TEMPG))/S/Ns/2);
%title(S);
%hold off

% очищуємо локальні змінні
clear m n windowBegin windowEnd index TEMP YPoly Xt Yt A;