function [xaddnew] = gaussMULTIfiltinter(x,t,HR,GS,LS,RS)
%[xaddnew] = gaussMULTIfiltinter(x,t,HR,GS,LS,RS,INT5)
% GAUSSMULTIFILTINTER na základe zadaných vstupných hodnôt rozdelí signál
% na časti, na každej z nich spraví gaussovu filtráciu s iným oknom a
% poskladá ich dohromady. Na hraniciach pritom interpoluje kubickými
% parabolami
% Vstupy:   x - vstupný signál vo forme riadkového vektoru
%           t - časové údaje vo forme riadkového vektoru
%           HR - vektor hraničných bodoch, v ktorých sa má signál rozdeliť
%           GS - vektor veľkostí gaussových okien
%           LS - vzdialenosť do ktorej interpolujeme smerom doľava
%           RS - vzdialenosť do ktorej interpolujeme smerom doprava
% Výstup:   xaddnew - poskladané vyfiltrované a interpolované časti signálu

M = length(HR);

%% JEDNOTLIVE FILTRACIE

SECTIONS = cell(M-1,1);                         %pole obsahujúce vektory častí rozdeleného signálu
for i = 1:M-1
   SECTIONS{i} = x(HR(i)+1:HR(i+1));            %rozdelovanie podľa hraničných indexov HR
end

FILTSECTIONS = cell(M-1,1);                     %pole odfiltrovaných sekcií
for i = 1:M-1
   FILTSECTIONS{i} = gauss(GS(i),SECTIONS{i});  %filtrácia sekcie s daným gaussovským oknom z vektoru okien GS
end

xadd = [];                                      %zhromaždenie vyfiltrovaných sekcii
for i = 1:M-1
   xadd = [xadd FILTSECTIONS{i}];
end

%% INTERPOLACIE NA HRANICIACH

xaddnew = xadd(1:HR(2)-LS(1));                                              %tu sa bude ukladať výsledok aj s interpoláciou
ta = t(1:end-1);
tb = t(2:end);
dt = sum(tb-ta)/length(ta);
for i = 1:M-2
    xLfilt = FILTSECTIONS{i};                                               %ľavá filtrovaná sekcia vzhladom k hranici
    xRfilt = FILTSECTIONS{i+1};                                             %pravá filtrovaná sekcia vzhladom k hranici
    xLinter = xLfilt(end-LS(i)+1:end);                                      %počet bodov do interpolácie podľa hodnoty z vektoru LS
    xRinter = xRfilt(1:RS(i));                                              %počet bodov do interpolácie podľa hodnoty z vektoru RS
    xinter = [xLinter xRinter];                                             %toto sa ide interpolovať
    tinter = t(HR(i+1)-LS(i)+1:HR(i+1)+RS(i));                              %interpoluje sa v tomto intervale
    
    YINTER = INTERP3(xinter,tinter(1),tinter(end),dt); 
    
    if i==M-2                                                               %uloženie časti do výsledného signálu
        xaddnew = [xaddnew YINTER xadd(HR(i+1)+RS(i)+1:end)];
    else
        xaddnew = [xaddnew YINTER xadd(HR(i+1)+RS(i)+1:HR(i+2)-LS(i+1))];
    end
end

end


