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