%--------------------------------------------------------------------------
% QRS CWT DETEKTOR
%--------------------------------------------------------------------------
% Ing. Martin Vítek - 10.3.2009
%--------------------------------------------------------------------------
function [QRS] = QRS_CWT_detektor_funkce(fvz,vstup_sig,typ,zobraz)
%------ NAPOVEDA ----------------------------------------------------------

% vstupni parametry
% fvz : pouzita vzorkovaci frekvence v Hz
% vstup_sig : vstupni signal ve formatu *.mat
% typ : 'c' nebo 'k' (c = clovek, k = kralik), typ EKG
% zobraz : "a" nebo "n" (a = ano, n = ne), zobrazi nadetekovane QRS

% vystupni parametry
% QRS : pozice QRS komplexu v zadanem signalu

%------ NASTAVENI PARAMETRU -----------------------------------------------

% parametry programu / menit jen v pripade spatne detekce QRS
if      typ == 'c'
        k1 = 15;    % zakladni pasmo pro cloveka
        k2 = 1.55;  % nasobek prahu RMS
        k3 = 0.1;   % maximalni povolena vzdalenost mezi dvojici extremu v sekundach
        k4 = 0.1;   % minimalni vzdalenost mezi dvema QRS komplexy
        
elseif  typ == 'k'
        k1 = 5;     % zakladni pasmo pro kralika
        k2 = 1.85;  % nasobek prahu RMS
        k3 = 0.03;   % maximalni povolena vzdalenost mezi dvojici extremu v sekundach
        k4 = 0.03;   % minimalni vzdalenost mezi dvema QRS komplexy       
else
        error('Zvolte typ bud c (clovek), nebo k (kralik)')
end

pasmo = k1*fvz/500;
vlnka = 'bior1.5';      % typ vlnky
k = fvz/5;              % osetreni zacatku a konce delky "k"

%------ UPRAVA DELKY 1 ----------------------------------------------------

% prodlouzeni signalu na zacatku a konci
vstup_sig = vstup_sig - mean(vstup_sig);
zacatek(1:k) = vstup_sig(1);
konec(1:k) = vstup_sig(end);
vstup_sig = [zacatek vstup_sig konec];

%------ CWT ---------------------------------------------------------------

band = cwt(vstup_sig,pasmo,vlnka);  % vypocet CWT pro zvolene pasmo

%------ UPRAVA DELKY 2 ----------------------------------------------------

% opetovne zkraceni signalu a pasma na puvodni delku
band = band(k+1:end-k);
vstup_sig = vstup_sig(k+1:end-k);

%------ VYPOCET PRAHU -----------------------------------------------------

prah = k2*std(band,1);                % vypocet prahu algoritmem RMS

%------ DETEKCE QRS -------------------------------------------------------

QRS = polohy_vln(band,prah,fvz*k3); % funkce nalezne polohy QRS v pasmu

%------ ELIMINACE MULTIVLN ------------------------------------------------

% eliminace QRS komplexu vzdalenych mene nez "k5"
elim = diff(QRS);                   
kde = find(elim < fvz*k4);
QRS(kde+1) = [];

%------ ZOBRAZENI ---------------------------------------------------------

if zobraz == 'a'
scrsz = get(0,'ScreenSize');
width = 3*scrsz(3)/4;
height = scrsz(4)/2;
figure('Position',[(scrsz(3)-width)/2 (scrsz(4)-height)/2 width height])

subplot(2,1,1)
plot(vstup_sig,'Color','b')
hold on;

Y = axis;
od = Y(4)-0.10*(abs(Y(4)-Y(3)));
do = Y(4)-0.02*(abs(Y(4)-Y(3)));

if ~isempty(QRS)
    line([QRS;QRS],[od;do],'Color','r','LineStyle','-','LineWidth',2)
end

subplot(2,1,2)
plot(band,'Color','b')
hold on;

Y = axis;
od = Y(4)-0.10*(abs(Y(4)-Y(3)));
do = Y(4)-0.02*(abs(Y(4)-Y(3)));

line([1 length(vstup_sig)],[prah prah],'Color','k','LineStyle','-','LineWidth',1)
line([1 length(vstup_sig)],[-prah -prah],'Color','k','LineStyle','-','LineWidth',1)
if ~isempty(QRS)
    line([QRS;QRS],[od;do],'Color','r','LineStyle','-','LineWidth',2)
end
end
%--------------------------------------------------------------------------