Detecting and Quantifying T-Wave Alternans: The PhysioNet/Computing in Cardiology Challenge 2008 1.0.0
(2,904 bytes)
function [segmentos tfins pulsacaomedia]=trocos(sinal,batidas,inicio,freqamostragem,NUMbatidas)
#trocos.m returns segment of 'NUMbatidas' beats, end of T-wave on each beat and average heart rithm
#Copyright (C) 2008 Rui Rodrigues <rapr@fct.unl.pt>
#This software is released under the terms of the GNU General Public License (http://www.gnu.org/copyleft/gpl.html)
%sinal é o ecg a considerar mas só a coluna de um dos 'leads'
%batidas é o ficheiro por exemplo da forma:
% 'ihr -r edb/e0105 -a atr -i -v>batidas_edb_e0105.txt'
%inicio é o numero da batida onde se vão iniciar a 128 batidas a considerar
%determinar pulsacao media
soma=sum(batidas(inicio:inicio+NUMbatidas-1,2));
pulsacaomedia=soma/NUMbatidas;
%dados do artigo ??
pulsacaoref=120;
aux=floor(225/(1000/freqamostragem)*(pulsacaoref/pulsacaomedia));
%este valor é demasiado grande (será que estou a fazer algo errado?)
numamostraspsegmento=2*ceil(0.6*aux/2);
%vou substituir por
%numamostraspsegmento=2*ceil(0.4*aux/2)
%delay=floor(55/(1000/freqamostragem)*(pulsacaoref/pulsacaomedia));
%a partir daqui esta diferente do programa inicial(artigo)
%vai ser usado o outro artigo para localizar o fim da onda T
segmentos=zeros(numamostraspsegmento,NUMbatidas);
tfins=zeros(1,NUMbatidas);
for i=1:NUMbatidas
fim=tfim(sinal(batidas(inicio+i-1,1):batidas(inicio+i,1)),freqamostragem,batidas(inicio+i-1,2));
tfins(1,i)=batidas(inicio+i-1,1)+fim;
comeco=batidas(inicio+i-1,1)+fim-numamostraspsegmento+1;
segmentos(:,i)=sinal(comeco:comeco+numamostraspsegmento-1);
endfor
endfunction
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%funcao para localizar, numa batida, o fim da onda T
%parte daquilo que esta feito em 'tlimites.m'
function Tfim=tfim(sinal_batida,freqamostragem,batida)
w=ceil(32*freqamostragem/250);
l=length(sinal_batida);
%inicio da procura do tfim
if (batida>68)
inicio=ceil(0.15*l+freqamostragem/250*37);
else
inicio=ceil(freqamostragem/250*70);
endif
%fim da procura do tfim
if (batida>68)
fim=ceil(0.7*l-freqamostragem/250*9);
else
fim=ceil(freqamostragem/250*(0.2*l+101));
endif
Tfim=procuratfins(sinal_batida,inicio,fim,w);
endfunction
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%copia da versao de 'tlimites'
function res=procuratfins(sinal_batida,inicio,fim,w)
%threshold
L=6;
A=zeros(fim-inicio+1,1);
for j=inicio:fim
A(j-inicio+1)=sum(sinal_batida(j-w+1:j))-w*sinal_batida(j);
endfor
[m1 res1]=max(A);
[m2 res2]=min(A);
if ((abs(m1/m2)>1/L)&&(abs(m1/m2)<L))
res=max([res1,res2])+inicio-1;
else
[a res]=max([abs(m1),abs(m2)]);
res=res+inicio-1;
endif
endfunction
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%