art06.pdf

Post on 14-Aug-2015

22 views 2 download

Transcript of art06.pdf

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

261Volumen 14, Nº 57, diciembre 2010. pp 261-268

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

Figura 1. Esquema de una Red NeuronalBackpropagation

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)

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

Tabla I: Funciones de transferencias

La salida de la red neuronal será el valor obtenido

multiplicado por los pesos como se indica en la ecuación 2.

(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

Volumen 14, Nº 57, diciembre 2010. pp 261-268

262

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.

(3)

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

(5)

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

ecuación (5).

(6)

El cambio de los pesos de entrada puede ser encontrado con

la regla ilustrada en la ecuación (7).

(7)

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

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

Aguirre, M., Franco, Z., Pateti, A. Diseño y simulación de una red neuronal en VHDL y su aplicación en filtrado de señal

263

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.

(9)

(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’ .

Figura 2. Red neuronal elegida

Volumen 14, Nº 57, diciembre 2010. pp 261-268

264

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,

Figura 3.Diagrama en Bloques de la Red Neuronal

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.

Figura 4. Símbolo esquemático del módulo Filtro_red_neuronal.vhd

ClK:Reloj del sistema (500 Khz)

Reset: Reset asíncrono activo en alto

Muestra(7:0) :muestra de la señal de entrada del ADC

Salida(7:0): salida del filtro

Aguirre, M., Franco, Z., Pateti, A. Diseño y simulación de una red neuronal en VHDL y su aplicación en filtrado de señal

265

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

Figura 5 Esquema de la Red Neuronal Completa

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

Volumen 14, Nº 57, diciembre 2010. pp 261-268

266

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.

Figura 6. Esquema de la Unidad Aritmética (UA)

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.

Tabla II. Cuadro comparativo de métodos de entrenamiento [9]

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.

Figura 7. Gráfica de Error Cuadrático Medio Vs. Númerode iteraciones en el Entrenamiento

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

en MATLAB:

Figura 8. Respuesta de la Red Neuronal

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

Aguirre, M., Franco, Z., Pateti, A. Diseño y simulación de una red neuronal en VHDL y su aplicación en filtrado de señal

267

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.

Figura 9. Simulación de la Red Neuronal en VHDL con el paquete MODELSIM

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.

2. Hilera, J.R., Martínez, V.J. :Redes Neuronales Artificiales.

Wilmington Delaware, E.U.A. Addison-Wesley

iIeroamericana. 1995. pag 385.

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

4. Reese B. Reese, VHDL Synthesis Tutorial, Mississipi

State University, http://www.erc.msstate.edu/

~reese/vhdl_synthesis.

5. Skahill 96 K. Skahill, VHDL for Programmable Logic,

Addison Wesley 1996.

6. Página Web de NNCV Neural Networks for Computer

Vision

7. Director de Investigación: Juan J.Villanueva, e-

mail:villanueva@cvc.uab.es

8. Miembros: Juan José Villanueva, Xavi Varona, Albert

Pujol.

9. www.cvc.uab.es/castella/research/

arees/llv/nncv/nncv.html

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.

11. www.sec.upm.es/docencia/plan_92/sdii/

descarga_SDII/Manuales/vhdl_1.pdf

12. Página Web : Basic Neural Network Example

13. www.ida.his.se/ida/kurser/ai_ann/kursmaterial/

tutorial/node22.html

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

15. Página Web. Implementación con FPGAs. Introducción

a las FPGAs [PDF]

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

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.cIl573 Modelos predictivos basados

en redes neuronales recurrentes de tiempo discreto.pdf ]

[22/07/08].

Volumen 14, Nº 57, diciembre 2010. pp 261-268

268