SciELO - Scientific Electronic Library Online

 
vol.14 issue57Management of occupational safety and health in the work: Application in the industrial SmesDetermination of the routes of a robot in a production system author indexsubject indexarticles search
Home Pagealphabetic serial listing  

Services on Demand

Journal

Article

Indicators

Related links

Share


Universidad, Ciencia y Tecnología

Print version ISSN 1316-4821On-line version ISSN 2542-3401

uct vol.14 no.57 Puerto Ordaz Dec. 2010

 

Diseño y simulación de una red neuronal en VHDL y su aplicación en filtrado de un electrocardiograma

Aguirre Miguel(1), Franco Zulay(2) y Pateti Antonio(2)

(1)Superintendencia de Mantenimiento Eléctrico e Instrumentación Ferrominera Orinoco

(2)Universidad Nacional Experimental Politécnica “Antonio José de Sucre” Vice-Rectorado Puerto Ordaz. Departamento de Ingeniería Electrónica, Centro de Diseño Microelectrónico

E-mail: miguelaguirreleon@gmail.com

Resumen: En este artículo se presenta el diseño y simulación en VHDL de una red neuronal de tipo Backpropagation utilizada para la cancelación de interferencias de 60 Hz en la señal electrocardiográfica. (ECG). Se presenta en primer lugar el algoritmo de simulación de la Red Neuronal diseñada mediante MATLAB, como base para el desarrollo de la arquitectura en VHDL. El proceso de simulación funcional del código VHDL sintetizable se llevó a cabo sobre el entorno de Modelsim. El muestreo de la señal se realizó a 250 Hz usando 8 bits de resolución para las muestras. La discretización de los pesos de la red neuronal y los cálculos se realizaron en punto decimal fijo. En la simulación del modelo en MATLAB se obtuvo un error cuadrático medio de 6,8E-5 para una señal de electrocardiograma de amplitud de 1 voltio. En la modelación y simulación en VHDL se obtuvieron resultados similares.

Palabras clave: Red Neuronal/ VHDL/ Simulación/ Interferencia/ Filtro.

Design and simulation of a neural network using the VHDL language and its aplication in the filtering of electrocardiogram signal

Abstract: In this article is presented the design and simulation of a VHDL model of a Backpropagation neural network for the cancellation of interferences of 60 Hz in the electrocardiogram signal (ECG). This is presented in first place with a simulation algorithm of the Neural Network using Matlab, as the base for the development of a VHDL architecture. The process of functional simulation of the VHDL codification was realized in Modelsim. The sampling of the signal was carried out to 250 Hz. using 8 resolution bits for the samples. The discretization of the weights of the neural network and the calculations were carried out in fixed point. In the simulation of the MATLAB model, an error quadratic means of 6,8E-5 was obtained for a signal of electrocardiogram with 1 volt of amplitude. In VHDL modeling and simulation similar results were obtained.

Key words: Neural Network/ VHDL/ Simulation/ Interference/ Filter.

I . INTRODUCCIÓN

Con el desarrollo de los dispositivos lógicos programables y las metodologías de diseño asociadas como es el caso de los lenguajes de descripción de hardware, es posible construir sistemas computacionales complejos integrados en un solo chip semiconductor, siendo de naturaleza reconfigurable, y presentando un alto grado de flexibilidad.

Para presentar las ventajas que tienen estas nuevas tecnologías, como son los lenguajes de descripción de hardware y el uso de dispositivos lógicos programables, en el diseño de sistema digitales que requieren un alto grado de cómputo, en este artículo se presenta el diseño y simulación en VHDL (Very High Speed Integrated Circuits Hardware Description Language) de un filtro, basado en una red neuronal de tipo Backpropagation, modelado para la cancelación de interferencias de 60Hz en la señal de electrocardiograma.

La señal de electrocardiograma demanda elevadas tasas de cómputo para atenuar las perturbaciones provocadas por movimientos del paciente, alteraciones de índole emocional, interferencias de la red eléctrica, etc. Para hacer el tratamiento efectivo de la señal, en este trabajo se hace uso de redes neuronales por ser una herramienta computacional de tipo distribuida con capacidad de aprendizaje.

La metodología a seguir para el diseño fue concebir primero la arquitectura del filtro utilizando MATLAB, para posteriormente poder describir su comportamiento en VHDL. El alcance de este trabajo abarca hasta la generación del código VHDL sintetizable para su posterior prueba en un dispositivo lógico programable como la FPGA (Field Programmable Gate Array).

II. DESARROLLO

1. Marco Conceptual

1.1 Red BackPropagation

La red de propagación hacia atrás o Backpropagation fue creada por una generalización de la regla Widrow- Hofflearning [8] para redes multi-capa y a funciones de transferencia diferenciables y no lineales. Este tipo de redes se clasifica dentro de las feedfoward o red de alimentación hacia delante por la manera como fluye la información. Esta información va desde la entrada a la salida acíclicamente. Este tipo de red tiene una capa de entrada, una capa de salida y un número de capas escondidas entre capas ocultas. Este tipo de redes permite simular sistemas de orden cero porque no existe acumulación en el tiempo de los valores de salida (Ver Figura 1).

La capa de entrada no realiza ningún cálculo, solo distribuye las entradas Xk a los Pesos Wjk de la capa ocu1ta. En las neuronas de la capa oculta, primero las entradas ponderados se suman, (ver ecuación 1)

Una función de transferencia no linear (conocida como la función de activación) es aplicada al resultado de cálculo de cada salida del elemento de procesamiento. Las funciones de activación se muestran en la Tabla I.

La salida de la red neuronal será el valor obtenido multiplicado por los pesos como se indica en la ecuación 2.

1.2 Entrenamiento de Redes Neuronales Feedfoward El entrenamiento consiste en el ajuste de los pesos (Wij) los cuales hacen que el error entre la salida deseada y la salida de la red sea el mínimo. Dos pasos son distinguidos en este procedimiento de entrenamiento: a) Computación Feedfoward [11]. Desde las entradas se calcula cada valor en todas las neuronas y finalmente la salida de la red neuronal Yi(Xn) utilizando la ecuación anterior. b) Adaptación de Pesos. La salida de la Red es comparada con la salida deseada Yi(Xn). La diferencia entre esos dos valores es el error el cual va a ser utilizado en el ajuste de los pesos, primero en la capa de salida, después en la capa oculta anterior a la salida, etc. La función de costos es ilustrada en las ecuaciones 3 y 4.

De la optimización del descenso del gradiente, los pasos de cambios en los pesos de salida pueden ser encontrados diferenciando la función de costo dado en la ecuación 3. Esto se muestra en la ecuación 5.

La ecuación (6) ilustra la simplificación del Delta-i de la ecuación (5).

El cambio de los pesos de entrada puede ser encontrado con la regla ilustrada en la ecuación (7).

En donde la simplificación está dada por la ecuación (8).

Los deltas de la capa de entrada son encontrados en términos de los deltas de la capa de salida, propagándose hacia atrás, a través de lo Wij de la red. Entrenar la red utilizando gradiente descendiente, alimentando el error hacia atrás, es llamado backpropagation o propagación del error hacia atrás.

Este trabajo se distribuyo en los siguientes pasos:

• Elegir una Red Neuronal para el procesamiento de señales ECG.

• Diseñar una red neuronal para el filtrado de una señal ECG mediante la herramienta de MATLAB de Redes Neuronales.

• Simular la red neuronal mediante la herramienta de MATLAB de Redes Neuronales mediante las señales de prueba ECG obtenidas de la base de dato del MIT [1].

• Describir la Red Neuronal mediante el lenguaje de descripción de Hardware VHDL.

• Simular la Red Neuronal mediante el simulador MODELSIM.

1.3.- Diseño en MATLAB de la Red Neuronal

El diseño de la red neuronal utilizada es de tipo Backpropagation como la indicada en la Figura 2, la red elegida para el filtrado de la señal electrocardiográfica consta de una capa de entrada constituida por 31 neuronas, una segunda capa formada por 10 neuronas, una tercera capa formada por 2 neuronas y la capa de salida constituida por una sola neurona.

La señal de entrada es la señal que se desea filtrar, que en este caso corresponde a la señal de un electrocardiograma. Los vectores de entrada y salida vienen dados según la ecuación (9) y (10). Estos representan los datos de entrenamiento de la red neuronal.

Ve = [S(z) S(z-1) S(z-2) ... S(z-30)]T    (9)

VS = S*(z)      (10)

Donde S(z) es la señal con la interferencia y S*(z) es la señal sin interferencia

El valor de las constantes que representan los pesos se ajustan mediante un proceso de entrenamiento o aprendizaje, en el cual la salida deseada (la señal sin ruido) y la entrada (la señal con ruido), son presentadas a la red y mediante un algoritmo de ajuste, los pesos se calculan para que la correspondencia entre salida y entrada contenga el mínimo error. Estas constantes se ajustan mediante MATLAB y verificando la relación entre la señal de entrada y de salida se verifica la fiabilidad del diseño.

La señal de prueba fue la sel100 del Banco de datos del Massachussets Institute of Technology / Beth Israel Hospital (MIT/BIH) correspondiente a un minuto de grabación de una señal de ECG muestreada a una frecuencia de 250 Hz.

El comando newff de MATLAB sirve para la creación de una red neuronal, los parámetros necesarios a incluir son:

• La cantidad de neuronas de entrada y el rango de cada una (-1,1),

• La cantidad de neuronas en las capas subsiguientes:

[10 2 1] 10 en la segunda capa 2 en la tercera capa 1 en la capa de salida

• La función de transferencia de cada capa, la cual se puede elegir entre: purelin (linear), logsig (sigmoidal), tansig (tangencial). En este caso todas las capas tienen función de transferencia lineal.

• El método de entrenamiento: trainbfg. Esta basado en el método de quasi-Newton el cual ha sido exitosamente publicado en estudios de Broyden, Fletcher, Goldfarb, and Shanno (BFGS) [9].

La estructura y parámetros de entrenamiento para la red neuronal son almacenados en la variable ‘net’.

El comando utilizado para la creación de la red neuronal diseñada en este trabajo es:

net=newff([-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1;-1 1],[10 2 1],{ 'purelin' 'purelin' 'purelin'},'trainbfg');

El comando para iniciar el entrenamiento es:

net=train(net,(num2cell(ecgr',1)),(num2cell(ecg',1)));

La respuesta de la red neural con la señal de prueba incluyéndole un ruido de 60Hz se verifica con MATLAB mediante el comando ‘sim’, la señal de salida se almacena en la variable ‘a’ .

a=sim(net,(num2cell((ecgr)',1)))';

1.4. Desarrollo en VHDL.

Después de tener la confiabilidad deseada del filtro desarrollado en MATLAB se realiza su descripción utilizando el lenguaje VHDL (Very High Speed Integrated Circuit Hardware Description Language).

En la Figura 3 se presenta el diagrama en bloque de la arquitectura desarrollada en VHDL,

El sistema completo de la Red Neuronal consta de los bloques de capas 1, 2 y 3, de una unidad aritmética (UA) y del bloque de salida de la última neurona. Las neuronas en la capa 2, capa 3 y la neurona de salida representan posiciones de memoria cuyos valores se van a ir calculando secuencialmente. Las neuronas de la capa 1 son retardos de la señal muestreada de 8 bits.

La secuencia utilizada implica que, para calcular el valor a almacenar en una neurona de cualquier capa se debe multiplicar cada valor acumulado en las neuronas de la capa anterior por su respectivo peso. El resultado de la UA se almacena en la neurona respectiva.

Para implementar la arquitectura de la unidad aritmética mostrada en la figura 2, se utilizó multiplexores que sincronizadas por contadores y señales de control permite realizar las operaciones aritméticas de la capa 1, capa 2 ó capa 3. Las operaciones aritméticas que se realizan en cada capa se encargan de tomar los valores de entrada y multiplicarlos por sus respectivos pesos más el umbral respectivo para acumularse en una neurona perteneciente a la siguiente capa. El tipo de multiplicación que se implementó consiste en utilizar multiplicadores combinacionales. Para realizar las operaciones aritméticas se utilizó el sistema de numeración en coma fija (punto decimal fijo).

En la Figura 4 se muestra el símbolo esquemático utilizado en VHDL para describir la red neuronal.

2. Detalle de la Codificación en VHDL

Para el diseño de la Red Neuronal en VHDL se parte de los esquemáticos creados en el entorno del software de XILINX WEBPACK en los que cada bloque se le especifica su función mediante líneas de código. En la Figura 5 se muestran los bloques que forman la descripción del Filtro_red_neuronal .vhd

2.1. Codificación de las constantes en punto decimal fijo.

Cada peso de la red neuronal está dado por una constante codificada en punto decimal fijo. Estas constantes se obtuvieron en el entrenamiento de Matlab y están contenidas en la variable ‘net’.

Haciendo un estudio de las variables involucradas, puede determinarse cual es el número máximo requerido en bits y cuál es el escalamiento mínimo para obtener un resultado fiable.

Para los pesos, el escalamiento fue elegido basado en la constante más pequeña de la red, (de tal manera, que no se hiciera cero) resultando el escalamiento de 15. Se añaden dos bits para la magnitud basándose en el máximo valor, más el bit de signo. Los pesos se representan con 18 bits con escalamiento 15.

La entrada del sistema es mediante un ADC de 8 bits. Como la señal pudiera ser negativa o positiva, se utilizan 7 bits de datos y uno de signo. El rango es considerado entre –1V y 1V, entonces el escalamiento de entrada es de 7; se invierte el último bit para representar el signo y obtener de una vez el complemento a dos del número.

La longitud máxima de los datos de las neuronas, utilizando un escalamiento de 7, se pudo determinar haciendo una simulación con números reales del diseño y realizando un estudio de la salida de la unidad aritmética. El número máximo obtenido en ese estudio se duplicó para tener una confiabilidad que no fuera a excederse en la suma, y se le añadió un bit de signo para considerar los números tanto positivos como negativos, resultando entonces la longitud de 13 bits. El escalamiento considerado en el estudio es de 7, debido a que esa es la resolución del ADC a utilizar.

Al entrar un dato del ADC se completa de 7 a 13 bits con ceros si el número es positivo o con unos si el dato es negativo.

La salida del multiplicador es de 33 bits con escalamiento 22 que se lleva al sumador para así poder acumular los resultados. Cuando el resultado se va a almacenar en la neurona de destino de una capa superior, los 33 bits son truncados a 13 bits, quitando 15 bits por la derecha para que queden 7 bits para el escalamiento y quitando 5 bits por la izquierda, porque el número máximo obtenido en la simulación indica que estos bits son cero por lo tanto se descartan.

La salida_N de 13 bits resultante será almacenada en el registro entrada_N de la unidad aritmética en el paso siguiente (Ver Figura 6), por lo tanto debe tener las mismas características en cantidad de bits y escalamiento.

2.2.- Resultados y discusión de resultados. El diseño de la arquitectura en MATLAB fue simulado variando la función de transferencia. Los mejores resultados se obtuvieron utilizando la función de transferencia sigmoidal en las capas 2 y 3, sin embargo, esto incrementaba significativamente el uso de recursos en la implementación en hardware. Se utilizó entonces la función de transferencia lineal (purelin) cuya respuesta es bastante aceptable y cuya implementación no consumía tantos recursos.

En la Tabla II, se muestra un cuadro comparativo del método de entrenamiento elegido (Trainbfg) con respecto a otros métodos de entrenamiento.

La curva de entrenamiento con el algoritmo de entrenamiento ‘trainbfg’ de la red Neuronal con la señal de prueba es ilustrada en la Figura 7, donde el error cuadrático medio obtenido es de 6,79352E-5 si se quisiera un error mucho menor debería agregarse más retardos a la señal sin embargo, esto hace que el diseño se haga más grande, consumiendo muchos recursos en la implementación.

La gráfica de la Figura 8 ilustra la respuesta del filtro diseñado en MATLAB:

La señal superior se corresponde con la señal de prueba y la señal inferior, con la respuesta de la red neuronal.

La simulación de la arquitectura descrita en VHDL se pudo obtener mediante el software ModelSim SE-EE 5.4e.

En la Figura 9, se presenta la gráfica, en la que se puede apreciar la respuesta del filtro, cuya señal superior es la entrada del sistema y la señal inferior es la señal de salida.

Una vez que se verificó que el diseño estaba funcionando correctamente, se procedió a generar el fichero .bit, con ayuda del entorno “Xilinx Foundatión 3.1”, requerido para programar la FPGA.

IV. CONCLUSIONES

1) Es posible la codificación en VHDL del algoritmo de filtrado de la interferencia de 60 Hz en la señal del electrocardiograma, utilizando técnicas neuronales.

2) El entorno ModelSim integra todas las herramientas necesarias para llevar a cabo la simulación del filtro codificado en VHDL.

3) De los resultados obtenidos se puede afirmar que el sistema se puede considerar óptimo para el filtrado de la señal de ECG para una perturbación de 60Hz.

4) El sistema se hace confiable según las pruebas realizadas ya que garantiza la generalización de la respuesta, es decir a medida que se le vayan presentando diversos patrones a la red esta tendrá una respuesta predecible y con el mismo comportamiento que tuvo con el patrón de entrenamiento.

5) El filtro presenta un error máximo de 67 microvoltios para una señal de +/-1 Voltio.

6) El error obtenido con el escalamiento en punto decimal fijo es mínimo. Esto hace que el sistema tenga la suficiente precisión para realizar cálculos con mínimo error.

7) Este trabajo tiene una segunda etapa a desarrollar como es la implementación en la FPGA.

V. REFERENCIAS

1. Teres, L.,Torroja, T., Olcoz, S.,Villar, E.,: VHDL Lenguaje Estándar de diseño electrónico., Primera edición en español. Madrid. McGraw Hill.1998, 498 pp.        [ Links ]

2. Hilera, J.R., Martínez, V.J. :Redes Neuronales Artificiales. Wilmington Delaware, E.U.A. Addison-Wesley iberoamericana. 1995. pag 385.        [ Links ]

3. Artigas L. A. Barragán, C. Orrite, I. Urriza Electrónica Digital, Aplicaciones y Problemas con VHDL, J.I,, Prentice Hall 2002. ISBN: 84-205-3222- 3. pp. 17-26.        [ Links ]

4. Reese B. Reese, VHDL Synthesis Tutorial, Mississipi State University, http://www.erc.msstate.edu/~reese/vhdl_synthesis.        [ Links ]

5. Skahill 96 K. Skahill, VHDL for Programmable Logic, Addison Wesley 1996.        [ Links ]

6. Página Web de NNCV Neural Networks for Computer Vision        [ Links ]

7. Director de Investigación: Juan J.Villanueva, email: villanueva@cvc.uab.es        [ Links ]

8. Miembros: Juan José Villanueva, Xavi Varona, Albert Pujol.        [ Links ]

9. www.cvc.uab.es/castella/research/arees/llv/nncv/nncv.html        [ Links ]

10. Página Web del Departamento de Sistemas Electrónicos y de Control de la Universidad Politécnica de Madrid. Introducción al Lenguaje VHDL.        [ Links ]

11. www.sec.upm.es/docencia/plan_92/sdii/descarga_SDII/Manuales/vhdl_1.pdf        [ Links ]

12. Página Web : Basic Neural Network Example        [ Links ]

13. www.ida.his.se/ida/kurser/ai_ann/kursmaterial/tutorial/node22.html        [ Links ]

14. Howard Oemuth, Mark Beale, Martin Hagan [2005] Neural Network Toolbox User's GuideUser's Guide. COPYRIGHT 1992 - 2005 by The MathWorks, Inc.[Documento del TOOLBOOX para MATLAB de MATHWORKS Version 4.0.6 (Release 14SP3)] [11/10/2008].        [ Links ]

15. Página Web. Implementación con FPGAs. Introducción a las FPGAs [PDF]        [ Links ]

16. www.arco.inf-cr.uclm.es/docs/DSH/FPGAs.pdf        [ Links ]

17. Juan Antonio Pérez Ortiz [2002]. Modelos Predcitivos Basados en Redes Neuronales Recurrentes de tiempo discreto. Universidad de Alicante. Departamento de lenguaje y sistemas informáticos. [Documento en línea http://www.conicyt.cIl573Modelospredictivosbasadosenredes neuronalesrecurrentesdetiempodiscreto.pdf] [22/07/08].        [ Links ]

Creative Commons License All the contents of this journal, except where otherwise noted, is licensed under a Creative Commons Attribution License