function [ polohy_R, PR ] = R( signal, fvz, der )
% funkce R slouží k detekci kmitů R, vstupem je vyhlazený signál (ECGINT),
% vzorkovací frekvence a signál redivovaný (ECGDER). Výstupem jsou polohy
% R, které jsou detekované v ECGINT a polohy PR, které jsou již zpřesněné
% jako průchod nulou mezi max a min v ECGDER

[Nsvod, N] = size(signal);
[Dsvod, D] = size(der);
okno = 160;
PR = [];

%% Detekce kmitu R ve vyhlazeném signálu
    for i = 1:Nsvod
        prah = 0.35;
        kontrola = 0;
        polR = [];
        hodR = [];
        x = signal (i,:);
        x = x/max(x);            
        posun = 0;
        for j = 1:okno:N-2*okno
                
                if posun == 0
                        [hodnota, poloha] = max(x(j:j+okno-1));
                elseif posun > (0.5*okno)
                        [hodnota, poloha] = max(x(j+round(posun/2):j+okno-1));
                else
                        [hodnota, poloha] = max(x(j+((1/4)*okno):j+((1/4)*okno)+okno-1));
                end
                posun = 0;
                if hodnota > prah
                        kontrola = 0;
                        if poloha > ((3/4)*okno)
                                [hodnota, poloha] = max(    x(  j+((2/4)*okno):j+((6/4)*okno)-1)   );
                                posun = poloha;
                                polR= [polR (poloha+(j+(2/4)*okno))];
                                hodR = [hodR hodnota];   
                        else
                                polR= [polR poloha+j];
                                hodR = [hodR hodnota];                        
                        end
                        prah = 0.35*(sum(hodR)/length(hodR));
                else
                        kontrola = kontrola +1;
                end
                
                %% Připad kdy nedošlo k detekci
                if kontrola >= 3
                        kontrola = 0;
                        prah = 0.3*prah;
                        for k = (j-2*okno):okno:j
                            [hodnota, poloha] = max(x(k:k+okno-1));
                            if hodnota > prah
                                polR= [polR poloha+k];
                                hodR = [hodR hodnota];
                                prah = 0.35*(sum(hodR)/length(hodR));
                            end
                        end
                end
        end
        %% Kontrola dvojdetekce
        J = 1;
        while J <= length(polR)-1
                if polR(J+1)-polR(J) < 150
                        if hodR(J) > hodR(J+1)
                                if polR(J+1) == polR(end)
                                        hodR(end) = [];
                                        polR(end) = [];
                                else
                                        hodR(J+1:(end-1)) = hodR(J+2:end);
                                        hodR(end) = [];
                                        polR(J+1:(end-1)) = polR(J+2:end);
                                        polR(end) = [];
                                end
                                
                        else
                                if polR(J+1) == polR(end)
                                        hodR(end) = [];
                                        polR(end) = [];
                                else
                                        hodR(J:(end-1)) = hodR(J+1:end);
                                        hodR(end) = [];
                                        polR(J:(end-1)) = polR(J+1:end);
                                        polR(end) = [];
                                end
                        end
                end
                J = J+1;
        end
        %% uložení do budoucna
        polohy_R{i,:} = polR;
        hodnoty_R{i,:} = hodR;
        
        %% Zpřesnění - průchod 0 v der
        y = der(i,:);
        pomR = polR; 
        delka_okna=30;
        newR = [];
        
        for r = 1:length(pomR)  
            q = pomR(r);
            if   q+delka_okna < 4999 && q - delka_okna > 0
                usek = y(q-delka_okna:q+delka_okna); 
                [hodnota1,poloha1] = max(usek); 
                [hodnota2,poloha2] = min(usek); 
                poloha1 = poloha1+q-delka_okna;
                poloha2 = poloha2+q-delka_okna;
                    if poloha1 > poloha2
                            for t1 = poloha2:poloha1
                                if (y(t1)>0 && y(t1+1)<0) || (y(t1)<0 && y(t1+1)>0)
                                    PR(i,r) =(t1); 
                                end
                            end
                    end
                    if poloha1 < poloha2
                            for t2= poloha1:poloha2
                                if (y(t2)>0 && y(t2+1)<0) || (y(t2)<0 && y(t2+1)>0)
                                    PR(i,r) =(t2); 
                                end
                            end
                    end
            end         
           
        end
               
    end
end