function [y] = CONTIadapt(x,t)
%[y] = CONTIadapt(x,t)
%CONTIADAPT vykoná adaptívnu filtráciu s modifikáciou šumu
%Vstupy:    x - signál na filtrovanie
%           t - čas (potrebný pre interpolovanie)
%Výstup:    y - výsledok filtrácie


    testnoise = gauss(3,x)-x;
    power = sum(abs(testnoise))/length(x);
    adapt = power/0.05; %úroveň sily filtru, ktorá sa spočíta priemernej
% absolútnej hodnoty šumu, význam - filter bol navrhovaný pre dáta, ktoré
% mali odchylku približne +- 0,2 stupna (odpoveda približne hodnote 0.05 s
% riadku vyššie), týmto spočítame o koľko je šum "silnejší" a zvýšime silu
% (násobiaci koeficient napr. pri parametroch maximaláneho gaussovho okna)
    clear testnoise power;

y0 = gauss(10,x); %odhad derivácie + zistenie velmi kritických bodov
criticindexes = getNOISEindexes(y0-x,0,5,0); %velmi kritické body,
%typicky prudké zmeny teploty

%% KROK 1.1

Nskip = 5;
gaussmin = 2;
gaussmax = 100;

%nízky threshold, chceme viac oblastí
y1 = gaussADAPT(y0,t,1,0.05,0.1,gaussmin,round(adapt*gaussmax),1,diff(y0),50,[1*1e-3 10 0.01 30 3]);

%väčší threshold aj thresstep, chceme menej oblastí a chceme vyhladiť
%napájanie oblastí z minulého kroku
y2 = gaussADAPT(y1,t,Nskip,0.2,0.2,gaussmin,round(adapt*gaussmax),1,diff(y0),5,[1*1e-3 5 0.01 30 3]);

%% KROK 1.2

%použijeme oveľa lepší odhad derivácie y2 a vykonáme horné dva kroky znova,
%tiež chceme lepšie zachytiť lokálne extrémy (posledný parameter - hodnota 6)
y3 = gaussADAPT(gauss(5,x),t,1,0.05,0.05,gaussmin,round(adapt*gaussmax),1,diff(y2),5,[1*1e-3 5 0.01 20 6]);

%použitý odhad derivácie y3 a polovičné maximálne okno
y4 = gaussADAPT(y3,t,1,0.2,0.2,gaussmin,round(adapt*gaussmax*0.5),1,diff(y3),5,[1*1e-3 5 0.01 30 3]);




%% KROK 2

y=y4;
clear y1 y2 y3 y4 ;

% 2 úvodné modifikácie šumu bez určovania kritických bodov, chceme sa
% najprv globálne priblížiť k stredným hodnotám
noise = gauss(round(adapt*300),y-x);
y = y-noise;
noise = gauss(round(adapt*200),y-x);
y = y -noise;

%% KROK 3

%modifikácia so zachytením kritických bodov
noise = gauss(round(adapt*30),y-x);
konst = 1.5;

indexes = getNOISEindexes( y-x, round(adapt*30), konst, 0 );
noisenext = gauss(round(adapt*200),noise);
noisenext(indexes) = noise(indexes);
noisenext = gauss(round(adapt*100),noisenext);

y = y - noisenext;

%% KROK 4

%globálna modifikácia
noise = gauss(round(adapt*100),y-x);
y = y -noise;

%% KROK 5

noise = gauss(round(adapt*10),y-x); 
konst = 4;

%pomôžeme si jemnym vyhladenim teplôt - kritické oblasti sa viac pokazia a
%budeme ich môcť lepšie zachytiť  (gauss50 verzus gauss10)

yyfg = gauss(10,y);
indexes1 = getNOISEindexes( yyfg-x, round(adapt*30), konst, 5 ); 
yyfg = gauss(50,y);
indexes2 = getNOISEindexes( yyfg-x, round(adapt*10), konst, 10 );

noisenext = gauss(round(adapt*200),noise);
noisenext(indexes1) = noise(indexes1);
noisenext(indexes2) = noise(indexes2);
noisenext = gauss(round(adapt*20),noisenext);


y = y - noisenext;

%% KROK 6

%veľmi kritické body z úvodu nahradíme malým gaussom2 a jemne upravíme
%gaussom1
yh = gauss(2,x);
y(criticindexes) = yh(criticindexes);
y = gauss(1,y);
clear yh


%prísna modifikácia (konst=3 a napajácí gauss20)
noise = y-x;
indexes = getNOISEindexes(noise,100,3,0);
noiseadjust = gauss(300,noise);
noiseadjust(indexes) = noise(indexes);
noiseadjust = gauss(20,noiseadjust);
y = y - noiseadjust;

y = gauss(3,y); %pred potenciálnym finišom (budeme testovať hypotézu o šume),
%použijeme malého gaussa, aby 1. došlo k jemnému vyhladeniu 2. kritické
%body sa pokazili a my ich mohli v ďalšom kroku lepšie zachytiť

%% KROK 7

%skombinujeme menej prísnu modifikáciu (konst=2 a zahladenie gaussom50) s
%prísnejšou (konst=3 a gauss30)

noise = y-x;
noiseadjust = gauss(300,noise);
indexes = getNOISEindexes(noise,30,3,0);
indexes1 = getNOISEindexes(noise,30,2,0);
noiseadjust = gauss(500,noiseadjust);
noiseadjust(indexes1) = noise(indexes1);
noiseadjust = gauss(50,noiseadjust);
noiseadjust(indexes) = noise(indexes);
noiseadjust = gauss(30,noiseadjust);
y = y-noiseadjust;

p = noiseNORMALITYtest(y-x); %hypotéza na to, či aktuálny šum má normálne
% rozdelenie s nulovou strednou hodnotou

%% KROK 8

 if p<0.01 %typická hodnota hladiny významosti hypotézy

    noise = y-x;
    indexes = getNOISEindexes(noise,30,3,0); %skombinujeme prísnejšiu a menej prísnu modifikáciu v jednom kroku
    indexes1 = getNOISEindexes(noise,30,2,0);
    noiseadjust = gauss(500,noise);
    noiseadjust(indexes1) = noise(indexes1);
    noiseadjust = gauss(30,noiseadjust);
    noiseadjust(indexes) = noise(indexes);
    noiseadjust = gauss(20,noiseadjust);
    y = y-noiseadjust;

    indexes = getNOISEindexes(noise,100,4,0); %prísnejšia modifikácia, iba velmi chybné body (konst=4)
    noise = y-x;
    noiseadjust = gauss(500,noise);
    noiseadjust(indexes) = noise(indexes);
    noiseadjust = gauss(20,noiseadjust);
    y = y-noiseadjust;

    noise = y-x;
    indexes = getNOISEindexes(noise,100,2,0); %menej prísna modifikácia (konst=2)
    noiseadjust = gauss(500,noise);
    noiseadjust(indexes) = noise(indexes);
    noiseadjust = gauss(40,noiseadjust); %ale väčšie záverečné vyhladenie šumu
    y = y-noiseadjust;

end


end