QT Interval Measurement: The PhysioNet/Computing in Cardiology Challenge 2006 1.0.0

File: <base>/sources/roberto-sassi/findQ.m (2,377 bytes)
%~ findQ.m - Part of the trqt package submitted for the 2006 CinC challenge
%~ Copyright (C) 2006  DA Tironi, R Sassi and LT Mainardi
%~ This software is released under the terms of the GNU General
%~ Public License (http://www.gnu.org/copyleft/gpl.html).

function [puntoQ, isoelettrico] = findQ(listaQ, segnale)
startWindow = -100;
lung_segm = 20;
lengthWindow = abs(startWindow)*2 - lung_segm;
isoelettrico = 0;


FQmedio = meanWindow(listaQ, segnale, startWindow, lengthWindow);%trovo la finestra del punto Q medio.
if(findIsoeletric(FQmedio(0 - startWindow - lung_segm:1 - startWindow)) == 1)%se il punto Q è nel tratto isoelettrico
    verso = 1;
else
    verso = -1;
end
puntoQ = 0;
c2 = 1;
cond = -1;
while 2 * cond + verso ~= 1 && c2*verso - startWindow - lung_segm > 1 && c2*verso + 1 - startWindow <= lengthWindow%finchè nn esco dal tratto isoelettrico o nn ci entro 
    cond = findIsoeletric(FQmedio(c2*verso - startWindow - lung_segm:c2*verso + 1 - startWindow));%sono nel tratto isoelettrico?
    c2 = c2 + 1;
end
if(c2*verso - startWindow - lung_segm <= 1 || c2*verso + 1 - startWindow > lengthWindow)
    puntoQ = 0;
else
    c2 = c2 - 1;
    if(verso == 1)
        puntoQ = verso * (c2 - 1);
    else
        puntoQ = verso * c2;
    end
end

isoelettrico = mean(FQmedio(1, puntoQ + 1 - startWindow - lung_segm:puntoQ - startWindow));%trovo il valore isoelettrico

% figure(1)
% plot(FQmedio,'.');
% hold on
% plot(puntoQ - startWindow, [-500:500], '.');
% hold off



function [risposta] = findIsoeletric(window)

media = mean(window);%calcolo la media dei campioni = tratto isoelettrico
diff = abs(window(:, size(window, 2)- 5:size(window, 2)) - media);%calcolo le differenze degli ultimi 6 campioni dalla media
if((diff(size(diff, 2)) < 20) && (size(find(diff < 20), 2) >= 4))%se degli ultimi 6 nn l'ultimo e almeno 4 sono nell'intorno di 20
    risposta = 1;%il punto è nel tratto isoelettrico
else
    risposta = 0;%il punto nn è nel tratto isoelettrico
end

%     [window, map] = sort(window);
% if(abs(window(1) - window(4)) < 30 && map(5)~=6 && map(6)~=6)
%     risposta = 1;
% elseif(abs(window(2) - window(5)) < 30 && map(1)~=6 && map(6)~=6)
%     risposta = 1;
% elseif(abs(window(3) - window(6)) < 30 && map(1)~=6 && map(2)~=6)
%     risposta = 1;
% else
%     risposta = 0;
% end