function [QRS etime] = DetektorV( signal, graf )
stime=tic;
%%%BP; T.ŠIKNER
% vícesvodový detektor
% vstup je tvořen signal, pocet_svodu, graf
% signal je nazev signál pro detekci
% pocet_svodu je počet svodů u daného signálu, číslo musí odpovídat celému počtu 
% graf udává jestli se při detekci vykreslí i graf, graf=1 vykreslení
% proběhne, graf=0 graf se nevykreslí
% výstup je QRS
% QRS jsou pozice QRS komplexu pro celý signál
%
% způsob zadání:
% Detektor1('MO1_001_03.mat',3,1)
% pro tento příklad je zvolen signál se třemi svody a dojde k
% vykreslení grafu 
clc
% nahrajeme EKG signal
pocet_svodu = size(signal,1);
cas=linspace(0,10,5000);
for i_x=1:pocet_svodu
    svod=signal(i_x,:);

%filtrace
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fvz=1000; svod1=svod;
svod11(i_x,:)=svod;
svod=[ones(1,100)*svod(1),svod,svod(end)*ones(1,525)];

h=fir1(50,50/(fvz/2),'stop');
x_pz=filter(h,1,svod);
x_pz=x_pz(26:end);

h=fir1(1000,0.67/(fvz/2),'high');
x_hp=filter(h,1,x_pz);
S=x_hp(601:end);

%konec filtrace
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%příprava signálu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n=length(S);

%krok 2
TS1=(S).^2;

%krok 3
for i=1:n    
    if i<6
        leva=i-1;
        w=TS1(i-leva:i+5);
        TS1max=max(w);  
        TS1min=min(w);    
        G1(i)=TS1max-TS1min;
    elseif i>(n-5)
        prava=n-i;
        w=TS1(i-5:i+prava);
        TS1max=max(w);  
        TS1min=min(w);    
        G1(i)=TS1max-TS1min;
    else
        w=TS1(i-5:i+5);
        TS1max=max(w);  
        TS1min=min(w);    
        G1(i)=TS1max-TS1min;     
    end
end

%krok 4
for i=1:n   
    if i<6
        leva=i-1;
        w=G1(i-leva:i+5);
        FG1(i)=sum(w)/length(w);      
    elseif i>(n-5)
        prava=n-i;
        w=G1(i-5:i+prava);
        FG1(i)=sum(w)/length(w);                
    else
        w=G1(i-5:i+5);
        FG1(i)=sum(w)/11;              
    end
end

%krok 5
S=S/max(abs(S));
TS1=TS1/max(TS1);
G1=G1/max(G1);
FG1=FG1/max(FG1);

%krok 6
e=2.718281828459045;
for i=1:n
    TS2(i)= 1 - ( 2 / ( e.^(2*S(i)) +1 )  )  ;
end

%krok 7
for i=1:n    
    if i<6
        leva=i-1;
        w=TS2(i-leva:i+5);
        TS2max=max(w);  
        TS2min=min(w);    
        G2(i)=TS2max-TS2min;
    elseif i>(n-5)
        prava=n-i;
        w=TS2(i-5:i+prava);
        TS2max=max(w);  
        TS2min=min(w);    
        G2(i)=TS2max-TS2min;
    else
        w=TS2(i-5:i+5);
        TS2max=max(w);  
        TS2min=min(w);    
        G2(i)=TS2max-TS2min;     
    end
end

%krok 8
for i=1:n   
    if i<6
        leva=i-1;
        w=G2(i-leva:i+5);
        FG2(i)=sum(w)/length(w);      
    elseif i>(n-5)
        prava=n-i;
        w=G2(i-5:i+prava);
        FG2(i)=sum(w)/length(w);                
    else
        w=G2(i-5:i+5);
        FG2(i)=sum(w)/11;              
    end
end

%krok 9
TS2=TS2/max(abs(TS2));
G2=G2/max(abs(G2));
FG2=FG2/max(abs(FG2));

%krok 10
for i=1:n
    TS3(i)=FG2(i)*S(i);
end

%krok 11
for i=1:n    
    if i<6
        leva=i-1;
        w=TS3(i-leva:i+5);
        TS3max=max(w);  
        TS3min=min(w);    
        G3(i)=TS3max-TS3min;
    elseif i>(n-5)
        prava=n-i;
        w=TS3(i-5:i+prava);
        TS3max=max(w);  
        TS3min=min(w);    
        G3(i)=TS3max-TS3min;
    else
        w=TS3(i-5:i+5);
        TS3max=max(w);  
        TS3min=min(w);    
        G3(i)=TS3max-TS3min;     
    end
end

%krok 12
for i=1:n   
    if i<6
        leva=i-1;
        w=G3(i-leva:i+5);
        FG3(i)=sum(w)/length(w);      
    elseif i>(n-5)
        prava=n-i;
        w=G3(i-5:i+prava);
        FG3(i)=sum(w)/length(w);                
    else
        w=G3(i-5:i+5);
        FG3(i)=sum(w)/11;              
    end
end

%krok 13
TS3=TS3/max(abs(TS3));
G3=G3/max(abs(G3));
FG3=FG3/max(abs(FG3));

%krok 14
%(a)
for i=1:n
    TS4(i)=FG1(i)+FG3(i);
end

%(b)
TS4m=TS4-median(TS4);

%(c)
Pre_Fq=TS4m/max(abs(TS4m));

%(d)
for i=1:n
    if Pre_Fq(i)>0.05
        Fq(i)=Pre_Fq(i);
    else
        Fq(i)=0;
    end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%detekce QRS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%krok 1
for i=1:n
    if Fq(i)>0.05
        Cq(i)=1;
    else
        Cq(i)=0;
    end
end


%krok 2
for it=1:14    
t=(0.21+(0.03*(it-1))) *max(Fq);

%krok 3
oknoFq=[];
pozice_oknoFq=[];
QRS_svod_t=[];
Pocet_Dq_t=0;

for i=1:(n-1)      
    if Cq(i)==1 && Cq(i+1)==1 && i~=(n-1)
        oknoFq=[oknoFq,Fq(i)];
        pozice_oknoFq=[pozice_oknoFq,i];
  
    elseif Cq(i)==1 && Cq(i+1)==0
        oknoFq=[oknoFq,Fq(i)];
        pozice_oknoFq=[pozice_oknoFq,i]; 
        
        [Fq_max,Fq_max_pozice_oknoFq]=max(oknoFq);
        Fq_max_pozice=pozice_oknoFq(Fq_max_pozice_oknoFq);  
                                
        if Fq_max>t
            QRS_svod_t=[QRS_svod_t,Fq_max_pozice];
            Pocet_Dq_t=Pocet_Dq_t+1;
        end
        
    elseif Cq(i)==1 && Cq(i+1)==1 && i==(n-1)
        oknoFq=[oknoFq,Fq(i)];
        pozice_oknoFq=[pozice_oknoFq,i]; 
        
        [Fq_max,Fq_max_pozice_oknoFq]=max(oknoFq);
        Fq_max_pozice=pozice_oknoFq(Fq_max_pozice_oknoFq);          
                        
        if Fq_max>t
            QRS_svod_t=[QRS_svod_t,Fq_max_pozice];
            Pocet_Dq_t=Pocet_Dq_t+1;
        end 
        
    else
        oknoFq=[];    
        pozice_oknoFq=[];
    end      
end
QRS_svod{it}=QRS_svod_t;
Pocet_Dq_svod(it)=Pocet_Dq_t;
end
Pocet_Dq(i_x,:)=Pocet_Dq_svod;
QRS_signal{i_x,:}=QRS_svod;
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%konec jednoho signalu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%krok 4
for i=1:14
    m1(i)=median(Pocet_Dq(:,i));
    sd1(i)=std(Pocet_Dq(:,i));
end
m2=median(m1);
sd2=std(m1);
m3=median(sd1);
sd3=std(sd1);
sd1_min=min(sd1);

%krok 5
sloupec=[];
for i=1:14
    if sd1(i)==sd1_min;
        sloupec=[sloupec,i];
    end
end
detslo=[];
if sd2<1 && m3<1
    Qn=m2;
    for i=sloupec
        if m1(i)==Qn
            detslo=[detslo,i];       
        end
    end
    if length(detslo)==0
        sloup=sloupec(1);
    else
        sloup=detslo(1);
    end
else
    sloup=sloupec(1);
end

QRS2=[];
for i=1:pocet_svodu
    svod_pom=QRS_signal{i};
    QRS2=[QRS2 svod_pom{sloup}];    
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%shlukova analyza
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
QRS2=sort(QRS2);
i=1;j=1;jj=1;k=1;
while i<=length(QRS2)
    while (QRS2(i)+50)>=QRS2(j)
        vektor(jj,1)=QRS2(j);
        j=j+1;
        jj=jj+1;
        if j>length(QRS2)
            break
        end
    end
    i=j;
    jj=1;  
    if length(vektor)>=2
        bod{k}=vektor;
        vektor;
        qrs=vektor;
        a=pdist(qrs);
        b=linkage(a,'average');
        nqrs=length(qrs); 
        nb=size(b);
        for ii=1:nb(1)
            qq=(qrs(b(ii,1))+qrs(b(ii,2)))/2;
            qrs(ii+nqrs)=qq;
        end
        QRS(k)=round(qq);
        k=k+1;
    end  
    vektor=[];     
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% plot(svod1)
% title('Původní signál s detekvoanými R vlnami')
% xlabel('vzorky')
% ylabel('U [mV]')
% hold on
% h=stem(QRS,(ones(1,length(QRS))*max(svod1)),'--r');
% set(get(h,'BaseLine'),'LineStyle','.')
% set(h,'MarkerSize',0)   

if graf==1
svod2=sum(svod11);
% vykresleni detekce
QRScas=cas(QRS);
figure(7)
plot(cas,svod2)
title('Původní signál s detekvoanými R vlnami')
xlabel('t [s]')
ylabel('U [mV]')
hold on
bod=ylim;
line ([QRScas ;QRScas],[bod],'color','red','linestyle',':')
end   
etime=toc(stime);