%% Hlavní program pro rozměření EKG signálu
% Vypracoval Michal Ruttner, ID 129342. 
% Tento skript je hlavní program, který volá funkce pro detekci všech
% důležitých pozic v EKG signálu. Pro vykreslení detekovaných pozic
% v signálu 7 se musí mo = 1 a te = 7. Pro spuštění programu
% je nutné přetažení signálů do složky obsahující program. Na řádku 17 je
% příkaz volající transformaci svodů. Je na výběr z transformací
% Dawson(HC) se volá dawson, Dawson (MI) se volá dawsonmi, Dower se volá
% Dower a průměr CSE hodnot se volá prumCSE.
%% vyčištění proměných, zavření oken
clear all; clc; close all;
%% nastavení hodnot které signály se budou prohledávat
mo = 1; % nastavení pozice od které se pozice se bude signál zpracovávat  
te = 125; % nastavení pozice do které se pozice se bude signál zpracovávat  
for i =  mo : te
load(['MO1_' sprintf('%0.3d',i) '_03']) % načtení signálu
for ind = 1:size(x,1)
xx(ind,:) = [x(ind,:) zeros(1,56)]; % prodloužení signálu 
end
xx = transformace(xx,'dawsonmi'); % volání transformace svodů
%% použití dyadické vlnkové transformace
for ind1 = 1 : size(xx,1)
[SWA, SWD] = swt(xx(ind1,:),5,'bior1.5'); % výstupem funkce je 5 transformovaných signálů SWD

%% detekce významných bodů v EKG signálu
poziceR = detektorRRR(SWD(2,:)); % detekce R kmitu
poziceR = round(poziceR);
poziceQ = detektorQQQ(SWD(1,:),poziceR); % detekce začátku QRS komplexu
poziceS = detektorSS(SWD(1,:),poziceR,30);% detekce konce QRS komplexu
kont = detektorT(SWD(5,:),poziceS,poziceQ); % detekce T vlny
[zacp konp] = detektorP(SWD(5,:),poziceS,poziceQ,poziceR); % detekce P vlny

R{i,ind1} = poziceR; Q{i,ind1} = poziceQ; S{i,ind1} = poziceS; % uložení nalezených pozic do buňky
kvt{i,ind1} = kont; zvp{i,ind1} = zacp; kvp{i,ind1} = konp; % uložení nalezených pozic do buňky

end
clear xx;
%% vložení nalezených bodů ze všech svodů do jednoho vektoru
RR{i,:} = [R{i,:}]; 
SS{i,:} = [S{i,:}]; 
QQ{i,:} = [Q{i,:}]; 
ZP{i,:} = [zvp{i,:}]; 
KP{i,:} = [kvp{i,:}]; 
KT{i,:} = [kvt{i,:}]; 
%% vybrání významných bodů shlukovou analýzou a ukládání do buňěk
RRR{i,1} = shlukovaa(RR{i,:});
SSS{i,1} = shlukovaa(SS{i,:});
QQQ{i,1} = shlukovaa(QQ{i,:});
ZPP{i,1} = shlukovaa(ZP{i,:});
KPP{i,1} = shlukovaa(KP{i,:});
KTT{i,1} = shlukovaa(KT{i,:});
end

%% načtení signálu pro vykreslení
for ind = 1:size(x,1)
xx(ind,:) = [x(ind,:) zeros(1,56)]; % prodloužení signálu 
end

%% vytvoření vektorů potřebných pro vykreslení nalezených pozic
q = xx(1,poziceQ(end,:));
s = xx(1,poziceS(end,:));
kt =xx(1,kont(end,:));
zp =xx(1,zacp(end,:));
kp =xx(1,konp(end,:));

%% vykreslení signálu s detekovanými pozicemi
% figure(1)
% plot(x(1,:));
% hold on 
% stem(poziceQ(1,:),q,'g','marker','none');
% hold on 
% stem(poziceS(1,:),s,'g','marker','none');
% hold on
% stem(kont(1,:),kt,'c','marker','none');
% hold on
% stem(zacp(1,:),zp,'k','marker','none');
% hold on
% stem(konp(1,:),kp,'k','marker','none');
% xlabel('Počet vzorků [-]');
% ylabel('U [mikroV]');
% axis([0 size(x,2) -2000 2000]);

%% Vykreslení transformovaného signálu
% figure(2)
% subplot(5,1,1)
% plot(1:5056,SWD(1,:))
% title('Měřítko 2^1');
% axis([0 size(SWD,2) -5000 5000]);
% subplot(5,1,2)
% plot(1:5056,SWD(2,:));
% title('Měřítko 2^2');
% axis([0 size(SWD,2) -5000 5000]);
% subplot(5,1,3)
% plot(1:5056,SWD(3,:));
% title('Měřítko 2^3');
% axis([0 size(SWD,2) -5000 5000]);
% ylabel('U[mikroV]')
% subplot(5,1,4)
% plot(1:5056,SWD(4,:));
% title('Měřítko 2^4');
% axis([0 size(SWD,2) -5000 5000]);
% subplot(5,1,5)
% plot(1:5056,SWD(5,:));
% title('Měřítko 2^5');
% xlabel('Počet vzorků[-]')
% axis([0 size(SWD,2) -5000 5000]);
