Detecting and Quantifying T-Wave Alternans: The PhysioNet/Computing in Cardiology Challenge 2008 1.0.0
(3,116 bytes)
function valor=quantificaralternons(sinal,batidas,inicio,freqamostragem,NUMbatidas)
#quantificaralternons.m quantifies the magnitude of alternons in a sequence of 'Numbatidas' beats
#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'
%para carregar o edb/e0105 faz-se:
%sinal=load inicioe0105.txt;
%batidas é o ficheiro por exemplo da forma:
% 'ihr -r edb/e0105 -a atr -i -v>batidas_edb_e0105.txt'
%para o carregar faz-se:
%batidas=load batidas_edb_e0105.txt;
%inicio (>0) é o numero da batida onde se vão iniciar a NUMbatidas (128) batidas a considerar
%tudo é o conjunto de todos os stt segmentos colados num só
%wabs é fft(tudo) no intervalo 1:NUMbatidas*numamostraspsegmento
%NUMbatidas=64;
[segmentos tfins pulsacaomedia]=trocos(sinal,batidas,inicio,freqamostragem,NUMbatidas);
[a b]=size(segmentos);
numamostraspsegmento=a;
amostrasporbatida=60*freqamostragem/pulsacaomedia;
tudo=reshape(segmentos,NUMbatidas*numamostraspsegmento,1);
wabs=spectrum(tudo,numamostraspsegmento,NUMbatidas);
comeco=batidas(inicio,1);
%grafico(sinal,segmentos,wabs,numamostraspsegmento,tfins,comeco,amostrasporbatida);
valor=quantificar(wabs,NUMbatidas);
endfunction
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%quantificar o valor dos alternons
function valor=quantificar(wabs,NUMbatidas)
mediasfora=zeros(1,11);
desviospfora=zeros(1,11);
centros=zeros(1,11);
for w=0:2
[mediasfora(w+1) desviospfora(w+1)]=mediadesviopfora(wabs,w,NUMbatidas);
centros(w+1)=sum(wabs(NUMbatidas/2-w:NUMbatidas/2-+w))/(2*w+1);
endfor
diferencas=centros-mediasfora;
[valor w]=max(diferencas./desviospfora);
%w
endfunction
%%%funcao auxiliar
function [media desviopadrao]=mediadesviopfora(wabs,w,NUMbatidas)
v=zeros(1,11);
for i=NUMbatidas/2-20:NUMbatidas/2-10
v(i)=sum(wabs(i-w:i+w))/(2*w+1);
endfor
media=sum(v)/length(v);
aux1=media*ones(1,length(v));
aux2=(aux1-v).*(aux1-v);
desviopadrao=sqrt(1/(length(v))*sum(aux2));
endfunction
function res=grafico(sinal,todossegmentos,wabs,numamostraspsegmento,tfins,comeco,numamostrasbatida)
numbatidasapor=15;
limitesinal=comeco+ceil(numbatidasapor*numamostrasbatida);
intervalo=[comeco:limitesinal];
TfinsR=tfins(tfins<=limitesinal);
ltfins=length(TfinsR);
average=sum(sinal(comeco:limitesinal))/limitesinal;
A=min(sinal(comeco:limitesinal));
B=max(sinal(comeco:limitesinal));
subplot(4,1,1);plot(todossegmentos(1:numbatidasapor*numamostrasbatida));
subplot(4,1,2);
stem(TfinsR,(B-average)*ones(1,length(TfinsR)));hold on;
stem(TfinsR,(A-average)*ones(1,length(TfinsR)));hold on;
plot(intervalo,sinal(comeco:limitesinal)-average);
hold off;
subplot(4,1,3);plot([1:64*numamostraspsegmento]/128,wabs,'ro');
a=floor(numamostraspsegmento/4);
subplot(4,1,4);plot([a:128]/(128),wabs(a:128));
res=1;
endfunction
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%