Documente Academic
Documente Profesional
Documente Cultură
E sua Transformada de Fourier (
Esta ultima condio conhecida como condio de admissibilidade de wavelet e
chamado de constante de admissibilidade, onde
) (
)
Onde representa a variao escalar e t a variao no tempo.
34
3.1.2 Transformada Wavelet (WT)
No final dos anos 90 iniciaram-se diversas pesquisas e trabalhos cientficos sobre a
utilizao de transformadas wavelet para anlise de um sinal de ECG, como Kadambe et al.
(1999), Li et al. (1995) entre outros diversos autores, tendo sempre como base a deteco do
complexo QRS, isso se deve ao fato deste complexo ser mais aparente e consequentemente
mais fcil de se detectar. Sendo conhecida a posio do complexo QRS se torna mais simples
a deteco dos outros pontos e ondas de interesse.
Neste sentido a transformada wavelet se torna de extrema importncia, pois utilizada
como uma das principais ferramentas para o processamento do sinal de um ECG para
extrao do complexo QRS, sendo utilizado como uma espcie de filtro de sinal. Nesta seo
ter uma breve explicao sobre a transformada wavelet e sua aplicabilidade.
Tendo a transformada wavelet W
(a,b)
definida como:
Definindo
a,b
(t) como:
)
Pode-se reescrever a transformada como um produto das funes f(t) e
a,b
(t):
A funo equivalente a
1,0
(t) a chamada wavelet me (do ingls, mother
wavelet) enquanto as outras funes
a,b
(t) so chamadas de wavelet filhas. O parmetro b
35
um parmetro de translao o qual significa que a funo foi transladada no eixo t a uma
distncia equivalente a b. O parmetro a um parmetro de escala, aumentando ou
diminuindo a escala da wavelet formada pela funo. Por fim o termo
um fator de
normalizao, tendo a funo de garantir que a energia de
a,b
(t) seja independente de a e de
b.
Assim como possvel utilizar wavelet para transformar uma funo, necessria
tambm a transformada inversa, para recompor o sinal no domnio do tempo a partir de sua
decomposio. Chamando assim
E sendo W(a,b) a transformada wavelet da funo f(t) usando a wavelet , ento a
transformada inversa ser dada por:
Sendo assim, possvel a recomposio de um sinal decomposto utilizando a
Transformada Inversa Wavelet, sendo esta uma das principais caractersticas da transformada
Wavelet.
3.1.3 Funo de escala
Uma vez que se conhece a transformada apenas para escalas onde a < a
0
.
no ser uma representao completa do sinal, faltando ainda a obteno das
36
informaes correspondentes a > a
0
, o que feito com o uso de uma funo auxiliar, neste
caso a funo de escala , tambm conhecida como wavelet pai, que depende da funo
wavelet utilizada para a obteno do .
De forma anloga transformada wavelet demonstrada nas equaes 3.4 e 3.6, a
funo de escala pode ser obtida atravs da seguinte equao:
A equao 3.10 est ligada aproximao do sinal analisado, enquanto a transformada
wavelet, equao 3.6, pode ser associada aos detalhes do sinal analisado. A funo escala e a
funo wavelet podem ser interpretadas como filtros passa-baixa e passa-alta,
respectivamente.
3.1.4 Transformada Discreta Wavelet (DWT)
A Transformada Discreta Wavelet (DWT) tem como principal funo transformar um
sinal discreto no domnio do tempo para um domnio Wavelet, para isso utilizado um
processo de codificao por sub-banda, decompondo o sinal original em diferentes escalas. O
calculo da DWT de um sinal envolve dois processos, primeiramente a determinao dos
coeficientes Wavelet, que representam o sinal no domnio transformado.
O segundo passo consiste em determinar as verses aproximadas e detalhadas do sinal
original em diferentes nveis de resoluo, no domnio do tempo, a partir dos coeficientes
wavelets calculados.
As verses discretas da srie e da transformada wavelet podem ser obtidas
discretizando as dilataes e as translaes. Assumindo dilataes binrias e translaes
unitrias, as funes de base wavelet tornam-se:
37
)
Onde, a tornou-se 2
-j
e b, n2
-j
, sendo assim possvel denotar que a transformada
discreta wavelet poder ser definida como:
Em analogia transformada discreta, tem-se os coeficientes de aproximao do sinal
analisado na escala 2
j
, que podem ser escritos como:
Com a utilizao do conceito de multiresoluo (Mallat, 2009), podem-se construir
famlias de wavelet discretas e desenvolver algoritmos rpidos para o clculo de
transformada. O uso da anlise em multiresoluo realizado a partir da existncia de duas
funes bsicas, a wavelet me e a funo escala , que devem ser ortogonais entre
si, e ao longo dos nveis de resoluo, as diversas funes de escala e wavelet esto
relacionadas s respectivas funes me por meio das seguintes equaes:
A relao entre os nveis de resoluo pode ser descrita sob a forma de um
aninhamento dos espaos de funo, onde cada espao de maior resoluo contm os espaos
de menor resoluo.
Cada espao V
m
coberto pela famlia
de funes de base
correspondente. As funes
Uma vez que V
m
e W
m
esto contidos em V
m+1
, ento ambos os conjuntos de funes
de base podem ser expressos como combinao linear das funes de base de V
m+1
, sendo
cada uma delas ponderada pelos coeficientes g[n] e h[n].
[ ]
[ ]
O processo de aplicao das equaes 3.17 e 3.18 pode ser chamado de processo de
decomposio, onde pode ser entendido pela aplicao de filtros passa-baixa, associada a
funo de escala e passa-alta, associado a funo de wavelet, seguidos de uma subamostragem
(downsampling), em que subamostrado, processo que reduz pela metade a resoluo do
tempo e ao mesmo tempo duplica a frequncia. Realizando este mesmo processo a cada nvel,
diminuindo pela metade a resoluo do tempo e duplicando a frequncia.
A cada nvel que se realiza a decomposio do sinal se produz d
j
[n], contendo a
informao detalhada pelo filtro passa-alta, enquanto pelo filtro passa-baixa se produz a
j
[n],
contendo uma aproximao, como mostrado na Figura 3.2 a seguir.
39
Figura 3.2: Decomposio utilizando wavelet. (VANISREE, 2011)
O caminho inverso tambm pode ser tomado para a realizao da recomposio do
sinal desejado, porm no ser abordado neste projeto, pois o mesmo utilizar apenas a
decomposio do sinal para a anlise do mesmo.
3.2 MatLab
O MatLab (MATrix LABoratory) um software desenvolvido para ser um sistema
interativo e uma linguagem de computao tcnica e cientfica em geral. Software este
escolhido para o desenvolvimento do projeto, por se tratar de um software que integra
computao, visualizao e programao em um ambiente de fcil uso. J os comandos do
MatLab so muito similares maneira como os expressamos matematicamente, o que o torna
um software de fcil utilizao, alm de possuir facilidades grficas que tornam a interface
homem mquina muito mais amigvel.
Alm da fcil utilizao, o MatLab tambm conhecido por grande quantidade e
variedade de recursos, desde as funes matemticas incorporadas ao prprio software, sendo
algumas delas em forma de toolboxes, at os recursos que podem ser implementados pelo
prprio usurio, o qual pode ser capaz de criar suas prpria funes ou toolboxes para seu uso
especfico.
40
3.2.1 Toolboxes utilizadas
Neste projeto ser utilizada prioritariamente a toolbox wavelet a qual possui em seu
catlogo dezenas de funes pr-moldadas relativas s transformadas wavelet, alm de uma
interface GUI (graphical user interface, ou interface grfica do utilizador) para uma utilizao
mais simples das funes relacionadas ao MatLab.
Porm, sero utilizadas apenas algumas funes especficas desta toolbox, com o
intuito de deixar o cdigo mais simples, limpo e leve possvel j que o uso das funes no
modo GUI requerem um nvel de processamento maior por parte do computador.
As principais funes utilizadas sero descritas nas sees a seguir.
3.2.1.1 Wavedec
A funo wavedec realiza uma anlise wavelet unidimensional multinvel, utilizando
uma wavelet especfica, como o chapu mexicano ou Haar, ou utilizando filtros wavelet
especficos de decomposio, passa-baixa e passa-alta.
Sua sintaxe pode ser tanto [C,L] = wavedec(X,N,'wname'), quanto [C,L] =
wavedec(X,N,Lo_D,Hi_D), onde tem-se como resultado a decomposio wavelet de um sinal
X at o nvel N, utilizando ou uma wavelet existente wname ou ento filtros passa-baixa e
passa-alta, Lo_D e Hi_D respectivamente, especificados pelos usurio.
A funo retornar os valores C contendo o vetor de decomposio e L contendo o
vetor com o tamanho de cada uma das decomposies realizadas, como pode ser mostrado na
Figura 3.3 a seguir.
41
Figura 3.3: Decomposio do Sinal X utilizando funo wavedec. (MATLAB, 2011)
O algoritmo desta funo funciona da mesma forma que a transformada discreta
wavelet descrita na seo 3.1 deste captulo, onde dado um sinal s de tamanho N, o primeiro
passo da transformada produzir, a partir da wavelet ou filtros desejados, dois conjuntos de
coeficientes, o de aproximao aqui chamado de CA
1
, e o coeficiente de detalhes, ou
informao detalhada, aqui chamado de CD
1
. Estes vetores sero obtidos a partir da
convoluo do sinal S com o filtro de passa-baixa para o coeficiente de aproximao, e com o
filtro de passa-alta o coeficiente de detalhes, seguidos pela subamostragem, como mostrado
na Figura 3.4 a seguir:
Figura 3.4: Decomposio do sinal utilizando DWT. (MATLAB, 2011)
42
O passo anterior se repete, mas desta vez utilizando o sinal CA
1
como o sinal original,
aplicando assim os filtros, seguidos da subamostragem para a obteno dos sucessivos
coeficientes de aproximao e de detalhes at o nvel desejado, como ilustrado na Figura 3.5.
Figura 3.5: rvore de decomposio do sinal, utilizando DWT.
3.2.1.2 Appcoef
A funo appcoef utilizada para computar os coeficientes de aproximao de um
sinal de uma dimenso, criados anteriormente pela funo wavedec, anteriormente definidos
como CA.
Assim como a funo wavedec, esta possui dois usos de sintaxe distintos definindo o
uso de wavelets existentes para a amostragem e recomposio do sinal, ou utilizando filtros
pr-definidos pelo usurio podendo ser utilizadas das seguintes maneiras: A =
appcoef(C,L,'wname') ou A = appcoef(C,L,Lo_R,Hi_R), recebendo assim como resultado A o
ultimo coeficiente de aproximao computado pela funo wavedec.
43
Esta funo tambm pode ser utilizada para retornar os valores do coeficiente de
aproximao de nveis anteriores ao ltimo computado pela funo apresentada na seo
anterior, mas para isso necessrio adicionar um N com o nmero do nvel de
decomposio desejado, ficando a funo, podendo ser utilizada como A =
appcoef(C,L,'wname',N).
Para nveis de coeficiente anteriores ao ltimo, a funo computa iterativamente os
valores dos coeficientes de aproximao utilizando a transformada inversa wavelet.
3.3 MITDB-BIH
Para a realizao deste projeto de forma a torna-lo o mais prximo da realidade quanto
possvel, foram utilizadas as bases de dados da MITDB-BIH Arrhhythmia Database a qual
contem dezenas de registros de eletrocardiogramas reais.
Esta base de dados foi criada pelo Beth Israel Deaconess Medical Center juntamente
ao MIT (Massachusetts Institute of Technology), o qual tinha, e ainda tem o objetivo de deixar
disponvel uma base de dados contendo 48 registros de 24horas de eletrocardiogramas reais,
de pacientes desse hospital, de forma a auxiliar e incentivar desenvolvedores e estudantes a
trabalhar com este tipo de sinal, tendo em vista que a anlise de sinais biomdicos uma rea
em constante expanso e se faz necessrio o constante aprimoramento de mtodos para se
trabalhar com estes tipos de dados.
As amostras coletadas foram realizadas em meio a uma vasta quantidade de amostras
oferecidas pelo hospital, de forma a serem utilizadas amostras aleatrias tanto de pacientes
cardiopatas quando saudveis. As gravaes foram digitalizadas a uma frequncia de 360
amostras por segundo.
44
Dois ou mais cardiologistas, independentemente, anotaram cada um dos registros para
que se possa ter um meio de se comparar os resultados encontrados nas anlises
computacionais e os resultados anotados por profissionais experientes. Assim, cada um dos
registros possui um arquivo contendo o sinal coletado e um arquivo separado contendo as
anotaes dos cardiologistas, em sua grande maioria a posio dos picos de onda R.
3.4 Eletrocardiograma
Tendo como principal ponto deste projeto a anlise do sinal de um eletrocardiograma e
a deteco de possveis arritmias que um paciente possa ter, mas para isto, primeiramente
necessrio se definir quais arritmias sero analisadas e quais as suas principais caractersticas.
Primeiramente devero ser abordadas aquelas arritmias que tem uma probabilidade
maior de ocorrncia e um grau de dificuldade menor de serem percebidas, do ponto de vista
computacional, j que no se pode comparar a eficincia de um software com o conhecimento
de um profissional da rea.
Assim como dito na seo 2.4 do captulo anterior, algumas cardiopatias so mais
simples de serem detectadas como a taquicardia e a bradicardia, sendo esta primeira
caracterizada por uma alta frequncia cardaca, ficando acima de 100 batimentos por minuto,
j a segunda caracterizada pela baixa frequncia cardaca, ficando abaixo dos 60 batimentos
por segundo.
Nestes dois casos, possvel aferir a frequncia cardaca atravs do ECG a partir das
distncias entre dois complexos QRS. De modo similar tambm possvel detectar a presena
da fibrilao atrial, onde a frequncia cardaca ultrapassa o valor de 120 batimentos por
minuto.
45
O bloqueio sinoatrial apresentado na pgina 28 tambm pode ser detectado observando
o complexo QRS, neste caso pela ausncia de um deles, onde o sinal aparentemente normal,
podendo ser detectado computacionalmente por uma distncia maior entre dois complexos
QRS.
E por fim a fibrilao ventricular, a qual no apresenta uma forma significativa do
sinal, podendo ser caracterizada ento pela ausncia total do complexo QRS ou pela ausncia
de ondas R, de uma forma mais simples de anlise.
Este captulo apresentou as ferramentas e mtodos que sero utilizados neste projeto
para realizar a anlise do eletrocardiograma, primeiramente a transformada wavelet, que de
suma importncia para tal, pois a partir desta que se torna possvel uma deteco correta dos
pontos mais importantes do ECG. O software MatLab no qual o projeto foi realizado e que
sem dvidas um software de grande importncia ao mundo acadmico pelas possibilidades
oferecidas por este, e o meio pelo qual foi possvel a realizao do projeto de uma forma mais
realista, e finalmente a base de dados MITDB-BIH, a qual contm dezenas de amostras reais
de eletrocardiogramas, comentados por cardiologistas, tornando possvel o estudo em cima de
um sinal real e a avaliao do sinal por comparao s anotaes.
46
4 CAPTULO 4 SISTEMA DE ANLISE PARA
ELETROCARDIOGRAMA
A partir do conhecimento terico abordado nos captulos anteriores, tornou-se possvel
ento realizar a anlise de um sinal de eletrocardiograma, o qual ser abordado neste captulo,
tratando assim dos mtodos utilizados para tal.
4.1 Apresentao Geral da Soluo Proposta
O ponto principal em qualquer algoritmo de anlise de sinais de eletrocardiograma a
deteco do complexo QRS, pelo fato das ondas que o compe serem aparentes, o que facilita
a sua deteco, alm de ser utilizada como base para deteco de grande parte das
cardiopatias conhecidas. Uma vez que se conhece as posies do complexo QRS possvel
detectar as ondas P e T dentro do sinal, j que ficam posicionadas antes e depois do complexo.
A onda R por ser a mais aparente e mais caracterstica no eletrocardiograma, se tornou
o ponto principal deste algoritmo, pois a partir de sua deteco, torna-se mais simples a
deteco das ondas Q e S. Desta forma, o processo de deteco dos complexos QRS pode ser
realizado em 5 etapas principais:
1. Leitura do sinal de eletrocardiograma;
2. Aplicar a tcnica de retirada da baseline drift para uma melhor visualizao do
sinal;
3. Aplicar a transformada wavelet para decomposio do sinal;
4. A partir do sinal decomposto, detectar as ondas R;
5. Tendo como base a localizao das ondas R, detectar ondas P, Q, S e T;
6. Identificar arritmias conhecidas.
47
O fluxograma da Figura 4.1 abaixo mostra de maneira simplificada o algoritmo
abordado neste projeto.
Inicio
Ler Sinal de ECG
Preparao
Baseline Drift
Aplicar DWT
Localizar os pontos mximos dentro
da DWT para localizar onda R
Localizar minimos e mximos
proximos onda R para localizar
ondas P, Q, S e T
Calcular
frequncia
cardaca
Detectar arritmias
e cardiopatias
Figura 4.1: Fluxograma simplificado do algoritmo de anlise do sinal de ECG.
48
Cada uma destas etapas ser descrita em maiores detalhes nas sees seguintes. O
cdigo fonte que implementa essas etapas, apresentado no Apndice A no final deste
trabalho.
4.2 Preparao do sinal
A primeira etapa para a anlise de um sinal de eletrocardiograma a preparao deste
sinal de forma a eliminar rudos oriundos da prpria aquisio do sinal, onde um eletrodo mal
posicionado ou desgastado, atividades do paciente ou at mesmo a respirao deste podem
influenciar, assim o sinal do eletrocardiograma pode apresentar incialmente formas pouco
favorveis para sua anlise, por isto a necessidade desta preparao inicial do sinal.
A Figura 4.2 a seguir mostra um dos sinais retirados do MITDB-BIH, o qual entre os 7
e 9 segundos apresenta uma diferena de amplitude em relao ao resto do sinal, onde a linha
de base est oscilando com o tempo, no caso dos dados da base de dados MITDB isto ocorre
de forma bem sutil, j que grande parte dos sinais j foram tratados em relao a este quesito
antes de serem publicados, porm em um ECG normal, esta etapa de grande importncia.
Figura 4.2: Acima o sinal original e abaixo o mesmo sinal aps a adequao da linha de base.
49
A Figura 4.2 mostra o sinal original, seguido pelo sinal aps passar pelo processo de
retirada do baseline drift, ou alteraes da linha de base numa traduo livre, o tornando mais
uniforme e consequentemente facilitando a sua anlise sem perder ou alterar os dados
importantes deste sinal.
4.3 Aplicao da Transformada Discreta Wavelet (DWT)
Esta etapa consiste primeiramente na decomposio do sinal utilizando a transformada
discreta wavelet, com o auxilio da funo wavedec do MatLab que foi apresentada na pgina
40, a decomposio do sinal realizada at o quarto nvel, resultando assim em duas
variveis, a primeira com os coeficientes de aproximao do ultimo nvel de decomposio e
de detalhes dos nveis anteriores resultantes da DWT como exibido na Figura 4.4 e a segunda
contendo a informao do tamanho de cada sinal, o qual utilizado como base para a
reconstruo do sinal.
A escolha de uma wavelet de suma importncia nesta etapa, pois ser a partir desta
que o sinal ser analisado. Normalmente so selecionadas wavelets que possuam a forma de
onda similar do sinal escolhido e para isto existem vrias famlias de wavelet como Haar,
Daubechies, Biorthogonal, Coiflets, Symlets, Morlet, Meyer entre outras. Para este caso ser
utilizada a wavelet me e funo escala da famlia Daubechies, definida como Daub4 ou
apenas db4, a qual a recomendada para anlise de sinais eltricos por mais se aproximar a
forma do sinal. Na Figura 4.3 pode ser visto a funo wavelet me e a funo escala,
provenientes da wavelet Daub4.
50
Figura 4.3: Wavelet me e funo escala da wavelet Daub4.
A Figura 4.4 mostra um sinal de eletrocardiograma aps a aplicao da DWT
utilizando a funo wavedec do MatLab, realizando desta maneira a decomposio do sinal
at o quarto nvel, retornando como resultado o coeficiente de aproximao de quarto nvel
deste sinal, seguido pelos coeficientes de detalhes de nveis quatro a um, com os quais se
torna possvel realizar a recomposio do sinal nos nveis trs, dois e um.
Figura 4.4: Estrutura da decomposio por DWT, coeficiente de aproximao de nvel 4 e coeficientes de
detalhes de nvel 4, 3, 2 e 1.
51
Realizada a decomposio do sinal, o prximo passo realizar a recomposio do
sinal para cada um dos nveis desejados, neste caso do nvel 4 ao nvel 1. Este passo se d por
intermdio da aplicao da Transformada Inversa Wavelet (IDWT) pela funo appcoef do
toolbox de wavelet no MatLab, onde para cada um dos nveis desejados necessrio aplicar a
IDWT recuperando assim o sinal decomposto no passo anterior. Na Figura 4.5 a seguir pode-
se ver o sinal original seguido dos sinais depois da aplicao da DWT para cada um dos nveis
1, 2, 3 e 4.
Figura 4.5: Acima o sinal original seguido das DWTs de 1, 2, 3 e 4 ordem
52
A partir da Figura 4.5 acima possvel perceber a grande importncia da utilizao da
DWT para a anlise deste tipo de sinal, pois quanto maior o nvel de aplicao observa-se que
menor a existncia de rudos no sinal. Assim como explicado no captulo 3, aqui possvel
denotar na prtica a caracterstica da DWT em que a cada nvel a frequncia de amostragem
cai pela metade, mantendo-se sempre as caractersticas principais do sinal original de acordo
com a wavelet utilizada como me e como funo escala.
Apesar disso, quanto maior a ordem de aplicao, mais o sinal comeam a se
normalizar em zero como mostrado na Figura 4.6, onde se mosta a aplicao da DWT at o
nono nvel de decomposio, por este motivo, neste projeto ser utilizada a transformada de
segunda ordem, escolhida por manter uma grande fidelidade com o sinal original, porm com
uma quantidade muito menor de rudo.
Figura 4.6: DWTs de 5, 6, 7, 8 e 9 ordens.
53
4.4 Localizao dos picos de onda R
Realizada a filtragem dos rudos do sinal, o prximo passo consiste em encontrar os
pontos da onda R, sendo esta a primeira a ser encontrada e de mais fcil localizao por ser a
onda mais caracterstica de todas, encontrando a segunda DWT o algoritmo para localizao
das ondas R pode ser resumido no fluxograma da Figura 4.7 a seguir.
Localizao da onda de maior
amplitude do sinal e ondas
que possuam amplitude igual
ou superior a 50% desta
Entrada de sinal,
DWT de 2 ordem
Deteco das ondas
encontradas de maior
amplitude at 10 amostras de
distncia
R > R 10
amostras de dist.
No
Cria vetor com a localizao
de todos os mximos
Sim
Multiplica este vetor por 4,
para localizao destes
pontos no sinal original
Deteco das ondas
encontradas de maior
amplitude at 20 amostras de
distncia no sinal original
Cria vetor um com a
localizao das ondas R e
outro com amplitude destas
ondas
Figura 4.7: Fluxograma do algoritmo para localizao das ondas R
54
Este processo realizado de forma a encontrar todas as ondas R do sinal. Deve-se
frisar aqui a importncia de alguns cuidados ao se utilizar esta metodologia, em primeiro
lugar, ao se encontrar todos os pontos cuja amplitude maior que 50% da maior amplitude do
sinal, sero encontrados assim muitos pontos de falso-positivo, que devero ser tratados ao se
procurar pelos pontos de maior amplitude em cada uma das microrregies que podem possuir
uma onda R, neste caso sendo utilizadas 10 amostras como alcance de procura pelos pontos
mximos.
Feito isso, deve-se multiplicar os valores do vetor encontrado por 4, j que se trata da
escala de 2 do sinal original, para se encontrar os locais onde esto as ondas R, porm apenas
isso no trar o valor exato da localizao da onda R, para isto deve-se repetir o passo
realizado para localizao dos pontos na escala 2, procurando pelos pontos de mximo num
alcance de 20 amostras do ponto provvel de onda R.
Sabendo a localizao de cada uma das ondas R, o prximo passo localizar as ondas
Q e S, completando assim o complexo QRS.
4.5 Localizao do complexo QRS
Nesta etapa ser realizada a localizao das ondas Q e S completando assim o
complexo QRS, para isto deve-se saber que a principal caracterstica destas ondas o fato de
estarem logo atrs e afrente a onda R, sendo caracterizadas por serem os pontos mnimos que
antecedem e sucedem esta.
Sabendo disto, possvel criar um algoritmo para localizao destas ondas. Este
algoritmo est expresso nas Figuras 4.8 e 4.9, para a localizao das ondas Q e S
respectivamente.
55
Ler pontos de
localizao da
onda R
Cria vetor com as
15 amostras
anteriores onda
R
Localiza o ponto
mnimo na faixa
criada
Ultima onda
R?
Adiciona ponto
como onda Q
Sim
Fim
Adiciona ponto
como onda Q
Prxima onda R
No
Figura 4.8: Fluxograma do algoritmo de localizao da onda Q
Utilizou uma distncia de at 15 amostras da onda R neste ponto, pois a onda Q
normalmente deve ficar a 40 milissegundos antes da onda R, sendo estas 15 amostras o
equivalente a cerca de 42 mS, o mesmo sendo vlido para onda S, mas neste caso ela
normalmente fica a cerca de 50 milissegundos depois da onda R, utilizando assim 20 amostras
de distncia, o equivalente 55 milissegundos.
56
Ler pontos de
localizao da
onda R
Cria vetor com as
20 amostras
posteriores onda
R
Localiza o ponto
mnimo na faixa
criada
Ultima onda
R?
Adiciona ponto
como onda S
Sim
Fim
Adiciona ponto
como onda S
Prxima onda R
No
Figura 4.9: Fluxograma do algoritmo de localizao da onda S
4.6 Localizao das ondas P e T
De forma anloga ao que foi realizado com as ondas Q e S ser realizado para
localizao das ondas P e T, levando em considerao que as ondas P e T representam picos
mximos de onda anteriores e posteriores s ondas Q e S.
57
Para a onda P, a posio de seu mximo est normalmente entre 50 e 200
milissegundos antes da posio da onda R, para tal foi utilizado o valor de at 70 amostras de
distncia, o equivalente a 200 milissegundos.
Para a onda Q, a posio de seu mximo est normalmente entre 50 e 360
milissegundos aps a posio da onda R, utilizando assim o valor de at 130 amostras, o
equivalente a 360 milissegundos. Nas Figuras 4.10 e 4.11 tem-se os fluxogramas dos
algoritmos de localizao destas ondas.
Ler pontos de
localizao da
onda R
Cria vetor com as 70
amostras anteriores
onda R
Localiza o ponto
mximo na faixa
criada
Ultima onda
R?
Adiciona ponto
como onda P
Sim
Fim
Adiciona ponto
como onda P
Prxima onda R
No
Ler pontos de
localizao da
onda R
Cria vetor com as
130 amostras
posteriores onda R
Localiza o ponto
mximo na faixa
criada
Ultima onda
R?
Adiciona ponto
como onda T
Sim
Fim
Adiciona ponto
como onda T
Prxima onda R
No
Figura 4.10: Fluxogramas dos algoritmos de localizao das ondas P, direita e T, esquerda.
58
4.7 Deteco de arritmias
Nesta ultima etapa realizada a deteco das possveis arritmias que podem ser
diagnosticadas com o uso da anlise computacional, tendo em mente que uma anlise deste
tipo jamais poder substituir o diagnostico de profissional da rea, sendo utilizada apenas
como uma base de auxlio na deteco de arritmias e diagnstico mdico.
Sero tratadas neste caso apenas as arritmias citadas na pgina 44 deste projeto, para
tal utilizou-se o algoritmo ilustrado na Figura 4.11 abaixo.
L vetor de
localizao das
ondas R
Calcula a
frequncia no de
onda R(i)
Frequncia >= 100 ou
=< 60?
i = tamanho
vetor R?
No
i = i+1
No
Guarda
localizao da
arritmia
Fim
Sim
Sim
Figura 4.11: Fluxograma do algoritmo para deteco de arritmias
59
Neste algoritmo foi utilizada apenas a onda R para a determinao da frequncia, pois
somente ela o suficiente para tal, de forma a tornar o cdigo mais leve e de execuo mais
rpida se comparada utilizao do complexo QRS.
Tendo como base a distncia entre dois pontos de onda R se tem o valor da frequncia
cardaca naquele ponto e por intermdio deste que se torna possvel a deteco de grande
parte das cardiopatias mais comuns. Neste projeto foram tratadas a taquicardia e fibrilao
atrial, que tem como caracterstica um valor de frequncia superior a 100bpm e 120bpm.
A bradicardia e o bloqueio sinoatrial que compreendem frequncias abaixo de 60bpm,
sendo um valor para a primeira e esta ultima sem um valor exato, pois caracterizada pela
ausncia de um batimento cardaco, podendo ser aferida por uma frequncia abaixo da metade
da frequncia cardaca mdia deste paciente.
Este captulo abordou o modelo terico utilizado neste projeto mostrando a base
metodolgica utilizada em cada uma das etapas, iniciando pelo tratamento do sinal de
eletrocardiograma, etapa de suma importncia, pois sem a qual pode comprometer o bom
funcionamento de todas as outras. Passando ento para a deteco de todos os pontos de
interesse presentes neste sinal, as ondas P, Q, R, S e T, com os quais se torna possvel a
deteco de possveis arritmias, ultima etapa deste modelo.
60
5 CAPTULO 5 - APLICAO PRTICA DO SISTEMA
PROPOSTO
O algoritmo foi implementado utilizando o ambiente MatLab para execuo do
software resultante deste projeto, utilizando-se sinais reais de eletrocardiograma como
entrada. A base de dados com os sinais de ECG a MITDB-BIH descrita no captulo 3 deste
projeto, a qual foi utilizada tambm para realizar a avaliao prtica deste projeto, por possuir
em seu banco de dados anotaes feitas por cardiologistas experientes.
Tornando assim possvel realizar a avaliao do desempenho do algoritmo criado
quanto ao acerto na deteco das ondas R e consequentemente do complexo QRS.
5.1 Apresentao da rea de Aplicao do Sistema
Este algoritmo foi criado como uma forma de utilizao de modelos matemticos e
computacionais para anlise de sinais biomdicos, os quais por natureza so geralmente sinais
que possuem formas singulares e muito suscetveis a interferncias externas que se
apresentam em formas de rudos no sinal digital.
O estudo e a anlise de sinais biomdicos algo recente no cenrio brasileiro e
mundial, assim como a utilizao da wavelet para tal, principalmente no Brasil onde h
escassez de bibliografias em portugus, pertinentes a este assunto. O estudo dirigido neste
projeto teve como meta a demonstrao da utilizao destes temas aplicados em carter
acadmico.
61
5.2 Descrio da Aplicao do Sistema
Para a implementao do algoritmo desenvolvido neste projeto, utilizou-se o ambiente
MatLab em sua verso 7.12.0.635 (R2011a) juntamente sua toolbox Wavelet pertencente
instalao padro deste software.
Utilizando os sinais de eletrocardiograma da base de dados MITDB-BIH, aplicou-se o
modelo apresentado no captulo anterior, cujo cdigo fonte completo das funes aqui
apresentadas encontra-se no apndice A deste projeto.
O primeiro passo a ser realizado a leitura do sinal de eletrocardiograma. Utilizando a
amostra 103 da base de dados como exemplo, a leitura dever ser realizada a partir de um
arquivo .txt ou .m, arquivo de texto ou de dados do MatLab, onde possui duas variveis, a
primeira com o tempo e a segunda a amplitude das ondas em funo deste tempo. Tendo
assim como retorno um sinal como o ilustrado na Figura 5.1 a seguir.
Figura 5.1: Sinal de ECG da amostra 103
Feita essa leitura, necessrio ento fazer a adequao da linha de base do sinal, etapa
citada anteriormente como retirada da base line drift, para torn-lo o mais uniforme possvel,
como apresentado na Figura 5.2 a seguir. Este o sinal que consideramos aqui como original.
62
Figura 5.2: Sinal 103 aps retirada da baseline drift.
realizada ento a decomposio do sinal original, utilizando a funo wavedec e a
recomposio deste sinal utilizando a funo appcoef ao nvel, ou nveis, que sero utilizados
na anlise. Esta etapa de suma importncia, pois atravs do sinal decomposto que ser
feita a procura pelos pontos de mximo que representam a onda R, j que o sinal decomposto
apresenta um nvel de rudo muito menor que o original, como pode ser observado na Figura
5.3 a seguir.
Figura 5.3: Sinal original acima, sinal decomposto pelo wavedec e sinais dos coeficientes de aproximao das
escalas 2, 2 e 2.
63
Utilizando ento os algoritmos propostos no captulo anterior realiza-se a localizao
dos pontos mximos no sinal decomposto pela DWT da escala 2. Realizada a localizao dos
mximos locais na DWT, realizada ento a localizao dos mximos no sinal original, os
quais so representados pela onda R, como mostrado na Figura 5.4.
Figura 5.4: Localizao das ondas R na amostra 103 do MITDB.
Completada a localizao das ondas R, o prximo passo se d pela localizao
das ondas Q e S, completando assim o complexo QRS, pontos estes extrados pelos mnimos
locais prximos onda R, como mostrado na Figura 5.5 a seguir.
64
Figura 5.5: Localizao do complexo QRS
Utilizando-se ento a posio do complexo QRS como base e os conhecimentos
apresentados neste projeto sobre o eletrocardiograma, faz-se ento a busca pelas ondas P e T
que representam mximos locais antes e aps o complexo QRS, como ilustrado na Figura 5.6.
Figura 5.6: Localizao de todas as ondas do ECG.
65
E por ultimo realizado o clculo das frequncias locais de cada batimento e
averiguao de possveis cardiopatias ou arritmias, assim como mostrado na Figura 5.7.
Figura 5.7: Sinal do ECG com localizao de todas as ondas e indicao das frequncia em cada batimento.
Quando na presena de algum tipo de arritmia ou cardiopatia, esta estar representada
por uma estrela vermelha logo acima do ponto onde apresenta uma frequncia alterada, como
pode ser observado na Figura 5.8.
As definies e representaes de cada cardiopatia no foram adicionadas
representao do sinal at a data desta redao, apenas a representao de que h algum
possvel problema no ponto especificado, podendo assim ser facilmente diagnosticado pelo
profissional com o auxilio da representao da frequncia cardaca neste mesmo local.
66
Figura 5.8: Representao de arritmias, paciente com bradicardia.
A amostra da Figura 5.8 representa um paciente diagnosticado com bradicardia, as
estrelas vermelhas representam pontos onde h um possvel perodo de arritmia, neste caso
pode ser aferido por sua frequncia cardaca abaixo dos 60 batimentos por minuto, algo muito
abaixo dos normais 75 batimentos por minuto, para pessoas adultas, em repouso e saudveis.
5.3 Validao do Sistema
Para realizar a validao deste algoritmo foi criada uma pequena funo para comparar
os valores das posies do complexo QRS encontrados nos arquivos de anotaes da base de
dados MIT-BIH com os dados obtidos com a utilizao do algoritmo desenvolvido neste
projeto. Esta funo est disposta na ltima pgina do apndice A deste projeto.
Para tanto, utilizou-se sinais de 1 minuto de extenso, os quais possuem cada um
21.600 amostras de sinais, com um total de 17 sinais da base de dados, totalizando assim
367.200 amostras a serem analisadas.
67
Abaixo, na tabela 5.1, pode-se observar os resultados obtidos nesta anlise.
Tabela 5.1: Resultados finais para trechos de 1 minuto da base de dados MIT-BIH
Registro Total de Batimentos Falha de deteco Falha(%)
100 74 1 1,35
101 71 0 0,00
103 70 0 0,00
105 82 0 0,00
112 85 0 0,00
113 58 0 0,00
115 63 20 31,75
119 65 11 16,92
121 60 10 16,67
122 87 1 1,15
123 49 2 4,08
124 49 0 0,00
202 52 0 0,00
205 89 0 0,00
209 93 6 6,45
212 90 0 0,00
213 110 0 0,00
TOTAL 1247 51 4,09%
O total de batimentos representa o nmero de complexos QRS, j que cada batimento
cardaco corresponde a ocorrncia de um complexo, as falhas de deteco correspondem ao
nmero de complexos QRS detectados erroneamente se comparado aos dados do banco de
dados MIT-BIH e por fim o percentual de complexos detectados erroneamente.
Para realizar esta comparao foi utilizado uma tolerncia de at trs amostras de
distncia dos pontos obtidos pelo algoritmo aqui desenvolvido, o que equivaleria a at 8
milissegundos de diferena. O uso desta tolerncia deve-se ao fato do algoritmo procurar
pelos pontos mximos exatos no sinal, enquanto as anotaes foram feitas manualmente por
profissionais, o que pode levar a um pequeno desvio no momento de se digitalizar os dados
obtidos manualmente.
68
Neste caso observou-se uma porcentagem de falhas total em torno de 4,09%, mas se
fosse levada em considerao uma tolerncia de at quatro amostras de distncia ao que foi
obtido e ao que est anotado, perceber-se-ia uma queda ainda maior na quantidade de falhas
de deteco, como pode ser observado na tabela 5.2.
Tabela 5.2: : Resultados finais para trechos de 1 minuto da base de dados MIT-BIH, considerando uma
tolerncia de at 4 amostras.
Registro Total de Batimentos Falha de deteco Falha(%)
100 74 0 0,00
101 71 0 0,00
103 70 0 0,00
105 82 0 0,00
112 85 0 0,00
113 58 0 0,00
115 63 0 0,00
119 65 1 1,54
121 60 0 0,00
122 87 0 0,00
123 49 0 0,00
124 49 0 0,00
202 52 0 0,00
205 89 0 0,00
209 93 0 0,00
212 90 0 0,00
213 110 0 0,00
TOTAL 1247 1 0,08%
O uso de 4 amostras de tolerncia representa o equivalente a 11 milissegundos de
diferena entre os resultados encontrados o que seria o equivalente 0,25 milmetros no papel
de registros, ou um quarto da menor parte do papel.
O contrrio ocorreria caso no fosse aceito nenhum tipo de tolerncia, ou seja,
tolerncia igual a zero, encontrando erros percentuais superiores a 50%.
69
5.4 Avaliao Global do Sistema
Este projeto apresentou resultados expressivos em relao sua funo principal, a
deteco dos principais sinais de um trecho de amostra de eletrocardiograma, apresentando
taxas de erros prximos zero por cento, levando em considerao os desvios milimtricos
que pode haver nas anotaes dos pontos realizados manualmente por um cardiologista ao
olho nu e o posterior processo de digitalizao desta informao.
A deteco de arritmias funciona de forma razoavelmente bem, demonstrando com
clareza quais os pontos que podem ser de interesse mdico, porm ainda h a carncia de
informao sobre a arritmia detectada, o que no representa algo de grande importncia para o
sistema, pois um mdico treinado pode facilmente diagnosticar o possvel problema sem o
auxlio de um software para tal.
Este projeto est limitado apenas aos tipos de eletrocardiograma que podem ser
analisados, por terem sido preparados apenas para uma derivao, para a maioria das outras
derivaes ele no funciona corretamente, pela diferena de posio e tamanho das ondas que
compem o sinal.
70
6 CAPTULO 6 - CONCLUSO
6.1 Concluses
O objetivo deste projeto foi criar uma soluo em software o qual seria capaz de
realizar a anlise de um sinal de eletrocardiograma, de forma a ler este sinal, processar este
sinal para uma melhor visualizao e detectar possveis arritmias e cardiopatias.
O software apresentou taxas de acerto de 95% se mostrando eficaz em seu propsito,
sendo capaz de ler e representar corretamente um sinal de ECG, encontrar os principais
pontos de interesse neste sinal e detectar possveis problemas cardacos que possa facilitar um
diagnstico por parte de um mdico.
O uso do ambiente MatLab foi de suma importncia para este projeto, pois
proporcionou uma grande facilidade na questo de trabalhar com o sinal e manipul-lo
matematicamente.
Assim como o uso de wavelet que permitiu o uso de um sinal com menos rudos e com
os pontos caractersticos mais evidenciados, utilizando para isto a Transformada Discreta
Wavelet, tema ainda pouco difundido na literatura brasileira, que tem grande importncia no
cenrio de anlise de sinais biomdicos devido sua principal caracterstica de se poder
trabalhar tanto no domnio do tempo quanto da frequncia, alm de naturalmente ser capaz de
reduzir o rudo do sinal a ser trabalhado mantendo a energia e forma do sinal original.
Este projeto est limitado pela forma de onda praticada na derivao utilizada do ECG,
para utilizao em outras derivaes deve haver ainda uma adequao do cdigo utilizado,
porm sem haver a necessidade de se alterar sua base de funcionamento.
71
6.2 Sugestes para Trabalhos Futuros
Durante o desenvolvimento deste projeto, percebeu-se que poderiam ser agregadas
vrias outras ideias, assim como outras funcionalidades ao mesmo, as sugestes a seguir
poderiam ser incorporadas ao projeto, ou utiliz-lo como base para um novo projeto.
Em primeiro lugar, a criao de sub-rotinas para adaptao do cdigo aos vrios tipos
de derivaes existentes para obter o sinal do eletrocardiograma. Sabendo-se qual a derivao
a ser trabalhada, utilizar-se-ia a base de funcionamento deste cdigo, como exemplo nas
derivaes V
1
a V
3
as amplitudes dos sinais so inversas se comparadas ao atual cdigo, onde
as ondas P, R e T representariam mnimos e as ondas Q e S seriam mximos locais.
Depois, outra opo seria, a utilizao de outra linguagem de programao, como java
por exemplo. Assim como o MatLab possui a toolbox wavelet, a linguagem java tambm
possui uma classe para se trabalhar com transformadas wavelet, tornando mais fcil sua
implementao e fazendo com que o software deixe de depender de um ambiente como o
MatLab para funcionar, podendo assim funcionar em qualquer computador, necessitando
apenas de uma mquina virtual java instalada.
Finalmente, adaptar o algoritmo para uma aplicao on-line. Assim como pode ser
realizada a anlise de modo off-line, o algoritmo aqui apresentado poderia ser adaptado para
funcionar em aplicaes de tempo real, desde que feitas as devidas adaptaes.
72
REFERENCIAS BIBLIOGRAFICAS
ADDISON, P. S. The illustrated wavelet transform handbook: Introductory Theory and
Applications in Science, Engineering, Medicine and Finance. Edinburgh: IoP Publishing,
2002. 353 p.
BRASIL. Doenas Cardiovasculares Acessado no site:
http://www.brasil.gov.br/sobre/saude/saude-do-homem/doencas-cardiovasculares em 27 de
setembro de 2011 s 15:43.
DUBIN, M.D. Dale. 1984 Interpretao Rpida do ECG. 3 ed. Editora de Publicaes
Cientficas Ltda. Barra da Tijuca RJ.
GUYTON, A. C.; HALL, J. E. Tratado de Fisiologia Mdica. 11. Ed. Rio de Janeiro:
Elsevier, 2006.
MALLAT, S. A Wavelet Tour of Signal processing, The Sparse Way. 3. Ed. Burlington:
Elsevier, 2009.
MARTINCOSKI, D. H.; 2004. Sistema para telemetria de eletrocardiograma utilizando
tecnologia bluetooth. Florianpolis. Dissertao Universidade Federal de Santa Catarina.
MERVIN J. GOLDMAN, M.D. 1976. Princpios de Eletrocardiografia Clnica. 8 ed.
Editora Guanabara Koogan S.A. Rio de Janeiro RJ.
MITDB-BIH. MITDB-BIH Arrhytmia Database. Acessado no site:
http://www.physionet.org/physiobank/database/mitdb/ em 20 de agosto de 2011 s 14:02.
73
QUINET B. B.; RIBEIRO H. S.; SANTOS A. F; 2009. Tele homecare: uma reviso
bibliogrfica das experincias e percepes atuais. Belo Horizonte, MG. Dissertao
Universidade Federal de Minas Gerais.
SCANAVACCA, M. I.; BRITO, F. S.; MAIA, I.; HACHUL, D.; LORGA, A.; RASSI JR, A.;
MARTINELLI FILHO, M.; MATEOS, J. C. P.; DVILA, D.; SOSA, E. A.; 2002. Diretrizes
para Avaliao e Tratamento de Pacientes com Arritmias Cardacas. Arquivos
Brasileiros de Cardiologia. So Paulo, SP, v. 79, (s. V).
SOCIEDADE BRASILEIRA DE CARDIOLOGIA, 2003. Diretrizes de Interpretao de
Eletrocardiograma de Repouso. Arquivo Brasileiro de Cardiologia volume 80, suplemento
II.
SOSA, E. A.; TERZI, R.; GRUPPI, C.; BRITO, F. S.; DE PAOLA, A. A. V.; PIMENTA, J.;
LORGA, A. M.; MAIA, I. G.; GIZZI, J. C.; SOLIMENE, M. C.; CAMARGO, S. P. A. B.;
ALBANEZE FILHO, F; 1995. Consenso SOCESP-SBC sobre eletrocardiografia pelo
sistema Holter. Arquivos Brasileiros de Cardiologia.So Paulo, SP, v. 65, p. 447-450.
ZASLAVSKY, Cludio e GUS, Iseu. Idoso Doena Cardaca e Comorbidades. Arq. Bras.
Cardiol. [online]. 2002, vol.79, n.6, pp. 635-639. ISSN 0066-782X
74
7 APNDICE A- Cdigo fonte do algoritmo desenvolvido
Esta primeira funo aqui apresentada como analise(registro) a principal funo
deste projeto, realizando a anlise completa do sinal, retornando como resultado o sinal
plotado na interface do MatLab e a varivel rloc, utilizada na segunda funo apresentada
neste apndice a funo validar(registro) a qual faz a validao de todos os sinais retornando
assim o nmero de acertos e erros em relao s localizaes das ondas R encontradas pelo
primeiro algoritmo e pelo que consta na base de dados MITDB-BIH.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%% Funo de anlise do sinal %%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [rloc] = analise(registro)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%% Realiza a leitura do sinal %%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% l o arquivo com TEMPO, Tenso1, Tenso2, ignorando cabealho do arquivo
arquivo = ['../DB1min/' num2str(registro) 'm.txt']
[t,y(:,1),y(:,2)] = textread(arquivo,'%s %f %f','headerlines',2)
y(:,2)=[] % Ignora segundo canal do ECG
fs = 360; % Frequncia de amostragem, em hertz
period = 0.96; % perodo cardaco, em segundos
N = length(y); % tamanho do sinal
t = (1 : N) / fs; % t em segundos.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%% Aplica a remoo da baseline drift %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
y(:,1) = y(:,1) - smooth(y(:,1),round(fs*period));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% Decomposio e Recomposio do Sinal usando DWT %%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[c,l]=wavedec(y,4,'db4'); % Decomposio at escala 2^4
ca1=appcoef(c,l,'db4',1); % Recomposio nas escalas 2^1
ca2=appcoef(c,l,'db4',2); % 2^2
ca3=appcoef(c,l,'db4',3); % 2^3
ca4=appcoef(c,l,'db4',4); % 2^4
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%% Rotina para localizao das ondas R %%%%%%%%%%%%%%%%
75
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m1=max(ca2)*.50;
P=find(ca2>=m1);
P1=P;
P2=[];
last=P1(1);
P2=[P2 last];
for(i=2:1:length(P1))
if(P1(i)>(last+10))
% Procura por possveis ondas R at 10 amostras de distncia
last=P1(i);
P2=[P2 last];
end
end
P3=P2*4;
Rloc=[];
for( i=1:1:length(P3))
range = [P3(i)-20:P3(i)+20]
% Procura pelas ondas R em um range de +- 20 amostras de distncia
m=max(y(range));
l=find(y(range)==m);
pos=range(l);
Rloc=[Rloc pos];
end
Ramp=y(Rloc);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%% Rotina para localizao das ondas Q e S %%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Y(:,1)=y(:,1);
X=Rloc;
for(j=1:1:length(X))
%% Onda Q
a=Rloc(1,j)-15:Rloc(1,j)-5;
m=min(Y(a));
b=find(Y(a)==m);
b=b(1);
b=a(b);
Qloc(1,j)=b;
Qamp(1,j)=m;
%% Onda S
a=Rloc(1,j)+1:Rloc(1,j)+20;
m=min(Y(a));
b=find(Y(a)==m);
b=b(1);
b=a(b);
Sloc(1,j)=b;
Samp(1,j)=m;
76
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%% Rotina para localizao das ondas P e T %%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Y(:,1)=y(:,1);
X=Rloc;
for(j=1:1:length(X))
%% Onda P
a=(Rloc(1,j)-70):(Rloc(1,j)-15);
m=max(Y(a));
b=find(Y(a)==m);
b=b(1);
b=a(b);
Ploc(1,j)=b;
Pamp(1,j)=m;
%% Onda T
a=Rloc(1,j)+25:Rloc(1,j)+130;
if a > length(Y)-100
break;
end
m=max(Y(a));
b=find(Y(a)==m);
b=b(1);
b=a(b);
Tloc(1,j)=b;
Tamp(1,j)=m;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%% Adequao de amostras para segundos %%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Ptime = Ploc / fs;
Qtime = Qloc / fs;
Rtime = Rloc / fs;
Stime = Sloc / fs;
Ttime = Tloc / fs;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%% Deteco de arritmias %%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X=Rloc;
for ( i=1:1:length(X)-1)
j = i+1;
% Determina a frequncia no ponto i
Freq(i)= 60 / ( Rtime(j) - Rtime(i) );
% A partir da frequncia procura por arritmias
% Freq > 100 pode significar Taquicardia ou fibrilao atrial
% Freq < 60 pode significar Bradicardia ou Bloqueio Sinoatrial
if Freq(i) >= 100 || Freq(i) <= 60
77
if Freq(i) < (mean(Freq)*0.5)
BloqS = Rtime(i)
end
if Freq(i) == 0
Rarritm(j) = 0;
Rarramp(j) = 0;
else
Rarritm(j) = Rtime(i);
Rarramp(j) = Ramp(i)
end
else
Rarritm(j) = 0;
Rarramp(j) = 0;
end
end
% Calcula mdia da frequencia.
FreqMed = mean(Freq)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%% Plotar o sinal analisado %%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%default=input('Pressione 1 se deseja plotar o sinal, caso contrrio
pressione 2:\n');
default=1;
if default == 1
% Plotar o sinal do ECG
subplot(1,1,1); plot(t,y);
title('Input Data','FontWeight','bold'); xlabel('Segundos');
ylabel('Milivolts');
hold on;
% Plotar as marcaes de cada onda
subplot(1,1,1); plot(Rtime,Ramp,'bs');
subplot(1,1,1); plot(Ptime,Pamp,'kd');
subplot(1,1,1); plot(Qtime,Qamp,'md');
subplot(1,1,1); plot(Stime,Samp,'md');
subplot(1,1,1); plot(Ttime,Tamp,'kd');
% Plotar identificao de cada onda e frequncias
for (i=1:length(Rarritm))
if i <= (length(Freq))
text(Rtime(i),Ramp(i),['Freq: ',num2str(Freq(i))],...
'HorizontalAlignment','left',...
'Fontsize',7)
text(Ptime(i),Pamp(i)+0.05,['P'],...
'HorizontalAlignment','left',...
'Fontsize',7)
text(Qtime(i),Qamp(i)-0.05,['Q'],...
'HorizontalAlignment','left',...
'Fontsize',7)
text(Rtime(i),Ramp(i)+0.05,['R'],...
'HorizontalAlignment','left',...
'Fontsize',7)
text(Stime(i),Samp(i)-0.05,['S'],...
'HorizontalAlignment','left',...
'Fontsize',7)
text(Ttime(i),Tamp(i)+0.05,['T'],...
'HorizontalAlignment','left',...
'Fontsize',7)
end
end
% Plotar identificao de arritmias
78
subplot(1,1,1); plot(Rarritm,Rarramp +0.02,'pr');
hold off;
end
rloc = Rloc;
sinal = y;
end
79
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% Funo para validao da anlise %%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [resultados erro] = validar(registro)
% Sinais a serem validados
records=[100 101 103 105 112 113 115 119 121 122 123 124 202 205 209 212
213];
disp('Registro Total Falhado Falhado(%)')
resultados=zeros(length(records),4);
resultados(:,1)=records;
for i=1:length(records)
r=records(i);
rloc=analise(r);
arquivo = ['../DB1min/' num2str(r) 'a.txt'];
[annot,samp,tipo,sub,chan,num] = textread(arquivo,'%s %f %s %f %f
%f','headerlines',2);
amostra=samp';
tot = length(rloc);
tolerancia=3;
for k=1:length(rloc)
t1=rloc(k)-tolerancia;
t2=rloc(k)+tolerancia;
ft(k)=isempty(find(amostra>t1 & amostra<t2, 1));
end
f=length(find(ft==1));
fpc = 100*f/tot;
resultados(i,2)=tot;
resultados(i,3)=f;
resultados(i,4)=fpc;
end
disp('Registro Total Falhado Falhado(%)')
disp(num2str(resultados(i,:)));
erro=100*sum(resultados(:,3))/sum(resultados(:,2));
end