título: diseño de un nodo para el procesamiento de

98
, 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

Upload: others

Post on 08-Jul-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Título: Diseño de un nodo para el procesamiento de

, 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

Page 2: Título: Diseño de un nodo para el procesamiento de

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

Page 3: Título: Diseño de un nodo para el procesamiento de

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

Page 4: Título: Diseño de un nodo para el procesamiento de

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)

Page 5: Título: Diseño de un nodo para el procesamiento de

ii

DEDICATORIA

A mis padres por ser el pilar de todo mi desarrollo y la fuerza que se necesita para avanzar

en la vida.

Page 6: Título: Diseño de un nodo para el procesamiento de

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.

Page 7: Título: Diseño de un nodo para el procesamiento de

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

Page 8: Título: Diseño de un nodo para el procesamiento de

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

Page 9: Título: Diseño de un nodo para el procesamiento de

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

Page 10: Título: Diseño de un nodo para el procesamiento de

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

Page 11: Título: Diseño de un nodo para el procesamiento de

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

Page 12: Título: Diseño de un nodo para el procesamiento de

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,

Page 13: Título: Diseño de un nodo para el procesamiento de

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

Page 14: Título: Diseño de un nodo para el procesamiento de

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

Page 15: Título: Diseño de un nodo para el procesamiento de

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).

Page 16: Título: Diseño de un nodo para el procesamiento de

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.

Page 17: Título: Diseño de un nodo para el procesamiento de

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

Page 18: Título: Diseño de un nodo para el procesamiento 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

Page 19: Título: Diseño de un nodo para el procesamiento de

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.

Page 20: Título: Diseño de un nodo para el procesamiento de

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

Page 21: Título: Diseño de un nodo para el procesamiento de

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,

Page 22: Título: Diseño de un nodo para el procesamiento de

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

Page 23: Título: Diseño de un nodo para el procesamiento de

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

Page 24: Título: Diseño de un nodo para el procesamiento de

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

Page 25: Título: Diseño de un nodo para el procesamiento de

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].

Page 26: Título: Diseño de un nodo para el procesamiento de

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)

Page 27: Título: Diseño de un nodo para el procesamiento de

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.

Page 28: Título: Diseño de un nodo para el procesamiento de

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]

Page 29: Título: Diseño de un nodo para el procesamiento de

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].

Page 30: Título: Diseño de un nodo para el procesamiento de

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í

Page 31: Título: Diseño de un nodo para el procesamiento de

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

Page 32: Título: Diseño de un nodo para el procesamiento de

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

Page 33: Título: Diseño de un nodo para el procesamiento de

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

Page 34: Título: Diseño de un nodo para el procesamiento de

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.

Page 35: Título: Diseño de un nodo para el procesamiento de

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

Page 36: Título: Diseño de un nodo para el procesamiento de

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.

Page 37: Título: Diseño de un nodo para el procesamiento de

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.

Page 38: Título: Diseño de un nodo para el procesamiento de

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] .

Page 39: Título: Diseño de un nodo para el procesamiento de

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.

Page 40: Título: Diseño de un nodo para el procesamiento de

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.

Page 41: Título: Diseño de un nodo para el procesamiento de

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].

Page 42: Título: Diseño de un nodo para el procesamiento de

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

Page 43: Título: Diseño de un nodo para el procesamiento de

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

Page 44: Título: Diseño de un nodo para el procesamiento de

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

Page 45: Título: Diseño de un nodo para el procesamiento de

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

Page 46: Título: Diseño de un nodo para el procesamiento de

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

Page 47: Título: Diseño de un nodo para el procesamiento de

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.

Page 48: Título: Diseño de un nodo para el procesamiento de

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].

Page 49: Título: Diseño de un nodo para el procesamiento de

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,

Page 50: Título: Diseño de un nodo para el procesamiento de

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

Page 51: Título: Diseño de un nodo para el procesamiento de

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

Page 52: Título: Diseño de un nodo para el procesamiento 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)

Page 53: Título: Diseño de un nodo para el procesamiento de

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

Page 54: Título: Diseño de un nodo para el procesamiento de

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.

Page 55: Título: Diseño de un nodo para el procesamiento de

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.

Page 56: Título: Diseño de un nodo para el procesamiento de

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.

Page 57: Título: Diseño de un nodo para el procesamiento de

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.

Page 58: Título: Diseño de un nodo para el procesamiento de

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

Page 59: Título: Diseño de un nodo para el procesamiento de

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

Page 60: Título: Diseño de un nodo para el procesamiento de

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).

Page 61: Título: Diseño de un nodo para el procesamiento de

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

Page 62: Título: Diseño de un nodo para el procesamiento de

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.

Page 63: Título: Diseño de un nodo para el procesamiento de

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.

Page 64: Título: Diseño de un nodo para el procesamiento de

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

Page 65: Título: Diseño de un nodo para el procesamiento de

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,

Page 66: Título: Diseño de un nodo para el procesamiento de

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

Page 67: Título: Diseño de un nodo para el procesamiento de

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.

Page 68: Título: Diseño de un nodo para el procesamiento de

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.

Page 69: Título: Diseño de un nodo para el procesamiento de

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.

Page 70: Título: Diseño de un nodo para el procesamiento de

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

Page 71: Título: Diseño de un nodo para el procesamiento de

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.

Page 72: Título: Diseño de un nodo para el procesamiento de

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.

Page 73: Título: Diseño de un nodo para el procesamiento de

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.

Page 74: Título: Diseño de un nodo para el procesamiento de

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.

Page 75: Título: Diseño de un nodo para el procesamiento de

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.

Page 76: Título: Diseño de un nodo para el procesamiento de

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.

Page 77: Título: Diseño de un nodo para el procesamiento de

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.

Page 78: Título: Diseño de un nodo para el procesamiento de

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 };

Page 79: Título: Diseño de un nodo para el procesamiento de

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

Page 80: Título: Diseño de un nodo para el procesamiento de

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' }

Page 81: Título: Diseño de un nodo para el procesamiento de

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');

Page 82: Título: Diseño de un nodo para el procesamiento de

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

Page 83: Título: Diseño de un nodo para el procesamiento de

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)) {};

Page 84: Título: Diseño de un nodo para el procesamiento de

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);

}

}

Page 85: Título: Diseño de un nodo para el procesamiento de

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)

Page 86: Título: Diseño de un nodo para el procesamiento de

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

Page 87: Título: Diseño de un nodo para el procesamiento de

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)

Page 88: Título: Diseño de un nodo para el procesamiento de

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;

Page 89: Título: Diseño de un nodo para el procesamiento de

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);

Page 90: Título: Diseño de un nodo para el procesamiento de

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 :");

Page 91: Título: Diseño de un nodo para el procesamiento de

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,

Page 92: Título: Diseño de un nodo para el procesamiento de

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,-

Page 93: Título: Diseño de un nodo para el procesamiento de

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);

Page 94: Título: Diseño de un nodo para el procesamiento de

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

Page 95: Título: Diseño de un nodo para el procesamiento de

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);

Page 96: Título: Diseño de un nodo para el procesamiento de

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

Page 97: Título: Diseño de un nodo para el procesamiento de

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);

Page 98: Título: Diseño de un nodo para el procesamiento de

ANEXOS 87

Serial.println(dato);// impresion por puerto serie

// Serial.println(dato, DEC);

// delay (1);

t2 = micros();

diff = t2 - t1;

}