function [ y ] = interpolace( x, fvz )
% Funkce interpolace.m filtruje signál x pomocí interpolace detekovaných PR
% intervalů. Je vhodný zejména pro potlačení driftu v užitečném signálu. 
% Vstupy funkce jsou:
% x: vektor popisující signál, který má být filtrován pomocí interpolace
% fvz: kladné číslo charakterizující frekvenci, s kterou je signál x
% vzorkován
% Výstupem funkce interpolace.m je vektor y charakterizující získaný 
% vyfiltrovaný signál.

%předzpracování signálu - pásmová propust
N=1000;
h=fir1(N,[30/fvz, 45/fvz]);
y=filter(h,1,x);

%předzpracování signálu - umocnění ^2
y=y.^2;

%detekce QRS
okno=2*fvz;                  %okno 2 vteřiny - učební fáze
prah=max(y(1:okno))*0.4;     %určení počátečního práhu
okno=0.2*fvz;
refrakt=round(500*0.15);      %refrakterní fáze
hodnota_max=[];
poloha_max=[];
i=1; k=1;

while i<(length(y)-okno)
    if y(i)>=prah
        [hodnota_max(k), poloha_max(k)]=max(y(i:i+okno));
        poloha_max(k)=poloha_max(k)+i;
        i=poloha_max(k)+refrakt;
        k=k+1;
    else
        i=i+1;
    end
end

%kompenzace zpoždění signálu
zpozdeni=(N-1)/2;
poloha_max=poloha_max-zpozdeni;


%interpolace  
for i=1:length(poloha_max)-1
    rr(i)=poloha_max(i+1)-poloha_max(i);
    okno=round(poloha_max(i)+0.87*rr(i):poloha_max(i)+0.95*rr(i));
    med(i)=median(x(okno)); % souřadnice x bodů pro interpolaci
    prumer(i)=mean(okno);   % souřadnice y bodů pro interpolaci
end

if poloha_max(1)>=mean(rr)*0.13
    pom=zeros(1, length(med)+1);
    prumer1=pom;
    med1=pom;
    prumer1(2:end)=prumer;
    med1(2:end)=med;
    okno=round(poloha_max(1)-mean(rr)*0.13:poloha_max(1));
    med1(1)=median(x(okno));
    prumer1(1)=mean(okno);
    prumer=prumer1;
    med=med1;
end

%vykreslení odhadu rušení signálu
ruseni=interp1(prumer, med,[1:length(x)], 'cubic');

%odečtení odhadu rušení od původního signálu
y=x-ruseni';

end



