Detecting and Quantifying T-Wave Alternans: The PhysioNet/Computing in Cardiology Challenge 2008 1.0.0

File: <base>/sources/Rodrigues/trocos.m (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





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%