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

File: <base>/sources/roberto-sassi/shiftQT.m (2,658 bytes)
%~ shiftQT.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[listaQT, scostamento] = shiftQT(listaQT, segnale)

Col_RR = 1; %colonna RR
Col_Q = 2; %colonna punto Q
Col_T = 3; %colonna punto T
Col_F = 5; %colonna famiglia

dim_frame_xcorrQ = 150;
start_frame_xcorrQ = -10;
dim_frame_xcorrT = 250;
start_frame_xcorrT = -200;
shift = 100;

scQ = 0; scT = 0;
c2 = 1;
for c1 = 2:size(listaQT, 1)%per ogni battito a partire dal secondo
    if(listaQT(c1, Col_F)==0 || c1==size(listaQT, 1))%se il battito fa parte della stessa famiglia
        if(c2 > 1)%se la famiglia ha piĆ¹ di un battito
            if(c1==size(listaQT, 1) && listaQT(c1, Col_F)==1)
                c1 = c1+1;
                c2 = c2+1;
            end
            for c3 = c1-c2:c1-1%per ogni battito della famiglia
                mediaQ = meanWindow(listaQT(c1-c2:c1-1, Col_Q), segnale, start_frame_xcorrQ, dim_frame_xcorrQ);%trovo la media dell'intorno di Q
                mediaT = meanWindow(listaQT(c1-c2:c1-1, Col_T), segnale, start_frame_xcorrT, dim_frame_xcorrT);%trovo la media dell'intorno di T
                for c4 = -shift:shift%per X campioni a sx e X a dx
                    arrCorrQ(c4+shift+1, :) = xcorr(segnale(listaQT(c3, Col_Q)+start_frame_xcorrQ + c4:listaQT(c3, Col_Q)+start_frame_xcorrQ + c4+dim_frame_xcorrQ-1), mediaQ, 'coeff');%trovo le crosscorrelazioni della finestra specifica
                    arrCorrT(c4+shift+1, :) = xcorr(segnale(listaQT(c3, Col_T)+start_frame_xcorrT + c4:listaQT(c3, Col_T)+start_frame_xcorrT + c4+dim_frame_xcorrT-1), mediaT, 'coeff');%trovo le crosscorrelazioni della finestra specifica
                end

                [maxQ, scQiter] = max(arrCorrQ(:, dim_frame_xcorrQ));%trovo la crosscorrelazione massima di Q
                listaQT(c3, Col_Q) = listaQT(c3, Col_Q) + scQiter - shift - 1;%adatto il punto Q alla cr.corr max
                scQ = scQ + abs(scQiter - shift - 1);%riporto lo scostamento di Q
                [maxT, scTiter] = max(arrCorrT(:, dim_frame_xcorrT));%trovo la crosscorrelazione massima di T
                listaQT(c3, Col_T) = listaQT(c3, Col_T) + scTiter - shift - 1;%adatto il punto T alla cr.corr max
                scT = scT + abs(scTiter - shift - 1);%riporto lo scostamento di T

            end
        end
        c2 = 1;
    else
        c2 = c2+1;
    end
end

scostamento = scQ + scT;%trovo lo scostamento totale di tutti i battiti