ECG Digital - Facultad de Ingeniería

20
ECG Digital Sistemas Embebidos para Tiempo Real Grupo 4: Martín Bertrán Natalia Martínez Julián Rodríguez Tutor: Juan Curto Facultad de Ingeniería Instituto de Ingeniería Eléctrica

Transcript of ECG Digital - Facultad de Ingeniería

Page 1: ECG Digital - Facultad de Ingeniería

ECG Digital

Sistemas Embebidos para Tiempo Real

Grupo 4:

Martín Bertrán

Natalia Martínez

Julián Rodríguez

Tutor: Juan Curto

Facultad de Ingeniería – Instituto de Ingeniería Eléctrica

Page 2: ECG Digital - Facultad de Ingeniería

2

Tabla de contenido

1. Resumen_____________________________________________________3

2. Introducción__________________________________________________3

2.1. Descripción del proyecto____________________________________3

2.2 Antecedentes_______________________________________________4

3. Objetivos_____________________________________________________4

4. Alcance_______________________________________________________4

5. Diseño_______________________________________________________5

6. Procesamiento________________________________________________6

6.1. Introducción______________________________________________6

6.2. Detección RR semillas______________________________________7

6.3. Detección QRS____________________________________________8

6.4. Detección onda T__________________________________________9

7. Implementación______________________________________________10

7.1. Entrada y preprocesamiento de la señal______________________10

7.2. Módulo de control________________________________________10

7.2.1. Inicialización_________________________________________10

7.2.2. Búsqueda en régimen__________________________________11

8. Pruebas_____________________________________________________11

9. Conclusiones________________________________________________13

10. Anexo______________________________________________________14

10.1. Conceptos del curso aplicados al proyecto___________________14

10.2. Especificación de proyecto________________________________15

10.3. Planificación del proyecto_________________________________19

Page 3: ECG Digital - Facultad de Ingeniería

3

1. Resumen

El proyecto se basa en el diseño de un dispositivo capaz de determinar ciertas

características de un ECG a partir de un microcontrolador MSP430F2274.

Se trata de un dispositivo de diagnóstico rápido o para monitoreo de pacientes desde el

hogar, por lo tanto solo se abarca la posibilidad se extraer características básicas que

permiten el diagnóstico de una cantidad acotada de anomalías, como por ejemplo el de

una arritmia.

El dispositivo también debe ser der capaz que comunicar los resultados mediante la

UART para poder compararlos con los obtenidos en Matlab.

En el diseño del control del dispositivo se usaran conceptos aprendidos durante el curso,

como es el caso de las colas y el encolado de funciones o la solución del problema de

datos compartidos.

2. Introducción

2.1. Descripción del proyecto

El proyecto consiste en diseñar la unidad de control de un dispositivo capaz de filtrar

señales de ECG y extraer ciertas características que permitan el diagnóstico rápido de

trastornos básicos o más comunes del corazón.

Figura 2.1: Gráfico normal de un electrocardiograma.

En la Figura 2.1 se observa el aspecto normal de un electrocardiograma.

Las características que abordaremos en el proyecto son las detección del complejo QRS

(onda formada por los puntos QRS), detección de inicio y final del complejo QRS,

detección del pico y final de la inda T.

A partir de esas características se pueden deducir ciertos comportamientos anómalos del

corazón.

Se debe transmitir esta información al usuario a través de una comunicación UART con

el PC.

Page 4: ECG Digital - Facultad de Ingeniería

4

Se deberá de contar con una base de datos que contenga señales ECG para poder

enviarlas mediante comunicación UART y adquirirlas con el instrumento en cuestión.

2.2. Antecedentes

Existen algunas páginas y artículos sobre el tema.

En la misma página de Texas Instrument se encuentra un proyecto completo sobre

detección de ECG.

http://www.ti.com/solution/ecg_electrocardiogram

Nuestro proyecto en particular es mucho acotado que el que se expone allí, por lo tanto

no se usará como referencia.

También se encuentran en internet algunas soluciones a los problemas de detección de

características de la señal.

http://www.tdx.cat/bitstream/handle/10803/6321/03CAPITULO2.pdf?sequence=3

Los algoritmos de búsqueda que usaremos están basados en ese último artículo.

3. Objetivos

Transmitir de forma exitosa números enteros a través de una comunicación

UART.

Procesar los datos y extraer ciertas características de la onda ECG.

Solucionar problemas de datos compartidos entre la ISR y el main.

Realizar el control usando encolado de funciones.

Transmitir los resultados mediante comunicación UART.

4. Alcance

En este proyecto no se abordará el tema de la adquisición de la señal ya que no se

dispone del hardware necesario.

Se cuenta con un banco de señales reales del MIT para poder probar los algoritmos.

Los datos se ingresan mediante una comunicación UART y es de esta misma forma que

se devuelven los resultados. Por lo tanto se tendrá que contar con una terminal en el PC

que sea capaz de enviar y recibir caracteres.

Page 5: ECG Digital - Facultad de Ingeniería

5

5. Diseño

El sistema es el que se muestra en la Figura 5.1.

Figura 5.1: Diagrama del sistema.

La UART se maneja por la ISR y almacena los datos un una cola de char.

Cuando hay un dato disponible se encola una función que convierte los caracteres de

entrada en un entero válido y se almacena en una cola de int.

Cuando hay suficientes enteros se encola el procesamiento, el cual guarda los datos

procesados en el array_w2.

Luego cuando se llega a la cantidad necesaria de datos en array_w2 el control encola la

diferentes funciones de extracción de características y se guardan los resultados.

Para transmitir dichos resultados el control agrega los datos en una cola int y encola una

función que transforma esos datos a caracteres para que se puedan entender al recibirlos.

Dicha función transforma los datos y los guarda en un cola char para su posterior envío

mediante la UART.

La cola de caracteres a la entrada es la única estructura de datos compartida entre la ISR

y el contexto main, por lo que se maneja de manera atómica.

Page 6: ECG Digital - Facultad de Ingeniería

6

La señal preprocesada W2 es leída y escrita desde el contexto main, por lo que no

resulta necesario protegerla contra problema de datos compartidos. Esta se almacena en

una estructura de arreglo circular.

Cada función de extracción de características cuenta con una estructura de datos

definida, esto se hace para poder encolar estas funciones como handlers sin parámetros

de entrada y accesar de manera conveniente a un solo puntero que contenga todos los

datos requeridos para el funcionamiento de la rutina. También simplifica el manejo de

variables e información necesarias para que la rutina Control realice sus tareas.

6. Procesamiento

6.1. Introducción

Para poder extraer las características se usará una transformada wavelet discreta

utilizando la función de Haar mostrada en el figura 6.1.

Fiugra 6.1: Wavelet de Haar.

Simplemente lo que hace esta transformada es tomar diferencias y promedios entre

muestras como se indica en la figura 6.2.

Page 7: ECG Digital - Facultad de Ingeniería

7

Figura 6.2: Transformada wavelet de Haar.

Sobre las señales que resultan se pueden aplicar los algoritmos de búsqueda para la

extracción de características.

6.2. Detección RR semillas.

Primero se busca el máximo en los primeros segundos de la señal para poder definir un

umbral positivo y otro negativo. Luego se buscan los picos positivos y negativos que

superen los umbrales.

Page 8: ECG Digital - Facultad de Ingeniería

8

Figura 6.3: Transformada de Haar de la señal con umbrales marcados.

Figura 6.4: Señal original con los picos detectados.

En la figuras 6.3 se muestra lo picos positivos y negativos que se generan en la

transformada. Cada cruce por cero entre un mínimo y máximo local se corresponde con

el pico R de la señal original, como se muestra en la figura 6.4. Estos primeros picos se

utilizan para definir los intervalos iniciales de búsqueda.

6.3. Detección QRS

Se comienza por detectar el complejo R en un intervalo definido por el último R y el

promedio RR utilizando umbrales como muestra la figura 6.5.

Page 9: ECG Digital - Facultad de Ingeniería

9

Figura 6.5: Detección de QRS.

A partir del pico negativo se busca el cruce por cero anterior a este, lo que se

corresponde con el pico de Q en la señal original.

Del mismo modo se procede para buscar S. Se busca el cruce por cero posterior al

máximo local de la transformada que se corresponde con el pico de S.

Una vez hallado el R se actualizan los umbrales y el intervalo RRav para la próxima

iteración.

6.4. Detección onda T

Para encontrar T se busca en una ventana consecutiva a una R y dependiente de RR.

Figura 6.6: Detección de onda T.

Primero se buscan el máximo y el mínimo de la transformada indicados en la figura 6.6.

Luego el cruce por cero entre esos puntos y el cruce por cero posterior al máximo.

El primer cruce por cero mencionado corresponde con el pico de la onda T y el segundo

cruce por cero se corresponde con el final de la onda T.

Page 10: ECG Digital - Facultad de Ingeniería

10

7. Implementación

7.1. Entrada y preprocesamiento de la señal

Originalmente se pensó en separar cada entero en su byte alto y bajo y enviarlos como

caracteres a través de la UART. Sin embargo, debido a problemas con el envío de

caracteres no imprimibles mediante la terminal serial del PC se cambio de paradigma.

Por lo que finalmente se opto por enviar los enteros de forma literal, enviando el

número 1125 como “1125,”. Esta solución implica mayores tamaños de cola de

recepción y un procesamiento ligeramente más complejo. Sin embargo, se considero la

solución como práctica y viable.

La rutina de atención a la interrupción añade el caracter a la cola Buff_RX y llama a la

función chartoint para que realice la conversión a enteros con cada dato completo

nuevo. Una vez que se cuentan una cierta cantidad de enteros se encola a la función

transformada.

La función transformada realiza la transformada de Haar de nivel 2 de los elementos de

la cola de enteros que utiliza chartoint. Para reducir los requisitos de memoria de esta

rutina se implemento la función sin utilizar bancos de filtros.

Esta función también mantiene un registro activo del último elemento añadido a la cola

de elementos transformados array_w2. Y encola periódicamente al módulo de control.

7.2. Módulo de control

Esta función consta de dos modos fundamentales:

Inicialización

Búsqueda en Régimen

7.2.1. Inicialización

El módulo de inicialización semillas_RR se encarga de detectar el primer complejo RR

una vez que se tienen unos 2 segundos de señal.

Las funciones implementadas dentro del mismo son:

*UmbrIni : Inicialización de umbrales, recorre el arreglo correspondiente a la

transformada dwt-haar de segundo nivel detectando el máximo y el mínimo absoluto. Y

establece los umbrales iniciales como el promedio entre el máximo (mínimo) y una

varianza definida como la suma de los cuadrados sobre número de muestras.

*Calc_Mm: Función encargada de almacenar los máximos y mínimos locales que se

encuentran sobre los umbrales en dos colas de enteros (una correspondiente a máximos

y otra a mínimos).

*ProcMaxmin: Clasifica los máximos y mínimos detectados como parejas (si sus

índices distan menos que una cantidad de muestras) y los guarda en una cola, o como

sin pareja M/m (máximo o mínimo sin pareja) en otra cola.

* ProcSpar: Extrae los elementos sin pareja de las colas (máximo o mínimo) y le asigna

como par el máximo/mínimo que se encuentre mirando unos índices por detrás y unos

Page 11: ECG Digital - Facultad de Ingeniería

11

índices por delante del elemento sin pareja siempre que estos se encuentres sobre un

umbral mínimo (para no caer en la franja de ruido caso en que se descarta el elemento).

Luego se agrega la pareja a la cola correspondiente.

La función Calc_RR se encarga de llamar a estas rutinas y de almacenar los índices en

la dwt-haar de los RR iniciales en una variable del tipo salidaRR_T (char R1, char R2,

char RR). También actualiza los umbrales para el caso en que solo se detecto una pareja

de máximos-mínimos y se deba volver a realizar la búsqueda de estos. Otro caso posible

es que se necesiten mas muestras por lo que hay una variable “flag_masmues” que se

setea en uno cuando se tiene menos de 2 parejas y se llego al mínimo umbral posible

(no se pude seguir disminuyendo porque se entraría en el ruido de la señal).

7.2.2. Búsqueda en régimen

La rutina de control encola de manera secuencial la búsqueda R, Q, S y T, asegurándose

primero que las mismas tengan disponibles los datos necesarios para su ejecución.

Se comunican los resultados obtenidos mediante un puntero a una estructura definida

para cada rutina de búsqueda.

Luego de procesarse un pulso completo QRST los datos obtenidos son convertidos a

char y se encola la función de recepción, la cual se encarga de enviar el primer dato por

la UART y habilitar la ISR de transmisión.

Las rutinas de búsqueda implementan los algoritmos descriptos en la bibliografía

presentada. Pero fundamentalmente solo se requiere manejar correctamente el arreglo

circular de la señal transformada y buscar cruces por ceros, máximos y mínimos en

entornos definidos. Por lo que esas funcionalidades son definidas en el módulo

funciones básicas.

8. Pruebas

Los algoritmos de búsqueda fueron inicialmente implementados en Matlab y testeados

en PC.

Ya con los algoritmos funcionando correctamente se procedió a implementarlos en C y

testearlos usando la herramienta de simulación C-Spy del IDE. Para esta etapa, la señal

se cargó directamente en memoria y se observaron en memoria los resultados obtenidos

por las rutinas de búsqueda. Estos datos se compararon con los obtenidos en Matlab

para asegurarse de que no presentaban diferencias.

La siguiente fase de testeo se dio sobre los módulos de UART y transformada de

HAAR, para lo cual se enviaron 2 horas de señal a través de la UART y se transmitió la

transformada calculada por el micro de nuevo a la PC para ser comparada con la

obtenida mediante Matlab.

Por último se integraron todos los módulos del proyecto y se probó el sistema en su

conjunto, dando como salida las coordenadas de los puntos de comienzo de las etapas

QRS.

A modo de ejemplo se presentan los resultados obtenidos para las señales 103 y 106 del

banco de señales ECG del MIT

Page 12: ECG Digital - Facultad de Ingeniería

12

Figura 8.1: señal 103 del MIT databank procesada y etiquetada.

Figura 8.2: detalle de señal 103 del MIT databank.

Page 13: ECG Digital - Facultad de Ingeniería

13

9. Conclusiones

Se probaron señales del banco de arritmia del MIT tanto en el micro como en matlab y

se obtuvieron resultados razonables con requisitos de procesamiento relativamente bajos

para el procesamiento y extracción de característica de una señal ruidosa.

La arquitectura de encolado de handlers y la modularidad del código hacen factible la

aplicación del proyecto a futuro.

Se debería haber invertido más tiempo de proyecto en mejores unit test para los

módulos por separado, esto hubiera reducido la carga de depurado de código sobre el

final del proyecto

Page 14: ECG Digital - Facultad de Ingeniería

14

10. Anexo

10.1. Conceptos del curso aplicados al proyecto

Comunicación UART de entrada y salida:

Se usaron módulos similares a los implementados para el laboratorio 5. Fue de

especial importancia para este proyecto seleccionar un baud rate que representase la

cadencia real de entrada de información al microcontrolador.

Problemas de datos compartidos:

La comunicación entre los datos obtenidos por la ISR y el contexto main presentaba

problemas de datos compartidos. Por lo cual se opto por implementar colas de datos.

Se opto por colas de datos por sobre otros métodos como semáforos ya que las colas

están adaptadas para bufferear datos de entrada de manera ordenada por lo que se

adaptaban a los requerimientos del sistema muy fácilmente.

Manejo de ISR:

Se opto por una arquitectura basada en encolado de handlers para lograr tener la

mayor flexibilidad a futuro en el agregado de tareas sin tener que estudiar el uso de

un RTOS

Page 15: ECG Digital - Facultad de Ingeniería

15

10.2. Especificación del proyecto

ECG digital

Integrantes:

Martín Bertran

Natalia Martínez

Julián Rodríguez

Tutor:

Juan Curto

Descripción del proyecto:

Diseñar la unidad de control de un dispositivo capaz de filtrar señales de ECG, detectar

frecuencia cardíaca y anomalías básicas.

Figura 1: Gráfico normal de un electrocardiograma.

En la Figura 1 se observa el aspecto normal de un electrocardiograma.

Las características que abordaremos en el proyecto son las detección del complejo QRS

(onda formada por los puntos QRS), detección de inicio y final del complejo QRS,

detección del pico y final de la onda T.

A partir de esas características se pueden deducir ciertos comportamientos anómalos del

corazón.

Se debe transmitir esta información al usuario a través de una pantalla LCD (en caso de

ser posible), o por la UART.

Se trata de un dispositivo de diagnóstico rápido o para monitoreo de pacientes desde el

hogar.

Se cuenta con una base de datos que contiene señales ECG para poder guardarlas en

memoria o a partir de otro procesador poder reproducirlas y así adquirirlas con el

instrumento en cuestión.

Page 16: ECG Digital - Facultad de Ingeniería

16

Antecedentes:

Módulo ECG:

*http://www.ti.com/solution/ecg_electrocardiogram

*Material del curso teórico y práctico de Ingeniería Biomédica referente a

electrocardiograma:

http://www.nib.fmed.edu.uy/curso_ib_2012.html

*Libro : “Ingeniería Biomédica perspectivas desde el Uruguay” compiladas por Franco

Simini.

*Banco de señales del MIT: http://www.physionet.org/physiobank/database/mitdb/

Objetivo del Proyecto:

Se desea lograr una unidad de control capaz de extraer ciertas características de las

señales recibidas usando determinados algoritmos. También se pretende transmitir esta

información al usuario y almacenar la señales en una memoria flash.

Las características a extraer son el comienzo y final del complejo QRS y el pico y el

final de la onda T.

A partir de esas características se pueden deducir ciertos comportamientos anómalos del

corazón, como puede ser una arritmia.

Se cuenta con los algoritmos de detección basados en DWT con onda madre Haar

implementados en Matlab. Entonces como primer objetivo se deberán implementar

estos algoritmos en C.

Luego de calculadas las características se deberá implementar un módulo de trasmisión

de la información adquirida a través de la UART.

También se estudiará la posibilidad de desplegar la onda y la información en un display.

Alcance del Proyecto:

En este proyecto, en principio no se resolverá el problema de la obtención de señales

debido a que no se cuenta con el hardware necesario para la correcta adquisición de las

mismas.

Se tomará una señal del banco y se la guardará en memoria para ser leída directo desde

allí. En una etapa posterior se leeran los datos de la UART conectandose con el PC. Se

estudiara en principio el banco de datos de arritmias del MIT-BIH.

La opción de desplegar datos en un display es algo que se evaluará y determinará con el

correr del proyecto. En caso de no ser posible utilizar un display LCD se evaluaran

opciones como display de 7 segmentos.

Los características extraídas se podrán enviar a través de una comunicación por medio

de la UART.

Descripción del sistema:

El sistema deberá identificar las caracteríticas señaladas de un ECG para poder, a partir

de ellas, detectar anomalías.

Tendrá que poder establecer una comunicación para que se puedan extraer dichos datos.

Page 17: ECG Digital - Facultad de Ingeniería

17

Si es posible la implementación de un display, este deberá mostrar alguna información

en su pantalla.

Figura 2: Diagrama de bloques general del sistema.

Requerimientos y restricciones del sistema:

En principio se supondra que se puede realizar el procesamiento en un MSP430 con

fclock=16MHz. En la primer etapa de evaluacion se pasara el codigo de extraccion de

características a C y se evaluara un estimativo grueso del ciclo de trabajo, en base a este

estimativo se decidira si se cambia a un microprocesador mas potente.

Diseño preliminar:

Hardware Adicional: En principio no se requerira HW adicional, en caso de ser posible

se evaluara añadir un display LCD.

Arquitectura de SW: Se evaluara el uso de una arquitectura basada en encolado de

funciones. Esto presenta una buena escalabilidad sin necesidad de usar un RTOS

Planificación:

Primer semana:

Implementar algoritmos en C.

Evaluar el peso del procesamiento para poder elegir entre el MSP430 o tener que

usar un microprocesador mejor.

Page 18: ECG Digital - Facultad de Ingeniería

18

Segunda semana:

Módulo de comunicación (UART) con preprocesamiento de la entrada.

Presentación de avance.

Tercera semana

Evaluar variacion de performance evaluando paquete MATH.

Módulo clasificador de ECG.

Cuarta y quinta semana:

Estudiar la posibilidad de un display.

Módulo salida al display (en caso de ser posible).

Documentación.

Page 19: ECG Digital - Facultad de Ingeniería

19

10.3. Planificación del proyecto

La planificación original del proyecto es la que se expone en las figuras 10.1 y 10.2.

Figura 10.1: Diagrama de Gant del proyecto.

Figura 10.2: Fechas planificadas de cada tarea.

Si bien las dos primeras semanas se coincidió bastante entre lo planificado y lo

realizado, a partir de la tercera semana se perdió esa similitud.

En parte porque se cambio de microcontrolador por uno cuya comunicación UART se

realizaba mediante el puerto USB y no con el DB9; pero lo que realmente hizo la

diferencia fueron los problemas que iban apareciendo ya con el proyecto avanzado.

Los primeros problemas fueron con la comunicación mediante UART. El problema de

los caracteres no imprimibles y de los tres caracteres iguales seguidos nos hizo perder

tiempo antes de encontrar lo que realmente estaba pasando.

Page 20: ECG Digital - Facultad de Ingeniería

20

Si bien esos problemas eran algo considerables, lo que realmente nos perjudicó fue el

encontrarnos que al unir todo el proyecto luego de haber probado cada parte por

separado, la memoria RAM del microcontrolador no era suficiente. Se tuvo que recortar

el proyecto por todos lados y adaptarlo a esa limitante con el tiempo jugando en contra.

La solución fue reducir todas las colas al máximo, tratando de ocupar solamente el

mínimo espacio necesario. También se cambiaron todos los números de flaot a int con

previa verificación del correcto funcionamiento de los algoritmos de búsqueda.

Otra medida que ayudó fue decimar la entrada, reduciendo así la cantidad muestras.

Utilizando Matlab se filtró la señal con pasabajos a la mitad de la frecuencia anterior y

se tomanron la mitad de las muestras. Se comprobó también que el filtrado no afectaba

el espectro de la señal de interés, por lo que no presentaba ningún cambio visible de

aspecto.

Si bien la búsqueda de la onda T estaba implementada y probada, se tuvo que omitir

para que el proyecto pudiese funcionar en el microcontrolador.

El depurado fue un proceso muy extenso. El depurado que se realizo en una etapa tardia

del proyecto (debido a tests modulares poco exhaustivos) requirio en promedio del

doble o triple de tiempo en aislar y corregir del que hubiese tomado en una detección

más temprana.

Otro aspecto que fue desfavorable con respecto al tiempo fue el estudio del uso de una

pantalla LCD. Se adquirió el hardware, se estudió el protocolo de comunicación y se

armó el circuito para poder conectarlo al microcontrolador, pero luego de muchas

pruebas se decidió abandonar la idea. Solo se determinó que el fracaso fue debido a un

problema eléctrico, ya que la pantalla no reaccionaba frente a los comandos emitidos.

En conclusión el tiempo que llevo realizar el proyecto fue muchas veces mayor al

estimado lo que habrá que tener en cuenta a futuras experiencias.