% ROZMĚŘENÍ SIGNÁLŮ
%% 
% signál měněn proměnnou pac
% a délka úseku signálu, který je rozměřován a postupně se posunuje až do konce 
% signálu je určena proměnnou delka_useku
%%
close all
clear;

pac = 262;  % číslo konkrétního signálu
delka_useku = 15; % zvolení délky úseku (vteřiny)

%% uložení rozměřených pozic
% save([cesta sig(1:10) '\anot_' sig(12:end)],'Pk','QRSz','QRSk')

%% načítání signálu
load('RECORDS.mat') % načtení seznamu všech signálů v databázi
cesta = 'C:\Users\Carlos\Documents\diplomka\25215\ECG_SEEKER_software\ptbdb\'; % zvolení cesty ke složce s databází
sig = RECORDS{pac}; % který pacient a název signálu
load([cesta  sig])  % načtení signálu
fvz=1000; % vzorkovací frekence
val(13:15,:) = []; % odstranění ortogonálních svodů x,y,z

%% úprava signálu
signal=[];
% vyhlazení trojúhelníkovým oknem
L=35;
w = triang(L);
for y = 1:12
    signal(y,:)=filter(w,1,val(y,:));
end
% úprava škálování
signal=signal/((L-1)/2);

% odstranění kolísání nulové linie
Fcut = [0.5 1];  % mezní frekvence propustného a nepropustného pásma
mags = [0 1];    % horní propust
devs = [0.01 0.05];
[n,Wn,beta,ftype] = kaiserord(Fcut,mags,devs,fvz);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');  % imp.charakteristika FIR filtru

for z = 1:12   % filtrace každého z 12ti svodů EKG
    signal(z,:)=filter(hh,1,signal(z,:));
end
output=signal(:,(n/2+18):end); % kompenzace zpoždění
%% 
usek = delka_useku*fvz;  % počet vzorků úseku
zacatek_useku = 1;  % nejprve nastaven začátek úseku na začátek signálu
konec_useku = usek; 
QRSz = [];
QRSk = [];
Pk = [];
posledni = 0;

while konec_useku <= length(output)  % dokud není úsek posunut až na konec signálu
    
    % samotný rozměřovací algoritmus (ukládány pouze pozice začátků a konců QRS komplexu
                                     % a konce vln P)
    [~,QRSonset,QRSoffset,~,~,~,~,Poffset] = EKGrozmereni_global(output(:,round(zacatek_useku):round(konec_useku)),'c',fvz,'n');
    
    % uložení nadetekovaných pozic v jednom úseku do jedné proměnné, pozice
    % z dalších úseků se připisují o stejných proměnných
    if konec_useku == length(output) % ošetření zapsání pozic z posledního úseku
        QRSz = round([QRSz QRSonset(1:end) + zacatek_useku-1]);
        QRSk = round([QRSk QRSoffset(1:end) + zacatek_useku-1]);
        Pk = round([Pk Poffset(1:end) + zacatek_useku-1]);
    else 
        QRSz = round([QRSz QRSonset(1:end-1) + zacatek_useku-1]);
        QRSk = round([QRSk QRSoffset(1:end-1) + zacatek_useku-1]); 
        Pk = round([Pk Poffset(1:end-1) + zacatek_useku-1]);
    end
    zacatek_useku = QRSz(end); % začátek následujícího úseku je nastaven jako 
                                % poslední nadetekovaný začátek QRS komplexu
    
    if konec_useku == length(output) % pokud je konec úseku na konci signálu
        konec_useku = length(output) + 1; % nastavení,aby byl ukončen while cyklus
    else
        if zacatek_useku + usek > length(output) % pokud by úsek o dané velikosti
                                                  % měl větší hodnotu než je konec signálu  
            konec_useku = length(output);    % jako konec úseku nastaven konec signálu
        else
            konec_useku = zacatek_useku + usek; % zvětšení konce signálu o velikost úseku 
        end
    end
end

%% zobrazení celého signálu
svod=10;
figure;
plot(output(svod,:),'Color','b')
hold on;
Y = axis;
od = Y(4)-0.98*(abs(Y(4)-Y(3)));
do = Y(4)-0.02*(abs(Y(4)-Y(3)));
% zobrazení přerušovanýh čar v nadetekovaných pozicích
line([QRSz;QRSz],[od;do],'Color','k','LineStyle','--','LineWidth',2)
line([QRSk;QRSk],[od;do],'Color','k','LineStyle','--','LineWidth',2)
line([Pk;Pk],[od;do],'Color','r','LineStyle','--','LineWidth',2)
