%% Program k diplomové práci autor: Adam Hanzelka
% tento program je nyní nastaven na rozměřování useku1 experimentálních 
% dat získaných z izolovaných králičích srdcí

%% inicializace programu a předspracování
  clc
  clear all
  load usek1
                                                          
  x=ekg;
  prah = 500;                       

N=999;
W2=0.2;
b2=fir1(N,W2);
for i=1:3   
     y(i,:) = filtfilt(b2,1,x(i,:));
     x(i,:)=y(i,:);
end 


 org(1,:)=x(1,:);
 org(2,:)=x(2,:);
 org(3,:)=x(3,:);
 x=(x(1,:)+x(2,:)+x(3,:))/1;
 x=[x ones(1,67).*x(end)];
 fvz=2000;

 SWC = swt(x,7,'bior1.5');

%% vykreslení před a po vlnkové transformaci
cas_osa = 0.0005:0.0005:765.312;
% figure (1)
% hold on
% subplot (8,1,1)
% plot (cas_osa,x)
% axis([0 2.5 min(x) max(x)])
% subplot (8,1,2)
% plot (cas_osa,SWC(1,:))
% axis([0 2.5 min(SWC(1,:)) max(SWC(1,:))])
% subplot (8,1,3)
% plot (cas_osa,SWC(2,:))
% axis([0 2.5 min(SWC(2,:)) max(SWC(2,:))])
% 
% subplot (8,1,4)
% plot (cas_osa,SWC(3,:))
% axis([0 2.5 min(SWC(3,:)) max(SWC (3,:))])
% ylabel('amplituda [-]','fontsize',12)
% subplot (8,1,5)
% plot (cas_osa,SWC(4,:))
% axis([0 2.5 min(SWC(4,:)) max(SWC(4,:))])
% subplot (8,1,6)
% plot (cas_osa,SWC(5,:))
% axis([0 2.5 min(SWC(5,:)) max(SWC(5,:))])
% subplot (8,1,7)
% plot (cas_osa,SWC(6,:))
% axis([0 2.5 min(SWC(6,:)) max(SWC(6,:))])
% subplot (8,1,8)
% plot (cas_osa,SWC(7,:))
% axis([0 2.5 min(SWC(7,:)) max(SWC(7,:))])
% xlabel('čas[s]','fontsize',12)
% 
% hold off

%% detekce kmitů R v druhem stupni vlnkove transformace

delka_okna = 50;
N=length(org);             
index=1;
polohy = [];  
QR=[];

while index<N-delka_okna 
      if SWC(2,index)>prah     
         kus = SWC(2,index:index+delka_okna);   
         [hodnota,poloha] = max( kus ); 
         [hodnota_min,poloha_min] = min( kus );
         
         if ((poloha+index) > 5)
             polohy = [polohy, index+poloha];   
             
             
             if (poloha < poloha_min)&& (abs(hodnota_min)>(hodnota))&&(hodnota*3)>abs(hodnota_min)&&(index+100)<length(SWC(2,:))
             
             kus = SWC(2,index+poloha_min:index+delka_okna);
             [hodnota,poloha] = max( kus );
            
                if hodnota>prah
                   polohy(end) = (index+poloha_min+poloha);
                   
                end
             end
            
         end
            index = index + delka_okna;        
      else               
            index = index + 1;
      end
end
% detekce konce signalu
if index < length(org)-10
   index = polohy(end)+50;
     while index <= length(org)-10
           if SWC(2,index)>prah     
              kus = SWC(2,index:(length(org)-10));   
              [hodnota,poloha] = max( kus );     
              if (poloha+index) > 50 && ((hodnota < (prah*3.65))&&(hodnota > (prah*0.70)))
                  polohy = [polohy, index+poloha];
                  
              end
              index = length(org);
           end
           index=index+1;
     end
end
% detekce zactku signálu
if polohy(1)>50
   index = 4;
     while index <= polohy (1)-50
        if SWC(2,index)>prah     
           kus = SWC(2,index:(polohy (1)-50));   
           [hodnota,poloha] = max( kus );     
           if ((hodnota < (prah*3.65))&&(hodnota > (prah*0.70)))
               polohy = [ index+poloha, polohy];
               
           end
        end
         index=index+1;
     end
end


polohy_k = polohy-1;




%% nalezení pruchodu nulou z jedne strany (kmit R)

poloha_R= [];  
zpozdeni=4;
for i=1 : length(polohy_k)  
    k=0;
    y=SWC(2,polohy_k(i));
    while y > 0 && (polohy_k(i)-k)~=1 ;  
        k=k+1;
        y=SWC(2,polohy_k(i)-k);
    end
    if (abs(SWC(2,polohy_k(i)-k))< abs(SWC(2,polohy_k(i)-k+1)))&&(abs(SWC(2,polohy_k(i)-k))<(prah-20))
         poloha_R = [poloha_R (polohy_k(i)-k)];    
    elseif (abs(SWC(2,polohy_k(i)-k))> abs(SWC(2,polohy_k(i)-k+1)))&&(abs(SWC(2,polohy_k(i)-k+1))<(prah-20))
         poloha_R = [poloha_R (polohy_k(i)-k+1)]; 
    end
end


 
%% uprava polohy R kmitů
 for i=1:3
    for j=1:length (poloha_R)
        k=poloha_R(j);
        while k<5000 && k>1 &&((org(i,k)< org(i,k+1)) || ( org(i,k)< org(i,k-1)))
            if (org(i,k+1)) > (org(i,k-1))
                k=k+1;
            else
                k=k-1;
            end
        end
        R(i,j)=k;
    end
 end
 k_poloha_R=[];
 for i=1:length(R)
     maxi =max([org(1,R(1,i)),org(2,R(2,i)),org(3,R(3,i))]);
     if maxi==org(1,R(1,i))
        k_poloha_R(i)= R(1,i);
     elseif maxi==org(2,R(2,i))
         k_poloha_R(i)= R(2,i);
     elseif maxi==org(3,R(3,i))
         k_poloha_R(i)= R(3,i);
     end
 end
poloha_R=k_poloha_R;
 %% tepová frekvence
 freq=0;
for i=1:length(poloha_R)-1
    freq=freq+(poloha_R(i+1)-poloha_R(i));
end
tep=freq/i;
%% uprava poloh R kmitu pro usek 3 a useku 7
% k_poloha_R=[];
% k_poloha_R=poloha_R(1);
% for i=2:length(poloha_R)
%     if poloha_R(i)> (poloha_R(i-1)+(tep * 0.8))
%         k_poloha_R=[k_poloha_R poloha_R(i)];
%        
%     else
%         poloha_R(i)=poloha_R(i-1);
%     end
% end
% poloha_R=k_poloha_R;



 %% kmit Q
[poloha_Q]=Q(SWC,x,org,poloha_R,tep,fvz);
 %% zčátek QRS
[zac_QRS]=zacatekQRS(SWC,x,org,poloha_Q);
%% kmit S
[poloha_S]=S(SWC,x,org,poloha_R,tep,fvz);
%% konec QRS
[kon_QRS]=konecQRS(SWC,x,org,poloha_S,tep,fvz,prah);

%% odstraneni komplexu QRS
[SWCpt]=upravaQRS(SWC,x,org,zac_QRS,kon_QRS,tep,fvz);
%% vlna P
[p_P]=poloha_P(SWCpt,x,org,kon_QRS,zac_QRS,poloha_R,tep,fvz);
%% zacatek vlny P
[z_P]=zacatek_P(SWCpt,p_P,fvz,org);
%%  konec vlny P
[k_P]=konec_P(SWCpt,p_P,fvz,org,zac_QRS);
%% poloha vrcholu T
[p_T]=poloha_T(SWCpt,x,org,kon_QRS,poloha_R,tep,fvz,z_P);
%% konec T
[k_T]=konec_T(SWCpt,x,org,p_T,tep,fvz);

                       
figure (1)

hold on
plot (org(1,:))
% stem( k_P, org(1,k_P), 'r' );
% stem( z_P, org(1,z_P), 'r' );
% stem( p_P, org(1,p_P), 'g' );
% stem( p_T, org(1,p_T), 'g' );
% stem( k_T, org(1,k_T), 'k' );
% stem( poloha_R, org(1,poloha_R), 'k' );
% stem( zac_QRS, org(1,zac_QRS), 'r' );
% stem( poloha_Q, org(1,poloha_Q), 'g' );
% stem( kon_QRS, org(1,kon_QRS), 'r' );
% stem( poloha_S, org(1,poloha_S), 'g' );
xlabel('čas[s]','fontsize',12)
ylabel('amplituda [-]','fontsize',12)
hold off

figure (2)
subplot (4,1,1)
hold on
plot (org(1,:))
% stem( k_P, org(1,k_P), 'r' );
% stem( z_P, org(1,z_P), 'r' );
% stem( p_P, org(1,p_P), 'g' );
% stem( p_T, org(1,p_T), 'g' );
% stem( k_T, org(1,k_T), 'b' );
% stem( poloha_R, org(1,poloha_R), 'r' );
% stem( zac_QRS, org(1,zac_QRS), 'k' );
% stem( poloha_Q, org(1,poloha_Q), 'g' );
% stem( kon_QRS, org(1,kon_QRS), 'k' );
% stem( poloha_S, org(1,poloha_S), 'g' );


hold off
subplot (4,1,2)
hold on
plot (org(2,:))
% stem( k_P, org(1,k_P), 'r' );
% stem( z_P, org(2,z_P), 'r' );
% stem( p_P, org(1,p_P), 'g' );
% stem( p_T, org(2,p_T), 'g' );
% stem( k_T, org(2,k_T), 'b' );
% stem( poloha_R, org(2,poloha_R), 'k' );

% stem( zac_QRS, org(2,zac_QRS), 'k' );
% stem( poloha_Q, org(1,poloha_Q), 'g' );
% stem( kon_QRS, org(2,kon_QRS), 'r' );
% stem( poloha_S, org(2,poloha_S), 'g' );


hold off
subplot (4,1,3)
hold on
plot (org(3,:))
% stem( k_P, org(1,k_P), 'r' );
% stem( z_P, org(3,z_P), 'r' );
% stem( p_P, org(1,p_P), 'g' );
% stem( p_T, org(3,p_T), 'g' );
% stem( k_T, org(3,k_T), 'b' );
% stem( poloha_R, org(3,poloha_R), 'k' );

% stem( zac_QRS, org(3,zac_QRS), 'k' );
% stem( poloha_Q, org(1,poloha_Q), 'g' );
% stem( kon_QRS, org(3,kon_QRS), 'r' );
% stem( poloha_S, org(3,poloha_S), 'g' );


subplot (4,1,4)
hold on
plot (SWC(2,:))
% stem( k_P, org(1,k_P), 'r' );
% stem( z_P, SWCpt(z_P), 'r' );
% stem( p_P, org(1,p_P), 'g' );
% stem( p_T, SWCpt(p_T), 'g' );
% stem( k_T, SWCpt(k_T), 'b' );
% stem( poloha_R, SWC(2,poloha_R), 'k' );

%  stem( zac_QRS, org(1,zac_QRS), 'g' );
% stem( poloha_Q, org(1,poloha_Q), 'g' );
% stem( kon_QRS, SWC(2,kon_QRS), 'r' );
% stem( poloha_S, SWC(2,poloha_S), 'g' );

% stem( p_P, SWC(5,p_P), 'g' );
hold off


