título: diseño de un nodo para el procesamiento de
TRANSCRIPT
, junio 2019
Título: Diseño de un nodo para el procesamiento de bioseñales
basado en la plataforma Arduino.
Autor: Ernesto Michel Rodríguez Hernández
Tutor: Dr.C. Miguel Arturo Mendoza Reyes
Departamento de Telecomunicaciones y Electrónica
Este documento es Propiedad Patrimonial de la Universidad Central “Marta Abreu” de Las
Villas, y se encuentra depositado en los fondos de la Biblioteca Universitaria “Chiqui
Gómez Lubian” subordinada a la Dirección de Información Científico Técnica de la
mencionada casa de altos estudios.
Se autoriza su utilización bajo la licencia siguiente:
Atribución- No Comercial- Compartir Igual
Para cualquier información contacte con:
Dirección de Información Científico Técnica. Universidad Central “Marta Abreu” de Las
Villas. Carretera a Camajuaní. Km 5½. Santa Clara. Villa Clara. Cuba. CP. 54 830
Teléfonos.: +53 01 42281503-1419
Hago constar que el presente trabajo de diploma fue realizado en la Universidad Central
“Marta Abreu” de Las Villas como parte de la culminación de estudios de la especialidad
de Ingeniería en Telecomunicaciones y Electrónica, autorizando a que el mismo sea
utilizado por la Institución, para los fines que estime conveniente, tanto de forma parcial
como total y que además no podrá ser presentado en eventos, ni publicados sin autorización
de la Universidad.
Firma del Autor
Los abajo firmantes certificamos que el presente trabajo ha sido realizado según acuerdo de
la dirección de nuestro centro y el mismo cumple con los requisitos que debe tener un
trabajo de esta envergadura referido a la temática señalada.
Firma del Tutor Firma del Jefe de Departamento
donde se defiende el trabajo
Firma del Responsable de
Información Científico-Técnica
i
PENSAMIENTO
“Los científicos estudian el mundo tal como es;
los ingenieros crean el mundo que nunca ha sido”
Theodore Von Karman (Físico húngaro-estadounidense)
ii
DEDICATORIA
A mis padres por ser el pilar de todo mi desarrollo y la fuerza que se necesita para avanzar
en la vida.
iii
AGRADECIMIENTOS
La realización de este Trabajo de Diploma ha sido una ardua tarea, que no podría haber
llevado a cabo si no fuese por las personas que de forma directa e indirecta han
colaborado en su desarrollo.
Por esta razón, me gustaría aprovechar para mostrar mi gratitud. En especial al que ha
sido mi tutor, el Dr.C. Miguel Arturo Mendoza Reyes, a todo su tiempo dedicado en
solucionar ciertos aspectos, sus rápidas repuestas y su gran optimismo. Toda su labor
como tutor ha sido espléndida, gracias por todo lo que he aprendido en este tiempo.
Quisiera agradecer a mi familia y amigos, por acompañarme, motivarme y entregarme su
apoyo incondicional a lo largo de todo este camino. Y por último no siendo menos
importante a mis padres, a quienes en gran parte les debo, por haber conseguido ser lo que
soy y por su incondicional apoyo, comprensión, esfuerzo, cariño y amor.
iv
TAREA TÉCNICA
Realizar búsqueda bibliográfica de los algoritmos más utilizados para el
procesamiento de las señales de presión arterial, electrocardiografía (ECG),
electromiografía (EMG) y la electroencefalografía (EEG).
Seleccionar algoritmos comunes al procesamiento de las bioseñales y establecer sus
principales requerimientos (memoria, capacidad de procesamiento, tasa de
muestreo, cantidad de canales, etc.).
Caracterización del módulo Arduino.
o Caracterización del módulo de conversión AD
o Caracterización de las opciones disponibles para el procesamiento de datos.
Estudio y utilización de la plataforma Arduino IDE para la programación de los
módulos.
Estudio de las potencialidades del módulo de transmisión.
o Transmisión de datos serie.
Firma del Autor Firma del Tutor
v
RESUMEN
El presente Trabajo de Diploma se enfoca en el diseño de un nodo de procesamiento de
bioseñales basándose en la plataforma Arduino. Se describen los principales algoritmos
para el procesamiento digital de bioseñales y su implementación en la plataforma de
desarrollo Arduino Duemilanove, teniendo en cuenta las particularidades del hardware y la
disponibilidad de bibliotecas para el procesamiento digital de señales. Se evalúa el
desempeño de los algoritmos de filtrado, transformada de Fourier y de cálculo de distancias
para diferentes modos de adquisición de los datos y tamaños de segmentos de señal. Los
resultados de las pruebas experimentales realizadas arribaron a que las funcionalidades de
los algoritmos implementados cumplen con las características necesarias para el
procesamiento de bioseñales condicionada por una cantidad de muestras específicas para
cada uno y que la plataforma de Arduino implementada, aunque favorece al procesamiento
digital de bioseñales presenta una capacidad de memoria limitada.
Palabras claves: Arduino, procesamiento digital de bioseñales, algoritmos principales
vi
TABLA DE CONTENIDOS
PENSAMIENTO ..................................................................................................................... i
DEDICATORIA .................................................................................................................... ii
AGRADECIMIENTOS ........................................................................................................ iii
TAREA TÉCNICA ................................................................................................................ iv
RESUMEN ............................................................................................................................. v
INTRODUCCIÓN .................................................................................................................. 1
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES EN
PROCESADORES DE BAJAS PRESTACIONES ............................................................... 6
1.1 Introducción al procesamiento digital de señales. .................................................... 6
1.1.1 Aplicaciones ...................................................................................................... 7
1.1.2 Aplicaciones en la medicina ............................................................................. 7
1.2 Señales de interés ..................................................................................................... 9
1.2.1 Bioseñales de interés ......................................................................................... 9
1.2.1.1 La señal de presión Arterial (PA) .................................................................. 9
1.2.1.2 La señal EMG ............................................................................................. 10
1.2.1.3 La señal ECG .............................................................................................. 10
1.2.1.4 La señal EEG ............................................................................................... 11
1.3 Algoritmos.............................................................................................................. 12
1.3.1 Detección de picos .......................................................................................... 13
1.3.2 Análisis de componentes principales (PCA) .................................................. 13
1.3.3 Fast Fourier Trasnform (FFT) ....................................................................... 13
1.3.4 Discret Wavelet Transform (DWT) ................................................................ 14
1.3.5 Wigner-Ville Distributions (WVD) ................................................................ 14
1.3.6 Blind Source Separation (BSS) ...................................................................... 15
1.3.7 Algoritmos de Filtrado .................................................................................... 15
vii
1.3.8 Algoritmos de medidas de distancias y similitud ........................................... 15
1.4 Plataformas para el procesamiento de señales ....................................................... 16
1.4.1 Sistema de medición ideal de bioseñales ........................................................ 17
1.5 Plataformas de HW basadas en Arduino ................................................................ 18
1.5.1 Familia Arduino .............................................................................................. 19
1.5.2 Módulo Arduino Pro-Mini .............................................................................. 20
1.5.3 Módulos acoplables al Arduino. ..................................................................... 22
1.5.4 Módulo Wi-Fi ................................................................................................. 24
1.6 Conclusiones del capítulo ...................................................................................... 24
CAPÍTULO 2. MATERIALES Y MÉTODOS ................................................................ 26
2.1 Diagrama en bloques del sistema implementado ................................................... 26
2.2 Bloque de adquisición ............................................................................................ 27
2.3 Bloque del Conversor Análogo/Digital (ADC) ...................................................... 28
2.4 Bloque de procesamiento ....................................................................................... 29
2.4.1 Algoritmos de filtrado ..................................................................................... 29
2.4.2 Algoritmo de la Transformada Rápida de Fourier (FFT) ............................... 31
2.4.3 Algoritmos de medidas de distancia y similitud ............................................. 32
2.5 Bloque de Transmisión (Tx) .................................................................................. 33
2.6 Plataforma de desarrollo HW y SW. ...................................................................... 35
2.6.1 Arduino Duemilanove ..................................................................................... 35
2.6.2 Entorno de desarrollo integrado para Arduino (IDE). .................................... 37
2.6.3 Lenguaje de programación del IDE de Arduino. ............................................ 38
2.6.4 MatLab ............................................................................................................ 39
2.7 Conexión entre el Arduino y el ESP-01 ................................................................. 39
2.8 Escenarios de prueba .............................................................................................. 40
2.8.1 Experimentos de evaluación del ADC ............................................................ 40
2.8.2 Experimentos de prueba de los algoritmos ..................................................... 42
2.8.2.1 Algoritmos de filtrado y la FFT .................................................................. 42
viii
2.8.2.2 Algoritmo de cálculo de distancia y similitud ............................................. 43
2.9 Conclusiones del capítulo ...................................................................................... 44
CAPÍTULO 3. ANÁLISIS DE RESULTADOS .............................................................. 45
3.1 Conversor ADC ...................................................................................................... 45
3.2 Algoritmo de filtrado .............................................................................................. 49
3.3 Algoritmo de la FFT............................................................................................... 52
3.4 Algoritmo de cálculo de distancia y similitud ........................................................ 54
3.5 Conclusiones del capítulo ...................................................................................... 56
CONCLUSIONES Y RECOMENDACIONES ................................................................... 57
Conclusiones ..................................................................................................................... 57
Recomendaciones ............................................................................................................. 58
REFERENCIAS BIBLIOGRÁFICAS ................................................................................. 59
ANEXOS .............................................................................................................................. 67
Anexo I. Programación del algoritmo de filtrado ............................................................. 67
Anexo II. Programación del algoritmo de la FFT ............................................................. 72
Anexo III. Programación del algoritmo de cálculo de distancia y similitud .................... 77
Anexo IV. Programación del algoritmo para la adquisición de señales ........................... 85
INTRODUCCIÓN 1
INTRODUCCIÓN
La adquisición y análisis de los biopotenciales del cuerpo humano es de gran importancia
para el diagnóstico, monitorización de signos vitales y en general para aplicaciones
biomédicas. A su vez las comunicaciones inalámbricas cada vez son más utilizadas en el
ámbito de la adquisición, análisis y transmisión de señales fisiológicas, permitiendo la
realización del monitoreo en tiempo real de los signos vitales de manera que un paciente
pueda recibir atención médica inmediata en cualquier lugar y en cualquier momento. El
desarrollo de las aplicaciones inalámbricas ha permitido la aparición de dispositivos de bajo
costo y pequeño tamaño, facilitando su integración en variados entornos, lo cual ha tenido
como resultado la reducción de costos, la mejora de los equipos y un mejor manejo de los
pacientes [1].
En los últimos años el avance en la microelectrónica y el rápido desarrollo de las
tecnologías de la información y la comunicación (TICs), han abierto innumerables
posibilidades en el intercambio de la información en materia de salud, haciendo posibles
nuevas formas de asistencia, incluso realizadas a distancia entre el profesional médico y el
paciente. Cada vez más pacientes acuden a consultas en línea. Los médicos ahora pueden
compartir la información en tiempo real. Casos como las heridas, dermatitis, otitis o dolores
de garganta, actualmente pueden ser examinados por médicos con cámaras digitales a
través de Internet, en turnos que cubren las 24 horas día. La telemedicina es usada con más
frecuencia en zonas rurales, asilos de ancianos, cruceros, prisiones, el ejército y las
misiones espaciales [2], [3].
Para el desarrollo de la telemedicina, una de las etapas fundamentales, es el diseño de
equipos que permitan el monitoreo de bioseñales, para su posterior transmisión por redes de
datos como Internet. En este sentido, se han desarrollado gran cantidad de investigaciones,
INTRODUCCIÓN 2
desde sistemas de monitoreo inalámbrico de una sola variable fisiológica [4], hasta
completas centrales de monitoreo, dada su importancia para realizar intervenciones
oportunas en pacientes ambulatorios, hospitalizados e inclusive en deportistas [5],[6],[7].
Este trabajo propone el diseño de un sistema para el monitoreo inalámbrico de señales
biomédicas de bajo costo como una alternativa tecnológica que permita la adquisición,
procesamiento y transmisión de bioseñales, mediante la implementación de algoritmos
utilizando nodos inalámbricos basados en la plataforma Arduino.
Situación del problema
¿Es viable el diseño de un nodo para el procesamiento de bioseñales utilizando el Arduino
teniendo en cuenta la capacidad de procesamiento y almacenamiento del mismo?
Antecedentes
En la historia de la medicina, el apoyo en recursos técnicos para complementar los sentidos
humanos u otro tipo de habilidades, utilizadas para tratar de diagnosticar enfermedades,
dolencias o condiciones médicas, no se dio sino hasta un período relativamente reciente. Es
evidente que lo anterior ha ido de la mano de los avances logrados en campos como la
instrumentación electrónica [8], [9].
El desarrollo de las telecomunicaciones le permite a los médicos acceder a aplicaciones de
la denominada “Telemedicina” [10], que permiten observar y entrevistar un paciente
ubicado en un sitio alejado de la clínica o centro médico. Hoy en día existen muchos
ejemplos de tecnologías domiciliarias de telemonitorización, estos utilizan sensores
basados en la plataforma Arduino, alcanzando un desarrollo progresivo a partir de la
existencia de múltiples módulos que le son acoplables [11]. Existen, por ejemplo,
brazaletes para la medición de la presión arterial, medidores de glucosa, pulsioxímetros y
monitores cardíacos para pacientes con condiciones cardíacas o diabetes, los cuales pueden
transmitir sus signos vitales desde el confort de su hogar al profesional de asistencia médica
y obtener realimentación o recomendaciones de seguimiento cuando sea necesario [12],
[13]. Actualmente, se cuenta con herramientas que permiten realizar la monitorización
continua de pacientes en entornos como el laboral, el domiciliario, entre otros. Es entonces
que se hace necesario que el paciente o persona bajo observación porte los sensores, los que
INTRODUCCIÓN 3
han resultado dispositivos muy modernos desde el punto de vista de las comunicaciones, el
nivel de miniaturización, el acondicionamiento y procesamiento de las señales. Sin
embargo los diseñadores de sensores afrontan grandes retos en cuanto a los requerimientos
de confiabilidad clínica, de consumo de energía, de confort y fiabilidad para el usuario final
[14].
La creciente tecnología “vestible” o “ponible” (wearables) y su papel en la sociedad del
siglo en curso, representa una catapulta hacia nuevas y mejoradas metodologías de control
y monitoreo del individuo moderno. Los dispositivos “vestible” utilizados en la salud han
influido en la reinvención de la indumentaria electrónica y sus sensores basados en
Arduino, teniendo la capacidad de registrar la movilidad y generar indicadores de salud o
sintomatología, logrando como resultado la reducción de costos, la mejora de los equipos y
un mejor manejo de los pacientes [15]–[17]. En el ámbito comercial, existen productos
wearables para el monitoreo de signos vitales. La empresa AiQ SMART CLOTHING, se
dedica al desarrollo de indumentaria para el monitoreo de bioseñales de las personas que
trabajan en zonas de oscuridad, baja temperatura o en presencia de radiación
electromagnética. Estos productos utilizan una combinación de telas e hilos conductores y
textiles comunes que permiten la adquisición de información que es procesada y
transmitida hacia dispositivos de monitoreo [18], [19].
NUUBO es una empresa que se especializa en el monitoreo del corazón, a través de
electrodos textiles. La información es presentada mediante aplicaciones multiplataforma
instaladas en dispositivos móviles de gama alta [20].
La empresa HEXOSKIN desarrolla dispositivos wearables comerciales, con la capacidad
de sensar el ritmo cardíaco y su variabilidad durante la actividad física y el estrés. Se mide
también la, frecuencia respiratoria y el volumen de aire, y la información se transmite a
través de comunicación Bluetooth a un terminal móvil de monitoreo [21].
HEALTHWATCH comercializa dispositivos wearables que permiten conocer la actividad
cardíaca, la respiración y la temperatura, a través de un dispositivo móvil o en forma
remota por internet. Su herramienta principal está compuesta por electrodos no adhesivos y
sensores desarrollados a base de hilos y sustratos conductores que se incorporan a prendas
INTRODUCCIÓN 4
de vestir de uso diario, con propiedades resistentes al agua y de utilización recomendable
para adultos mayores [22].
Hasta la actualidad, en nuestro entorno no se han registrado referencias bibliográficas que
demuestren el empleo del Arduino en el diseño de nodos inalámbricos para la adquisición y
procesamiento de bioseñales.
Objetivo general:
Proponer el diseño de un nodo para el procesamiento de bioseñales basado en la plataforma
Arduino.
Objetivos específicos:
Determinar, a partir de los parámetros de la plataforma Arduino, las potencialidades
del mismo para el procesamiento de señales.
Evaluar el desempeño de algoritmos para el procesamiento de bioseñales
implementados en la plataforma Arduino.
Interrogantes Científicas
¿Cuáles son los algoritmos más utilizados para el procesamiento de las bioseñales?
¿Qué plataformas Arduino existen para el procesamiento de las bioseñales
seleccionadas?
¿Qué características presenta la plataforma Arduino para el procesamiento de
bioseñales?
¿Qué módulo de transmisión puede ser utilizado para la conformación del nodo de
procesamiento de bioseñales?
Tareas de investigación
Realizar búsqueda bibliográfica de los algoritmos más utilizados para el
procesamiento de las señales de presión, electrocardiografía (ECG),
electromiografía (EMG) y la electroencefalografía (EEG).
INTRODUCCIÓN 5
Seleccionar algoritmos comunes al procesamiento de las bioseñales y establecer sus
principales requerimientos (memoria, capacidad de procesamiento, tasa de
muestreo, cantidad de canales, etc.).
Caracterización del módulo Arduino.
o Caracterización del módulo de conversión AD
o Caracterización de las opciones disponibles para el procesamiento de datos.
Estudio y utilización de la plataforma Arduino IDE para la programación de los
módulos.
Estudio de las potencialidades del módulo de transmisión.
o Transmisión de datos serie.
Estructura del Trabajo:
El informe de la investigación estará conformado por Introducción, Capitulario,
Conclusiones, Recomendaciones, Referencias bibliográficas y Anexos.
En la Introducción se dejará definida la importancia, actualidad y necesidad de la
investigación y se dejarán explícitos los elementos del diseño teórico.
En el Capítulo I se hará énfasis en la necesidad de la adquisición, procesamiento digital y la
transmisión de bioseñales en el entorno de una red Wi-Fi, la caracterización de las mismas,
así como la caracterización de la plataforma Arduino.
En el Capítulo II se hace referencia al diseño estructural y a los programas diseñados
adaptados para el procesamiento de los diferentes tipos de bioseñales. Se describen además
las principales herramientas de desarrollo utilizadas para realizar la propuesta de diseño y
los escenarios para su evaluación experimental.
El Capítulo III se presenta el análisis de los resultados de los experimentos realizados.
Las Conclusiones muestran un resumen de los resultados obtenidos y están en función del
cumplimiento de los objetivos propuestos. Mientras que en las Recomendaciones se
propone estudios futuros que se derivan de la evaluación de los resultados de la propuesta.
La Referencias bibliográficas y los Anexos permiten profundizar en los temas tratados en
este informe.
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
6
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES EN
PROCESADORES DE BAJAS PRESTACIONES
El presente capítulo realiza un análisis de la panorámica del procesamiento digital de
señales mediante procesadores de bajas prestaciones. Se presenta sus principales
características y se especifican las particularidades del despliegue de estos en el entorno
actual, haciendo énfasis en sus aplicaciones, algoritmos, plataformas de desarrollo
empleadas y aspectos más relevantes que permiten su elección.
1.1 Introducción al procesamiento digital de señales.
Se puede decir que cuando se realiza cualquier proceso digital para modificar la
representación digital de una señal se logra un procesado digital. El procesamiento digital
de señales se ocupa de la representación, transformación y manipulación de señales
discretas desde el punto de vista de la información que contienen [23] [24].
Esta área de la ciencia y la ingeniería se ha desarrollado muy rápidamente a lo largo de los
últimos cuarenta años como resultado de los importantes avances tanto en la tecnología
digital en el campo de la informática como en la fabricación de procesadores de bajas
prestaciones [25].
Cada vez tiene mayor importancia en la ingeniería el procesado de señales digitales,
tendencia que ha estado catalizada por el aumento de la potencia de los ordenadores, unido
a la drástica disminución de los precios. Tan así es que en el mercado existen desde hace
años procesadores específicos para el procesamiento digital, denominados por sus siglas en
inglés DSP (Digital Signal Processor) [26]. El procesamiento digital de señales utiliza
información codificada en forma de secuencia de mediciones numéricas. En la mayoría de
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
7
los casos, estas señales provienen de datos monitoreados desde el mundo real:
biopotenciales, vibraciones sísmicas, imágenes, ondas del sonido, etc. El procesamiento
digital es la matemática, el algoritmo y las técnicas usadas para manipular estas señales
después de que hayan sido convertidas en su forma digital [27].
En el procesamiento digital de señales, el tratamiento de las señales ha sido muy usual en
dos maneras diferentes. La primera, para acondicionar la señal adquirida rechazando el
ruido e interferencia presente en la misma mediante el empleo de filtros digitales [28],
[29]; y la segunda, para interpretar las propiedades de los datos obtenidos, [30], [31], como
en la identificación de la morfología de una señal bioeléctrica o en la identificación de
objetos.
1.1.1 Aplicaciones
Son muchas las aplicaciones en las cuales ha contribuido el procesamiento digital de
señales mediante el empleo de procesadores de bajas prestaciones. Por lo que es
importante mencionar algunos campos en los cuales se ha incursionado desde varios años
atrás, siendo una alternativa viable en la automatización de procesos y control de eventos
hacia las redes inteligentes, como ejemplo de estas aplicaciones a nivel general se tiene: el
uso de sensores en la agricultura, siendo una de las primeras aplicaciones; el monitoreo de
incendios forestales; la detección y predicción de posibles deslizamientos de tierra, sobre
todo en situaciones climáticas de intensas lluvias y nieve derretida; y el monitoreo de
estructuras físicas como puentes y edificios, enfocándose en aplicaciones de hogares
inteligentes (smart home) [32]–[35].
1.1.2 Aplicaciones en la medicina
En el campo de la medicina y cuidado de la salud se han desarrollado una serie de
proyectos basados en los procesadores de bajas prestaciones que pueden estar asociados a
diferentes situaciones que afectan al ser humano. Es preciso nombrar algunas aplicaciones
que se relacionan directamente con el aspecto médico y cuidado de la salud [36]:
Cardio Sentinal: A 24-hour Heart Care and Monitoring System [37]: Aplicación con
sensores para el monitoreo remoto de señales cardíacas con teléfonos inteligentes
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
8
(smartphones) activo las 24 horas del día. Este estudio se refiere a un control continuo
de pacientes con problemas cardiacos y toda la infraestructura necesaria para actuar en
un determinado momento, en la arquitectura de este sistema se incorpora el uso de
smartphones y sensores ECG principalmente.
Real Time Healthcare System for Patients with Chronic Diseases in Home and Hospital
Environments [38]: Es una aplicación que propone la captura de datos en tiempo real
mediante sensores fisiológicos, se comunica al gateway que puede ser un smartphones
o un computador personal.
Unobstructive Body Area Networks (BAN) for Efficient Movement Monitoring [39]:
Aplicación piloto simulada, trabaja con el protocolo Bluetooth y Zigbee (802.15.4),
propone un sistema redundante en caso de que falle un protocolo, utiliza sensores
fisiológicos y sensores biocinéticos.
Robust medical adhoc sensor networks (MASN) with wavelet-based ECG data mining
[40]: Es una de las aplicaciones clásicas que junto con otras como “Codeblue” de la
Universidad de Harvard y MEDiSN [41] fueron las precursoras de los tratamientos
médicos y control de enfermedades con la tecnología y específicamente con el uso de
sensores. Esta aplicación ha seguido innovando y su enfoque hacia la transmisión en
tiempo real la hace vigente, utiliza diferentes protocolos y diferentes sensores.
Ubiquitous healthcare service using Zigbee and mobile pone for elderly patients [42],
aplicación piloto dirigida a 29 pacientes para el control de signos vitales en pacientes de
edad avanzada, utiliza sensores fisiológicos, el protocolo elegido es el Zigbee
(802.15.4) y como gateway utiliza un smartphone.
Resource-aware Secure ECG Healthcare Monitoring Through Body Sensor Networks
[43]: Prototipo de desarrollo de una aplicación inalámbrica para el monitoreo de señales
cardíacas en un paciente con redes WSN, trabaja con sensores fisiológicos, con
protocolos de red de la familia IEEE 802.11, como gateway propone smartphones.
Monitor de señales de electrocardiografía y frecuencia cardíaca mediante un
smartphone con el protocolo de comunicación Bluetooth [44], aplicación de tratamiento
local de señales cardíacas a un paciente, con captura en tiempo real y visualización de la
información en un celular. Usa el protocolo Bluetooth y sensores fisiológicos.
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
9
Actualmente la tecnología ha estado en caminada a la implementación de dispositivos
wearables (dispositivos inteligentes que puedes usar como parte de tu vestimenta). Estos no
son más que dispositivos y/o aplicaciones que permiten monitorear diferentes parámetros
usualmente relacionados con el cuidado de la salud. Son herramientas que van más allá de
la tecnología encontrada en smartphones o tablets, y que permiten al usuario tener un
acceso directo a datos relacionados con su estado físico.
Enfermedades comunes como las arritmias cardíacas o la diabetes mellitus pueden ser
monitoreadas hoy en día mediante el uso de dispositivos wearables. Relojes inteligentes,
aplicaciones móviles para smartphones, e incluso lentes de contacto que miden y registran
los niveles de glucosa en sangre, son ejemplos de wearables diseñados para mejorar la
calidad de vida de las personas que padecen de diferentes enfermedades.
1.2 Señales de interés
Una señal es un signo, un gesto u otro tipo de informe o aviso de algo. La señal sustituye,
por lo tanto, a la palabra escrita o al lenguaje. Ellas obedecen a convenciones, por lo que
son fácilmente interpretadas.
En el procesamiento digital las más estudiadas son: la señal de voz, señales sísmicas, señal
de video y las señales biomédicas [45]–[49].
1.2.1 Bioseñales de interés
1.2.1.1 La señal de presión Arterial (PA)
La presión sanguínea o presión arterial es el resultado de la presión ejercida en el sistema
vascular por la sangre expulsada durante la contracción del corazón, la cual se propaga por
las paredes de las arterias, venas y vasos capilares en forma de onda [50].
La presión arterial varía de forma semejante a una función sinusoidal representando las
distintas etapas del ciclo cardíaco lo cual permite distinguir la presión sistólica que es
definida como el máximo de la curva de presión en las arterias durante la sístole y la
presión arterial diastólica que es el valor mínimo de la curva de presión durante este
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
10
período. Las componentes fundamentales de frecuencia de esta señal varían desde el nivel
de corriente directa (DC, direct current) hasta 50 Hz [51].
Parámetros de la PA
PA Sistólica o systolic blood pressure (SBP): corresponde al valor máximo de la
tensión. Se presenta cuando el corazón se contrae (sístole). Los niveles normales en
un adulto están entre: 90-140 mmHg.
PA Diastólica o diastolic blood pressure (DBP): corresponde al valor mínimo de
tensión. Se presenta entre los latidos del corazón, momento en el cual se encuentra
en relajación (diástole). Los niveles en un adulto deben estar entre 60 y 90 mmHg.
Intervalo de pulso o pulse interval (PI): es el intervalo de tiempo entre cada pico de
la onda de PA.
1.2.1.2 La señal EMG
La EMG consiste en registrar la actividad eléctrica producida por los músculos del cuerpo.
La actividad eléctrica surge cuando una unidad motora es activada por el sistema nervioso
del cuerpo: una unidad motora consiste en un motor neuronal, y todas las fibras musculares
a la que está conectada. Cuando se activa la unidad motora, se genera un voltaje (llamado
MUAP) y se contraen los músculos. Entonces, la señal EMG consiste en medir la suma de
varios MUAPs de uno o más músculos específicos. Con respecto a la clasificación, se trata
de una señal permanente, dinámica y eléctrica, ya que no puede ser inducida externamente
y varía mucho en el tiempo. El rango de la amplitud de una señal EMG es de
aproximadamente 0 mV a 10 mV, y su frecuencia de 0Hz a 500Hz. Sin embargo, el rango
dominante de energía de la señal es de los 50Hz a 150Hz. Por lo tanto, se debe muestrear al
menos a 300Hz [52].
1.2.1.3 La señal ECG
La electrocardiografía es una técnica no invasiva que registra la actividad eléctrica del
corazón, permitiendo estudiar y detectar diversas patologías. Estas son, según su aparición
temporal en los datos: onda P, Q, R, S, T y U. De todas ellas, las ondas Q, R y S forman el
complejo más importante, debido a que facilita la localización de las otras componentes,
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
11
además de informar de comportamientos anómalos del corazón, como contracción
ventricular/auricular prematura, taquicardia supraventricular, latidos ectópicos, etc. [54].
El registro de los datos ECG suele realizarse mediante mediciones bipolares sobre el tronco
o las extremidades, situando los electrodos en zonas libres de musculatura para minimizar
la interferencia de EMG. Sobre el tronco, uno de los esquemas más comunes es fijar los
electrodos a la clavícula derecha y la zona de las costillas flotantes en la parte izquierda del
torso. Esta configuración permite detectar diferentes anomalías cardíacas, y su uso es
recomendable cuando el sujeto tiene que realizar algún tipo de actividad que implique
movimientos en las extremidades. Respecto al montaje sobre las extremidades, existen tres
tipos diferentes: tipo I, los electrodos se fijan sobre ambas muñecas, tipo II, los electrodos
se emplazan sobre la muñeca derecha y el tobillo izquierdo, y tipo III, los electrodos se
sitúan sobre las extremidades izquierdas, muñeca y tobillo. Estos montajes suelen ser más
cómodos, aunque pueden limitar la movilidad del sujeto y son más sensibles a artefactos
derivados de las contracciones musculares [55].
La señal ECG necesita ser acondicionada, debido a su baja amplitud en voltaje, que hace
que sea necesario adaptarlas de la tal forma que pueda ser procesada por el Arduino. La
primera etapa de adaptación las corrientes Iónicas, ingresan a los transductores y se
convierten en corrientes eléctricas de bajo voltaje, posteriormente, en el amplificador la
señal eléctrica se amplifica en modo diferencial y se rechaza en modo común (A=1000),
luego pasa por los filtros los cuales eliminan los componentes espectrales de alta y baja
frecuencia, por último se elimina el ruido de la red eléctrica, para obtener una señal
eléctrica con una amplitud mayor a 2.5 V y con un ancho de banda de 0.50Hz a 150HZ
cumpliendo con regulaciones internacionales en sistemas de señales ECG [56].
1.2.1.4 La señal EEG
La EEG detecta la actividad eléctrica de las neuronas, es decir, del cerebro. Con respecto a
la clasificación, se trata de una señal permanente, ya que no debe ser inducida
externamente, dinámica, ya que varía mucho en el tiempo, y eléctrica. Los dispositivos
utilizados para realizar un electroencefalograma cuentan con una determinada cantidad de
electrodos que miden el nivel de potencial eléctrico en µV. Al utilizar uno de estos
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
12
dispositivos, la señal digital que se obtiene es el nivel de potencial eléctrico en cada
electrodo. El electroencefalograma ha sido una herramienta de diagnóstico y estudio del
cerebro durante casi todo el siglo XX y XXI. Recientemente, se lo ha comenzado a utilizar
para inferir y detectar algún patrón cognitivo reflejado en las señales que permita transferir
información. Así aparece el concepto de Brain-computer Interface (BCI), BCI es un
método de comunicación basado en la actividad neuronal generada por el cerebro. El
objetivo de BCI no es determinar el pensamiento de una persona observando su actividad
neuronal, sino que es proveer un nuevo canal de salida para el cerebro que requiere una
adaptación de control voluntaria por parte del usuario [57].
Al aplicar la Transformada de Fourier a la señal EEG, se obtienen distintas frecuencias. En
EEG, dichas frecuencias se dividen en cinco bandas:
Alfa (α): 8Hz ≤ f ≤ 13Hz. Las ondas Alfa se suprimen cuando los ojos se encuentran
abiertos y hay estimulación visual presente. Cuando los ojos se encuentran cerrados,
estas aumentan.
Beta (β): 13Hz ≤ f ≤ 30Hz. Las ondas Beta se asocian la concentración y aparecen
como actividad de fondo en sujetos ansiosos.
Delta (δ): 0.5Hz ≤ f ≤ 4Hz. Estas ondas aparecen en etapas de sueño profundo.
Theta (θ): 4Hz ≤ f ≤ 8Hz. Las ondas Theta aparecen en las primeras etapas de
sueño.
Gamma (γ): 30Hz ≤ f ≤ 60Hz. Algunos expertos consideran los valores de > 30Hz
como una quinta banda.
Como las frecuencias de interés abarcan hasta por los menos los 60Hz, se debe muestrear al
menos a 120Hz. Como se mencionó anteriormente, muchas veces se utiliza una frecuencia
de muestreo mayor y por lo general en EEG, se utiliza una frecuencia de muestreo superior
a los 200Hz [58].
1.3 Algoritmos
Debido a las simplificaciones en los procesos de diseño de sistemas digitales y
considerando la predictibilidad en el incremento de las capacidades de procesamiento y
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
13
memoria (por ejemplo, por medio de la Ley de Moore), se acostumbra desarrollar los
modernos y complejos algoritmos para el tratamiento digital de señales. Cuando se trata de
análisis, se requieren varias técnicas de procesamiento de señales para tratar la compresión
de datos, la reducción de ruido, la clasificación y la extracción de características.
1.3.1 Detección de picos
Entre los algoritmos de detección de picos se encuentran los algoritmos detector de
complejos QRS permite identificar la localización temporal de complejos QRS en una señal
ECG [59]. Entre los más usados se encuentra el algoritmo de Holsinger [60], este se basa
en medir la tasa de cambio de la señal ECG e identificar cuando ese valor es superior a un
umbral definido en un punto t, y por otro lado se tiene el algoritmo de Hamilton-Tompkins
presentado en [61], este es un elemento estándar para identificar la localización temporal de
complejos QRS.
1.3.2 Análisis de componentes principales (PCA)
El análisis de componentes principales (en español ACP, en inglés, PCA) es una técnica
utilizada para describir un conjunto de datos en términos de nuevas variables
("componentes") no correlacionadas. Los componentes se ordenan por la cantidad de
varianza original que describen, por lo que la técnica es útil para reducir la dimensionalidad
de un conjunto de datos. Técnicamente, el ACP busca la proyección según la cual los datos
queden mejor representados en términos de mínimos cuadrados. Esta convierte un conjunto
de observaciones de variables posiblemente correlacionadas en un conjunto de valores de
variables sin correlación lineal llamadas componentes principales. El ACP se emplea sobre
todo en análisis exploratorio de datos y para construir modelos predictivos. El ACP
comporta el cálculo de la descomposición en autovalores de la matriz de covarianza,
normalmente tras centrar los datos en la media de cada atributo [62].
1.3.3 Fast Fourier Trasnform (FFT)
La Transformada Rápida de Fourier (FFT) es un algoritmo eficiente que permite calcular la
transformada de Fourier discreta (DFT) y su inversa. La FFT es de gran importancia en una
amplia variedad de aplicaciones, desde el tratamiento digital de señales y filtrado digital en
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
14
general a la resolución de ecuaciones en derivadas parciales o los algoritmos de
multiplicación rápida de grandes enteros. Cuando se habla del tratamiento digital de
señales, el algoritmo FFT impone algunas limitaciones en la señal y en el espectro
resultante ya que la señal muestreada y que se va a transformar debe consistir de un número
de muestras igual a una potencia de dos [63]. La mayoría de los analizadores de FFT
permiten la transformación de 128, 512, 1024, 2048 o 4096 muestras. El rango de
frecuencias cubierto por el análisis FFT depende de la cantidad de muestras recogidas y de
la frecuencia de muestreo.
1.3.4 Discret Wavelet Transform (DWT)
La Transformada Discreta de Wavelet (DWT) [64], se utiliza para la compresión tanto de
imágenes como de audio. En el proceso de análisis de la Wavelet, las señales son
representadas utilizando un grupo de funciones básicas producidas por el desplazamiento y
el escalado de una función madre o función principal. La transformada Wavelet es una
descomposición de una señal en frecuencias. La Transformada Discreta Wavelet
unidimensional descompone recursivamente la señal de entrada [65].
1.3.5 Wigner-Ville Distributions (WVD)
La función de distribución de Wigner (WDF) se utiliza en el procesamiento de señales
como una transformación en el análisis de tiempo-frecuencia [66]. El WDF se propuso por
primera vez en física para explicar las correcciones cuánticas a la mecánica estadística
clásica en 1932 por Eugene Wigner, y es de importancia en la mecánica cuántica en el
espacio de fase (véase, a modo de comparación: la distribución de cuasi probabilidad de
Wigner, también llamada Función de Wigner o la distribución de Wigner-Ville). Dada la
estructura algebraica compartida entre pares de posición-momento y conjugados de tiempo-
frecuencia, también sirve de manera útil en el procesamiento de señales, como una
transformación en el análisis de tiempo-frecuencia, el tema de este artículo. En
comparación con una transformada de Fourier de corta duración , como la transformada de
Gabor , la función de distribución de Wigner puede proporcionar una mayor claridad en
algunos casos [67].
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
15
1.3.6 Blind Source Separation (BSS)
La Separación Ciega de Fuentes (Blind Source Separation, BSS) consiste en la estimación
de un conjunto de señales fuente, de las cuales a priori no se conoce su naturaleza, a partir
de una serie de medidas que son una función desconocida de dichas señales fuente [68]. La
idea es extraer sólo las fuentes de interés que se encuentran en las mezclas recibidas. Una
forma alternativa de obtener todas las fuentes de interés de una mezcla, es extraer las
fuentes de la mezcla una a una y luego realizar la deflación sobre el vector de mezclas de la
fuente extraída.
1.3.7 Algoritmos de Filtrado
Se trata de métodos para resaltar o suprimir, de forma selectiva, información contenida en
una imagen a diferentes escalas espaciales, para destacar algunos elementos de la imagen, o
también para ocultar valores anómalos. El proceso de filtrado consiste en la aplicación a
cada uno de los pixeles de la imagen de una matriz de filtrado de tamaño NxN
(generalmente de 3x3, aunque puede ser mayor) compuesta por números enteros y que
genera un nuevo valor mediante una función del valor original y los de los pixeles
circundantes. El resultado final se divide entre un escalar, generalmente la suma de los
coeficientes de ponderación [69]–[72].
1.3.8 Algoritmos de medidas de distancias y similitud
Gran parte de los algoritmos que trabajan con puntos en un espacio multidimensional, en el
que está representadas sus características, consideran que dos puntos son más similares
cuanto menor sea la distancia entre ellos. Para medir dicha distancia se utilizan métricas de
distancia. Una métrica de distancia definida en un conjunto X de puntos, es una función 𝑑 ∶
𝑋𝑥𝑋 → 𝑅 (siendo R el conjunto de los números reales), que satisface ciertas condiciones.
En particular, para que d sea una métrica, debe cumplirse (para todo 𝑥, 𝑦, 𝑧 ∈ 𝑋):
𝑑(𝑥, 𝑦) ≥ 0, Axioma de no negatividad (1.1)
𝑑(𝑥, 𝑦) = 0 ↔ 𝑥 = 𝑦, Identidad (1.2)
𝑑(𝑥, 𝑦) = 𝑑(𝑦, 𝑥), Simetría (1.3)
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
16
𝑑(𝑥, 𝑧) ≤ 𝑑(𝑥, 𝑦) + 𝑑(𝑦, 𝑧), Desigualdad triangular (1.4)
Las condiciones 1.1, 1.2, 1.3 y 1.4 expresan nociones intuitivas acerca del concepto de
distancia. La condición 1.1 establece que la distancia entre dos puntos no puede ser
negativa. La condición 1.2 establece que la distancia alcanza su valor mínimo (cero)
cuando los puntos son idénticos. La condición 1.3 establece que la distancia entre dos
puntos es simétrica y es igual desde cualquier de los dos puntos que se mide. Finalmente, la
condición 1.4 establece que la distancia directa entre dos puntos es siempre menor o igual a
la distancia entre dichos puntos a través de un punto intermedio [73].
Existe una amplia variedad de métricas de distancia, tales como: la métrica discreta, la
métrica euclidiana, la métrica de Chebyshev, la métrica de Manhattan, la métrica de
Minkowsky, entre otras.
1.4 Plataformas para el procesamiento de señales
Las plataformas de desarrollo son pequeñas placas electrónicas con circuitos impresos, cada
una de ellas han sido fabricadas para distintas aplicaciones dependiendo de las
características que poseen. Ofrecen compatibilidad con un sin número de dispositivos, entre
los cuales están los sensores, los módulos inalámbricos con tecnologías específicas, las
tarjetas de memoria micro SD, entre otros; haciendo viable el uso en diseños de redes de
sensores inalámbricos de forma rápida y sencilla. Constan de E/S (entradas y salidas)
análogas y digitales, puertos de conexiones seriales, USB, plug para alimentación externa,
reguladores de voltaje, indicadores de transmisión y recepción, memoria, entre otras
características propias incluidas por cada diseñador. A más de que integran un software de
programación según el sistema operativo (Windows o Linux) que esté implementado dentro
de la placa [74].
Actualmente, en el mercado, se encuentran múltiples tarjetas que han ido evolucionando y
presentando mayores prestaciones y capacidad de operación que las versiones anteriores,
entre las que se citan: Arduino, Intel Galileo, Raspberry Pi y Libelium Waspmote, ver
Tabla 1.1.
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
17
Tabla 1.1. Comparación entre plataformas de desarrollo
Características Arduino Pro Mini Intel Galileo
Gen1
Raspberry Pi
(Model B) Waspmote
Procesador ATMega328 SoC Quark
X100 ARM11 ATMega1281
Voltaje de
operación 5 V 3.3 V / 5 V 3.3 V / 5 V 0.5 - 3.8 V
Voltaje de
entrada 5 - 12 V 5 V 5 V 5 - 7 V
RAM 1 KB 512 KB 512 MB 8 KB
Memoria Flash 16 KB 8 MB - 128 KB
USB 1 2 2 1
Velocidad de
reloj 8 MHz 400 MHz 700 MHz 16 MHz
E/S Analógicas 8 6 - 7
E/S Digitales 14 14 8 8
Ethernet - 10/100 10/100 No contiene
Precio
aproximado $30 $90 $50 $180
1.4.1 Sistema de medición ideal de bioseñales
Una representación esquemática de un sistema típico de medición biomédico es mostrada
en la Figura 1.1. El proceso fisiológico de interés es convertido a señal eléctrica mediante
un transductor. Usualmente se necesita un procesamiento analógico de la señal, incluyendo
amplificación y filtrado. Debido a que es más fácil realizar el procesamiento de la señal
utilizando métodos digitales, la señal análoga es convertida a digital usando un convertidor
análogo a digital [75].
Figura 1.1 Sistema típico de medición biomédico. Tomado de [75]
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
18
Una vez convertida, la señal es frecuentemente almacenada en memoria para facilitar el
procesamiento subsecuente de la señal.
En aplicaciones de tiempo real los datos de entrada deberán ser procesados tan rápido, y en
forma determinística como sea posible con un sistema de buffers mínimo, para no tener
retrasos en la obtención de los datos. El convertidor análogo/digital, el buffer de la señal y
el procesamiento de ésta se realizará en base a un procesador digital de señales (DSP).
El ruido o variabilidad de la señal es inherente en la mayoría de los sistemas de medición y
frecuentemente es un factor limitante en el funcionamiento de un equipo médico. En las
mediciones biomédicas, la variabilidad tiene 4 diferentes orígenes:
Variabilidad fisiológica.
Ruido ambiental o interferencia.
Artefacto del transductor.
Ruido electrónico.
Por último, se muestran en la Tabla 1.2 las diferentes fuentes de ruido o variabilidad con
sus respectivas causas y posibles soluciones.
Tabla 1.2. Fuentes de ruido o variabilidad
Fuente Causa Solución potencial
Variabilidad fisiológica Medición indirectamente
relacionada a la variable de
interés.
Modificar enfoque general.
Ambiental
(interno o externo)
Otras fuentes de energía de
forma similar.
Cancelación de ruido, diseño del
transductor
Artefacto Respuesta del transductor a
otras fuentes de energía.
Diseño del transductor
Electrónico Ruido térmico o de disparo. Transductor o diseño electrónico
1.5 Plataformas de HW basadas en Arduino
Arduino es un sistema microcontrolador monoplaca, de hardware libre, de fácil uso y bajo
coste, desarrollado inicialmente para facilitar el uso de electrónica en diseños artísticos e
interactivos y la aplicación de esta por personas no expertas [76].
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
19
Actualmente hay más de 20 modelos de plataformas Arduino con diferencias en cuanto a
características y posibilidades, número de entradas/salidas, microcontrolador, etc., pero
compatibles entre sí, manteniendo una compatibilidad de abajo arriba, es decir, una
aplicación que funciona en una plataforma, funcionará en otra más compleja, (superior), y
que por tanto incluya las características de la primera.
Los microcontroladores más habituales en la plataforma son los de la familia AVR de
Atmel, aunque algunas plataformas utilizan otros microcontroladores, ejemplo Cortex M3
de ARM, de 32 bits. Arduino se puede utilizar para desarrollar objetos interactivos, que
pueden funcionar de forma autónoma, sin necesidad de estar conectados a un ordenador, o
puede conectarse con otro software que se esté ejecutando en un ordenador, como por
ejemplo Flash, Processing, Max/MSP, LabView, MatLab, entre otros. Con Arduino se
puede tomar información del entorno a través de sensores conectados a sus entradas
analógicas y digitales, puede controlar luces, motores y otros actuadores directamente o
partir de las señales de control generadas en sus salidas. Hay modelos de Arduino
específicos desarrollados para facilitar llevar tecnología puesta (wearables), o en la ropa, e-
textiles. Puede comunicarse con otras placas Arduino y con otros sistemas, mediante Wi-Fi,
Ethernet, Buetooth, etc., esto permite también la interacción a distancia y el Internet de las
cosas (IoT). Arduino encuentra un uso amplio en la enseñanza: en materias relacionadas
con la robótica, el control, la adquisición de datos, los diseños interactivos, etc., la sencillez
de uso de esta plataforma permite a personas no expertas en electrónica, utilizar en sus
creaciones dispositivos electrónicos y controlarlos, de una manera sencilla o asequible para
ellos. Las posibilidades de realizar desarrollos basados en Arduino tienen como límite la
imaginación. Arduino nació con el objeto de proporcionar una plataforma económica y
fácil uso, para enseñar electrónica a los alumnos del Instituto de Diseño Interactivo de
Ivrea, (Italia) [79].
1.5.1 Familia Arduino
Hay más de 20 modelos de Arduino con diferentes características en cuanto a tamaño,
prestaciones, etc., esto permite utilizar la plataforma en una gran variedad de proyectos,
más o menos complejos y utilizar el modelo Arduino más adecuado a cada necesidad. Así
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
20
mismo el equipo Arduino sigue desarrollando plataformas, que permitan abordar otros
proyectos o en otros campos, o para dar respuesta a demandas planteadas por los usuarios.
La Tabla 1.3 recoge un resumen de las características más significativas de los diferentes
modelos de la plataforma Arduino [78], [80], [81].
Tabla 1.3 Comparación entre familias de Arduino
Arduino Núcleo F
(MHz)
E/S
Flash
(KB)
SRAM
(KB)
EEPROM
(KB)
Dig. Anlg.
UNO R3 ATmega328 16 14 6 32 2 1
DUE
Atmel
AT91SAM3X8E
ARM Cortex-M3
de 32 bits
84 54 12 512 96 -
Leonardo ATMega32u4 16 20 12 32 2.5 1
Mega2569 Rev3 ATMega2560 16 54 16 256 8 4
Mini ATMega328 16 14 8 32 2 1
Nano ATMega328 16 14 8 32 2 1
Ethernet Rev3
sin/con PoE ATMega328 16 9 6 32 2 1
BT ATMega328P 8 14 6 32 2 1
Fio ATMega328 16 14 8 32 2 1
Pro ATMega328 8 14 6 32 2 1
Pro Mini ATMega328 16 14 8 32 2 1
LiLyPad ATMega328 8 14 8 16 1 0.512
LiLyPad USB ATMega328u4 8 9 4 32 2.5 1
LiLyPad
Simple ATMega328 8 9 4 32 2 1
YUN ATMega32u4 16 20 6 32 2 1
Zero ATSAMD21G18
de 32 bits 48 14 7 256 32 16
1.5.2 Módulo Arduino Pro-Mini
El Arduino Pro Mini es una tarjeta pequeña, perteneciente a la gran familia Arduino, ideal
para proyectos donde el tamaño es una limitante, ya que está orientada a proyectos del tipo
wearables (tecnología en vestuario o uso corporal). Esta tarjeta está dirigida a usuarios que
requieran trabajar con sensores que usen tensiones de 3,3V, como por ejemplo
acelerómetros, sensor de Presión Barométrica o que dispongan de ese voltaje, además, no
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
21
trae conectores, de modo que el Arduino Pro Mini 328, posee un microcontrolador ATmega
328p, lo cual lo provee de un gran poder de procesamiento, cuenta con entradas Analógicas
y digitales, estas misma también funcionan como salidas, trabaja a 5 Volts y tiene una
capacidad de 16 MHz.
Arduino se ha convertido rápidamente en una de las mejores placas de desarrollo para
estudiantes y para proyectos complejos, cada placa cuenta con características especiales y
en este caso la tarjeta Arduino Pro Mini 328, tal y como su nombre lo indica posee unas
dimensiones por debajo incluso del Arduino Nano. El tamaño del Arduino Pro Mini 328 es
apenas de 3.3 Cm largo x 1.8 Cm de ancho, muy por debajo del tamaño de una moneda,
además puede ser soldado para mayor comodidad, sin embargo, esta pequeña tarjeta posee
20 entradas digitales, estas también pueden servir como salidas, 13 de estas son digitales y
6 analógicas. Los pines D3, D5, D6, D9, D10, D11, pueden ser utilizados como puertos
PWM (Pulse Width Modulation).
El chip Atmega328P-AU es una de las grandes ventajas de esta placa, ya que le da un gran
poder de procesamiento que permite mantener un proceso en perfecto funcionamiento, en
caso de cualquier error, el cuerpo de la placa cuenta con un botón de reset, el cual reinicia
la programación cargada [82].
Características:
Microcontrolador ATmega328
Velocidad del reloj 16MHz
Memoria Flash 32KB
Memoria SRAM 2KB
Memoria EEPROM 1 KB
Voltaje de Funcionamiento 5 V
Corriente de Funcionamiento: 150 mA
Pines digitales I/O 14(incluidos 6 salidas para PWM)
Pines de Entrada Analógicos 8
Comunicación TTL RX/TX
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
22
Dimensiones 33 x 18 mm
Fuente de Alimentación externa: fuente de alimentación de CD externa (5 -12 V)
Especificaciones:
Puerto Serie TTL: Para la comunicación el puerto serial RX/TX del transmisor-
receptor de TTL.
Pines de entradas / salidas digitales: Los pines digitales (del 0 al 13 se puede usar
como entrada o salida, usando las funciones pinMode(), digitalWrite() y
digitalRead(). Operan a 5 V. Cada pin puede proporcionar o recibir un máximo de
40 mA y tiene una resistencia interna de pull-up (desconectada por defecto).
Pines de PWM: Son pines digitales que generan dos valores 0 y 5 V, un ON y un
OFF, se utilizan para generar salidas analógicas desde pines digitales
Botón Reset: Reinicia cualquier código que este cargado en el Arduino.
Pines de entradas analógicas: El área de pines con las etiquetas A0 a A3 son
entradas analógicas. Estos pines pueden leer la señal de un sensor analógico (como
un sensor de temperatura) y convertirlo en un valor digital que se puede leer. Cada
una de las entradas proporciona 10 bits de resolución (es decir, 1024 valores
diferentes).
Microcontrolador ATmega328: El ATmega328 cuenta con una frecuencia de
16MHz, además que contiene una memoria Flash de 32 KB para almacenamiento.
Alimentación y GND: Son los suministros de 5V, así como pines GND(tierra) en la
tarjeta, los cuales pueden ser utilizado para alimentar circuitos y dispositivos
electrónicos.
RAW (Alimentación no regulada): Si está suministrando energía no regulada a la
placa, asegúrese de conectarla al pin "RAW" y no a la VCC”.
1.5.3 Módulos acoplables al Arduino.
Las funcionalidades de Arduino se pueden extender conectándole módulos para realizar
distintas funciones: control de motores CC, conexión a redes Ethernet, conexión Bluetooth,
etc., a los que se les conoce como escudos (shields), ya que se acoplan sobre la misma placa
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
23
Arduino y permiten conectar varios módulos, unos sobre otros, formando una pila de ellos.
En la Tabla 1.4 se recogen la mayoría de las shields oficiales, que llevan el identificador
Arduino [80],[83], [84].
Tabla1.4. Características de los shields acoplables de Arduino
Arduino Ethernet Shield: Permite la conexión de Arduino a redes Ethernet
10/100 Mb, y por tanto a Internet, incluye un conector estándar RJ45. Se le
puede añadir un módulo PoE, para que pueda suministrar alimentación a
través del cable de red. Incluye un conector para una tarjeta micro SD
accesible a través de la red.
Módulo Relé: Funciona como un interruptor controlado por un circuito
eléctrico en el que, por medio de una bobina y un electroimán, se acciona un
juego de uno o varios contactos que permiten abrir o cerrar otros circuitos
eléctricos independientes. Este tipo de módulos permite activar actuadores
como por ejemplo la puerta del garaje o el de una bombilla.
Módulo Buetooth: Se denomina Buetooth al protocolo de comunicaciones
diseñado especialmente para dispositivos de bajo consumo, que requieren
corto alcance de emisión y basados en transceptores de bajo costo. Opera
mediante un enlace por radiofrecuencia en la banda ISM de los 2,4 GHz. Su
uso es adecuado cuando puede haber dos o más dispositivos en un área
reducida sin grandes necesidades de ancho de banda.
Arduino Wi-Fi Shield: Permite la conexión de Arduino a redes Wi-Fi, con
el estándar 802.11 b y g Ethernet 10/100 Mb, y por tanto a Internet. Permite
la conexión a redes abiertas o encriptadas con WEP o WPA2. Incluye un
conector para una tarjeta micro SD, a la que se puede acceder a través de la
red.
Módulo infrarrojo: Este tipo de comunicación consigue tener menos
interferencias debido a la mayor frecuencia del espectro electromagnético
en la que trabaja. Normalmente no es un método de comunicación entre
placas Arduino sino que es utilizado para contactar con los
electrodomésticos del hogar.
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
24
1.5.4 Módulo Wi-Fi
La Wi-Fi es un mecanismo de conexión de dispositivos electrónicos de forma inalámbrica.
Para poder realizar la conexión Wi-Fi y poder registrar los datos, se necesita un módulo Wi-
Fi, este será el encargado de conectar nuestro Arduino a Internet y convertirlo en otro
miembro dela Internet de las cosas (Internet of things, IoT). Entre los módulos Wi-Fi
acoplables a la plataforma Arduino el más implementado es el módulo ESP8266. El
ESP8266 es un chip Wi-Fi de bajo coste con pila TCP/IP completa y capacidad de MCU
(Micro Controller Unit) producida por el fabricante chino Espressif Systems, con sede en
Shanghai.
El chip primero llegó a la atención de los fabricantes occidentales en agosto de 2014 con el
módulo ESP-01. Este pequeño módulo permite a los microcontroladores conectarse a una
red Wi-Fi y realizar conexiones TCP/IP sencillas utilizando comandos de tipo Hayes. Sin
embargo, en ese momento casi no había documentación en inglés sobre el chip y los
comandos que aceptaba.
El precio muy bajo y el hecho de que había muy pocos componentes externos en el módulo
que sugiere que podría ser muy barato en el volumen, atrajo a muchos hackers para
explorar el módulo, el chip y el software en él, así como para traducir la documentación
china [85].
1.6 Conclusiones del capítulo
Existe una considerable cantidad de opciones en el uso de procesadores de bajas
prestaciones para el procesamiento digital de señales debido a la gran variedad de
algoritmos, dispositivos, señales de interés y herramientas de desarrollo. Las redes
diseñadas para su operación en dicho entorno deben cumplir con requerimientos bien
establecidos, entre los que se encuentran: la confiabilidad en la realización de las funciones
principales para la cual se diseña, la medición de variables, la activación de actuadores y la
rapidez relativa del proceso desde la medición hasta procesamiento de la información
adquirida es otro requerimiento importante. No puede dejar de mencionarse la flexibilidad
y la escalabilidad, características que deben ser requisitos de una red que permita la
CAPÍTULO 1. PROCESAMIENTO DIGITAL DE BIOSEÑALES
EN PROCESADORES DE BAJAS PRESTACIONES
25
modificación de su estructura y composición a conveniencia del usuario sin que ello
represente un esfuerzo excesivo. Para el cumplimiento de estos requerimientos deben ser
elegidos apropiadamente los recursos a utilizar en el despliegue de la red, teniendo en
cuenta las tecnologías existentes y las posibilidades reales de su acceso.
CAPÍTULO 2. MATERIALES Y MÉTODOS 26
CAPÍTULO 2. MATERIALES Y MÉTODOS
En el presente capítulo se presenta el diseño de la propuesta de desarrollo de un nodo para
el procesamiento de bioseñales, seleccionando los componentes de hardware y
herramientas de software que permiten diseñar la estructura del nodo y la ejecución de los
algoritmos deseados. Además, se describen los detalles del despliegue del diseño propuesto
que incluyen la configuración de las herramientas propuestas y ejecución del sistema para
el procesamiento de bioseñales.
2.1 Diagrama en bloques del sistema implementado
El sistema implementado para el procesamiento de bioseñales de forma remota se diseñó a
partir del diagrama en bloque mostrado en la Figura 2.1. Dicho sistema está constituido por
una etapa de adquisición, la cual está caracterizada por sensores específicos colocados en el
cuerpo del paciente. En esta etapa de sensores se acondicionan y digitalizan las variables
captadas y son transmitidas hacia la plataforma Arduino. Dicha plataforma de
procesamiento, estará formada por dos secciones, una que cumple las funciones de
conversión análoga/digital y otra dedicada al procesamiento de las bioseñales. Por último,
se implementará una etapa de transmisión, la cual obtendrá los datos a partir de la
comunicación serie efectuada entre el Arduino y el módulo Wi-Fi ESP-01 perteneciente a la
familia ESP8266.
CAPÍTULO 2. MATERIALES Y MÉTODOS 27
Figura 2.1. Diagrama en bloques del sistema de procesamiento
2.2 Bloque de adquisición
La etapa de adquisición típicamente consiste en lo siguiente:
Sensores: los cuales miden físicamente variables como temperatura, presión, flujo,
fuerza y movimiento.
Acondicionamiento de señal: para convertir las salidas del sensor en señales que
puedan ser leídas por la entrada analógica de un computador.
La etapa de adquisición que consiste en la captura y manipulación electrónica o proceso
electrónico para obtener la señales adecuada para la siguiente etapa de operación y ajustarla
a necesidades de interés. En un sistema de medición en general se debe procesar una señal
de una forma adecuada para la siguiente etapa de la operación. La señal puede ser, por
ejemplo; demasiado pequeña y sería necesario amplificarla; podría contener interferencias
que eliminar; ser no lineal y requerir su linealización; ser analógica y requerir su
digitalización; ser digital y convertirla en analógica; consistir en un cambio de voltaje y
convertirla en un cambio de corriente de magnitud, etc. A todas estas modificaciones se les
designa en general con el término de acondicionamiento de señal [86], [87] .
CAPÍTULO 2. MATERIALES Y MÉTODOS 28
2.3 Bloque del Conversor Análogo/Digital (ADC)
En la etapa del ADC el dispositivo toma una señal análoga (corriente, voltaje, temperatura,
presión, etc.), cuantifica la señal y le asigna un valor que se muestra a su salida en formato
digital. Los ADC más comunes son aquellos que convierten señales de voltaje o corriente a
su equivalente digital, aunque se puede encontrar para medir diversidad de magnitudes
análogas. Afortunadamente la plataforma Arduino, en este caso el Arduino Duemilanove
contiene internamente un ADC de 6 canales, con una resolución de 10 bits, devolviendo
enteros entre 0 y 1023 [88], [89].
Aunque el ATmega328P, microcontrolador implementado, tiene 6 pines que son capaces de
ser utilizados como pines de entrada analógicos (Port C), sólo hay un ADC en el
microcontrolador, pero entre el ADC y los pines hay un multiplexor analógico, esto permite
que se pueda elegir qué pin está conectado al ADC, es decir, aunque se logre utilizar todos
los pines, sólo se puede leer el valor de uno de ellos a la vez, para casi todas las
aplicaciones esto es más que suficiente.
El ADC interno se puede utilizar en un modo de 8 bits, donde sólo se utilizan los 8 bits más
significativos de la resolución de 10 bits completa, esto podría ser útil cuando se trabaja en
ambientes ruidosos y sólo necesita 8 bits de resolución, el uso de este modo es un plus
debido a que no es necesario dedicar más tiempo de CPU calculando los 10 bits completos.
El ADC también puede configurarse para que lleve a cabo una conversión y detenerse o
puede ser configurado para funcionar en un modo de funcionamiento libre, la primera
opción es el mejor modo cuando se quiera leer diferentes pines, mientras que la segunda es
mejor cuando sólo se lea un pin, esto puede ahorrar algo de tiempo entre las conversiones.
Se debe tener cuidado con la frecuencia máxima de trabajo del ADC, este valor se
especifica en la ficha técnica y es de 200 kHz, este es el valor del reloj interno de la
circuitería del ADC, este divisor del reloj se realiza mediante pre-escaladores y sólo hay un
rango limitado de valores, por lo que la frecuencia máxima que se pude utilizar y estar
dentro de la frecuencia máxima de trabajo es de 125 kHz. El siguiente pre-escalador supone
usar el ADC a 250 kHz, en este caso no se puede garantizar la resolución de 10 bits, pero si
una resolución de 8 bits. De todas formas, en caso de necesitar un ADC más rápido se
podría usar uno externo.
CAPÍTULO 2. MATERIALES Y MÉTODOS 29
El ADC puede trabajar en dos modos: single conversion mode y free running mode. En
single conversion mode el ADC hace una sola conversión y se detiene, pero en free running
mode el ADC está continuamente convirtiendo, es decir, hace una conversión y luego
comienza con la siguiente.
2.4 Bloque de procesamiento
La sección de procesamiento está condicionada por la ejecución de un programa escrito en
el IDE de Arduino cuyo entorno es parecido al C++. A partir de dicho programa se
implementan los algoritmos de procesamiento como algoritmos de filtrado (filtro notch,
filtro paso bajo y filtro paso alto), algoritmo de la FFT y algoritmos de cálculo de distancias
y similitud (distancia Euclidiana, distancia de Manhattan y distancia de Chebyshev).
2.4.1 Algoritmos de filtrado
El algoritmo de filtrado empleado, implementa filtros FIR (filtro notch) y filtros IIR (filtro
paso bajo y filtro paso alto) para la eliminación de las interferencias de la red eléctrica y
para obtener las frecuencias de trabajo que se utiliza de la señal de prueba. Estos filtros
fueron implementados a partir de la bibliotecas <Filter.h>, <FIRFilter.h>, <IIRFilter.h>
[90].
Filtros notch
El filtro notch, también conocido como filtro eliminador de banda es un filtro electrónico
que no permite el paso de señales cuyas frecuencias se encuentran comprendidas entre las
frecuencias de corte superior e inferior [91].
El filtro notch implementado cumple con las características de filtrado de un filtro tipo FIR,
por ejemplo, tener una fase lineal pues produce cambios en la magnitud sin girar la fase, es
decir que magnitud y fase son independientes, aunque también pueden ser utilizados para
generar giros de fase arbitrarios sin modificar la magnitud.
En este caso el filtro es muy simple, por lo que la respuesta de frecuencia no es muy buena.
Este filtro es un filtro de segundo orden, con respuesta a impulsos finitos, por lo que es
muy rápido y estable, y tiene una fase lineal [92]. Para lograr características de muesca,
sólo se coloca un único par de ceros complejos en el círculo unitario.
CAPÍTULO 2. MATERIALES Y MÉTODOS 30
Se tiene una frecuencia de muestra de 1000 Hz y se desea filtrar un ruido de 50 Hz. Primero
se calcula la frecuencia normalizada w(c,d):
𝑤 = 2𝜋𝑓𝑐 (2.1)
𝑤(𝑐, 𝑑) =𝑤
𝑓𝑠 (2.2)
Donde fs = 1000 Hz y fc = 50 Hz.
Se conoce que la respuesta de frecuencia H(w) de un filtro digital es sólo la función de
transferencia H(z) evaluada a lo largo del círculo de la unidad z = 𝑒𝑗𝑤. En otras palabras,
sólo se necesita una función de transferencia que sea cero cuando la frecuencia es igual a
w(c,d), o cuando z = 𝑒𝑗𝑤(𝑐,𝑑), el conjugado complejo será también un cero: z = 𝑒−𝑗𝑤(𝑐,𝑑),.
𝐻(𝑧) = (𝑧 − 𝑒𝑗𝑤(𝑐,𝑑))(𝑧 − 𝑒−𝑗𝑤(𝑐,𝑑)) (2.3)
Se puede simplificar aún más esta función expandiéndola, y usando la identidad.
cos(𝛳) = 𝑒𝑗𝛳+𝑒−𝑗𝛳
2 (2.4)
𝐻(𝑧) = 𝑧2 − 𝑧(𝑒𝑗𝑤(𝑐,𝑑) + 𝑒−𝑗𝑤(𝑐,𝑑)) + 𝑒𝑗𝑤(𝑐,𝑑)𝑒−𝑗𝑤(𝑐,𝑑)) (2.5)
𝐻(𝑧) = 𝑧2 − 2 cos(𝑤(𝑐, 𝑑)) 𝑧 + 1 (2.6)
De aquí se obtiene un filtro con una unidad de ganancia DC (H(1)=1), normalizando la
función de transferencia:
𝐻𝑛(𝑧) =𝐻(𝑧)
𝐻(1)=
𝑧2−2 cos(𝑤(𝑐,𝑑))𝑧+1
2−2 cos(𝑤(𝑐,𝑑)) (2.7)
De esta manera se adquiere los coeficientes de filtrado para el filtro notch mostrados en el
script del Anexo I.
Filtro paso alto y filtro paso bajo
El filtro paso alto es un tipo de filtro que permite reducir la amplitud de aquellas
frecuencias que estén por debajo de la frecuencia de corte del filtro. Mientras que el filtro
paso bajo es todo lo contrario, este atenúa las señales cuyas frecuencias sean superiores a la
frecuencia de corte y deja pasar sin problemas a las señales con frecuencias superiores a las
de corte [93], [94].
CAPÍTULO 2. MATERIALES Y MÉTODOS 31
En este caso el funcionamiento de ambos filtros tiene como objetivo diseñar un filtro pasa
banda, lográndose al implementar ambos filtros en serie, uno con respecto al otro. Las
características de estos filtros corresponden a las de un filtro tipo IIR, que a diferencia de
los filtros FIR pueden cumplir las mismas exigencias que los anteriores, pero con menos
orden de filtro, además de ser recurrentes y tener una respuesta impulsiva infinita. Esto es
importante a la hora de implementar el filtro, pues presenta una menor carga
computacional.
A diferencia del filtro notch, estos filtros fueron diseñados a partir de la herramienta de
diseño del software MATLAB (fdatool), obteniendo un filtro paso bajo Butterworth de
orden 5 y frecuencia de corte de 35 Hz y un filtro paso alto del mismo orden y frecuencia
de corte de 0.3 Hz cuyos coeficientes se muestran en el script del Anexo I.
2.4.2 Algoritmo de la Transformada Rápida de Fourier (FFT)
La Transformada Rápida de Fourier es un método rápido de cálculo de la Transformada
Discreta de Fourier (DFT) que fue publicado en 1964 por Cooley y Tukey, la cual es
conocida universalmente por sus siglas en inglés FFT (Fast Fourier Transform). La
eficiencia de este método se muestra en la Tabla 2.1, donde se compara el número de
operaciones a realizar para implementar la DFT de N puntos por el método directo (N2) y
por el algoritmo rápido (N log2 N), así como la eficiencia conseguida utilizando la FFT
[95], [96].
Tabla 2.1. Eficiencia de la FFT
N Discreto FFT Eficiencia
32 1024 160 6.4
64 4096 384 10.7
128 16384 896 18.3
256 65536 2048 32
En el proyecto, la FFT implementada simula el muestreo de una señal ECG a 1000 Hz. Las
muestras se almacenan dentro de la matriz vReal, para seguidamente ser procesadas por la
FFT en ventanas según la función Hamming, donde se calcula las magnitudes de cada una
CAPÍTULO 2. MATERIALES Y MÉTODOS 32
de las frecuencias que componen la señal. Finalmente, se obtiene la frecuencia con el pico
más alto, siendo ésta la frecuencia principal presente en la señal y la que se imprime junto
con la magnitud del pico. En el Anexo II se muestra el script donde se ejecuta dichas
funciones. La implementación de la FFT está desarrollada a partir de la biblioteca
"arduinoFFT.h" [97].
2.4.3 Algoritmos de medidas de distancia y similitud
En el presente trabajo se analiza principalmente la métrica Euclidiana, así como también la
métrica de Chebyshev y de Manhattan. En el Anexo III se muestra el script donde se
ejecuta dichos algoritmos.
Métrica de distancia euclidiana:
La distancia euclidiana es la métrica más utilizada para medir la distancia entre dos puntos
en un espacio euclídeo. En un espacio de dos dimensiones, la distancia euclidiana coincide
con la longitud del segmento que une ambos puntos, y es deducible a partir del Teorema de
Pitágoras. En general, para un espacio n-dimensional la distancia euclidiana entre dos
puntos 𝑎 = (𝑎1, 𝑎2, … , 𝑎𝑛) y 𝑏 = (𝑏1, 𝑏2, … , 𝑏𝑛) será:
𝑑𝑒(𝑎, 𝑏) = √∑ (𝑎𝑖 − 𝑏𝑖)2𝑛𝑖=1
2 (2.1)
Métrica de distancia de Chebyshev:
La distancia de Chebyshev es una métrica definida en un espacio vectorial donde la
distancia entre dos vectores es la mayor de las diferencias de las coordenadas a lo largo de
cualquier dimensión. Es decir, para un espacio n-dimensional, la distancia entre dos puntos
𝑎 = (𝑎1, 𝑎2, … , 𝑎𝑛) y 𝑏 = (𝑏1, 𝑏2, … , 𝑏𝑛) según la métrica de Chebyshev será:
𝑑𝑐(𝑎, 𝑏) = max 𝑖 (|𝑎𝑖 − 𝑏𝑖|) (2.2)
Métrica de distancia de Manhattan
CAPÍTULO 2. MATERIALES Y MÉTODOS 33
La métrica de Manhattan, también conocida como la geometría del taxista, es aquella
métrica en la que la distancia entre dos puntos 𝑎 = (𝑎1, 𝑎2, … , 𝑎𝑛) y 𝑏 =
(𝑏1, 𝑏2, … , 𝑏𝑛) es la suma de las diferencias (absolutas) de sus coordenadas.
𝑑𝑚(𝑝, 𝑞) = ∑ |𝑝𝑖 − 𝑞𝑖|𝑛𝑖=1 (2.3)
2.5 Bloque de Transmisión (Tx)
En el bloque transmisión se emplea el módulo ESP-01 acoplado a la plataforma Arduino, la
funcionalidad implementada por dicho módulo es comunicarse con la plataforma,
recibiendo los datos vía serie para después transmitirlos vía Wi-Fi. Este módulo ha sido
especialmente diseñado para lograr fácilmente una conexión Wi-Fi. Este módulo es
pequeño y potente, compatible con 802.11b/g/n y puede funcionar como un punto de
acceso (Access Point) o como una estación, de envío y recepción de datos. La
comunicación con Arduino se puede hacer mediante el uso de los puertos en serie RX y TX
y se pueden configurar a través de comandos AT [85], ver Figura 2.2.
Características:
Protocolo 802.11b/g/n
Chip: ESP8266
ADC integrado de 10 bit de precisión
Protocolo stack TCP/IP integrado
Switch TR integrado, LNA, amplificador de potencia y red de adaptación PLL
integrado, regulador de tensión y componentes de administración de energía
Módulo ultra-pequeño.
Soporta diversas antenas
CPU de 32 bits de baja potencia: puede funcionar como procesador de aplicaciones.
Especificaciones:
WI-FI a 2.4 GHz, seguridad WPA/WPA2
Dimensiones: 25 x 14 x 1mm
Peso: 7g
CAPÍTULO 2. MATERIALES Y MÉTODOS 34
Potencia de salida: 802.11b mode + 19.5dB
Corriente < 10uA
Encendido y transferencia de paquetes < 2ms.
El consumo de energía en espera es de menos de 1.0mW (DTIM3)
Rango de temperatura de operación: -40 ~ 125 ℃
Voltaje de alimentación: 3.3 V. (Este módulo no tolera 5 V. Cualquier voltaje
superior a 3.6V en sus entradas o en el pin de alimentación puede dañarlo)
Conectores: SDIO 2.0, SPI, UART, GPIO, salida PWM y sensor de temperatura
interno
Comunicación serial: TX/RX
Pines de salida:
GND – Tierra
TX – Serial de transmisión
RX – Serial de recepción
VCC – 3.3VDC
CH_PD – Conectarse a VCC
RST – Conectarse a VCC
GPIO0 – Conectarse a VCC
GPIO2 – Conectarse a VCC
Figura 2.2. Pines de salida del ESP – 01
CAPÍTULO 2. MATERIALES Y MÉTODOS 35
2.6 Plataforma de desarrollo HW y SW.
2.6.1 Arduino Duemilanove
Arduino DUE es la primera placa electrónica basada en un microcontrolador de 32 bits, con
la cual se mejora las capacidades de las versiones anteriores tales como el modelo UNO y
el modelo Leonardo, las cuales trabajan a 8 bits. Gracias al microcontrolador de la
compañía Atmel (ATSM3X8E), se pueden disponer de entradas y salidas analógicas con
resolución de 12 bits; la tasa de muestreo con la que trabaja Arduino DUE es de hasta 1000
ksps (kilomuestras por segundo), en comparación con Arduino UNO que trabaja a una tasa
de muestreo de 15 ksps.
Arduino DUE enumera los pines o terminales del 0 – 53, los cuales pueden ser utilizados
como entradas o salidas digitales. Todas las entradas/salidas trabajan a 3.3V. Cada pin
puede suministrar (soportar) una corriente de 3mA – 15 mA dependiendo del pin, o recibir
de 6 mA – 9 mA, dependiendo del pin. Estos pines también poseen una resistencia de
pulldown desactivada por defecto de 100 KΩ. Además, algunos de estos pines tienen
funciones específicas [88], ver Figura 2.3.
Pines 2 al 13: Salidas PWM de 8 bits de resolución.
Entradas analógicas (pines de A0 al A11): Arduino DUE integra 12 entradas
analógicas, cada una de las cuales tiene una resolución de 12 bits (4096 valores
diferentes). Por defecto, la resolución de la lectura está establecida a 10 bits para
que sea compatible con las aplicaciones diseñadas para otras placas Arduino. Es
posible cambiar esta resolución ADC mediante la función analogReadResolution()
(que en secciones posteriores se define). Las entradas analógicas de Arduino DUE,
miden desde el voltaje de referencia de 0 Volts hasta un valor máximo de 3.3 Volts.
DAC0 y DAC1: Estos pines proporcionan una salida analógica con una resolución
de hasta 12 bits (4096 niveles), aunque con la función analogWriteResolution(bits),
se logra modificar su resolución.
RX0 – TX0: 4 Canales de comunicación serial.
Interfaz I2C (SDA, SCL)
AREF: Referencia externa para voltaje de entradas analógicas
CAPÍTULO 2. MATERIALES Y MÉTODOS 36
Especificaciones:
Microcontrolador ATSM3X8E.
Velocidad del reloj 84 MHz.
Voltaje de operación 3.3 Volts.
Voltaje de entrada (jack DC) 7 – 12 Volts.
Núcleo de 32 bits.
54 Entradas/Salidas digitales.
12 Entradas analógicas.
12 Salidas tipo PWM.
Corriente máxima en E/S 130mA.
2 Salidas analógicas (DAC).
4 Puertos UART.
512 KB de memoria Flash para código.
2 Puertos micro-USB.
Arduino DUE tiene integrados dos botones “erase” y “reset”. Con el botón “erase” es
posible borrar la memoria Flash del microcontrolador, basta con mantener presionado este
botón durante algunos segundos para eliminar el programa cargado en el microcontrolador
y el botón “reset” permite reiniciar un programa que se ejecuta en la plataforma de
Arduino. También posee dos puertos micro-USB (“Programming” y “Native”), de los
cuales el puerto “Programming” generalmente se utiliza para programación y
comunicación, y el puerto “Native” actuará como Host USB, permitiendo conectar
periféricos externos USB, tales como mouse, teclado o “shields”, que agregan nuevas
funciones a Arduino DUE.
CAPÍTULO 2. MATERIALES Y MÉTODOS 37
Figura 2.3. Componentes de Arduino Duemilanove
2.6.2 Entorno de desarrollo integrado para Arduino (IDE).
Un IDE (integrated development environment) es un entorno de programación que ha sido
empaquetado como un programa de aplicación, es decir, que consiste en un editor de
código, un compilador, un depurador y un constructor de interfaz gráfica (GUI). Además,
en el caso de Arduino incorpora las herramientas para cargar el programa ya compilado en
la memoria Flash del hardware a través del puerto serie.
El entorno de desarrollo integrado para Arduino, es una herramienta desarrollada en Java,
por lo que puede utilizarse con distintos sistemas operativos, Windows, Mac OS X y Linux,
es software abierto que se puede descargar desde la página principal de Arduino. El IDE
permite la edición y compilación de programas en el lenguaje de Arduino, y cargarlos en la
plataforma para que se ejecuten. El IDE dispone también de una ventana tipo Terminal,
para la comunicación por el puerto serie de las placas Arduino, ver Figura 2.4 [98].
CAPÍTULO 2. MATERIALES Y MÉTODOS 38
Figura 2.4. Componentes del IDE del Arduino
2.6.3 Lenguaje de programación del IDE de Arduino.
El lenguaje que utiliza este entorno para escribir los programas es basado en C++. Todos
los programas escritos para Arduino en el entorno IDE (sketches) contienen las funciones
setup() y loop(). La función setup() se sitúa en primer lugar y es también la declaración de
las variables, inicializaciones y parámetros de configuración. La función loop() contiene la
parte del programa que se ejecutara cíclicamente, esto es, el bucle infinito. Es típico de esta
función, la lectura de entradas, la activación de salidas, comprobaciones, etc. Además de las
funciones setup() y loop() citadas, un programa para Arduino puede incluir otras funciones
creadas por el usuario, en el sitio web oficial de Arduino (www.arduino.cc), se proporciona
información suficiente para crearlas [99].
En el mismo portal también hay disponible una serie de bibliotecas estándar para Arduino,
para manejar hardware o datos, para manejo de EEPROM, Ethernet, visualizadores LCD,
CAPÍTULO 2. MATERIALES Y MÉTODOS 39
tarjeta SD, Wi-Fi, entre otras y también es posible realizar otras bibliotecas que necesite el
usuario, para lo que puede seguirse las recomendaciones dadas en el portal.
2.6.4 MatLab
MatLab (abreviatura de MATrix LABoratory, "laboratorio de matrices") es un sistema de
cómputo numérico que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de
programación propio (lenguaje M) y disponible para las plataformas Unix, Windows, Mac
OS X y GNU/Linux . Entre sus prestaciones básicas se hallan: la manipulación de matrices,
la representación de datos y funciones, la implementación de algoritmos, la creación de
interfaces de usuario (GUI) y la comunicación con programas en otros lenguajes y con
otros dispositivos hardware.
El paquete MatLab dispone de dos herramientas adicionales que expanden sus prestaciones,
a saber, Simulink (plataforma de simulación multidominio) y GUIDE (editor de interfaces
de usuario - GUI). Además, se pueden ampliar las capacidades de MATLAB con las cajas
de herramientas (toolboxes); y las de Simulink con los paquetes de bloques (blocksets). Es
un software muy usado en universidades y centros de investigación y desarrollo. En los
últimos años ha aumentado el número de prestaciones, como la de programar directamente
procesadores digitales de señal [100].
2.7 Conexión entre el Arduino y el ESP-01
La conexión del módulo ESP-01 con Arduino no es complicada, aunque en la práctica van
a aparecer ciertas dificultades que finalmente nos harán plantearnos la idoneidad de
emplearlo junto a Arduino, o bien optar por una solución basada en ESP8266. La principal
dificultad es la alimentación del ESP-01. El ESP8266 y, en particular, el ESP-01, tiene una
tensión de alimentación de 3.3V. En ningún caso puede alimentarse a una tensión superior
a 3.6V, o se dañará el módulo.
Por otro lado, el consumo del módulo puede sobrepasar los 200 mA, sobre todo durante la
conexión y arranques. Sin embargo, el regulador de voltaje de 3.3 V de Arduino sólo puede
proporcionar 50 mA (150 mA en algunos modelos), lo cual es insuficiente para alimentar el
ESP-01. Por tanto, se necesita alimentar el ESP-01 con una fuente externa de 3.3 V. De lo
CAPÍTULO 2. MATERIALES Y MÉTODOS 40
contrario se experimentará continuos cortes y cuelgues durante su funcionamiento, que
además pueden reducir la vida útil del ESP-01 [102].
El resto de la conexión no tiene ninguna dificultad. Por un lado, se tiene el pin CH_PD que
apaga o enciende el módulo conectándolo, respectivamente, a GND o 3.3 V. Por su parte, el
pin RST reinicia el módulo si se conecta a GND. En algunas versiones del módulo se puede
dejarlo sin conexión, pero, en general, se debe conectar a 3.3V para que el módulo
arranque.
Finalmente, la comunicación con el módulo se realiza mediante puerto serie. A diferencia
de la alimentación del módulo, que en ningún caso debe exceder los 3.6 V, existe un amplio
debate sobre si los pines RX y TX son tolerantes a 5 V, es decir, si pueden conectarse
directamente a un sistema de 5 V. En principio, conectar RX y TX a un sistema de 5 V no
parece dañar la placa de forma inmediata. De hecho, se encuentran indicios en la
documentación que apuntan a que podrían ser tolerantes a 5 V, sin quedar totalmente claro.
No obstante, tampoco queda claro que si puede reducir la vida útil del componente.
Para la conexión con Arduino se emplea el puerto serie normal, pero esto implica que se
debe desconectar el ESP-01 cuando se quiera programar Arduino, y no se pueda usar el
puerto serie para la comunicación con el PC. Por este motivo frecuentemente se emplea un
puerto serie por software.
En cuanto a las velocidades, el ESP-01 puede configurarse a 9600, 19200, 38400, 74880,
115200, 230400, 460800 y 921600. Por defecto suelen venir, según fabricante, a 9600 o
115200. Se recomienda que se emplea el Arduino como intermediario se evite las
velocidades de 115200 en adelante porque la comunicación puede volverse inestable y
aparecer errores.
2.8 Escenarios de prueba
2.8.1 Experimentos de evaluación del ADC
Para evaluar el rendimiento del ADC en tiempo real, es decir, la precisión de la frecuencia
de muestreo (o incertidumbre temporal), se toman en cuenta parámetros de caracterización
como son: desviación, variación, período promedio de muestreo y frecuencia promedio de
CAPÍTULO 2. MATERIALES Y MÉTODOS 41
muestreo; además, se tiene presente las especificaciones dinámicas del ADC en lo que se
refiere al Número Efectivo de Bits (ENOB), Distorsión SNRplus (SINAD) y Distorsión
armónica total (THD). En el experimento se analizaron tres señales sinusoidales, mediante
el uso de dos vías de adquisición (por encuesta y por interrupciones). Por encuesta las
señales fueron sintetizadas con frecuencias de 200 Hz, 100 Hz y 15 Hz respectivamente,
con una amplitud de aproximadamente 1 V y se comparó con lo que realmente se inyectó,
mientras que por interrupciones las señales se sintetizaron con las mismas frecuencias, pero
con una amplitud de 320 mV. En el Anexo IV se muestra script implementado para la
adquisición de señales empleando tanto el método por interrupciones, el cual se desarrolla a
partir de la biblioteca <TimerOne.h> [103] como el método por encuesta.
Para la determinación de las especificaciones dinámicas del ADC se utilizaron funciones
implementadas en el software MATLAB, basadas en las ecuaciones 2.4, 2.5 y 2.6. El THD
se determina como la suma de las potencias de las componentes armónicas (espolones)
divididas por la potencia de la señal de entrada (ecuación 2.4). El SINAD se calcula como
la relación entre la amplitud de la señal de entrada fundamental y la suma de todos los
demás componentes espectrales por debajo de la mitad de la frecuencia de muestreo,
excluyendo el DC (ecuación 2.5). Finalmente, la ENOB se obtiene como se muestra en la
ecuación 2.6; una ENOB más alta significa que los niveles de voltaje registrados en una
conversión analógica a digital son más exactos[104].
𝑇𝐻𝐷(𝑑𝐵𝑐) = 10 log10(√∑ 𝑃𝑘
2𝑀𝑘=2
𝑃1
) (2.4)
Donde Pk es la potencia asociada a los M armónicos y P1 es la potencia asociada al
armónico fundamental.
𝑆𝐼𝑁𝐴𝐷(𝑑𝐵𝑐) = 10 log10𝑃1
𝑃𝑛+𝑃𝑘 (2.5)
Donde Pn la potencia del ruido (excluyendo las señales armónicas y DC).
𝐸𝑁𝑂𝐵 =𝑆𝐼𝑁𝐴𝐷−1.76
6.02 (2.6)
CAPÍTULO 2. MATERIALES Y MÉTODOS 42
2.8.2 Experimentos de prueba de los algoritmos
Los experimentos para evaluar los algoritmos implementados tienen como objetivo
comprobar su desempeño, para su desarrollo en el IDE de Arduino se tomó como referencia
el diagrama de flujo presentado en la Figura 2.5.
Figura 2.5. Diagrama de flujo de los algoritmos de procesamiento implementado
2.8.2.1 Algoritmos de filtrado y la FFT
Para el diseño del experimento de los algoritmos se realizó el análisis de la representación
de la frecuencia cardíaca instantánea de manera secuencial utilizando algoritmos como
filtros y la FFT para el procesamiento de la señal, por lo que el resultado transmitido será la
señal cardiaca procesada por dichos algoritmos. Además, se realizaron pruebas para los
tiempos de ejecución de cada algoritmo, así como el espacio de almacenamiento ocupado
por cada uno, obteniendo como resultado el algoritmo más óptimo.
La señal de prueba corresponde a un segmento de señal ECG tomada en la derivación I.
Aunque presenta buena calidad, esta se encuentra mezclada con un ruido de 50 Hz
CAPÍTULO 2. MATERIALES Y MÉTODOS 43
perteneciente a la red eléctrica y componentes de corriente directa producido por el
dispositivo de adquisición. La señal además se encuentra influenciada por la respiración la
cual produce variabilidad de las amplitudes de los picos R. En la Tabla 2.2 se muestran las
principales características de dicha señal.
Tabla 2.2. Características de la señal de prueba.
Características Valor
Cantidad de muestras 15000
Valor máximo 2506
Valor mínimo 1987
Frecuencia de muestreo 1 kHz
Resolución 12 bits
El envío de la información correspondiente a las señales biomédicas de prueba, en este caso
la transmisión de la señal ECG, hacia la plataforma de procesamiento se realizó mediante el
software MATLAB logrando una comunicación serial con el IDE Arduino, ver Anexo I y
Anexo II.
2.8.2.2 Algoritmo de cálculo de distancia y similitud
En el diseño de prueba del algoritmo de cálculo de distancia y similitud se analizó el
cálculo de distancia de tres señales sinusoidales (60 Hz, 120 Hz y 240 Hz), donde se
compararon con tres vectores similares, pero con frecuencias distintas (50 Hz, 100 Hz y
150 Hz), ver Tabla 2.3. Para ello se generaron las tres señales de prueba mediante el
software MATLAB y fueron transmitidas por puerto serie logrando una comunicación entre
dicho software y el IDE de Arduino donde se realizaron los cálculos de distancia
correspondientes a las métricas utilizadas, en este caso la métrica Euclidiana, la métrica de
Chebyshev y la métrica de Manhattan, tomándose como muestras de referencias los
vectores almacenados, ver Anexo III.
CAPÍTULO 2. MATERIALES Y MÉTODOS 44
Tabla 2.3. Características de las señales de prueba.
Características Valor
Cantidad de muestras 64
Valor máximo 998
Valor mínimo -982
2.9 Conclusiones del capítulo
La elección de los componentes que conforman la plataforma de hardware y software de
cualquier sistema de medición permite asegurar la flexibilidad de su desarrollo en el
procesamiento de bioseñales. El empleo de procesadores de bajas prestaciones y de
herramientas de desarrollo basadas en software libre han garantizado una constante
actualización y depuración de las funciones de las aplicaciones biomédicas, dotando al
diseño de una mayor fiabilidad y facilidad para su despliegue; esto trae consigo que
mediante el uso de algoritmos comunes y factible se logre un mejor manejo de los
parámetros de interés de las señales biomédicas.
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 45
CAPÍTULO 3. ANÁLISIS DE RESULTADOS
En este capítulo se presenta y se realiza un análisis de los resultados alcanzados a partir de
cada uno de los distintos escenarios de prueba. Los experimentos están encaminados a
determinar las características del Conversor ADC y verificar los tiempos de ejecución como
el espacio de almacenamiento ocupado por cada algoritmo de procesamiento
implementado.
3.1 Conversor ADC
Para analizar las características del ADC se realiza la lectura de tres señales sinusoidales
definidas por distintas frecuencias (200 Hz, 100 Hz y 15 Hz) y con una frecuencia de
muestreo de 1 kHz, 500 Hz y 100 Hz respectivamente. Las señales son adquiridas a través
del pin de entrada A0 mediante la función analogRead(). Después de haber adquirido los
valores de las señales empleando tanto el método por interrupciones como por encuesta, se
obtienen los parámetros de caracterización del ADC, a partir del período de adquisición de
cada muestra y las especificaciones dinámicas,
Adquisición empleando el método por interrupciones
En la Tabla 3.1 se muestra el tiempo de adquisición de las señales utilizando el método por
interrupciones. Para analizar los resultados obtenidos se tomaron como parámetros de
caracterización: frecuencia de las señales adquiridas, desviación, variación, período de
muestreo promedio y frecuencia de muestreo promedio.
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 46
Tabla 3.1. Características del tiempo de adquisición empleando el método por interrupciones
Frecuencia (Hz) 200 100 15
Desviación (ms) 0,00 0,00 0,00
Variación (ms) 0,00 0,00 0,00
Período promedio de muestreo (ms) 0,74 1,69 9,69
Frecuencia promedio de muestreo (Hz) 1358,70 592,42 103,22
En esta tabla se puede observar como no existe desviación ni variación entre los datos de
tiempo obtenidos, además se muestra la similitud entre la frecuencia de muestreo promedio
y la frecuencia de muestreo de la señal.
La Tabla 3.2 hace referencia a los valores obtenidos una vez calculadas las especificaciones
dinámicas de cada señal, mostrando la influencia de los ruidos y no linealidad en los
parámetros de comportamiento evaluados. Ejemplo de esto se puede observar en los
valores obtenidos por la ENOB, que en comparación con 10 bits de resolución del ADC es
un valor menor.
Tabla 3.2. Especificaciones dinámicas empleando el método por interrupciones
Frecuencia (Hz) 200 100 15
THD (dBc) -36.81 -44,14 -31,09
SINAD (dBc) 23,08 26,25 27,72
ENOB 3.54 4.07 4.31
La Figura 3.1 presenta el tiempo de adquisición de cada señal empleando el método por
interrupciones, se puede observar cómo se mantiene constate el tiempo por cada muestra,
mostrando la efectividad que presenta dicho método.
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 47
Figura 3.1. Tiempo de adquisición empleando el método por interrupciones
Adquisición empleando el método por encuesta.
En la Tabla 3.3 se hace referencia a los resultados obtenidos a partir de las características
del tiempo de adquisición de las señales de prueba. Esta, a diferencia de la Tabla 3.1
presenta los valores obtenidos a partir del método por encuesta. Se puedo observar cómo
los valores de desviación y variación son diferentes a cero y van a hacerse menores en la
medida que disminuya las frecuencias de prueba, mientras que el período y la frecuencia de
muestro promedio se mantienen prácticamente constantes. La inestabilidad mostrada por
los resultados se debe al método de adquisición empleado, en este caso se hace referencia al
método por encuesta.
Tabla 3.3. Características del tiempo de adquisición empleando el método por encuesta
Frecuencia (Hz) 200 100 15
Desviación (ms) 0,00208 0,00206 0,00204
Variación (ms) 0,00433 0,00427 0,00413
Período de muestreo promedio (ms) 0,42098 0,42098 0,42098
Frecuencia de muestreo promedio (Hz) 2375,42916 2375,42916 2375,42916
0
2000
4000
6000
8000
10000
12000
13
97
71
15
15
31
91
22
92
67
30
53
43
38
14
19
45
74
95
53
35
71
60
96
47
68
57
23
76
17
99
83
78
75
91
39
51
98
9
Tiem
po
(µ
s)
Muestra
200 Hz 100 Hz 15 Hz
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 48
La Tabla 3.4 muestra las especificaciones dinámicas obtenidas de las señales de prueba. En
esta tabla al igual que en la Tabla 3.2 existe una distorsión producida por los equipos de
generación, lo que trae consigo que de igual manera se obtengan parámetros de
comportamiento bajos.
Tabla 3.4. Especificaciones dinámicas empleando el método por encuesta
En la Figura 3.2 se muetra el tiempo empleado para adquirir las señales de prueba a partir
del método por encuesta. Se puede observar cómo existe uan variación en el período de
muestreo, consecuencia de que dicho método se ejecuta a través de un lazo de
programación por lo que depende del tiempo de ejecución de cada instrucción.
Figura 3.2. Tiempo de adquisición empleando el método por encuesta
De manera general se puede apreciar tanto en los resultados mostrados por las tablas como
por las figuras que el período de muestro de cada señal resulta más constante con el uso del
método por interrupciones, siendo este más eficiente que el método por encuesta.
400
405
410
415
420
425
430
1
36
71
10
6
14
1
17
6
21
1
24
6
28
1
31
6
35
1
38
6
42
1
45
6
49
1
52
6
56
1
59
6
63
1
66
6
70
1
73
6
77
1
80
6
84
1
87
6
91
1
94
6
98
1
10
16
Tiem
po
(µ
s)
Muestra
f200Hz f100Hz f15Hz
Frecuencia (Hz) 200 100 15
THD (dBc) -20,90 -21,22 -20,85
SINAD (dBc) 20,59 21,03 24,23
ENOB 3.13 3.20 3.73
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 49
El sketch implementado por el algoritmo empleando tanto el método por interrupciones
como por encuesta, utiliza 2138 bytes (6%) del espacio de almacenamiento de programa, de
un máximo de 30720 bytes. Mientras que las variables globales usan 200 bytes (9%) de la
memoria dinámica, dejando 1848 bytes para las variables locales, cuyo máximo es 2048
bytes.
3.2 Algoritmo de filtrado
El procesamiento de la señal ECG mediante el algoritmo de filtrado se realiza a partir de un
segmento de la señal con un tamaño de 6000 muestra a una frecuencia de muestreo de
1 kHz, donde su longitud pude variar dependiendo del segmento de interés. En dicho
experimento se elaboran pruebas con varios filtros (filtro notch, filtro paso bajo y filtro
paso alto) tanto en conjunto como de forma individual.
En la Tabla 3.5 se muestra el tiempo de ejecución del algoritmo de filtrado de la señal,
empleando los tres filtros y utilizando cada filtro por separado. Se puede apreciar cómo el
tiempo tiende a variar dependiendo del tipo de filtro ejecutado, siendo el filtro paso bajo el
de mayor duración de ejecución por muestra.
Tabla 3.5. Tiempo de ejecución del filtrado de la señal
Filtros: Notch, P. Bajo y P. Alto Notch P. Bajo P. Alto P. Banda
Muestra
Máx. 380 84 244 96 320
Min. 280 52 168 68 232
Prom. 363,01 66,46 229,32 86,35 304,08
Total 2178072 398804 1375960 518152 1824480
En la Figura 3.3 se pude apreciar una comparación entre la señal original y la señal filtrada,
obtenida utilizando los tres filtros en conjunto (filtro notch, filtro paso bajo y filtro paso
alto).
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 50
Figura 3.3. Comparación entre la señal original y la filtrada
A su vez en la Figura 3.4 se muestra una comparación entre los espectros de las señales
(original y filtrada), en la que se puede observar con mayor claridad la eliminación de la
frecuencia de 50 Hz (ruido producido por la red eléctrica), seguidamente de la supresión de
los ruidos que aparecen junto a la señal, permitiendo el paso de la frecuencia de trabajo con
un rango de 0.3 Hz a 35 Hz.
Figura 3.4. Comparación entre el espectro de la señal original y la señal filtrada
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 51
En la Figura 3.5 hace referencia a cada una de las señales obtenidas empleando los filtros
de manera individual. Se puede observar como en a) a pesar de eliminar el ruido de 50 Hz
producido por la red eléctrica, el filtro notch introduce otras distorsiones, mientras que en
b), c), a pesar de no eliminar el ruido de 50 Hz y suprimir las frecuencias que no se
encuentran dentro del rango de trabajo, no se introducen otras distorsiones.
Figura 3.5. ECG procesada empleando: a) filtro notch, b) filtro paso bajo, c) filtro paso alto,
d) filtro pasa banda.
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 52
En general el algoritmo de filtrado ocupa un espacio de almacenamiento de programa 6708
bytes, correspondiendo a un 21% de un total de 30720 bytes. De memoria dinámica ocupa
314 bytes de variables globales, dejando 1734 bytes para las variables locales
representando un 15% para un total de 2048 bytes. Mientras que por separado cada filtrado
ocupa 6684 bytes de almacenamiento de programa constituyendo un 21% del total, pero
muestra una memoria dinámica de igual tamaño que el filtrado en conjunto.
3.3 Algoritmo de la FFT
Para la implementación del algoritmo de la FFT se realizó la transmisión de varios bloques
de la señal de prueba con diferentes tamaños de muestras (32, 64 y 128 muestras
respectivamente) muestreados a una frecuencia de 1 kHz, los cuales primeramente fueron
transformados por el empleo de una función de ventana (enventanado) para luego ser
procesados a partir de la FFT, realizando pruebas tanto de tiempo de ejecución del
algoritmo como capacidad en memoria ocupada por el mismo.
En la Tabla 3.6 se puede observar el tiempo de ejecución del algoritmo de la FFT
implementando el enventanado y sin implementar el enventanado. Se aprecia cómo a la
hora de implementar la función de ventana el tiempo de ejecución va a ser mayor en la
medida que aumenta el tamaño del bloque a procesar.
Tabla 3.6. Tiempo de ejecución del algoritmo de la FFT
Tamaño del bloque a
procesar (muestras)
Tiempo implementando el
enventanado (µs)
Tiempo sin implementar
enventanado (µs)
32 13492 10452
64 29752 23780
128 64868 52828
La Tabla 3.7 representa la capacidad en memoria de las FFT, teniendo en cuenta el
almacenamiento del programa, variables globales, variables de comunicación y variables de
procesamiento. En dicha tabla puede observarse cómo el tamaño que ocupan las variables
globales es mayor con el aumento del tamaño del bloque a procesar.
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 53
Tabla 3.7. Capacidad en memoria de la FFT
Tamaño del
bloque a procesar
(muestras)
Almacenamiento
del programa
(bytes)
Variables
globales
(bytes)
Variables
locales de
comunicación
(bytes)
Variables
locales de
procesamiento
(bytes)
32 6480 531 191 340
64 6482 851 191 660
128 6482 1491 191 1300
En las Figuras 3.6 se observa el comportamiento en el tiempo del espectro de la señal
obtenida una vez procesada por la FFT empleando el enventanado. Con el enventanado se
consigue una buena resolución espectral y a al mismo tiempo evita la dispersión de la
misma, debido a que el espectro resultante presenta un lóbulo principal lo más estrecho
posible y reduce la amplitud de los lóbulos laterales.
Figura 3.6. Espectro de la FFT empleando el enventanado para N = 128
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 54
En la Figura 3.7 se muestra el espectro de la señal FFT sin implementar el enventanado. Se puede
apreciar una mayor fuga espectral al comprarla con la Figura 3.6.
Figura 3.7. Espectro de la FFT sin emplear el enventanado para N = 128
3.4 Algoritmo de cálculo de distancia y similitud
Para la realización del experimento del algoritmo de cálculo de distancia y similitud, se
realizó la comparación del cálculo distancia entre los vectores d1, d2 y d3 y segmentos de
señales sinusoidales de prueba con un tamaño de 64 cada uno. Estas señales fueron
introducidas por el puerto serie mediante la comunicación Arduino – MATLAB, donde:
d1: vector de una señal sinusoidal con frecuencia de 50 Hz,
d2: vector de una señal sinusoidal con frecuencia de 100 Hz,
d3: vector de una señal sinusoidal con frecuencia de 150 Hz,
y las señales de pruebas:
señal sinusoidal de 50 Hz de frecuencia,
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 55
señal sinusoidal de 60 Hz de frecuencia,
señal sinusoidal de 100 Hz de frecuencia,
señal sinusoidal de 120 Hz de frecuencia,
señal sinusoidal de 150 Hz de frecuencia,
señal sinusoidal de 240 Hz de frecuencia,
En las Tablas 3.8, 3.9 y 3.10 se presenta el resultado de la evaluación del algoritmo de
cálculo de distancia Euclidiana, Manhattan y Chebyshev respectivamente, donde se puede
observar que los menores valores de distancia se obtienen cuando coinciden el segmento de
la señal de la entrada con su vector correspondiente. Con estos resultados se puede observar
que la mayor distancia pertenece al algoritmo de Manhattan, mientras que la menor
distancia corresponde al algoritmo de Chebyshev.
Tabla 3.8. Distancia Euclidiana
Vectores d1 d2 d3 Valor min.
Frecuencia 50 Hz 0 7761,09 7786,86 0
Frecuencia 60 Hz 8667,06 8138,49 8143,86 8138,49
Frecuencia 100 Hz 7761,09 0 7775,97 0
Frecuencia 120 Hz 7795,39 7449,79 8158,44 7449,79
Frecuencia 150 Hz 7786,86 7775,97 0 0
Frecuencia 240 Hz 7923,89 8020,27 8037,38 7923,89
Tabla 3.9. Distancia Manhattan
Vectores d1 d2 d3 Valor min.
Frecuencia 50 Hz 0 60234508 60635232 0
Frecuencia 60 Hz 75117872 66234956 66322536 66234956
Frecuencia 100 Hz 60234508 0 60465760 0
Frecuencia 120 Hz 60768032 55499432 66560136 55499432
Frecuencia 150 Hz 60635232 60465760 0 0
Frecuencia 240 Hz 62787964 64324728 64599472 62787964
CAPÍTULO 3. ANÁLISIS DE RESULTADOS 56
Tabla 3.10. Distancia Chebyshev
Vectores d1 d2 d3 Valor min.
Frecuencia 50 Hz 0 1760 2000 0
Frecuencia 60 Hz 1951 1933 1951 1933
Frecuencia 100 Hz 1760 0 1902 0
Frecuencia 120 Hz 1951 1949 1951 1949
Frecuencia 150 Hz 2000 1902 0 0
Frecuencia 240 Hz 1951 1933 1951 1933
En general cada algoritmo de distancia presenta diferente capacidad en el almacenamiento
del programa donde la distancia Euclidiana ocupa 6134 bytes (19%) del espacio de
almacenamiento de programa, con un valor límite de 30720 bytes; la distancia Manhattan
usa 5950 bytes (19%) y la distancia Chebyshev 5974 bytes (19%).
3.5 Conclusiones del capítulo
La realización de los experimentos permitió la validación de la propuesta de diseño
realizada. Se pudo demostrar que el método de adquisición de datos por interrupciones, en
tiempo real, presenta un período de muestreo más constante que el método por encuesta.
Además, la implementación de los algoritmos de procesamiento facilita una comprensión y
análisis de los datos adquiridos, condicionado por las aplicaciones deseadas por el usuario.
Por último, la propuesta de diseño del nodo es una opción viable debido al uso de
procesadores de bajo costo y alta disponibilidad, además de usar herramientas de software
de uso distribuido.
CONCLUSIONES Y RECOMENDACIONES 57
CONCLUSIONES Y RECOMENDACIONES
Conclusiones
La propuesta presentada en este trabajo de diploma sobre el diseño de un nodo de
procesamiento de bioseñales basado en Arduino cumple con los requerimientos planteados.
Los resultados de los experimentos realizados permitieron trazar las conclusiones
siguientes:
1. La plataforma Arduino evaluada presenta como limitante su capacidad en memoria,
donde pueden ser implementados algoritmos de procesamiento que no excedan un
máximo de 30720 bytes de almacenamiento de programa.
2. El método de adquisición de señales por interrupciones resulta viable para realizar
la adquisición de señales con el ADC con un período de muestreo constante.
3. Los algoritmos evaluados como el filtrado a partir de filtros FIR e IIR, la FFT
empleando la función de ventana o no y el cálculo de distancia (Euclidiana,
Manhattan y Chebyshev), están condicionados por una cantidad de muestras
correspondiente a cada algoritmo, donde la FFT puede procesar 128 muestras como
máximo, mientras que el cálculo de distancias solamente tres vectores de 64
muestras cada uno.
4. Los algoritmos implementados cumplen con las características necesarias para el
procesamiento de bioseñales, en cuanto a tiempo de ejecución y capacidad de
almacenamiento, siendo capaces de ser implementados en módulos basados en la
plataforma Arduino.
5. Los parámetros y potencialidades presentados por la plataforma Arduino favorecen
el procesamiento digital de bioseñales.
CONCLUSIONES Y RECOMENDACIONES 58
Recomendaciones
Con la intención de dar continuidad al presente trabajo, se propone:
1. Aumentar la cantidad de algoritmos de procesamiento de bioseñales evaluados en
la plataforma de Arduino
2. Realizar los experimentos reales con equipos de generación de señales y medición
de mayor exactitud.
3. Realizar pruebas para la adquisición muilticanal de bioseñales.
4. Realizar pruebas de transmisión Wi-Fi de la plataforma Arduino mediante el
módulo ESP-01.
5. Realizar los experimentos diseñados con otros módulos pertenecientes a la familia
Arduino.
REFERENCIAS BIBLIOGRÁFICAS 59
REFERENCIAS BIBLIOGRÁFICAS
[1] S. E. C. Bastidas y J. M. L. Peláez, «ESTUDIO DE REDES DE SENSORES Y
APLICACIONES ORIENTADAS A LA RECOLECCIÓN Y ANÁLISIS DE
SEÑALES BIOMÉDICAS.», Rev. GTI, vol. 12, n.o 33, pp. 85–99, 2013.
[2] B. M. Santos, «Módulo inalámbrico para redes de sensores biomédicos.», Rev.
Científica Ing. Electrónica Automática Comun. ISSN 1815-5928, vol. 31, n.o 2, pp.
16–22, 2011.
[3] I. B. Muñoz, L. B. Vázquez, J. M. R. Ascariz, P. M. Sánchez, y J. L. M. Sánchez,
«Solución inalámbrica para la implementación de un sistema de telemedicina»,
Novática Rev. Asoc. Téc. Informática, n.o 177, pp. 31–33, 2005.
[4] C. Bustamante, W. Jara, y M. Yapur, «Diseño y construcción de un contador de ritmo
cardiaco, basado en un principio óptico», Rev. Tecnológica, vol. 15, n.o 1, pp. 72–78,
2002.
[5] I. Niubó, M. Mulet, T. Gual, y A. Rodriguez, «Designing a communication protocol
for a central station monitoring system», en Proceedings of the 25th Annual
International Conference of the IEEE Engineering in Medicine and Biology Society
(IEEE Cat. No. 03CH37439), 2003, vol. 2, pp. 1425–1428.
[6] I. N. Jorge, M. Mulet, H. Santos, T. Gual, y A. Rodríguez, «Modifications to a
communication protocol for a central station monitoring system in a wireless
network», en World Congress on Medical Physics and Biomedical Engineering 2006,
2007, pp. 484–486.
[7] L. M. A. Castaño y J. A. G. Gómez, «Desarrollo de un sistema de monitoreo
inalámbrico para señales biomédicas», Rev. Politécnica, vol. 5, n.o 8, pp. 33–38, 2009.
[8] C. P. Groff y P. L. Mulvaney, «Wearable vital sign monitoring system», ago-2000.
[9] A. Bonfiglio y D. De Rossi, Wearable monitoring systems. Springer Science &
Business Media, 2010.
[10] N. H. Lovell, S. J. Redmond, J. Basilakis, y B. G. Celler, «Biosignal quality detection:
An essential feature for unsupervised telehealth applications», en The 12th IEEE
REFERENCIAS BIBLIOGRÁFICAS 60
International Conference on e-Health Networking, Applications and Services, 2010,
pp. 81–85.
[11] B. C. Meyer, C. A. Clarke, T. M. Troke, y L. S. Friedman, «Essential telemedicine
elements (tele-ments) for connecting the academic health center and remote
community providers to enhance patient care», Acad. Med., vol. 87, n.o 8, pp. 1032–
1040, 2012.
[12] P. Bonato, «Advances in wearable technology and its medical applications», en 2010
annual international conference of the IEEE engineering in medicine and biology,
2010, pp. 2021–2024.
[13] M. M. Rodgers, V. M. Pai, y R. S. Conroy, «Recent advances in wearable sensors for
health monitoring», IEEE Sens. J., vol. 15, n.o 6, pp. 3119–3126, 2015.
[14] G. A. M. Benavides, «Modelo de plataforma para el desarrollo de redes de sensores
portables en monitoreo fisiológico ambulatorio», PhD Thesis, Universidad de
Antioquia, 2013.
[15] G. Appelboom et al., «Smart wearable body sensors for patient self-assessment and
monitoring», Arch. Public Health, vol. 72, n.o 1, p. 28, 2014.
[16] S. C. Mukhopadhyay, «Wearable sensors for human activity monitoring: A review»,
IEEE Sens. J., vol. 15, n.o 3, pp. 1321–1330, 2015.
[17] J. L. Ordóñez, «ACTA.(Autores Cientifico-Técnicos y Académicos)», Línea
Available Httpwww Acta Esmediosarticuloscienciasytecnologia062017 PdfÚltimo
Acceso Oct. 2016, 2016.
[18] A. Kalinauckas, «Wearable technology», Eng. Technol., vol. 10, n.o 4, pp. 36–43,
2015.
[19] A. Paiva, D. Vieira, J. Cunha, H. Carvalho, y B. Providência, «Design of a smart
garment for cycling», en International Conference on Innovation, Engineering and
Entrepreneurship, 2018, pp. 229–235.
[20] E. Kańtoch, «Recognition of sedentary behavior by machine learning analysis of
wearable sensors during activities of daily living for telemedical assessment of
cardiovascular risk», Sensors, vol. 18, n.o 10, p. 3219, 2018.
[21] J. Montes et al., «Using Hexoskin wearable technology to obtain body metrics during
trail hiking», Int. J. Exerc. Sci., vol. 8, n.o 4, p. 425, 2015.
[22] M. Larkin, «Technology and public health», Lancet Infect. Dis., vol. 6, n.o 10, p. 627,
2006.
[23] J. G. Proakis, D. G. Manolakis, y V. S. del Río, Tratamiento digital de señales, vol. 4.
Pearson Educación, 2007.
REFERENCIAS BIBLIOGRÁFICAS 61
[24] J. P. A. Moya, «Procesamiento digital de señales», Cartago Costa Rica Tecnológico
Costa Rica, 2011.
[25] E. Bertran Albertí, Procesado digital de señales: fundamentos para comunicaciones y
control I. Edicions UPC, 2006.
[26] J. V. Barchiesi, Introducción al procesamiento digital de señales. Eds. Universitarias
de Valparaíso, 2008.
[27] S. Smith, Digital signal processing: a practical guide for engineers and scientists.
Elsevier, 2013.
[28] J. Bai et al., «A portable ECG and blood pressure telemonitoring system», IEEE Eng.
Med. Biol. Mag., vol. 18, n.o 4, pp. 63-70, 1999.
[29] E. Jovanov, P. Gelabert, R. Adhami, B. Wheelock, y R. Adams, «Real time Holter
monitoring of biomedical signals», en DSP Technology and Education conference
DSPS, 1999, vol. 99, pp. 4-6.
[30] D. Balasubramaniam y D. Nedumaran, «Doppler spectrogram calculation using CFFT
algorithm in a digital signal processor based system», en 2009 Third Asia
International Conference on Modelling & Simulation, 2009, pp. 341-344.
[31] I. Bloch, Information fusion in signal and image processing: major probabilistic and
non-probabilistic numerical approaches. John Wiley & Sons, 2013.
[32] J. Burrell, T. Brooke, y R. Beckwith, «Vineyard computing: Sensor networks in
agricultural production», IEEE Pervasive Comput., n.o 1, pp. 38–45, 2004.
[33] A. Sheth et al., «Senslide: a sensor network based landslide prediction system», en
Proceedings of the 3rd international conference on Embedded networked sensor
systems, 2005, pp. 280–281.
[34] C. Hartung, R. Han, C. Seielstad, y S. Holbrook, «FireWxNet: A multi-tiered portable
wireless system for monitoring weather conditions in wildland fire environments», en
Proceedings of the 4th international conference on Mobile systems, applications and
services, 2006, pp. 28–41.
[35] J. P. Lynch y K. J. Loh, «A summary review of wireless sensors and sensor networks
for structural health monitoring», Shock Vib. Dig., vol. 38, n.o 2, pp. 91–130, 2006.
[36] S. E. C. Bastidas y J. M. L. Peláez, «ESTUDIO DE REDES DE SENSORES Y
APLICACIONES ORIENTADAS A LA RECOLECCIÓN Y ANÁLISIS DE
SEÑALES BIOMÉDICAS.», Rev. GTI, vol. 12, n.o 33, pp. 85–99, 2013.
[37] M. Gao, Q. Zhang, L. Ni, Y. Liu, y X. Tang, «Cardiosentinal: A 24-hour heart care
and monitoring system», J. Comput. Sci. Eng., vol. 6, n.o 1, pp. 67–78, 2012.
REFERENCIAS BIBLIOGRÁFICAS 62
[38] G. Mohan y P. O. Sinciya, «Real time healthcare system for patients with chronic
diseases in home and hospital environments», Int. J. Sci. Eng. Technol. Res., vol. 2,
n.o 4, 2013.
[39] F. Felisberto, N. Costa, F. Fdez-Riverola, y A. Pereira, «Unobstructive Body Area
Networks (BAN) for efficient movement monitoring», Sensors, vol. 12, n.o 9, pp.
12473–12488, 2012.
[40] F. Hu, M. Jiang, L. Celentano, y Y. Xiao, «Robust medical ad hoc sensor networks
(MASN) with wavelet-based ECG data mining», Ad Hoc Netw., vol. 6, n.o 7, pp. 986–
1012, 2008.
[41] E. E. Egbogah y A. O. Fapojuwo, «A survey of system architecture requirements for
health care-based wireless sensor networks», Sensors, vol. 11, n.o 5, pp. 4875–4898,
2011.
[42] H. J. Lee et al., «Ubiquitous healthcare service using Zigbee and mobile phone for
elderly patients», Int. J. Med. Inf., vol. 78, n.o 3, pp. 193–198, 2009.
[43] H. Wang, D. Peng, W. Wang, H. Sharif, H.-H. Chen, y A. Khoynezhad, «Resource-
aware secure ECG healthcare monitoring through body sensor networks», IEEE Wirel.
Commun., vol. 17, n.o 1, pp. 12–19, 2010.
[44] B. Becerra-Luna, R. Dávila-García, P. Salgado-Rodríguez, R. Martínez-Memije, y Ó.
Infante-Vázquez, «Monitor de señales de electrocardiografía y frecuencia cardiaca
mediante un teléfono móvil con el protocolo de comunicación Bluetooth», Arch.
Cardiol. México, vol. 82, n.o 3, pp. 197–203, 2012.
[45] F. López Escobedo, El análisis de las características dinámicas de la señal de habla
como posible marca para la contratación e identificación forense de voz: un estudio
para el español de México. Universitat Pompeu Fabra, 2011.
[46] J. M. Ortiz, «Análisis de Señales Bioeléctricas», 2011.
[47] J. Joskowicz, «Codificación de voz y video», Montev. Urug. Inst. Ing. Eléctrica Fac.
Ing., 2013.
[48] J. Joskowicz, «Voz, video y telefonía sobre IP», Inst. Ing. Eléctrica Fac. Ing. Montev.
Urug., 2013.
[49] E. Viracucha y J. De la Bastida, «Sistema Informático para el Análisis y
Procesamiento de Señales Sísmicas de Volcanes en el Ecuador.», Rev. Politécnica,
vol. 33, n.o 1, 2014.
[50] M. Akay, Wiley encyclopedia of biomedical engineering. Wiley-Interscience, 2006.
[51] P. E. Drawz, M. Abdalla, y M. Rahman, «Blood pressure measurement: clinic, home,
ambulatory, and beyond», Am. J. Kidney Dis., vol. 60, n.o 3, pp. 449–462, 2012.
REFERENCIAS BIBLIOGRÁFICAS 63
[52] L. A. Osorio, «Acondicionamiento de señales bioeléctricas», PhD Thesis, Universidad
Tecnológica de Pereira. Facultad de Ingenierías Eléctrica, Electrónica, Física y
Ciencias de la Computación, Colombia, 2007.
[54] L. A. Osorio, «Acondicionamiento de señales bioelectricas», Universidad Tecnológica
de Pereira. Facultad de Ingenierías Eléctrica …, 2007.
[55] A. Gacek y W. Pedrycz, ECG signal processing, classification and interpretation: a
comprehensive framework of computational intelligence. Springer Science & Business
Media, 2011.
[56] F. Castells, P. Laguna, L. Sörnmo, A. Bollmann, y J. M. Roig, «Principal component
analysis in ECG signal processing», EURASIP J. Adv. Signal Process., vol. 2007, n.o
1, p. 074580, 2007.
[57] A. Q. Rincón, M. Risk, y S. Liberczuk, «Preprocesamiento de eeg con filtros hampel»,
IEEE Lat. Am. Trans., 2012.
[58] R. Cooper, J. W. Osselton, y J. C. Shaw, EEG technology. Butterworth-Heinemann,
2014.
[59] A. F. Quiceno, G. Castellanos, L. E. Avendano, y J. M. Ferrero, «Optimización en el
Desempeño de Algoritmos de Detección de Complejos QRS», Av. En Sist. E
Informática, vol. 4, n.o 1, 2007.
[60] C. Vidal Silva y V. Gatica Rojas, «Design and implementation of a digital
electrocardiographic system», Rev. Fac. Ing. Univ. Antioquia, n.o 55, pp. 99–107,
2010.
[61] C. Vidal, P. Charnay, y P. Arce, «Enhancement of a QRS detection algorithm based
on the first derivative, using techniques of a QRS detector algorithm based on non-
linear transformations», en 4th European Conference of the International Federation
for Medical and Biological Engineering, 2009, pp. 393–396.
[62] J. H. Rivera, C. Castellanos, y J. S. Mejia, «Selección efectiva de características para
bioseñales utlizando el analisis de componentes principales», Sci. Tech., vol. 1, n.o 34,
2007.
[63] M. González Villada y X. Martínez Osorio, «Análisis de señales electrocardiográficas
(ecg) con isquemia cardiaca usando técnicas de procesamiento digital de señales»,
2013.
[64] C. Saritha, V. Sukanya, y Y. N. Murthy, «ECG signal analysis using wavelet
transforms», Bulg J Phys, vol. 35, n.o 1, pp. 68–77, 2008.
[65] A. J. Orozco-Naranjo y P. A. Muñoz-Gutiérrez, «Detection of pathological and
normal heartbeat using wavelet packet, support vector machines and multilayer
perceptron», Tecno Lóg., n.o 31, pp. 73–91, 2013.
REFERENCIAS BIBLIOGRÁFICAS 64
[66] B. Boashash y P. Black, «An efficient real-time implementation of the Wigner-Ville
distribution», IEEE Trans. Acoust. Speech Signal Process., vol. 35, n.o 11, pp. 1611–
1618, 1987.
[67] N. Baydar y A. Ball, «A comparative study of acoustic and vibration signals in
detection of gear failures using Wigner–Ville distribution», Mech. Syst. Signal
Process., vol. 15, n.o 6, pp. 1091–1107, 2001.
[68] G. R. Naik y W. Wang, «Blind source separation», Berl. Springer, vol. 10, pp. 978–3,
2014.
[69] I. Torres-Rodríguez, Y. Padrón-García, Y. Hernández-Vicens, y A. Taboada-Crispí,
«FILTRADO FIR DE SEÑALES BIOMÉDICAS UTILIZANDO PSoC».
[70] A. J. Machado, J. F. Amador, y M. J. Coello, «Wheelchair control system for
quadriplegics and ocular keyboard», en 2015 IEEE Thirty Fifth Central American and
Panama Convention (CONCAPAN XXXV), 2015, pp. 1–5.
[71] M. Merino Monge, «Procesamiento y caracterización de bioseñales para su uso en
interfaces de control y afectividad», 2015.
[72] A. Ochoa et al., «Sistema de Adquisición y Procesamiento de Señales
Electrocardiográficas», Sist. Cibern. E Inform., vol. 7, pp. 1–15, 2010.
[73] A. Román y Zubeldia, «Implementación de pruebas para una hipótesis sobre la
aplicación de distancia Euclidiana para realizar agrupamientos en espacios
multidimensionales», 2018.
[74] H. R. Altamirano Benalcázar y A. M. Puente Moreno, «Diseño e implementación de
una red inalámbrica de sensores inteligentes para el registro de la contaminación
acústica en la ESPOCH basado en tarjetas de desarrollo», PhD Thesis, Escuela
Superior Politécnica de Chimborazo, Ecuador, 2016.
[75] H. A. H. Rivera, «Sistema electrónico de adquisición y procesamiento de señales con
comunicación USB», 2016.
[76] «Arduino - Home». [En línea]. Disponible en: https://www.arduino.cc/. [Accedido:
19-mar-2019].
[79] Ó. T. Artero, Arduino: curso práctico de formación. RC Libros, 2013.
[80] «Arduino - Products». [En línea]. Disponible en:
https://www.arduino.cc/en/Main/Products. [Accedido: 19-mar-2019].
[81] M. McRoberts, Beginning Arduino. Apress, 2013.
[82] R. Anderson y D. Cervo, Pro Arduino. Apress, 2012.
REFERENCIAS BIBLIOGRÁFICAS 65
[83] A. Nayyar y V. Puri, «A review of Arduino board’s, Lilypad’s & Arduino shields», en
2016 3rd International Conference on Computing for Sustainable Global
Development (INDIACom), 2016, pp. 1485-1492.
[84] D. Wheat, Arduino internals. Apress, 2012.
[85] S. de Oliveira, Internet das coisas com ESP8266, Arduino e Raspberry PI. Novatec
Editora, 2017.
[86] J. Romano, «Introducción a la digitalización de bioseñales», IV Cong
Microelectrónica Apl., 2013.
[87] M. Gómez-Díaz, A. Villalobos-Torres, C. Lara-Rendón, y L. Juárez-Guerra, «Análisis
de bioseñales: Enfoque técnico de la adquisición, procesamiento y sus aplicaciones»,
2018.
[88] S. F. Barrett, Arduino Microcontroller Processing for Everyone! Morgan and
Claypool Publishers, 2010.
[89] A. H. Shajahan y A. Anand, «Data acquisition and control using Arduino-Android
platform: Smart plug», en 2013 International Conference on Energy Efficient
Technologies for Sustainability, 2013, pp. 241–244.
[90] S. Nilsson, FIR filter Arduino Library. Contribute to sebnil/FIR-filter-Arduino-
Library development by creating an account on GitHub. Göteborg, Sweden, 2019.
[91] G. Stančić y S. Nikolić, «Digital linear phase notch filter design based on IIR all-pass
filter application», Digit. Signal Process., vol. 23, n.o 3, pp. 1065–1069, 2013.
[92] Pieter P, «Simple Finite Impulse Response Notch Filter», 07-ene-2019. [En línea].
Disponible en: https://tttapa.github.io/Pages/Mathematics/Systems-and-Control-
Theory/Digital-filters/FIR-Notch.html. [Accedido: 17-jun-2019].
[93] M. A. Al-Alaoui, «Linear phase low-pass IIR digital differentiators», IEEE Trans.
Signal Process., vol. 55, n.o 2, pp. 697–706, 2007.
[94] P. Lander y E. J. Berbari, «Use of high-pass filtering to detect late potentials in the
signal-averaged ECG», J. Electrocardiol., vol. 22, pp. 7–12, 1990.
[95] L. De La Fraga, La transformada discreta de Fourier y la transformada rápida de
Fourier. Recuperado de, 2001.
[96] J.-P. Cáceres y S. Aditiva, Transformada de Fourier. CCRMA, 2007.
[97] E. Condes, Fast Fourier Transform for Arduino. Contribute to kosme/arduinoFFT
development by creating an account on GitHub. Mexico city, 2019.
[98] «Arduino - Environment». [En línea]. Disponible en:
https://www.arduino.cc/en/Guide/Environment. [Accedido: 19-mar-2019].
[99] Ó. T. Artero, El mundo genuino arduino. RC libros, 2016.
REFERENCIAS BIBLIOGRÁFICAS 66
[100] P. Derek, Control Engineering: An introduction with the use of MatLab. bookboon.
com, 2013.
[101] D. N. López, M. A. G. Jiménez, y S. Buitrago, «Inclination measurement device for
hospital beds’ in ICU Medidor de inclinación de camas hospitalarias en UCI».
[102] N. K. A. M. Rashid y K. A. Bapujee, «Wireless Wide Area Radiation Monitoring
Network Using Internet of Things», Mekatronika, vol. 1, n.o 1, pp. 14–20, 2019.
[103] P. Stoffregen, TimerOne Library with optimization and expanded hardware
support: PaulStoffregen/TimerOne. Portland, Oregon, USA, 2019.
[104] H. P. Da Silva, J. Guerreiro, A. Lourenço, A. L. Fred, y R. Martins, «BITalino: A
Novel Hardware Framework for Physiological Computing. », en PhyCS, 2014, pp.
246–253.
ANEXOS 67
ANEXOS
Anexo I. Programación del algoritmo de filtrado
Código implementado en el IDE Arduino
#include <Filter.h>
#include <FIRFilter.h>
#include <IIRFilter.h>
unsigned long Time;
unsigned long Timef;
int16_t value;
int16_t valor;
// 60 Hz notch
// const double b_notch[] = { 7.1201, -13.2402, 7.1201 }; // fN = 60
Hz
// 50 Hz notch
const double b_notch[] = { 10.2159, -19.4317, 10.2159 }; // fN = 50
Hz
// 35 Hz Butterworth low-pass
const double b_lp[] = { 0.00113722762905776, 0.00568613814528881,
0.0113722762905776, 0.0113722762905776, 0.00568613814528881,
0.00113722762905776 };
const double a_lp[] = { 1, -3.03124451613593, 3.92924380774061, -
2.65660499035499, 0.928185738776705, -0.133188755896548 };
ANEXOS 68
// 0.3 Hz high-pass
const double b_hp[] = { 1, -1 };
const double a_hp[] = { 1, -0.995 };
FIRFilter notch(b_notch);
IIRFilter lp(b_lp, a_lp);
IIRFilter hp(b_hp, a_hp);
void setup() {
Serial.begin(115200); //abre el puerto serial y se fija la velocidad de
trabajo
while (!Serial) {}; // espera porque el puerto esté disponible
delay(2500); // espera por estabilización del dispositivo
// os_timer_arm;
}
void loop()
{
// lectura de una muestra por el puerto serial
while (!(Serial.available() > 0)) {};
String myString = Serial.readStringUntil('\n'); // lectura del buffer
hacia una cadena
int16_t entero = myString.toInt();
// Time = micros(); // habilitar para la determinación del tiempo de
procesamiento de una muestra
double filtrada = notch.filter(
lp.filter(
hp.filter(entero)));
// Timef = micros() - Time;
// Serial.println(Timef);
Serial.println(filtrada, DEC); // escritura del valor filtrado por
puerto serie
ANEXOS 69
}
Código implementado en MATLAB
%% Escritura de datos de un arreglo hacia el ESP-12 y lectura del arreglo
por puerto serie
%% lectura de los datos a procesar
clc
% close all
N = 6000;
load ecg % datos en la variable ecg_array de 15000 muestras, tipo
double (8 bytes)
ALLecg_array = ecg_array - mean(ecg_array);
ALLecg_array = ALLecg_array/max(ALLecg_array)*1024;
ALLecg_array = ALLecg_array(1:N);
% ALLecg_array = [-264 -1254 ]
fs = 1000; % frecuencia de muestreo de la senal a procesar
v_read=[]; % lectura de los datos tipo char desde el módulo
ecgR=[]; % conversión de los datos leídos a formato entero
ECG_filtrada = [];
%% Configuracion del puerto serie
% Inicialización del puerto
puerto_name = 'COM7';
hwINFO=instrhwinfo('serial'); %Determinación de los puertos serie
disponibles
viejo = instrfind('port',puerto_name); % eliminación de objetos de puerto
serie existentes
delete (viejo);
clear viejo;
% definicion de parametros
placaserial = serial(puerto_name,'BaudRate',115200); %,'DataBits',8);
set(placaserial,'Terminator',{'CR/LF' 'LF/CR'}); % es vital que coincida
con el terminator recibodo por el puerto{'lectura' 'escritura' }
ANEXOS 70
set(placaserial,'OutputBufferSize',10000);
set(placaserial,'InputBufferSize',10000);
set(placaserial,'TimeOut',5);
%% Apertura de la comunicación por puerto serial
try
disp(['Abriendo puerto ' puerto_name ])
fopen(placaserial);
pause(4) % !!!IMPRESCINDIBLE antes de iniciar comunicación con el
Arduino
% lazo de escritura
disp(['Puerto ' puerto_name ' Abierto!!'])
catch
disp(['Puerto ' puerto_name ' ya está abierto']);
end
for m=1:N;% length(ALLecg_array)
%% escritura de arreglo por el puerto serie
try
while placaserial.status ~= 'open'; end % esperar
por disponibilidad del puerto
fprintf(placaserial,num2str(ALLecg_array(m),'%0.0f')); %
escritura de valor hacia el puerto serial
catch
disp('ERROR en envío de datos');
end
%% lectura de resultados
try
while (placaserial.BytesAvailable < 6); end;
Ad = fgetl(placaserial); % toma un solo valor del buffer,
descartando el 'terminator'
v_read = str2num(Ad); % convierte a entero
catch
%%
disp('ERROR en la lectura');
ANEXOS 71
fclose(placaserial);
delete(placaserial)
clear placaserial
end
ECG_filtrada = [ECG_filtrada v_read];
fprintf('.')
end % del lazo M
fprintf('\n')
fclose(placaserial);
delete(placaserial)
clear placaserial
%% presentacion de estimado de la STFT
figure
subplot(2,1,1);plot(ALLecg_array);title('ECG -
Original');ylabel('Magnitud');xlabel('Muestra'); grid % señal
original
subplot(2,1,2);p = plot(ECG_filtrada);title('ECG -
Filtrada');ylabel('Magnitud');xlabel('Muestra'); grid % señal
filtrada
%% Cálculo del espectro en MatLab
f_magO = abs(fft(ALLecg_array,N));
f_magF = abs(fft(ECG_filtrada,N));
f_bin = fs/N*[0:N-1];
figure; title('Espectros');
subplot(2,1,1);plot(f_bin(1:N/2),f_magO(1:N/2));title('ECG -
Original');xlabel('Frecuencia (Hz)');ylabel('Magnitud');grid
subplot(2,1,2);plot(f_bin(1:N/2),f_magF(1:N/2));title('ECG -
Filtrada');xlabel('Frecuencia (Hz)');ylabel('Magnitud');grid
% subplot(1,1,1);plot(f_bin(1:N/2),f_magF(1:N/2));title('ECG -
Filtrada');xlabel('Frecuencia (Hz)');ylabel('Magnitud');grid
ANEXOS 72
Anexo II. Programación del algoritmo de la FFT
Código implementado en el IDE Arduino
#include "arduinoFFT.h"
#include <CircularBuffer.h>
arduinoFFT FFT = arduinoFFT(); /* Create FFT object */
CircularBuffer<int, 128> buffer;
unsigned long Time;
unsigned long Timef;
const uint16_t samples = 128; // Cantidad de puntos de la FFT. Tiene que
ser potencia de dos
double vReal[samples]; //señal de entrada. parte real
double vImag[samples]; //señal de entrada. parte imaginaria
void setup()
{
// Inicialización de la comunicación por puerto serie
Serial.begin(115200);
while (!Serial) {}; // espera por disponibilidad del puerto
delay(2500); // tiempo de establecimiento del procesador
}
void loop()
{
// lectura de 'samples' datos por puerto serie,
for (uint16_t i = 0; i < samples; i++)
{
while (!(Serial.available() > 0)) {};
ANEXOS 73
String myString = Serial.readStringUntil('\n'); // lectura del buffer
hacia una cadena
int entero = myString.toInt();
// circularBuffer.Add(entero);
buffer.push(entero);
}
for (uint16_t i = 0; i < samples; i++)
{
// int value = circularBuffer.ExtractFirst();
int value = buffer[i];
vReal[i] = double(value);
vImag[i] = 0.0; //Parte imaginaria de señal real de entrada es nula
}
// Time = micros(); // habilitar para la determinación del tiempo de
procesamiento de una muestra
FFT.Windowing(vReal, samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD); /*
Activar para aplicar enventanado */
FFT.Compute(vReal, vImag, samples, FFT_FORWARD); /* Compute FFT */
FFT.ComplexToMagnitude(vReal, vImag, samples); /* Compute magnitudes */
// Timef = micros() - Time;
// Serial.println(Timef);
for (uint16_t i = 0; i < samples; i++)
{
// Serial.println(Timef);
Serial.println(vReal[i], 4);
}
}
ANEXOS 74
Código implementado en MATLAB
%% Escritura de datos de un arreglo hacia el ESP-12 y lectura del arreglo
por puerto serie
%% lectura de los datos a procesar
clc
close all
load ecgF % datos en la variable ecg_array de 15000 muestras, tipo
double (8 bytes)
ALLecg_array =ECG_filtrada - mean(ECG_filtrada);
ALLecg_array = ALLecg_array/max(ALLecg_array)*1024;
fs = 1000; % frecuencia de muestreo de la senal a procesar
N = 128; % numero de punto de la FFT. tiene que ser una potencia de 2
v_read=[]; % lectura de los datos tipo char desde el módulo
ecgR=[]; % conversión de los datos leidos a formato entero
%% Configuracion del puerto serie
% Inicialización del puerto
puerto_name = 'COM7';
hwINFO=instrhwinfo('serial'); %Determinacion de los puertos serie
disponibles
viejo = instrfind('port',puerto_name); % eliminación de objetos de puerto
serie existentes
delete (viejo);
clear viejo;
% definicion de parametros
placaserial = serial(puerto_name,'BaudRate',115200); %,'DataBits',8);
set(placaserial,'Terminator','LF/CR');
set(placaserial,'OutputBufferSize',10000);
set(placaserial,'InputBufferSize',10000);
set(placaserial,'TimeOut',20);
%get(placaserial)
ANEXOS 75
%% Apertura de la comunicación por puerto serial
try
disp(['Abriendo puerto ' puerto_name ])
fopen(placaserial);
pause(4) % !!!IMPRESCINDIBLE antes de iniciar comunicación con el
Arduino
% lazo de escritura
disp(['Puerto ' puerto_name ' Abierto!!'])
catch
disp(['Puerto ' puerto_name ' ya está abierto']);
end
%% Lazo de escritura y procesamiento por bloques de la senal de entrada
M = fix(length(ALLecg_array)/N);
STFT=zeros(N/2,M);
for m=0:46;%M-1
%% Seleccion del segmento de senal de entrada
ecg_array = ALLecg_array([1:N]+m*N);
subplot(4,1,1);plot(t,ecg_array);title('Señal en el
tiempo');xlabel('Frecuencia (Hz)');ylabel('Magnitud');grid % senal en
el tiempo
%% Cálculo del espectro en MatLab
f_mag = abs(fft(ecg_array,N));
f_bin = fs/N*[0:N-1];
subplot(4,1,2);plot(f_bin(1:N/2),f_mag(1:N/2));title('FFT -
MatLab');xlabel('Frecuencia (Hz)');ylabel('Magnitud');grid % espectro
en MATLAB
%% escritura de arreglo por el puerto serie
try
% lazo de escritura
for ind = 1:N %
while placaserial.status ~= 'open'; end % esperar por
disponibilidad del puerto
ANEXOS 76
fprintf(placaserial,num2str(ecg_array(ind),'%0.0f'));
end
disp('Datos enviados...')
catch
disp('ERROR en envío de datos');
end
%% lectura de resultados
pause(1)
% placaserial.BytesAvailable
m
try
Ad = fread(placaserial,placaserial.BytesAvailable,'char');
v_read = str2num(char(Ad'))';
subplot(4,1,3);plot(f_bin(1:N/2),v_read(1:N/2));title('fft -
Arduino');xlabel('Frecuencia (Hz)');ylabel('Magnitud');grid
catch
%%
disp('ERROR en la lectura');
fclose(placaserial);
delete(placaserial)
clear placaserial
end
%% Presentacion de Diferencias entre resultados
fft_Mat = f_mag(1:N/2)-max(f_mag(1:N/2))*100;
fft_Due = v_read(1:N/2)-max(v_read(1:N/2))*100;
error = abs(fft_Mat-fft_Due);
subplot(4,1,4);plot(f_bin(1:N/2),error);title('% error en fft -
Arduino');xlabel('Frecuencia (Hz)');ylabel('Magnitud');grid
STFT(:,m+1)=v_read(1:N/2)';
end % del lazo M
fclose(placaserial);
delete(placaserial)
ANEXOS 77
clear placaserial
%% presentacion de estimado de la STFT
figure
subplot(2,1,1);plot(ALLecg_array(1:N*m));xlabel('Frecuencia
(Hz)');ylabel('Magnitud'); grid
subplot(2,1,2);p = surface(STFT(1:N/8,1:m),'XData',[0:m-
1]*N/fs,'YData',f_bin(1:N/8));xlabel('Tiempo (s)');ylabel('Frecuencia
(hz)');
p = surface(STFT(1:N/8,1:m),'XData',[0:m-
1]*N/fs,'YData',f_bin(1:N/8));xlabel('Tiempo (s)');ylabel('Frecuencia
(hz)');
Anexo III. Programación del algoritmo de cálculo de distancia y similitud
Código implementado en el IDE Arduino
// declaracion de arreglos y variables
const int N = 64;
//long pat_1[N] = {0, 309, 588, 809};
//long pat_2[N] = {0, 588, 951, 951};
//long pat_3[N] = {0, 809, 951, 309};
long pat_1[N] = {0, 309, 588, 809, 951, 1000, 951, 809, 588, 309, 0, -
309, -588, -809, -951, -1000, -951, -809, -588, -309, 0, 309,
588, 809, 951, 1000, 951, 809, 588, 309, 0, -309, -588, -809, -951,
-1000, -951, -809, -588, -309, 0, 309, 588, 809, 951, 1000, 951,
809, 588, 309, 0, -309, -588, -809, -951, -1000, -951, -809, -588,
-309, 0, 309, 588, 809};
long pat_2[N] = {0, 588, 951, 951, 588, 0, -588, -951, -951, -588, 0,
588, 951, 951, 588, 0, -588, -951, -951, -588, 0, 588, 951, 951, 588,
0, -588, -951, -951, -588, 0, 588, 951, 951, 588, 0, -588, -951, -
951, -588, 0, 588, 951, 951, 588, 0, -588, -951, -951, -588, 0,
588, 951, 951, 588, 0, -588, -951, -951, -588, 0, 588, 951, 951};
long pat_3[N] = {0, 809, 951, 309, -588, -1000, -588, 309, 951, 809, 0,
-809, -951, -309, 588, 1000, 588, -309, -951, -809, 0, 809, 951,
309, -588, -1000, -588, 309, 951, 809, 0, -809, -951, -309, 588,
1000, 588, -309, -951, -809, 0, 809, 951, 309, -588, -1000, -588,
309, 951, 809, 0, -809, -951, -309, 588, 1000, 588, -309, -951, -
809, 0, 809, 951, 309};
long vector[N];
double d1 = 0;
double d2 = 0;
ANEXOS 78
double d3 = 0;
// funciones locales
double euclidian(long x[N], long y[N]) { // calcula la distancia
Euclidiana entre los vectores x y y
// distancia euclidiana entre los vectores de entrada
double d_euclid = 0;
for (byte i = 0 ; i < N ; i++) {
float dist = pow(x[i] - y[i], 2) ;
d_euclid = d_euclid + dist;
}
d_euclid = sqrt(d_euclid);
return d_euclid;
}
double manhattan(long x[N], long y[N]) { // calcula la distancia
Euclidiana entre los vectores x y y
// distancia manhattatn entre los vectores de entrada
double d_manhat = 0;
for (byte i = 0 ; i < N ; i++) {
float dist = pow(x[i] - y[i], 2) ;
d_manhat = d_manhat + dist;
}
return d_manhat;
}
double chebyshev(long x[N], long y[N]) { // calcula la distancia
Euclidiana entre los vectores x y y
// distancia manhattatn entre los vectores de entrada
double d_cheby = 0;
for (byte i = 0 ; i < N ; i++) {
double dist = abs(x[i] - y[i]);
d_cheby = max(d_cheby, dist);
ANEXOS 79
}
return d_cheby;
}
// fin de funciones locales
void setup() {
Serial.begin(115200);
while (!Serial) {};
delay(1000);
}
void loop() {
// lectura de N datos por puerto serie,
for (uint16_t i = 0; i < N; i++)
{
while (!(Serial.available() > 0)) {};
String myString = Serial.readStringUntil('\n'); // lectura del
buffer hacia una cadena
int entero = myString.toInt();
vector[i] = double(myString.toInt());
}
// prueba de distancia euclidiana
d1 = euclidian(vector, pat_1);
d2 = euclidian(vector, pat_2);
d3 = euclidian(vector, pat_3);
// Serial.println("Distancias euclidianas :");
// Serial.print("d1 :");
Serial.println(d1);
// Serial.print("d2 :");
Serial.println(d2);
// Serial.print("d3 :");
ANEXOS 80
Serial.println(d3);
// prueba de distancia manhattan
d1 = manhattan(vector, pat_1);
d2 = manhattan(vector, pat_2);
d3 = manhattan(vector, pat_3);
// Serial.println("Distancias manhattan :");
// Serial.print("d1 :");
Serial.println(d1);
// Serial.print("d2 :");
Serial.println(d2);
// Serial.print("d3 :");
Serial.println(d3);
// prueba de distancia chebyshev
d1 = chebyshev(vector, pat_1);
d2 = chebyshev(vector, pat_2);
d3 = chebyshev(vector, pat_3);
// Serial.println("Distancias chebyshev :");
// Serial.print("d1 :");
Serial.println(d1);
// Serial.print("d2 :");
Serial.println(d2);
// Serial.print("d3 :");
Serial.println(d3);
}
Código implementado en MATLAB
%% Escritura de datos de un arreglo hacia el ESP-12 y lectura del arreglo
por puerto serie
Signal1con50 = [0, 309, 588, 809, 951, 1000, 951, 809, 588, 309, 0, -
309, -588, -809, -951, -1000, -951, -809, -588, -309, 0, 309,
588, 809, 951, 1000, 951, 809, 588, 309, 0, -309, -588, -809, -951,
ANEXOS 81
-1000, -951, -809, -588, -309, 0, 309, 588, 809, 951, 1000, 951,
809, 588, 309, 0, -309, -588, -809, -951, -1000, -951, -809, -588,
-309, 0, 309, 588, 809, 951, 1000, 951, 809, 588, 309, 0, -309, -588,
-809, -951, -1000, -951, -809, -588, -309, 0, 309, 588, 809, 951,
1000, 951, 809, 588, 309, 0, -309, -588, -809, -951, -1000, -951, -
809, -588, -309, 0, 309, 588, 809, 951, 1000, 951, 809, 588, 309, 0,
-309, -588, -809, -951, -1000, -951, -809, -588, -309, 0, 309,
588, 809, 951, 1000, 951, 809];
Signal2con60 = [0,368,685,905,998,951,771,482,125,-249,-588,-844,-982,-
982,-844,-588,-249,125,482,771,951,998,905,685,368,0,-368,-685,-905,-
998,-951,-771,-482,-125,249,588,844,982,982,844,588,249,-125,-482,-771,-
951,-998,-905,-685,-368,0,368,685,905,998,951,771,482,125,-249,-588,-
844,-982,-982,-844,-588,-249,125,482,771,951,998,905,685,368,0,-368,-
685,-905,-998,-951,-771,-482,-125,249,588,844,982,982,844,588,249,-125,-
482,-771,-951,-998,-905,-685,-368,0,368,685,905,998,951,771,482,125,-
249,-588,-844,-982,-982,-844,-588,-
249,125,482,771,951,998,905,685,368,0,-368,-685];
% Signal3con100 = [0, 588, 951, 951, 588, 0, -588, -951, -951, -588,
0, 588, 951, 951, 588, 0, -588, -951, -951, -588, 0, 588, 951, 951,
588, 0, -588, -951, -951, -588, 0, 588, 951, 951, 588, 0, -588, -
951, -951, -588, 0, 588, 951, 951, 588, 0, -588, -951, -951, -588,
0, 588, 951, 951, 588, 0, -588, -951, -951, -588, 0, 588, 951, 951,
588, 0, -588, -951, -951, -588, 0, 588, 951, 951, 588, 0, -588, -
951, -951, -588, 0, 588, 951, 951, 588, 0, -588, -951, -951, -588,
0, 588, 951, 951, 588, 0, -588, -951, -951, -588, 0, 588, 951, 951,
588, 0, -588, -951, -951, -588, 0, 588, 951, 951, 588, 0, -588, -
951, -951, -588, 0, 588, 951, 951, 588, 0, -588, -951];
Signal4con120 = [0,685,998,771,125,-588,-982,-844,-249,482,951,905,368,-
368,-905,-951,-482,249,844,982,588,-125,-771,-998,-
685,0,685,998,771,125,-588,-982,-844,-249,482,951,905,368,-368,-905,-
951,-482,249,844,982,588,-125,-771,-998,-685,0,685,998,771,125,-588,-
982,-844,-249,482,951,905,368,-368,-905,-951,-482,249,844,982,588,-125,-
771,-998,-685,0,685,998,771,125,-588,-982,-844,-249,482,951,905,368,-
368,-905,-951,-482,249,844,982,588,-125,-771,-998,-
685,0,685,998,771,125,-588,-982,-844,-249,482,951,905,368,-368,-905,-
951,-482,249,844,982,588,-125,-771,-998,-685,0,685,998];
Signal5con150 = [0, 809, 951, 309, -588, -1000, -588, 309, 951, 809, 0,
-809, -951, -309, 588, 1000, 588, -309, -951, -809, 0, 809, 951,
309, -588, -1000, -588, 309, 951, 809, 0, -809, -951, -309, 588,
1000, 588, -309, -951, -809, 0, 809, 951, 309, -588, -1000, -588,
309, 951, 809, 0, -809, -951, -309, 588, 1000, 588, -309, -951, -
809, 0, 809, 951, 309, -588, -1000, -588, 309, 951, 809, 0, -809, -
951, -309, 588, 1000, 588, -309, -951, -809, 0, 809, 951, 309, -
588, -1000, -588, 309, 951, 809, 0, -809, -951, -309, 588, 1000,
588, -309, -951, -809, 0, 809, 951, 309, -588, -1000, -588, 309,
951, 809, 0, -809, -951, -309, 588, 1000, 588, -309, -951, -809,
0, 809, 951, 309, -588, -1000, -588, 309];
Signal6con240 = [0,998,125,-982,-249,951,368,-905,-482,844,588,-771,-
685,685,771,-588,-844,482,905,-368,-951,249,982,-125,-998,0,998,125,-
ANEXOS 82
982,-249,951,368,-905,-482,844,588,-771,-685,685,771,-588,-844,482,905,-
368,-951,249,982,-125,-998,0,998,125,-982,-249,951,368,-905,-
482,844,588,-771,-685,685,771,-588,-844,482,905,-368,-951,249,982,-125,-
998,0,998,125,-982,-249,951,368,-905,-482,844,588,-771,-685,685,771,-
588,-844,482,905,-368,-951,249,982,-125,-998,0,998,125,-982,-
249,951,368,-905,-482,844,588,-771,-685,685,771,-588,-844,482,905,-368,-
951,249,982,-125,-998,0,998,125];
%% lectura de los datos a procesar
clc
close all
load s1 % datos en la variable ecg_array de 15000 muestras, tipo double
(8 bytes)
Signal = s1 - mean(s1);
Signal = Signal/max(Signal)*1024;
fs = 1000; % frecuencia de muestreo de la senal a procesar
N = 64; % numero de punto de la FFT. tiene que ser una potencia de 2
v_read=[]; % lectura de los datos tipo char desde el módulo
ecgR=[]; % conversión de los datos leidos a formato entero
t = [0:N-1]/fs;
%% Configuracion del puerto serie
% Inicialización del puerto
puerto_name = 'COM7';
hwINFO=instrhwinfo('serial'); %Determinacion de los puertos serie
disponibles
viejo = instrfind('port',puerto_name); % eliminación de objetos de puerto
serie existentes
delete (viejo);
clear viejo;
% definicion de parametros
placaserial = serial(puerto_name,'BaudRate',115200); %,'DataBits',8);
set(placaserial,'Terminator','LF/CR');
set(placaserial,'OutputBufferSize',10000);
set(placaserial,'InputBufferSize',10000);
ANEXOS 83
set(placaserial,'TimeOut',20);
%get(placaserial)
%% Apertura de la comunicación por puerto serial
try
disp(['Abriendo puerto ' puerto_name ])
fopen(placaserial);
pause(4) % !!!IMPRESCINDIBLE antes de iniciar comunicación con el
Arduino
% lazo de escritura
disp(['Puerto ' puerto_name ' Abierto!!'])
catch
disp(['Puerto ' puerto_name ' ya está abierto']);
end
for m=0;%M-1
%% Seleccion del segmento de senal de entrada
MySignal = Signal1con50([1:N]);
MySignal = Signal2con60([1:N]);
MySignal = Signal3con100([1:N]);
MySignal = Signal4con120([1:N]);
MySignal = Signal5con150([1:N]);
MySignal = Signal6con240([1:N]);
%% Mostrar la señal a calcular;
plot(t,MySignal(1:N));title('Señal en el tiempo');xlabel('Tiempo
(seg)');ylabel('Frecuencia (Hz)');grid % senal en el tiempo
%%limipar el buffer serial
try
if (placaserial.BytesAvailable > 0);% ESTA ES LA CANTIDAD EN BYTES QUE
CORRESPONDE A 128 VALORES
ANEXOS 84
Ad = fread(placaserial,placaserial.BytesAvailable,'char');
end
% subplot(4,1,3);plot(f_bin(1:N/2),v_read(1:N/2));title('fft -
Arduino');xlabel('Frecuencia (Hz)');ylabel('Magnitud');grid
catch
%%
disp('buffer vacio');
end
%% escritura de arreglo por el puerto serie
try
% lazo de escritura
for ind = 1:N %
while placaserial.status ~= 'open'; end % esperar por
disponibilidad del puerto
fprintf(placaserial,num2str(MySignal(ind),'%0.0f'));
end
disp('Datos enviados...')
catch
disp('ERROR en envío de datos');
end
%% lectura de resultados
pause(2)
m
try
Ad = fread(placaserial,placaserial.BytesAvailable,'char');
v_read = str2num(char(Ad'))';
catch
%%
disp('ERROR en la lectura');
fclose(placaserial);
ANEXOS 85
delete(placaserial)
clear placaserial
end
end % del lazo M
fclose(placaserial);
delete(placaserial)
clear placaserial
Anexo IV. Programación del algoritmo para la adquisición de señales
Código por interrupciones
#include <TimerOne.h>
long Ttimer = 1000; // período de muestreo en microsegundos
long unsigned t1 = 0;
long unsigned t2 = 0;
void setup(void)
{
noInterrupts();
Timer1.initialize(1000); // período de ejecucion de la interrupcion,
en microsegundos
Timer1.attachInterrupt(ISRfunction); // función de interrupcion:
ISRfunction
Serial.begin(115200);
delay(1000);
interrupts();
}
// función de interrupcion
ANEXOS 86
void ISRfunction(void)
{
t2 = micros() - t1; // habilitar para medicion de tiempo
Serial.println(t2, DEC);// impresion por puerto serie
int dato = analogRead(A0);
// Serial.println(dato, DEC);
t1 = micros();
}
void loop(void)
{
yield();
}
Código por encuesta
unsigned long t1 = 0;
unsigned long t2 = 0;
float diff = 0;
void setup(void)
{
Serial.begin(115200);
while (!Serial) {};
delay(2500);
}
void loop()
{
t1 = micros();
// habilitar para medicion de tiempo
int dato = analogRead(A0);
ANEXOS 87
Serial.println(dato);// impresion por puerto serie
// Serial.println(dato, DEC);
// delay (1);
t2 = micros();
diff = t2 - t1;
}