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 #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)