Sistema Holter de Aquisição e Processamento contínuo do
Eletrocardiograma através de telefone celular
Guilherme José Nunes Carvalho
Dissertação para obtenção do Grau de Mestre em
Engenharia Eletrotécnica e de Computadores
Júri
Presidente: Prof. Carlos Filipe Gomes Bispo
Vogal:
Prof. Rodrigo Martins de Matos Ventura
Orientador: Prof. João Miguel Raposo Sanches
Outubro de 2011
Agradecimentos
Voltar a estudar duas décadas após a conclusão de um curso, é algo que se apresenta a
todos nós como um enorme desafio, não só porque iremos abordar e desenvolver um conjunto de
novos conceitos e conhecimentos, para os quais é imprescindível dedicarmos o devido tempo, mas
também pela necessidade de conciliação horária, entre as atividades académicas e o
desenvolvimento diário da nossa vida pessoal e profissional.
Aos meus pais, Guilherme e Sofia Carvalho, pela força e apoio que incessantemente me
dedicaram durante esta nova fase da minha vida. Este momento também vos pertence.
À minha namorada, Andréa Silva, pelo amor, força e motivação que sempre me
transmitiu, em todos os momentos deste meu projeto.
Ao professor João Sanches, pela sua dedicação e forma contagiante com que nos
envolve no dia-a-dia, que nos desperta e estimula para a conquista de novas ideias.
Aos meus colegas da Mobile Team e a todos os meus amigos, pela curiosidade,
interesse e força que me transmitiram.
Obrigado!
I
Resumo
Atualmente existe no mercado uma enorme variedade de equipamentos de
monitorização e análise de sinais fisiológicos. Em todos estes equipamentos, são semelhantes os
princípios básicos de aquisição dos sinais, contudo, a forma como os sinais são analisados,
processados e a informação disponibilizada, varia muito de equipamento para equipamento, abrindo
assim oportunidades de introdução de novos produtos no mercado.
Associando a estas oportunidades, a difusão generalizada de telemóveis com elevada
capacidade de armazenamento e de processamento, formulou-se o objetivo da presente dissertação,
desenvolver e implementar um sistema de aquisição e processamento contínuo do Eletrocardiograma
(Holter) para telemóvel.
Neste trabalho, foram desenvolvidas duas aplicações. A primeira aplicação (mHolter),
corre num telemóvel Nokia com o sistema operativo Symbian S60. Efetua a aquisição e
processamento em tempo real do eletrocardiograma, identificando os artefactos e detetando
possíveis cenários de arritmias, com recurso a um filtro de Kalman.
A segunda aplicação (oHolter) permite visualizar o eletrocardiograma num computador
pessoal, disponibilizando ao utilizador um conjunto estendido de funcionalidades de procura e de
visualização dos registos efetuados pelo mHolter. A linguagem de programação utilizada no
desenvolvimento de todo o projeto foi o Python (versão 1.9.7 para S60 e 2.5.4 para Windows).
Palavras-chave: ECG, Eletrocardiograma, Holter, Telemóvel, Arritmia, Kalman, filtragem
II
Abstract
There is currently available in the market, a huge variety of equipment for the monitoring
and analysis of physiological signals. In all these devices, the basic principles of signal acquisition are
similar, however, the way signals are analyzed, processed and information is provided, varies greatly
for each equipment, thus opening opportunities for introducing new products in the market.
Associating to these opportunities, the widespread diffusion of mobile phones with high
storage and processing capacity, it was formulated the goal of this thesis, develop and implement a
continuous ECG acquisition Holter system for mobile phones.
In this project, two applications were developed. The first application (mHolter) runs on a
Nokia mobile phone with Symbian S60. The application performs the acquisition and real-time
processing of the electrocardiogram, identifying artifacts and detecting possible scenarios of
arrhythmias, by recurring to a Kalman filter.
The second application (oHolter), displays the ECG on a personal computer, providing
the user an extended set of searching and viewing functionalities, based in the records provided by
the mHolter application. Python programming language was used for the full project development
(version 1.9.7 for S60 and 2.5.4 for Windows).
Keywords: ECG, Electrocardiogram, Holter, Mobile phone, Arrhythmia, Kalman, filtering
III
Índice
Agradecimentos ........................................................................................................ I
Resumo ..................................................................................................................... II
Abstract ................................................................................................................... III
Índice ........................................................................................................................ 1
Índice de Figuras...................................................................................................... 3
Índice de Tabelas ..................................................................................................... 5
Abreviaturas ............................................................................................................. 6
1
Introdução .......................................................................................................... 7
1.1 Motivação e Objetivos.......................................................................................... 8
1.2 Estrutura da Dissertação ..................................................................................... 8
2
Fisiologia elétrica do Sistema Cardíaco......................................................... 10
2.1 O Coração ......................................................................................................... 10
2.2 O Eletrocardiograma (ECG) ............................................................................... 11
2.3 O Dispositivo Holter ........................................................................................... 12
3
Arquitetura e Descrição do Sistema ............................................................... 14
3.1 Arquitetura Geral do Sistema ............................................................................. 14
3.2 Cinta Cardíaca ................................................................................................... 15
3.3 Módulo de Aquisição ......................................................................................... 15
3.4 Interface de Programação (API) ........................................................................ 16
3.4.1 Estrutura Base das Mensagens ..................................................................... 16
3.4.2 Mensagens de streaming (periódicas) ........................................................... 17
3.4.3 Dimensionamento do buffer de receção (ECG) ............................................. 19
3.5 Telemóvel (plataforma base da aplicação mHolter) ........................................... 20
1
3.6 Computador Pessoal (plataforma base da aplicação oHolter) ........................... 21
4
Aplicações e Algoritmos de Processamento ................................................. 22
4.1 Aplicação mHolter .............................................................................................. 22
4.2 Interface Bluetooth ............................................................................................. 23
4.3 Interface com o Utilizador .................................................................................. 25
4.4 Gravação da Sessão ......................................................................................... 26
4.5 Deteção de Picos R do Complexo QRS ............................................................. 28
4.6 Deteção e Processamento de Artefactos ........................................................... 29
4.7 Interpolação do sinal ECG ................................................................................. 30
4.8 Filtro de Kalman................................................................................................. 32
4.9 Deteção de Arritmias ......................................................................................... 35
4.10
Geração de Alarmes ...................................................................................... 36
4.11
Aplicação oHolter .......................................................................................... 37
5
Apresentação e Análise dos Resultados ....................................................... 40
5.1 Aquisição e gravação do Eletrocardiograma ...................................................... 40
5.2 Deteção de Picos R do Complexo QRS ............................................................. 41
5.3 Deteção e Processamento de Artefactos ........................................................... 42
5.4 Interpolação do sinal ECG ................................................................................. 45
5.5 Filtro de Kalman................................................................................................. 46
5.6 Deteção de arritmias .......................................................................................... 52
6
Conclusões ...................................................................................................... 56
7
Referências ...................................................................................................... 57
2
Índice de Figuras
Figura 1 - Distribuição das maiores causas de morte (fonte: Global Atlas on
cardiovascular disease prevention and control) ................................................. 7
Figura 2 - O coração (fonte: Manual MERCK - Biblioteca Médica online) .............................. 10
Figura 3 - Sístole e diástole do coração (fonte: Manual MERCK - Biblioteca Médica
online)................................................................................................................ 11
Figura 4 - Ondas que compõem o eletrocardiograma ............................................................. 12
Figura 5 - Exemplo de aplicação do Holter (fonte: Manual MERCK - Biblioteca
Médica online) ................................................................................................... 13
Figura 6 - Arquitetura geral da solução.................................................................................... 14
Figura 7 - Cinta cardíaca Zephyr Smart Fabric ....................................................................... 15
Figura 8 - Módulo de aquisição Zephyr BioHarness BT .......................................................... 15
Figura 9 - Conjunto módulo de aquisição e cinta cardíaca ..................................................... 16
Figura 10 - Estrutura de dados base das mensagens ............................................................. 17
Figura 11 - Exemplo: streaming do tipo “General Data”. ......................................................... 18
Figura 12 - Estrutura do pacote de streaming "ECG Waveform" ............................................ 19
Figura 13 - Codificação de cada amostra ECG (a 10 bits cada) ............................................. 19
Figura 14 - Diagrama de blocos da aplicação mHolter ........................................................... 23
Figura 15 - Pedido de pacotes periódicos (ECG Waveform) .................................................. 24
Figura 16 - Interface de utilização da aplicação mHolter ........................................................ 25
Figura 17 - Diagrama de blocos do mHolter e identificação dos sinais relevantes ................ 27
Figura 18 - Formato de gravação do mHolter .......................................................................... 27
Figura 19 - Relação entre ritmos cardíacos e o tipo de atividade (fonte: primefit.com
- Measuring Your Maximum Heart Rate).......................................................... 29
Figura 20 - Exemplo de sinal ECG a ser interpolado .............................................................. 31
Figura 21 - Resultado da interpolação efetuada sobre o sinal ECG ....................................... 32
Figura 22 - Etapas da filtragem de Kalman ............................................................................. 33
Figura 23 - Algoritmo de aferição da estabilidade do sinal RRV ............................................. 36
Figura 24 - Imagem da aplicação oHolter ................................................................................ 38
Figura 25 - Exemplos de sinal ECG recolhidos pelo módulo Zephyr...................................... 40
Figura 26 - Sinal ECG e saída do Detetor de Picos R ............................................................ 41
Figura 27 - Deteção de artefacto simples (por provocação de tosse) .................................... 42
Figura 28 - Deteção de artefacto provocado por tosse, com reavaliação do sinal BIN .......... 43
Figura 29 - Deteção de artefacto provocado pelo movimento da cinta cardíaca ................... 44
Figura 30 - Deteção de artefacto devido a movimento continuado da cinta cardíaca ............ 45
Figura 31- Resultado da interpolação do ECG: sinal RRV ..................................................... 46
3
Figura 32 - Simulação 1 (filtro de Kalman): Q=1E-5; R=1E-3 ................................................. 47
Figura 33 - Simulação 2 (filtro de Kalman): Q=1E-4; R=1E-3 ................................................. 48
Figura 34 - Simulação 3 (filtro de Kalman): Q=1E-3; R=1E-3 ................................................. 48
Figura 35 - Simulação 4 (filtro de Kalman): Q=1E-4; R=1E-5 ................................................. 49
Figura 36 - Simulação 5 (filtro de Kalman): Q=1E-4; R=1E-4 ................................................. 49
Figura 37 - Simulação 6 (filtro de Kalman): Q=1E-4; R=1E-2 ................................................. 50
Figura 38 - Ritmo cardíaco após filtragem (cenário moderado com poucos
artefactos) ......................................................................................................... 51
Figura 39 - Ritmo cardíaco após filtragem (cenário exigente e repleto de artefactos) ........... 52
Figura 40 - Deteção de arritmia por comparação dos ritmos RRV e KLM .............................. 54
Figura 41 - Deteção de arritmia irregular por comparação dos ritmos RRV e KLM ............... 55
4
Índice de Tabelas
Tabela 1 - Pacotes de streaming disponibilizados pelo módulo de aquisição ........................ 18
Tabela 2 - Lista de métodos (pedidos) disponibilizados pela classe Zephyr .......................... 24
Tabela 3 - Parâmetros registados no ficheiro de configuração ............................................... 26
Tabela 4 - Medidas para determinação das necessidades de gravação ................................ 28
Tabela 5 - Métodos disponibilizados pela classe Kalman ....................................................... 35
Tabela 6 - Lista de alarmes registados pelo mHolter .............................................................. 37
Tabela 7 - Parâmetros a simular para o filtro de Kalman ........................................................ 47
5
Abreviaturas
ALM - Sinal de alarme (artefacto ou arritmia)
API - Application Programming Interface
BIN - Sinal binário resultante do detetor de picos R
BPM - Batimentos por minuto
BT - Bluetooth
CSV - Comma-separated Values
CRC - Cyclic Redundancy Check
CVD - Cardiovascular Diseases
ECG - Sinal Eletrocardiograma
GUI - Graphical User Interface
IR - Infrared
KLM - Sinal Variação do Ritmo R-R após filtragem de Kalman
mHolter - Mobile Holter
oHolter - Offline Holter
OMS - Organização Mundial da Saúde
PC - Personal Computer
RFCOMM - Radio Frequency Communication (protocol)
RRV - Sinal Variação do ritmo R-R
SD-CARD - Secure Digital (SD) Card
SDK - Software Development Kit
SMS - Short Message Service
USB - Universal Serial Bus
6
1
Introdução
Num estudo recentemente publicado pela Organização Mundial da Saúde, revela-se que
as doenças cardiovasculares são a principal causa de morte em todo o mundo [1].
De acordo com o estudo, estima-se que 17,3 milhões de pessoas morreram em 2008,
devido a doenças cardiovasculares, o que representa 31% de todas as mortes na população mundial
(ver Figura 1), contribuindo para este cenário, as doenças coronárias e cerebrovasculares cerebrais,
com 7,3 milhões e 6,2 milhões respetivamente.
Figura 1 - Distribuição das maiores causas de morte (fonte: Global Atlas on
cardiovascular disease prevention and control)
Um dos aspetos mais pragmáticos do estudo é o fato de mais de 3 milhões das mortes
devidas a doenças cardiovasculares ocorrerem antes dos 60 anos de idade, e puderem ter sido
prevenidas, desde que atempadamente diagnosticadas e acompanhadas.
Hoje em dia existe uma grande variedade de exames e procedimentos para facilitar e
tornar mais preciso o diagnóstico de doenças cardiovasculares. Estes incluem registos da atividade
elétrica do coração (eletrocardiograma), radiografias, ecocardiogramas, ressonância magnética, entre
outros.
O eletrocardiograma é contudo, o método rápido, simples e indolor, podendo ser
realizado em vários cenários, nomeadamente em repouso, com prova de esforço ou em regime
ambulatório contínuo, sendo precisamente este último cenário, o objeto da presente dissertação.
7
1.1 Motivação e Objetivos
As soluções de monitorização e análise disponíveis hoje em dia no mercado, apresentam
princípios de funcionamento muito semelhantes, no que respeita a aquisição dos sinais fisiológicos. A
forma como estes sinais são processados e a informação é apresentada ao utilizador torna-se
basicamente
no
principal
fator
de
diferenciação,
abrindo
naturalmente
espaço
para
o
desenvolvimento de produtos novos e inovadores.
Associando-se as estas oportunidades, a difusão generalizada dos telemóveis de
elevada capacidade de processamento [2], o desenvolvimento e implementação de sistemas de
aquisição, processamento e transmissão de dados biomédicos, passa a ter uma potencial nova
plataforma, leve, portátil, com boa capacidade de armazenamento, apresentação gráfica, e acima de
tudo, de baixo custo: o telemóvel.
O objetivo da presente dissertação é desenvolver e implementar um sistema de
aquisição e processamento contínuo do Eletrocardiograma através de telefone celular, doravante
designado de mHolter (Mobile Holter).
A função do mHolter é monitorizar continuamente a atividade elétrica cardíaca do
paciente por períodos extensos, que podem ir de 24 a 48 horas. Durante o período de observação, o
mHolter regista e processa o eletrocardiograma recolhido através de uma cinta cardíaca, separando
artefactos e ocasionais arritmias cardíacas, que seriam difíceis de identificar num período de tempo
curto, como é o caso dos exames de eletrocardiografia (ECG).
Complementarmente, para maior comodidade e facilidade de utilização, foi desenvolvida
uma aplicação de visualização do traçado do ECG - oHolter (Offline Holter), disponibilizando um
conjunto estendido de funcionalidades de procura e visualização dos registos efetuados pelo mHolter.
1.2 Estrutura da Dissertação
A presente dissertação encontra-se dividida em 6 capítulos. No Capítulo 1, é introduzido
o tema da dissertação, motivação e objetivos a atingir.
No Capítulo 2, é descrita a fisiologia elétrica do sistema cardíaco e sinais fisiológicos
relevantes no contexto da dissertação.
No Capítulo 3, é apresentada a arquitetura do sistema e respetivos componentes, que
uma vez integrados, compõem a solução.
No Capítulo 4, são descritas as aplicações e algoritmos desenvolvidos, sendo o Capítulo
5 dedicado à apresentação dos resultados experimentais.
8
Finalmente, no capítulo 6, são apresentadas as conclusões do trabalho realizado e
algumas linhas orientadoras de possíveis evoluções do mesmo.
9
2
Fisiologia elétrica do Sistema Cardíaco
2.1 O Coração
O coração é um órgão muscular situado no meio do tórax, e que possui, tanto do lado
direito como do lado esquerdo, uma cavidade superior (aurícula), que recebe o sangue, e uma
cavidade inferior (ventrículo), que o expulsa (ver Figura 2). Para garantir que o sangue corra num só
sentido, os ventrículos dispõem de uma válvula de entrada e outra de saída.
Figura 2 - O coração (fonte: Manual MERCK - Biblioteca Médica online)
A função primária do coração é proporcionar o oxigénio a todo o organismo e, ao mesmo
tempo, libertá-lo dos produtos de eliminação (anidrido carbónico). Esta função pressupõe recolher o
sangue do organismo, pobre em oxigénio, e bombeá-lo para os pulmões, onde é oxigenado e o
anidrido carbónico libertado, sendo depois este sangue, agora rico em oxigénio, enviado para todos
os tecidos do organismo [3].
Em cada batimento, quando as cavidades do coração se relaxam, estas enchem-se de
sangue (período chamado de diástole) e, quando se contraem, expelem-no (período chamado de
sístole). A Figura 3 ilustra este processo. As duas aurículas relaxam-se e contraem-se
simultaneamente, assim como os ventrículos.
10
Figura 3 - Sístole e diástole do coração (fonte: Manual MERCK - Biblioteca
Médica online)
A circulação sanguínea no coração faz-se da seguinte forma. Primeiro, o sangue pobre
em oxigénio e sobrecarregado de anidrido carbónico proveniente de todo o organismo chega à
aurícula direita, através das duas maiores veias (as veias cavas superior e inferior). Quando a
aurícula direita se enche, impulsiona o sangue para o ventrículo direito; quando este se enche,
bombeia o sangue através da válvula pulmonar para as artérias pulmonares, com destino aos
pulmões. Nos pulmões, o sangue flui através de pequenos vasos capilares que rodeiam os sacos de
ar, absorvendo o oxigénio e libertando anidrido carbónico, que é imediatamente exalado. Já rico em
oxigénio, o sangue circula pelas veias pulmonares até à aurícula esquerda.
Este circuito entre o lado direito do coração, os pulmões e a aurícula esquerda
denomina-se de «circulação pulmonar». Quando a aurícula esquerda se enche, empurra o sangue
rico em oxigénio para o interior do ventrículo esquerdo; quando este, por sua vez se enche,
impulsiona o sangue através da válvula aórtica para a aorta, a maior artéria do corpo. O sangue rico
em oxigénio abastece então todo o organismo.
2.2 O Eletrocardiograma (ECG)
O eletrocardiograma é um método rápido, simples e indolor, no qual se captam,
amplificam-se e registam-se os impulsos elétricos do coração. Estes impulsos representam a corrente
elétrica que circula através do coração durante uma contração. A onda que caracteriza o ECG é
dividida em várias partes, designadas alfabeticamente pelas letras P a U (ver Figura 4).
11
Figura 4 - Ondas que compõem o eletrocardiograma
Como se pode observar na figura, cada batimento cardíaco começa com um impulso do
pacemaker fisiológico principal do coração (nódulo sino-auricular). Este impulso ativa primeiro as
cavidades superiores do coração (aurículas). A onda P representa esta ativação das aurículas.
Depois, a corrente elétrica flui para baixo, na direção das câmaras inferiores do coração
(ventrículos). O complexo QRS representa a ativação dos ventrículos. A onda T representa a onda de
recuperação, enquanto a corrente elétrica difunde-se para trás sobre os ventrículos na direção oposta.
O sinal de ECG recolhido à superfície do corpo humano é de reduzida amplitude,
podendo ocasionalmente ser corrompido com ruído, gerado quer pelo deslocamento dos elétrodos,
quer pela atividade muscular junto dos pontos de aquisição.
2.3 O Dispositivo Holter
A deteção de problemas cardíacos, que geralmente acontecem de forma breve ou
imprevisível, requer o uso de um registador portátil contínuo do ECG. O paciente transporta um
pequeno aparelho, alimentado a bateria (monitor Holter), que adquire e grava permanentemente o
sinal ECG durante um período que pode ir de 24 a 48 horas. A Figura 5 ilustra a colocação e
aplicação do Holter e respetivos elétrodos num paciente.
12
Figura 5 - Exemplo de aplicação do Holter (fonte: Manual MERCK - Biblioteca
Médica online)
Os resultados da gravação são processados posteriormente, através de um computador
que analisa a velocidade e frequências cardíacas, procurando alterações na atividade elétrica que
possam indiciar problemas cardíacos.
13
3
Arquitetura e Descrição do Sistema
3.1 Arquitetura Geral do Sistema
A Figura 6 mostra a arquitetura geral da solução, descriminando os vários elementos que
a compõe, assim como as tecnologias de comunicação envolvidas:
Figura 6 - Arquitetura geral da solução
Da esquerda para a direita, encontramos o conjunto cinta e módulo de aquisição. Para
desempenhar as funções de aquisição e transmissão por bluetooth do eletrocardiograma, foi
selecionado o produto BioHarness™ BT do fabricante Zephyr [4].
De seguida, o telemóvel Nokia, modelo 5250 [5]. O telemóvel comunica com a cinta
cardíaca através de uma ligação por bluetooth, correndo em cima deste suporte um protocolo
específico do fabricante, designado de BioHarness Bluetooth API. Após o primeiro emparelhamento,
a informação de configuração fica memorizada em ambos os dispositivos, tornando-se depois muito
simples a sua utilização por parte da camada superior, a aplicação mHolter.
Finalmente, no lado direito, a aplicação oHolter processa os ficheiros de registo do
eletrocardiograma, criados pela aplicação mHolter, disponibilizando ao utilizador uma interface gráfica
de utilização, com funções de avanço, recuo, procura e visualização do histórico de cada sessão de
captura. O segundo telemóvel receberá informação de alarmes que eventualmente ocorram durante
as sessões de captura e processamento do ECG.
14
3.2 Cinta Cardíaca
A cinta cardíaca Zephyr Smart Fabric (ver Figura 7), incorpora sensores para aquisição
dos sinais ECG e ritmo respiratório.
Figura 7 - Cinta cardíaca Zephyr Smart Fabric
3.3 Módulo de Aquisição
O módulo de aquisição do eletrocardiograma, BioHarness BT do fabricante Zephyr (ver
Figura 8), foi selecionado por apresentar a interface bluetooth, indispensável à comunicação com o
telemóvel e um kit de desenvolvimento (SDK) com uma API de programação extremamente flexível.
Figura 8 - Módulo de aquisição Zephyr BioHarness BT
15
Trata-se de um equipamento leve e compacto, servindo o propósito a que se destina, ou
seja, a utilização intensiva, por extensos períodos, que podem ir de 24 a 48 horas, disponibilizando
um vasto conjunto de funcionalidades:

Conectividade por bluetooth e USB

Saídas configuráveis, consoante a necessidade de informação

Ritmo cardíaco: 25 – 240 BPM (±1 BPM)

Ritmo respiratório: 3 – 70 BPM (±1BPM)

Sensor IR de temperatura da pele: 10 – 60 °C (±0.1°C)

Posição / postura: ± 180°

Sensor de aceleração a 3 eixos

Registo do ECG a 250Hz (250 amostras por segundo)

Capacidade de armazenamento de 570 horas
Na Figura 9, podemos ver o módulo instalado na cinta cardíaca Zephyr Bioharness Strap
Smart Fabric:
Figura 9 - Conjunto módulo de aquisição e cinta cardíaca
Após o arranque (botão power), o módulo de aquisição pode ser programado de três
formas: apenas registo, registo e transmissão ou apenas transmissão. Neste projeto utiliza-se apenas
o modo de transmissão. A gravação do ECG é efetuada na memória de armazenamento do telemóvel
(interna ou SD-CARD).
3.4 Interface de Programação (API)
3.4.1 Estrutura Base das Mensagens
A comunicação com o módulo de aquisição é ponto-a-ponto e numa base de
pedido/resposta. Quando é enviado um pedido, o módulo responde basicamente numa de duas
formas: se o pedido for considerado válido, a mensagem de resposta será na forma de uma
16
confirmação – ACK (acknowledge), com os dados solicitados. Se o pedido for considerado inválido, a
mensagem de resposta será simplesmente NAK (not acknowledge). Existe uma exceção a esta regra:
trata-se dos casos em que são transferidas mensagens periódicas (streaming). Nestes casos, o
módulo de aquisição não precisa responder com as mensagens ACK / NAK.
A Figura 10 ilustra a forma como se realiza a comunicação entre dispositivos (módulo de
aquisição e telemóvel), bem como a estrutura de dados subjacente.
Figura 10 - Estrutura de dados base das mensagens
Os campos STX e MsgID são fixos e representam o início e tipo de mensagem. O campo
DLC é calculado consoante o número de bytes a transferir (Data Payload), sendo obrigatório de
seguida o cálculo e inserção do CRC sobre a informação útil a transferir. Finalmente, o campo ETX
termina a mensagem. No caso das mensagens de resposta, este campo não é usado, sendo o
mesmo substituído pela confirmação (ACK ou NAK).
3.4.2 Mensagens de streaming (periódicas)
A receção do sinal ECG vai incidir maioritariamente na utilização de mensagens
periódicas (streaming), as quais resultam de um pedido por parte do telemóvel, para o qual o módulo
de aquisição inicia um processo de envio periódico de pacotes com a informação solicitada. Este
processo é interrompido apenas quando o telemóvel solicita o cancelamento do envio.
A Tabela 1 ilustra os vários tipos de mensagens periódicas suportadas pelo módulo de
aquisição. Destes tipos, o foco do trabalho foi o pacote de streaming (ECG Waveform), através do
qual são recebidas as amostras do sinal ECG.
17
Tabela 1 - Pacotes de streaming disponibilizados pelo módulo de aquisição
A Figura 11 mostra um exemplo do protocolo de comunicação, no caso de um pedido de
streaming do tipo “General Data”. O módulo de aquisição suporta vários pedidos de streaming, sendo
possível programar-se o envio simultâneo de todos pacotes de streaming anteriormente mencionados.
Link bluetooth
Aplicação
mHolter
Módulo de aquisição e
Cinta cardiaca Zephyr
Figura 11 - Exemplo: streaming do tipo “General Data”.
No caso do pacote de streaming "ECG Waveform", recebido e processado pela
aplicação mHolter, este encontra-se estruturado conforme se ilustra na Figura 12:
18
Figura 12 - Estrutura do pacote de streaming "ECG Waveform"
Sendo que as 63 amostras nele contidas são codificadas a 10 bits cada, de acordo com
o formato da Figura 13:
Figura 13 - Codificação de cada amostra ECG (a 10 bits cada)
3.4.3 Dimensionamento do buffer de receção (ECG)
Dado que o pacote de streaming “ECG Waveform”, através do qual são recebidas as
amostras do sinal ECG, é recebido no telemóvel a cada 252 [ms], temos:
[
]
(1)
Sendo o número de amostras por pacote “ECG Waveform” igual a 63, temos:
[
]
(2)
Então, o número de amostras por segundo a ser processado no telemóvel será:
19
[
]
(3)
Sendo a duração de uma amostra igual a 4 milissegundos:
[ ]
[
]
(4)
Foi no entanto verificado em testes isolados de receção dos pacotes de streaming ECG
que, apesar de se verificar a periodicidade no envio dos mesmos, muitas vezes não são totalmente
preenchidos com o máximo de amostras (63 amostras), o que resulta em variações do débito de
amostras recebidas no telemóvel.
Uma vez que se pretende mostrar no ecrã do telemóvel, o ECG em tempo real e com o
mínimo de variações possíveis em termos da sua velocidade de arrastamento no ecrã, foi necessário
criar um mecanismo que sustente estas variações de débito. Este mecanismo consiste no aumento
ou diminuição da velocidade de apresentação dos sinais no display do telemóvel, na proporção da
dimensão do buffer de receção.
3.5 Telemóvel (plataforma base da aplicação mHolter)
Para correr a aplicação mHolter, foi selecionado um telemóvel Nokia, modelo 5250, com
o sistema operativo Symbian S60. Este modelo, além de cumprir com os requisitos mínimos de
desenvolvimento (sistema operativo Symbian S60), apresenta-se também no mercado por um valor
muito competitivo, na ordem das dezenas de euros, cumprindo portanto com as premissas
anteriormente estabelecidas de baixo custo, bom desempenho e capacidade de armazenamento,
apresentando neste caso um processador ARM II a 434 MHz e 51Mb de memória interna.
A linguagem de programação utilizada foi o Python (versão 1.9.7 para S60), por se tratar
de uma linguagem de programação de alto nível, estruturada e orientada por objetos, apresentando
as seguintes vantagens comparativamente a outras linguagens:

Qualidade do código: A sintaxe do Python facilita e encoraja a legibilidade do
código, o que o torna mais fácil de manter e reutilizar.

Produtividade: é mais rápido desenvolver um mesmo código em Python do que
noutras linguagens, como o C, C++ ou Java.

O código é mais compacto, requer menos linhas, e não necessita da declaração
prévia das variáveis e respetivos tipos.

Não requer um ciclo de compilação, podendo o programa ser executado
imediatamente.
20

Portabilidade: possibilidade do programa correr, sem qualquer alteração, em
várias plataformas como o Linux e o Windows.

Disponibilidade de uma vasta biblioteca de funções
3.6 Computador Pessoal (plataforma base da aplicação oHolter)
Tal como no caso do mHolter, a aplicação oHolter foi igualmente desenvolvida em
Python (versão 2.5.4 para Windows). No que respeita a interface gráfica com o utilizador (GUI), foi
selecionado o toolkit wxPython (wrapper da biblioteca wxWidgets), que disponibiliza uma interface
rica de elementos gráficos, garantindo em simultâneo a portabilidade entre plataformas (Windows,
Linux, Mac OS, entre outras).
21
4
Aplicações e Algoritmos de Processamento
4.1 Aplicação mHolter
A aplicação mHolter efetua a aquisição e processamento em tempo real do
eletrocardiograma, sua visualização e respetiva gravação, identificando artefactos e detetando
possíveis arritmias no ritmo cardíaco do paciente. A deteção de arritmias é conseguida por
interpolação do sinal ECG, seguida de filtragem, através de um filtro de Kalman, e depois por
comparação entre o sinal interpolado e o sinal filtrado.
As principais funcionalidades do mHolter são:

Interface com o utilizador e com o módulo de aquisição do ECG

Adquirir, processar e gravar localmente (no telemóvel) o sinal ECG

Produzir e gravar localmente os sinais de variação do ritmo R-R (sinal RRV),
detetor de picos R (sinal BIN), resultado da filtragem de Kalman: sinal KLM (RRV
filtrado)

Mostrar em tempo real e no modo browse (a partir de uma sessão gravada), o
sinal ECG e sinais associados

Deteção, registo e identificação visual de artefactos e arritmias detetadas

Envio programado de alarmes por SMS

Registo das sessões gravadas, com possibilidade de browse

Visualização da evolução do ritmo R-R durante toda da sessão de aquisição:
sinais RRV e KLM (RRV após a filtragem de Kalman)

Gravação dos sinais e alarmes em ficheiro no formato CSV

Registo permanente dos principais parâmetros da aplicação
Apresenta-se de seguida, na Figura 14, o diagrama de blocos da aplicação, bem como a
relação entre os vários módulos que a compõem.
22
Figura 14 - Diagrama de blocos da aplicação mHolter
4.2 Interface Bluetooth
As funcionalidades associadas à interface bluetooth encontram-se definidas na classe
Zephyr. Para que se possa iniciar a comunicação entre o módulo de aquisição e o telemóvel (pedidos
/ respostas ou streaming de dados), é necessário em primeiro lugar estabelecermos uma porta de
comunicação série (RFCOMM) entre os dois dispositivos. Para o efeito, o Python disponibiliza na sua
livraria os stream sockets, que implementam esta ligação.
O endereço do dispositivo de aquisição Zephyr é atualizado pelo método discover(),
sempre que for associado um novo dispositivo, sendo o estabelecimento da ligação efetuado através
do método connect(). Uma vez estabelecida a ligação, o módulo de aquisição fica pronto a receber
comandos, sendo o utilizador informado deste facto pelo círculo de cor verde no canto superior direito
do display, que de outra forma se apresentará de cor amarela, significando neste caso que ainda está
a efetuar a ligação.
A Tabela 2 lista os principais métodos de acesso e controlo do módulo de aquisição,
disponibilizados pela classe Zephyr à aplicação mHolter:
23
Método
Descrição
get_rtc_time()
Devolve um tuple com a hora, minutos e segundos
get_rtc_date()
Devolve um tuple com o dia, mês e ano
set_rtc_date_time()
Acerta a data e hora do módulo de aquisição
set_packet_state()
Activa ou desativa o envio de pacotes periódicos (streaming)
set_BT_config()
Anula o controlo de timeout e lifesign por parte do módulo de aquisição
get_BT_config()
Obtêm o estado atual do timeout e lifesign
get_rt_data()
Devolve o buffer de amostras recolhidas pelo módulo de aquisição
reboot_request()
Reboot do módulo de aquisição
Tabela 2 - Lista de métodos (pedidos) disponibilizados pela classe Zephyr
Com a ativação do envio de pacotes periódicos, o método set_packet_state() inicia um
thread, com vista ao tratamento independente (em paralelo) do stream de pacotes que irá passar a
receber por parte do módulo de aquisição. A utilização de threading permite evitar situações de
bloqueio, quando por exemplo não existem dados no socket.
A Figura 15 ilustra um pedido de pacotes periódicos (ECG Waveform) por parte da
aplicação mHolter e as ações que este pedido desencadeia do lado do módulo Zephyr. Podemos ver
igualmente o lançamento da thread update(), responsável pela receção dos pacotes periódicos.
Zephyr
mHolter
Main()
set_packet_state()
update()
Thread para
receção do ECG
recvf()
RFCOMM
socket
get_rt_data()
Buffer de
receção do ECG
(Zephyr)
Buffer de
receção do ECG
(mHolter)
Figura 15 - Pedido de pacotes periódicos (ECG Waveform)
24
4.3 Interface com o Utilizador
A aplicação mHolter disponibiliza uma interface do tipo touch screen, para a interação do
utilizador com as várias funcionalidades disponibilizadas. A Figura 16 mostra a hierarquia desta
interface, resumindo as funções associadas a cada opção.
Abrir Registo
Abertura de ficheiro ECG para
visualização (browse) no display do
telemóvel
Registos
Apagar Registo
Real Time: ON/OFF
Visualizar
Menu Principal
Configurar
Inicia / Pára a
aquisição do ECG
Inicio / fim da sessão. O utilizador
define o nome do ficheiro ECG a
gravar
ECG: Sim/Não
Visualização em tempo real do sinal
ECG no display do telemóvel
RRV: Sim/Não
Visualização em tempo real do sinal
RRV no display do telemóvel
RRV
(Kalman):Sim/Não
Visualização em tempo real do sinal
RRV , filtrado pelo filtro de Kalman
BIN: Sim/Não
Opção de visualização do sinal BIN,
resultado do detector de picos
Linha de Threshold:
Sim/Não
Visualização da linha de threshold no
display do telemóvel
Offsets/Escalas
Offset e escala dos sinais ECG, RRV,
RRV (Kalman) e BIN a visualizar no
display do telemóvel
Browse step
Alteração do passo das funções de
avanço e recuo, na visualização dos
sinais
Telemóvel p/alarme
Acertar Data/Hora
Reboot
Relatórios
Apagar ficheiro ECG guardado
(delete)
RRV e RRV
(Kalman)
Definição do número de telemóvel
para a comunicação de alarmes.
Acerto da data e hora no dispositivo
de aquisição
Reinicialização do dispositivo de
aquisição
Gráfico mostrando a evolução dos
sinais RRV e RRV (Kalman) para
toda a sessão
Figura 16 - Interface de utilização da aplicação mHolter
25
À medida que o utilizador efetua alterações nos principais parâmetros da aplicação,
estes são registados no ficheiro de configuração mHolter.CFG. Desta forma, não é necessário repetir
as alterações quando a aplicação é reinicializada. A Tabela 3 mostra os parâmetros que são
registados.
Parâmetro
Valor
Descrição
OFFS_ECG
60
Offset de translação vertical do sinal ECG no display
OFFS_RRV
90
Offset de translação vertical do sinal RRV no display
BROWSE_STEP
100
Passo das funções de avanço e recuo (modo browse)
service
1
Serviço RFCOMM (=1 por defeito)
SCA_RRV
100
Escala de visualização do sinal RRV no display
SCA_ECG
40
Escala de visualização do sinal ECG no display
OFFS_BIN
5
Offset de translação vertical do sinal BIN no display
SCA_BIN
5
Escala de visualização do sinal BIN no display
address
<addr>
Endereço do dispositivo de aquisição Zephyr
THRESHOLD
550
Linha de threshold (definida pelo detetor de pico)
TLM_ALARME
<tlm>
Número de telefone para reporte de alarmes (por SMS)
SCA_KLM
100
Escala de visualização do sinal RRV filtrado
OFFS_KLM
90
Offset de translação vertical do sinal RRV filtrado
Tabela 3 - Parâmetros registados no ficheiro de configuração
4.4 Gravação da Sessão
O sinal ECG, sinais associados BIN, RRV, RRV filtrado (KLM), artefactos e alarmes
(ALM), são gravados em ficheiros no formato CSV, sendo por isso possível a posterior edição em
folhas de cálculo (exemplo: Microsoft Excel), de modo a facilitar outro tipo de análise que se pretenda
fazer no futuro.
A Figura 17 mostra em detalhe, o diagrama de blocos da aplicação mHolter com a
identificação dos pontos de extração destes sinais.
26
Figura 17 - Diagrama de blocos do mHolter e identificação dos sinais relevantes
Na Figura 18 é mostrado o formato de gravação que foi definido para a aplicação. As
primeiras duas colunas indicam a data e hora de aquisição. As restantes cinco colunas registam o
valor das amostras associadas a cada um dos sinais.
Figura 18 - Formato de gravação do mHolter
27
Dado que a aplicação mHolter irá funcionar por períodos extensos, tipicamente de 24 a
48 horas, há que acautelar as suas necessidades em termos de espaço na memória não volátil do
telemóvel (interna ou SD-CARD). Nesse sentido, foram efetuadas as medidas que constam da Tabela
4, com o objetivo de se determinar o número de bytes necessário por linha de gravação.
Número de linhas
Bytes ocupados
Rácio (bytes/linha)
10
328
32,80
100
3298
32,98
1.000
34.408
34,41
10.000
350.470
35,05
Tabela 4 - Medidas para determinação das necessidades de gravação
Sendo o número de amostras por segundo igual a 250 (equação 3) e sabendo que a
cada amostra corresponderá uma linha, então podemos calcular velocidade de gravação,
considerando o rácio bytes/linha mais exigente:
[
]
(5)
Com base nesta velocidade, as necessidades de gravação para 24 e 48 horas serão
respetivamente:
[
]
[
(6)
]
(7)
Ou seja, são atingidas facilmente dimensões próximas do gigabyte, pelo que é
imprescindível o telemóvel dispor de uma SD-CARD (ou memória interna) com o mínimo de 2Gb.
4.5 Deteção de Picos R do Complexo QRS
A detecção de picos R no complexo QRS é efetuada por observação das amostras cujos
valores se situem acima de um determinado nível (threshold). Esta observação é realizada pelo
método find_RR_points(), que é evocado periodicamente pelo método get_rt_data(), sempre que
existam novas amostras a processar.
Dado que o sinal ECG recebido do módulo de aquisição se apresenta sem variações da
linha de base e sem componentes de alta frequência, não se verificou a necessidade de se efetuar
qualquer pré-filtragem.
28
Sempre que um pico R é detectado, previamente ao seu registo no array addBIN[], é
efetuada uma verificação de que o mesmo não é artefacto. Esta verificação é de extrema importância,
evitando que falsos picos R influenciem incorretamente o comportamento do filtro de Kalman.
A influência do detector de pico nos resultados da filtragem de Kalman é desenvolvida
mais adiante, e deve-se basicamente ao fato do sinal BIN constituir uma entrada do filtro de Kalman,
que decide sobre se a saída do filtro terá como base a estimativa à priori (caso do sinal BIN ser zero)
ou a estimativa à priori calculada conjuntamente com o valor da amostra e respectivo ganho de
Kalman.
4.6 Deteção e Processamento de Artefactos
Os artefactos podem ter as mais diversas origens, sendo as mais comuns a interferência
resultante de ruídos internos e externos ao sistema de aquisição, como são exemplos o ruído
produzido pelos movimentos musculares ou resultantes da deslocação da cinta cardíaca.
A deteção de artefactos implementada baseia-se no princípio de que dois máximos
acima da linha de threshold, devem respeitar um intervalo mínimo de separação entre eles, para que
possam ser considerados efetivamente parte de um intervalo R-R.
Para se encontrar este intervalo mínimo, recorreu-se a várias tabelas que relacionam o
número de batimentos por minuto e percentagem de esforço consoante o tipo de exercício e idade do
paciente. A Figura 19 mostra uma destas tabelas típicas.
Figura 19 - Relação entre ritmos cardíacos e o tipo de atividade (fonte:
primefit.com - Measuring Your Maximum Heart Rate)
29
Assumindo como pressuposto que o mHolter vai adquirir o eletrocardiograma com o
paciente a desenvolver a sua atividade quotidiana, portanto na zona moderada, temos que o número
máximo de batimentos por minuto não excederá, na maioria dos casos os 120 BPM (60% de esforço):
[BPM]
(8)
Neste pressuposto, tendo como base o número de amostras por segundo recebidas no
telemóvel (equação 3), podemos calcular o número de amostras mínimo que se deve verificar entre
dois máximos, para que os mesmos possam ser considerados um intervalo R-R:
[
]
(9)
A este valor corresponde a constante RR_ARTEFACT, definida na aplicação mHolter e
usada pelo método artefact(), para decisão sobre estamos perante um intervalo R-R ou um artefacto.
Caso tenha sido encontrado um artefacto, é efetuado um procedimento adicional de
limpeza do último ponto R detetado, pelo fato do artefacto ora detetado estar normalmente associado
a uma perturbação prévia. Esta função é executada pelo método clean_last_RR() e efetua o
varrimento até ao máximo de RR_ARTEFACT amostras no passado.
Todos os artefactos detetados são registados no ficheiro de gravação com a constante
ALM_Artefact. Desta forma, os mesmos podem ser visualizados no display do telemóvel (em tempo
real), à posteriori, no modo de browse, ou mais tarde através aplicação oHolter.
4.7 Interpolação do sinal ECG
Na análise de sinais fisiológicos, para além do estudo morfológico do sinal, é muito
comum o estudo de outros parâmetros do sinal e como estes se comportam no tempo. As doenças do
coração que afetam o nódulo sino-auricular (pacemaker fisiológico principal do coração), podem
alterar o ritmo normal do coração, resultando numa variação anormal dos intervalos R-R.
Aplicando técnicas de interpolação, podemos criar a partir do ECG um novo sinal, que
represente no tempo, a variação dos intervalos R-R, e que nos permita observar facilmente o objeto
de interesse, a variação dos intervalos R-R (RRV).
Passando a exemplificar, a Figura 20 mostra um sinal ECG a ser interpolado.
30
Figura 20 - Exemplo de sinal ECG a ser interpolado
Sendo a duração de cada intervalo R-R:
(
)
(
)
[ ]
(10)
[ ]
(11)
A frequência associada a cada intervalo será respetivamente:
[
[
]
]
(12)
(13)
A Figura 21 mostra o sinal RRV, obtido através de interpolação do sinal ECG.
31
Figura 21 - Resultado da interpolação efetuada sobre o sinal ECG
Podemos verificar que o sinal interpolado (RRV) apresenta-se como o inverso de cada
intervalo R-R em toda a duração deste intervalo, resultando numa medida instantânea da frequência
cardíaca, em batimentos por segundo. No processo de interpolação, a frequência cardíaca é
multiplicada por 60 segundos, para se obter o seu valor numa unidade mais comum, em batimentos
por minuto (BPM).
4.8 Filtro de Kalman
A introdução da filtragem de Kalman [6] aplicada ao sinal RRV cumpre essencialmente
dois objetivos: primeiro, estimar o ritmo cardíaco, filtrando amostras do sinal RRV que possam
eventualmente estar relacionadas com artefactos que não foram detectados na fase de detecção e
processamento de artefactos, segundo, estabelecer um patamar de comparação entre a saída do
filtro e o sinal RRV à sua entrada, por forma a permitir detectar variações que se enquadrem em
cenários de arritmia.
Como veremos mais adiante, a detecção destas variações é efetuada apenas quando o
resultado da filtragem se mantêm estável por um período de tempo predefinido, assegurando-se
assim um maior grau de confiança sobre o procedimento de detecção de arritmias.
A filtragem de Kalman é realizada em duas etapas [7]: "time update" e "measurement
update". A Figura 22 ilustra este processo.
32
Figura 22 - Etapas da filtragem de Kalman
A etapa de predição (time update) projeta para a o futuro, a estimativa atual do estado do
processo, enquanto que a etapa de correção (measurement update) atualiza a estimativa projetada,
com base numa medição real efetuada no momento.
Caracterizando agora o filtro implementado no âmbito do presente projeto, temos as
seguintes equações, para cada uma das etapas acima mencionadas:
Etapa de predição:
̂
̂
(14)
(15)
Etapa de correção:
(16)
(
̂
̂
{
(
̂ )
̂
(
(
)
)
)
(17)
(18)
No que respeita a etapa de predição, na equação 14 calcula-se a estimativa à priori ̂
com base na estimativa anterior ̂
. A estimativa à priori é a melhor estimativa do estado do
processo, até ao momento em que se realiza uma nova medição. A equação 15 efetua o cálculo da
estimativa à priori da covariância do erro
. Em suma, esta etapa prepara as estimativas à priori a
serem utilizadas na próxima etapa (correção).
A etapa de correção incorpora a nova medição nas duas estimativas à priori
anteriormente calculadas, ̂ e
, com o objetivo de se obter uma melhor estimativa à posteriori ̂ ,
mais próxima do que será o estado real do processo.
Nesta etapa, o primeiro passo consiste no cálculo do ganho de Kalman
, de acordo
com equação 16. De realçar nesta equação que, quando a covariância do erro de medição (R) ou a
33
estimativa à priori da covariância do erro
tenderem para zero, o ganho de Kalman tende para 1 ou
0 respetivamente:
(19)
(20)
O ganho de Kalman influencia o cálculo da estimativa à posteriori (equação 17),
conferindo maior ou menor peso ao termo
̂ , denominado de resíduo (ou inovação). Do ponto
de vista prático, este resíduo reflete a discrepância entre o valor medido e a estimativa à priori. Um
valor residual de zero significa que ambos estão em acordo (estimativa à priori e medida efetuada).
Por outro lado, olhando somente para efeito do ganho de Kalman na equação 17, e explorando os
casos limite expressos pelas equações 19 e 20, podemos concluir que:

Uma covariância do erro de medição tendendo para zero, impõe como estimativa
à posteriori o próprio valor medido (a estimativa à priori ̂ é cancelada).

Uma estimativa à priori da covariância do erro tendendo para zero, impõe como
estimativa à posteriori a própria estimativa à priori (o valor medido
é
cancelado)
É importante realçar que nesta implementação, o cálculo da estimativa à posteriori ̂
depende da existência de um valor medido
, ou seja, só se calcula a estimativa a posteriori quando
se fazem novas leituras. Nos restantes instantes de amostragem utiliza-se a estimativa à priori:
̂
̂ . No método kalman_filter(), esta condição é garantida por verificação da saída do detetor de
picos R (sinal BIN).
Como passo final, na equação 18, a estimativa à posteriori da covariância do erro é
também atualizada em função do ganho de Kalman.
Apesar de puderem variar no tempo, as covariâncias do ruído (Q) e do erro de medição
(R) são consideradas constantes na implementação desta versão do filtro. Como veremos mais
adiante, estes parâmetros são usados na afinação do algoritmo, de forma a controlar o grau de
suavidade da resposta.
Em termos da aplicação mHolter, o filtro de Kalman apresenta-se como uma classe
independente, disponibilizando o seguinte conjunto de métodos de controlo e iteração (ver Tabela 5):
34
Método
Descrição
kalman_reset()
Reset ao filtro, com reinicialização dos parâmetros Q, R,
,
, ̂ ,̂ e
para os seus valores por defeito e reinicialização do estabilizador
kalman_set_Q()
Programar a covariância do ruído
kalman_set_R()
Programar a covariância do erro de medição
kalman_get_Q()
Obter a covariância atual do ruído
kalman_get_R()
Obter a covariância atual do erro de medição
kalman_stable()
Verificar a estabilidade da saída do filtro (True ou False)
kalman_filter():
Filtro de Kalman, implementando as etapas predição e correção
Tabela 5 - Métodos disponibilizados pela classe Kalman
4.9 Deteção de Arritmias
Através da análise do ECG, podem ser detetadas inúmeras anormalidades no sistema
cardiovascular, sendo possível prevenir muitas das doenças que causam estas anormalidades, desde
que sejam previamente diagnosticadas e acompanhadas.
O sistema mHolter desenvolvido permite detetar e registar distúrbios do ritmo cardíaco
que ocorram no decorrer de uma sessão de monitorização em regime ambulatório contínuo. Estes
distúrbios podem ser posteriormente visualizados na aplicação oHolter, facilitando a confirmação e o
diagnóstico provável de uma causa arrítmica.
A deteção variações do ritmo cardíaco é efetuada pela comparação de amplitudes entre
o sinal à saída do filtro de Kalman (KLM) e o sinal RRV resultante da interpolação do ECG. Esta
comparação é efetuada somente quando a saída do filtro se mantêm estável, ou seja:

Apresenta variações na sua amplitude contidas num determinado um intervalo
de valores pré-definido

Estas variações são mantidas por um período de tempo mínimo, também prédefinido
Desta forma, assegura-se um maior grau de confiança sobre o procedimento de deteção
de arritmias. Uma variação do sinal KLM após um período em que este permanece estável, é então
classificada consoante a diferença encontrada. A estabilidade do sinal KLM pode ser obtida a
qualquer momento pela aplicação mHolter, por invocação do método kalman_stable(), sendo esta
determinada de acordo com o algoritmo representado na Figura 23.
35
Figura 23 - Algoritmo de aferição da estabilidade do sinal RRV
O algoritmo é executado sempre que for solicitado o cálculo de uma nova estimativa no
filtro de Kalman. A variável KScount contabiliza o número de vezes consecutivas que a diferença
entre a estimativa atual e anterior está contida dentro do intervalo MAX_DELTA. Caso se verifique
durante a contagem uma diferença superior a MAX_DELTA, então o contador é reinicializado a zero,
pois pretende-se um histórico de várias amostras consecutivas dentro daquele intervalo.
No final, caso se verifique uma contagem superior a MAX_COUNT, então pode-se
concluir que a resposta do filtro encontra-se estabilizada.
4.10 Geração de Alarmes
Consoante o tipo de alarme, o mHolter pode enviar um SMS de notificação para outro
telemóvel (definido no ficheiro de configuração). Por defeito, a aplicação envia um SMS apenas no
caso em que foi detetada uma grande irregularidade no ritmo cardíaco (ALM_Irregular).
A Tabela 6 mostra os vários tipos de alarmes possíveis. Os critérios que levam à
constituição de um alarme são descritos no Capítulo 5 - Apresentação e Análise dos Resultados.
36
Alarme
Valor
Descrição
ALM_NoAlarm
0
Nada a assinalar (não existem alarmes)
ALM_Artefact
50
Detetado artefacto
ALM_Arritmia
100
Detetada arritmia, conforme os parâmetros de caracterização
estabelecidos
ALM_Irregular
150
Detetada uma grande irregularidade (exemplo: falta de complexo
QRS), conforme os parâmetros de caracterização estabelecidos
Tabela 6 - Lista de alarmes registados pelo mHolter
4.11 Aplicação oHolter
A aplicação oHolter (offline Holter), permite visualizar o eletrocardiograma num
computador pessoal correndo o sistema operativo Windows 7, disponibilizando ao utilizador um
conjunto estendido de funcionalidades de procura e visualização dos registos previamente efetuados
pelo mHolter. A Figura 24 mostra a interface da aplicação oHolter.
37
Figura 24 - Imagem da aplicação oHolter
No canto superior direito do ecrã, é mostrada a data e hora correspondente à parte
visível do eletrocardiograma, enquanto no eixo horizontal, é apresentada a escala em segundos. Para
um acesso fácil e rápido às principais funções da aplicação, é disponibilizada uma toolbar com os
seguintes botões (da esquerda para a direita):

Abertura de uma nova sessão (ficheiro gerado pelo mHolter)

Início, retrocesso, avanço e fim da sessão

Seleção dos sinais a visualizar no ecrã (ECG, RRV, KLM e BIN)

Visualização do threshold

Visualização do histórico de evolução dos sinais RRV e KLM, ao longo da
sessão

Função de procura por hora / minuto
A aplicação disponibiliza igualmente as seguintes possibilidades de configuração:

Offsets de translação vertical dos sinais ECG, RRV, KLM e BIN

Escalas dos sinais ECG, RRV, KLM e BIN
38

Passo (step) usado nas funções de avanço e retrocesso

Gravação das configurações efetuadas.
39
5
Apresentação e Análise dos Resultados
As aplicações mHolter e oHolter apresentam na sua interface de utilização, o fundo
negro. Esta escolha foi feita com o objetivo de se aproximarem tanto quanto possível das demais
aplicações e instrumentos que normalmente se encontram nas clinicas e hospitais. No entanto, para o
efeito de impressão da presente dissertação, o fundo foi alterado propositadamente para branco, com
o objetivo único de se poupar no toner.
5.1 Aquisição e gravação do Eletrocardiograma
A aplicação mHolter foi testada com dados reais, recebidos do módulo de aquisição
Zephyr BioHarness. Foram efetuadas cerca de 120 sessões com diferentes durações, num universo
restrito a 4 pessoas. No final de cada sessão procedeu-se à cópia dos registos para o computador,
para posterior análise na aplicação oHolter. O sinal ECG recolhido apresenta-se geralmente como
ilustrado na Figura 25:
Figura 25 - Exemplos de sinal ECG recolhidos pelo módulo Zephyr
40
Como se pode constatar, o ECG apresenta-se bastante limpo e estável, sem variações
da linha de base e sem componentes de alta frequência. Por esta razão, e uma vez que não foi
necessário proceder-se a qualquer tipo de filtragem, a etapas seguintes contemplaram imediatamente
o processamento do ECG e sinais associados.
5.2 Deteção de Picos R do Complexo QRS
A Figura 26 mostra um sinal ECG e o resultado do detetor de picos. A linha de cor verde
representa o nível de threshold a partir do qual o algoritmo de detecção entra em funcionamento.
Figura 26 - Sinal ECG e saída do Detetor de Picos R
O mHolter permite ajustar no início ou no decorrer de uma sessão, o nível de threshold,
por forma a garantir o bom desempenho da aplicação mHolter, independentemente do módulo de
aquisição e das características elétricas do sinal recebido através dos sensores da cinta cardíaca,
que pode apresentar diferentes níveis de amplitude, de equipamento para equipamento.
41
O resultado da deteção de picos R é de extrema importância para os módulos seguintes
(interpolação e filtragem). Por este motivo, além de uma operação de simples deteção com base no
threshold, o detetor de pico funciona conjuntamente com a deteção de artefactos, por forma a evitar:

Na fase de interpolação, onde se calculam os ritmos cardíacos, entre um falso
pico R, que iria original uma falsa variação do ritmo cardíaco (RRV).

Na fase de filtragem, entre uma medição (resultante do falso pico R) no filtro de
Kalman, originado uma falsa variação do ritmo cardíaco (KLM).
5.3 Deteção e Processamento de Artefactos
Os resultados da deteção de artefactos são apresentados ao utilizador através de um
retângulo azul, delimitando a zona de perturbação (artefacto). A Figura 27 ilustra a deteção de um
artefacto durante uma sessão de aquisição. Este artefacto foi provocado deliberadamente ao tossir.
Figura 27 - Deteção de artefacto simples (por provocação de tosse)
42
Podemos observar que o detetor de picos não considera o pico delimitado pelo retângulo
(artefacto). Este é um primeiro exemplo do funcionamento conjunto do detetor de picos e de
artefactos, evitar prováveis falsos picos R.
Na Figura 28 podemos ver outro artefacto, produzido também por tosse, sendo neste
caso o processamento ligeiramente diferente:
R1
R2
R3
R4
A1
A2
Figura 28 - Deteção de artefacto provocado por tosse, com reavaliação do sinal BIN
Neste caso, o artefacto A1 é detetado imediatamente a seguir ao pico R2,
estabelecendo-se o critério de evocação do método clean_last_RR(), conforme referido no capítulo
4.6. Este método coloca a zero 125 (RR_ARTEFACT) amostras passadas do detetor de picos, a
contar do artefacto A1, que neste caso abrange o pico R2, eliminando-o (circulo a tracejado). Este é
outro exemplo do funcionamento conjunto do detetor de picos e de artefactos.
No caso do artefacto A2 o critério anterior não é verificado, ou seja, a distância entre o
pico R3 e A2 é superior a RR_ARTEFACT, considerando-se por isso R3 como um ponto R válido.
43
Mostra-se de seguida o comportamento do mHolter na deteção de outro tipo de
artefactos, provocados pelo movimento da cinta cardíaca. No caso da Figura 29, temos um
movimento pontual da cinta, enquanto que no caso da Figura 30, o movimento é contínuo. Em
qualquer dos casos podemos observar a boa imunidade da aplicação ao ruído provocado por fatores
externos.
R1
R2
Figura 29 - Deteção de artefacto provocado pelo movimento da cinta cardíaca
Como se pode verificar, existe um pico R1 no meio da zona de perturbação. Contudo, o
algoritmo não o considera, dada a proximidade de outros picos R igualmente prováveis, ou seja, o
sinal BIN permanece a zero (circulo tracejado).
44
R1
R2
Figura 30 - Deteção de artefacto devido a movimento continuado da cinta cardíaca
Neste caso, a aplicação não considera o pico R2 por este se encontrar demasiado
próximo da zona de influência do artefacto. Durante a sessão, todos os alarmes são gravados, sendo
os artefactos assinalados com a constante ALM_Artefact (ver Tabela 6)
5.4 Interpolação do sinal ECG
A Figura 31 apresenta o resultado da interpolação de um sinal ECG adquirido pelo
mHolter. O sinal interpolado designa-se RRV (variação dos intervalos R-R) e mostra a evolução no
tempo do valor instantâneo do ritmo cardíaco, na unidade BMP (batimentos por minuto).
45
Figura 31- Resultado da interpolação do ECG: sinal RRV
Dado que os intervalos apresentam normalmente pequenas variações, é comum efetuarse o cálculo do valor médio do ritmo cardíaco, por exemplo num intervalo de 6 períodos R-R.
No caso do mHolter, é imprescindível o registo do valor instantâneo do ritmo cardíaco
(sinal RRV) associado a cada intervalo R-R, na medida em que este é injetado no filtro de Kalman e
comparado de seguida com a saída do filtro, com o objetivo de se detetar eventuais arritmias.
5.5 Filtro de Kalman
Como foi referido anteriormente, a introdução do filtro de Kalman cumpre basicamente
dois objetivos: filtrar eventuais variações resultantes do cálculo do ritmo cardíaco, associadas a
artefactos que não foram detetados no módulo de deteção e detetar variações do ritmo cardíaco, que
se considerem relevantes pela sua dimensão.
46
Para se cumprir com estes dois objetivos, a parametrização do filtro deve implementar
uma filtragem tipo passa-baixo, eliminando assimetrias associadas a possíveis artefactos, e
simultaneamente acompanhar a evolução do sinal RRV à sua entrada.
Com vista à afinação do filtro, foram efetuadas várias simulações com diferentes valores
para as covariâncias do ruído (Q) e do erro de medição (R). O valor escolhido para a estimativa inicial
foi 60 BPM, por ser um valor típico do ritmo cardíaco em repouso. A Tabela 7 mostra os valores
usados para os parâmetros Q e R nas simulações efetuadas.
Simulação n.º
Q
R
Resultados (ver figura)
1
1,00E-05
1,00E-03
Figura 32
2
1,00E-04
1,00E-03
Figura 33
3
1,00E-03
1,00E-03
Figura 34
4
1,00E-04
1,00E-05
Figura 35
5
1,00E-04
1,00E-04
Figura 36
6
1,00E-04
1,00E-02
Figura 37
Tabela 7 - Parâmetros a simular para o filtro de Kalman
Os resultados das simulações são apresentados de seguida:
Figura 32 - Simulação 1 (filtro de Kalman): Q=1E-5; R=1E-3
47
Figura 33 - Simulação 2 (filtro de Kalman): Q=1E-4; R=1E-3
Figura 34 - Simulação 3 (filtro de Kalman): Q=1E-3; R=1E-3
48
Figura 35 - Simulação 4 (filtro de Kalman): Q=1E-4; R=1E-5
Figura 36 - Simulação 5 (filtro de Kalman): Q=1E-4; R=1E-4
49
Figura 37 - Simulação 6 (filtro de Kalman): Q=1E-4; R=1E-2
Conclui-se que mantendo R e aumentando Q, a saída do filtro - sinal KLM (linha a
vermelho nos gráficos acima) acompanha cada vez mais a entrada. Afastamo-nos por isso do objetivo,
pois não poderemos detectar variações do ritmo cardíaco. Neste caso o melhor valor foi Q=1,00E-4.
Por outro lado, mantendo-se Q=1,00E-4 e aumentando-se sucessivamente R, verifica-se
que com R=1,00E-3, é atingido o melhor compromisso face ao objetivo proposto, sendo estes os
valores programados no módulo Kalman.py da aplicação mHolter.
50
Observando agora o resultado desta parametrização na aplicação, podemos ver na Figura 38, a
suavização obtida pela filtragem de Kalman (KLM) face ao sinal original (RRV), num cenário de
repouso seguido de esforço moderado e novo repouso, com a simulação de alguns artefactos
(movimentos da cinta durante o exercício).
Figura 38 - Ritmo cardíaco após filtragem (cenário moderado com poucos artefactos)
A Figura 39 mostra a resposta do filtro de Kalman num cenário mais exigente, de repouso seguido de
andamento, corrida e novo repouso, sempre com a simulação de artefactos (movimentos da cinta
durante o exercício).
51
Figura 39 - Ritmo cardíaco após filtragem (cenário exigente e repleto de artefactos)
Neste exemplo, podemos verificar várias irregularidades devidas aos artefactos
causados propositadamente. Apesar disso, o resultado da filtragem de Kalman permanece bem mais
suave, reduzindo consideravelmente o efeito dos artefactos.
5.6 Deteção de arritmias
Por definição, arritmia significa irregularidade nos batimentos cardíacos ou na pulsação.
Para que se possa detetar arritmias é necessário primeiro caracterizá-las, através de um modelo (ou
conjunto de regras), para seguidamente o aplicarmos ao sinal que pretendemos analisar.
O modelo proposto consiste na comparação permanente (em tempo real) do valor
instantâneo do ritmo cardíaco (sinal RRV) com a saída do filtro de Kalman (sinal KLM), aplicando-se
de seguida os seguintes critérios:
52
Critério 1:

A variação instantânea do ritmo cardíaco (sinal KLM) não deve ultrapassar 9
BPM (MAX_DELTA).

O objetivo é concluir-se sobre a estabilidade do sinal KLM. Considera-se estável
se forem verificados 5 (MAX_COUNT) intervalos R-R consecutivos com
variações do ritmo cardíaco contidas no intervalo MAX_DELTA

Variações contidas no intervalo MAX_DELTA não são consideradas arritmias

Alarme registado no momento de gravação: ALM_NoAlarm (ver Tabela 6)
Critério 2:

A variação instantânea do ritmo cardíaco (sinal KLM) situa-se entre 9 BPM
(MAX_DELTA) e 15 BMP (MAX_ARRITMIA)

A conclusão sobre se estamos perante uma arritmia pressupõe a validação das
seguintes duas condições:
o
Antes desta variação, o sinal KLM apresentava-se estável, de acordo
com o critério 1
o
A variação não está associada a um artefacto, verificando-se que um
mínimo de 5 intervalos R-R (DIST_ARTEFACT) a antecede

Alarme registado no momento de gravação: ALM_Arritmia (ver Tabela 6)
Critério 3:

A variação instantânea do ritmo cardíaco (sinal KLM) situa-se acima de 15 BMP
(MAX_ARRITMIA)

A conclusão sobre se estamos perante uma arritmia pressupõe a validação das
duas condições mencionadas no critério 2

Alarme registado no momento de gravação: ALM_FaltaQRS (ver Tabela 6)
Mostram-se de seguida exemplos destes critérios, aplicados as sinais recolhidos em
duas sessões diferentes. É importante salientar que para uma aplicação real do mHolter, os
parâmetros associados aos critérios acima definidos deverão ser testados em vários cenários e
sujeitos a afinações de modo a se evitar, tanto quanto possível, situações de falso alarme.
Na Figura 40, podemos ver identificada uma arritmia, detetada no intervalo representado
pelo retângulo vermelho.
53
Figura 40 - Deteção de arritmia por comparação dos ritmos RRV e KLM
Esta arritmia cumpre o critério 2 anteriormente definido, que resulta da verificação de
estabilidade, distância mínima do último artefacto e variação do ritmo cardíaco superior ou igual a 9
(MAX_DELTA) batimentos por minuto:
(21)
Na Figura 41, podemos ver um outro exemplo de deteção, sendo desta vez detetada
uma arritmia irregular.
54
Complexo QRS eliminado
Figura 41 - Deteção de arritmia irregular por comparação dos ritmos RRV e KLM
A arritmia cumpre o critério 3 anteriormente definido, que resulta da verificação de
estabilidade, distância mínima do último artefacto e variação superior ou igual a 15 BMP
(MAX_ARRITMIA):
(22)
Neste exemplo, a deteção de arritmia irregular foi verificada por alteração do sinal
original, no qual se eliminou propositadamente um complexo QRS, através de uma opção
disponibilizada pela aplicação mHolter para este efeito (simulação).
55
6
Conclusões
O objetivo estabelecido para a presente dissertação foi desenvolver e implementar um
sistema de aquisição e processamento contínuo do Eletrocardiograma (Holter) para telemóvel.
Desenvolvido para um telemóvel Nokia com o sistema operativo Symbian S60 e linguagem de
programação Python, o mHolter adquire, processa em tempo real e regista o eletrocardiograma,
identificando artefactos e detetando possíveis cenários de arritmias, através de um filtro de Kalman. A
aplicação de visualização oHolter, igualmente desenvolvida em Python (para ambiente Windows),
disponibiliza um conjunto estendido de funcionalidades de procura e visualização posterior dos
registos criados.
Aliado ao facto de se encontrar presente na vida de todos nós, o telemóvel disponibiliza
cada vez mais uma maior capacidade de processamento, transformando-se numa potencial
plataforma de desenvolvimento de aplicações ligadas à monitorização de pacientes com necessidade
de vigilância contínua, contribuindo assim para o diagnóstico e prevenção de doenças, e
consequentemente para a melhoria da qualidade de vida destes pacientes.
Os algoritmos propostos para a deteção de artefactos mostraram-se na prática bastante
eficazes, contribuindo fortemente para uma maior isenção de ruído nos sinais a serem processados
pelos estágios seguintes: interpolação, filtragem e deteção de arritmias. A seleção de uma
parametrização adequada do filtro de Kalman permitiu cumprir o objetivo proposto de deteção de
arritmias. Contudo, e com vista a uma eventual versão comercial do produto, a parametrização deve
ser ajustada com base em testes reais sobre a uma população representativa, que inclua pacientes
com problemas de arritmia, confrontados posteriormente os resultados com a opinião final do médico
cardiologista.
A arquitetura modular do sistema mHolter e restantes funcionalidades disponibilizadas
pelo módulo de aquisição da Zephyr, tais como a obtenção da temperatura, respiração, posição
(horizontal/vertical), sensor de aceleração, permitem não só o desenvolvimento de outros algoritmos
de deteção de anomalias, como também de novas funcionalidades que tirem partido desta
informação, ficando o desafio para futuros projetos de desenvolvimento.
Uma nota final sobre a linguagem de programação Python, que apesar de se apresentar
bastante flexível e ótima para o desenvolvimento rápido de protótipos, trata-se contudo de uma
linguagem de script (não compilada), pelo que podem ser consideradas outras alternativas, como por
exemplo o C++ ou Java, caso se pretenda desenvolver versões comerciais do produto.
56
7
Referências
[1] Cardiovascular diseases. World Health Organization (WHO). Fact sheet N°317, September 2011.
Disponível em: http://www.who.int/mediacentre/factsheets/fs317/en/index.html
[2] Biomedical signal acquisition, processing and transmission using smartphone. Department of
Electronics / Biomedical Engineering, Universidad de Valparaíso, Universidad Técnica Federico Santa
María, Casilla 110-V, Valparaíso, Chile
[3] Biologia cardiovascular. Manual MERCK (biblioteca online). Disponível em:
http://www.manualmerck.net/?id=40
[4] Zephyr - BioHarness Bluetooth Developer Kit, disponível em:
http://www.zephyr-technology.com/store/btdeveloperkit.html
[5] Especificações do Nokia 5250. Obtido em Março de 2011, de Nokia Portugal:
http://www.nokia.pt/produtos/todos-os-modelos/nokia-5250/especificacoes
[6] Kalman, R. E. 1960. “A New Approach to Linear Filtering and Prediction Problems,” Transaction of
the ASME—Journal of Basic Engineering, pp. 35-45 (March 1960).
[7] Greg Welch and Gary Bishop. An Introduction to the Kalman Filter, July 2006.
[8] Biomedical Signal Analysis - A case study approach, Rangaraj M. Rangayyan, University of
Calgary
[9] Bruno Pereira, I. S. (2008). Sistema de aquisição de sinais biomédicos baseado num telefone
celular - Aplicação na estimação da temperatura central para determinação do ciclo circadiano do
sono.
[10] Python. (s.d.). Python Programming Language. Obtido Março de 2011, de Official Website:
http://www.python.org/
[11] S., J., & T., V. (2007). Mobile Python - Rapid Prototyping of Applications on the Mobile Platform.
Chichester: Wiley.
[12] André Batista, (2009). Monitorização contínua e detecção automática de anomalias cardíacas por
telemóvel.
[13] Guimarães, J.I. Sociedade Brasileira de Cardiologia. Diretriz de interpretação de
eletrocardiograma de repouso.
[14] Introdução ao Python para S60. Disponível em:
http://www.developer.nokia.com/Community/Wiki/Introdu%C3%A7%C3%A3o_ao_Python_para_S60
[15] ECG Diagnostics - Pocket Guide, Edward K. Chung, M.D, Black well Science
[16] Introduction to Biomedical Engineering, Second Edition, John D. Enderle, Susan M. Blanchard &
Joseph D. Bronzino, Elsevier Academic Press
[17] Biomedical Engineering and Design Handbook, Second Edition, Myer Kutz, McGraw Hill
[18] Measuring Your Maximum Heart Rate (HRmax) - Exercise zones. Disponível em:
http://www.prime-fit.com/c_hrmax.htm
57
Download

Thesis