Está en la página 1de 17

Laboratorio de Control Inteligente 2012A

UNAC

Aplicacin de la Red ADALINE para Prediccin de datos usando el algoritmo Moving Average

Cuya Solari, Omar Antonio oacs_198@hotmail.com Flores Bustinza, Edwing Irwing irwing_1988_@hotmail.com Torres Chavez, Jonathan Emmanuel jonathan260605@hotmail.com

Laboratorio de Control Inteligente 2012A


I.- Objetivos

UNAC

Realizar dos programas en Labview para un predictor de datos con red Adaline. Conocer el algoritmo Moving Average y su aporte a la experiencia. II.- Marco Terico 2.1.- Diagrama de Bloques Como esta experiencia requiere programacin grfica y dems criterios, nos vemos en la necesidad de dibujar un diagrama de bloques del algoritmo tanto para la red neuronal ADALINE como para el algoritmo del filtro Moving Average, esto nos trajo ventajas y a su vez nos permiti tener un mejor panorama de anlisis de cul es su funcionamiento y aporte principal al Predictor:

x(n)

bo Z
-1

+
b1

d(n) = bo + b1z

-1

x(n-1)

T(n)

+
e(n)

x(n)

w1

Purelin Y(n)

x(n-1)

w2

W(n+1)= W(n) + e(n) X(n)


Fig 1.- Topologa del Predictor de Datos

Laboratorio de Control Inteligente 2012A


III.- Simulaciones 3.1.- Con software Matlab: 1.- A continuacin se proceder con la codificacin del cdigo en MATLAB.

UNAC

a.- Se cargan los datos, previamente adquiridos de la planta RC, del archivo data2. Los cuales son asignados y transpuestos a las variables t tiempo y xt respuesta, y luego graficarlos.
clear all;close all;clc %Cargar archivo de datos load data2.lvm t= data2(:,1)'; %Columna de tiempo xt= data2(:,2)'; %Columna de respuesta del rc figure plot(t,xt,'r','Linewidth',2) grid title('\bf Data a predecir') xlabel('\bf Tiempo(s)') ylabel('\bf Y(t)')

b.- Estructura del MA (Moving Average) consiste en el diseo de un filtro tipo FIR, con el cual obtendremos el vector deseado para la unidad ADALINE, el cual la red tendr que aprender para poder predecir o filtrar una seal RC con ruido. Las condiciones expuestas se codifican en Matlab a continuacin:
%Parametros iniciales algoritmo MA %Numero de muestras a considerar N=length(t) %Cantidad de filas con "p-1" lineas de retardo p=2; %Coeficientes del filtro FIR a disear b=[1 -0.005]; %Convolucion de la columna de salida para generar patrones de la red X=convmtx(xt,p); %-----------------------------------------------------------------------% Generacion de la matriz X(n) %Estructura: %X(n)=[x(n); x(n-1)] X=X(:,1:N); %Tomar las dos filas y en columnas los datos (N-1) %-----------------------------------------------------------------------%Generacion del Vector deseado para la red d=b*X(:,1:N); %Estrcutura Moving Average: d(n)=bo+b1*z^(-1)

c.- Se asignan las dimensiones de las variables de salida y y el error e, as como tambin se establecen los valores aleatorios de los pesos sinpticos w y el factor de aprendizaje alpha.

Laboratorio de Control Inteligente 2012A

UNAC

%Alamcenadores de datos y=zeros(size(d)); e=zeros(size(d)); %-----------------------------------------------------------------------%Pesos sinapticos inciales %Pesos aleatorios para probar eficiencia de la red w=rand([1,2]) %-----------------------------------------------------------------------%Tasa de aprendizaje alpha = input('Ingrese tasa de aprendizaje: ');

d.- En este lazo de control for se actualizarn los pesos sinpticos w, el cual depende del error generado por la diferencia del vector deseado y el vector de salida para lo cual se utiliza el combinador adaptivo lineal ADALINE.
%Lazo principal para actualizacin de pesos for n=1:N y(n)=purelin(w*X(:,n)); %Vector de salida de la red e(n)=d(n)-y(n); %Notacion del error w=w+alpha*e(n)*X(:,n)'; %Regla de actualizacion de pesos s if n==N w1=w %Pesos actualizados en pantalla end end

e.- Se grafican los datos adquiridos de la planta RC (data a predecir), target (seal filtrada que se quiere obtener y que la red aprenda) vs seal predicha que es la seal estimada en el instante n ante el ingreso de patrones x(n), estado actual (considerada como un dato futuro n+1) y en el instante n -1 para el ingreso del patrn x(n-1) que es el estado anterior, de ah el nombre de predictor.
%Resultados del aprendizaje de la red figure subplot(211) plot(t,y,'k','LineWidth',2) hold plot(t,d,'-r') grid title('\bf Target d(n) vs Seal predecida y(t)') xlabel('\bf Tiempo(s)') subplot(212) plot(t,e,'r','LineWidth',2) title(['\bf Prediccion de error para alpha = ',num2str(alpha)]) xlabel('\bf Tiempo(s)') grid

Laboratorio de Control Inteligente 2012A


f.- Resultados de la simulacin

UNAC

Data a predecir 4 3.5 3 2.5

Y(t)

2 1.5 1 0.5 0 0

4 5 Tiempo(s)

Fig 4.- Datos adquiridos de una planta RC

Target d(n) vs Seal predecida y(t) 4 3 2 1 0

4 5 6 Tiempo(s) Prediccion de error para alpha = 0.005

0.2 0 -0.2 -0.4 -0.6

4 Tiempo(s)

Fig 4.- Curva de Prediccin vs deseada y performance del error para

=0.005

Laboratorio de Control Inteligente 2012A

UNAC

Esta simulacin se hizo para un factor de aprendizaje de 0.005, el cual es muy pequeo con respecto a otros casos, se pude observar que en la grfica target vs seales predecida la lnea de color negro se aproxima a la seal objetivo, target, con una ligera variacin en t=3.5. Tambin observamos que el error es grande con respecto al algoritmo alpha-LMS que veremos posteriormente. El valor de los pesos sinpticos se inicializan con valores aleatorios w y se van actualizando a medida que la red va aprendiendo hasta estabilizarse (convergencia) w1.

w = w1 =

0.7655 0.4779

0.7952 0.5121

Target d(n) vs Seal predecida y(t) 4 3 2 1 0

4 5 6 Tiempo(s) Prediccion de error para alpha = 0.06

0.15 0.1 0.05 0 -0.05

4 Tiempo(s)

Fig 5.- Resultados para

=0.06

Esta simulacin se hizo para un factor de aprendizaje de 0.06, se pudo experimentar que para valores mayores a este, el error oscila con cambios muy bruscos. Siendo el lmite para este caso un alpha =0.06. 6

Laboratorio de Control Inteligente 2012A

UNAC

El valor de los pesos sinpticos se inicializan con valores aleatorios w y se van actualizando a medida que la red va aprendiendo hasta estabilizarse (convergencia) w1.
w = 0.1869 0.4898 w1 = 0.3465 0.6424

3.2.- Con algoritmo alpha-LMS Utilizando el algoritmo alpha-LMS podemos observar que el error es ms pequeo (una dcima menos), con respecto a la anterior para un mismo factor de aprendizaje (alpha=0.005).
%Lazo principal para actualizacion de pesos for n=1:N y(n)=purelin(w*X(:,n)); %Vector de salida de la red e(n)=d(n)-y(n); %Notacion del error w=w+alpha*e(n)*X(:,n)'/norm(X(:,n))^2; %Regla de actualizacion de pesos s if n==N-1 w1=w %Pesos actualizados en pantalla end end

Target d(n) vs Seal predecida y(t) 4 3 2 1 0

4 5 6 Tiempo(s) Prediccion de error para alpha = 0.005

0.02 0.01 0 -0.01 -0.02

4 Tiempo(s)

Fig 6.- Resultados para

=0.005

Laboratorio de Control Inteligente 2012A

UNAC

Esta simulacin se hizo para un factor de aprendizaje de 0.005 y utilizando el algoritmo alpha-LMS, se pude observar que el error es muy pequeo y como consecuencia la lnea de color negro se aproxima a la seal objetivo, target, con mayor eficacia. El valor de los pesos sinpticos se inicializan con valores aleatorios w y se van actualizando a medida que la red va aprendiendo hasta estabilizarse (convergencia) w1.

0.2785 0.5807

0.5469 0.4111

w1 =

3.3.- Solucin en Software Labview El algoritmo presentado y simulado en Matlab para este predictor de datos se implement en el software labview en cdigo puro, empleando matrices, arreglos, estructuras de control y herramientas del labview que nos permiten entender y seguir al mnimo cada paso y cada operacin realizada para el ajuste de pesos y la generacin del filtro con una lnea de retardo para la red ADALINE, luego probarlo insertando archivos de datos de plantas RC para probar la performance de la red y comprobar la convergencia del error dependiendo la regla de aprendizaje a utilizar. Luego de esto, se pasara a comprobar dichos resultados en tiempo real interactuando con nuestra tarjeta NI PCI 6221, NIDAQ USB 6008 6009 y con nuestro circuito RC en protoboard. 1.- Predictor de datas adquiridas En esta primera parte presentaremos el panel de bloques del programa trabajado por nosotros: En un lazo esta la generacin de pesos aleatorios para ser insertados a nuestra red por cada paquete de datos ingresados, para ello labview nos ofrece un toolkit que nos da valores aleatorios entre 0 y 1, que luego son apilados con Reshape Array en un arreglo con dimensin n que vale 2 para este caso debido a la estructura de patrones a trabajar, al final tendremos un vector de dimensin dos con elementos aleatorios entre 0 y 1.

Fig 7.- Pesos iniciales

Laboratorio de Control Inteligente 2012A

UNAC

Antes de pasar al lazo de control principal, se ha creado un VI llamado convmtx que realizara el principio bsico para este predictor de datos: entregar a la red, patrones con estructura [X(n);X(n-1)] a travs del principio de convolucin en dos filas. Para ello se ha utilizado un circuito de arreglos donde se agreg un cero en la posicin cero a la trama principal para formar un arreglo de dimensin N, seguidamente tomamos dimensin N-1 (quitamos el ltimo dato) para apilarlo a una segunda fila con un build Array y obtener as la matriz de patrones con estructura [X(n);X(n-1)].

Fig 8.- Cdigo para matriz [X(n), X(n-1)]

En ultimo lazo de control, se ha codificado el algoritmo MA formando primero el Target para la red segn el producto entre una matriz de coeficientes del filtro b con la matriz resultado del convmtx. Luego se program la notacin de la neta de la red (W*X) a traves de un producto matricial de dichas variables. Luego pasamos a codificar la actualizacion de pesos W con ayuda del parmetro de adaptacin alpha que nos permitir manejar la velocidad de convergencia del error por cada proceso de aprendizaje.

Laboratorio de Control Inteligente 2012A

UNAC

Fig 7.- Cdigo del predictor en simulacin

Aqu realizamos una optimizacin con la regla de Widroff-Hoff, para ello utilizamos transpuesta de una matriz y calculo de norma de un vector, adems de algunos convertidores de Array a Matriz viceversa, solo para manejar los formatos adecuados de variable. Este procedimiento mejorar la performance del error de nuestra red neuronal y por ende la prediccin de los datos sin ruido que se necesita para hacer aprender a nuestra red en tiempo real. Luego se pasa a programar la notacin del error como la diferencia entre el objetivo y la neta de la red, programados ya anteriormente. Finalmente con la regla de actualizacin de pesos sinpticos declarada hacemos la suma con los anteriores para establecer la regla de aprendizaje, para ello se hecho uso de registros de desplazamiento para realimentar el valor de los pesos nuevos en la siguiente iteracin del lazo de control. Adems se ha programado una lgica para visualizar los pesos finales por cada lote de patrones y retardo para visualizar los ajuste permanentes en el lazo principal del algoritmo. Con todo lo explicado se tendr un lazo que tomar el vector de patrones, pesos iniciales y target, y los procesar para realizar el ajuste de pesos sinpticos y la estimacin de la data a ingresar. Resultados La pruebas van a constar de dos datas diferentes ingresadas al programa para dos tipos de W: con Widrow - Hoff y otro como perceptron simple : a.- Simulacin con W tipo perceptron simple En la figura se muestra el panel de control del Labview donde se ha insertado los archivos data4.lvm y data2.lvm, en el que se observa la prediccin y la performance del error.

10

Laboratorio de Control Inteligente 2012A

UNAC

Fig 8.- Panel Frontal prueba 1

Fig 9.- Panel Frontal prueba 2

11

Laboratorio de Control Inteligente 2012A


b.- Simulacin con W tipo LMS con Widrow - Hoff

UNAC

En la siguiente figura, se mostrar tambin resultados para las dos datas pero con optimizacin de W con Widrow Hoff:

Fig 10.- Panel de bloques con optimizacin Widrow - Hoff

Fig 11.- Prueba con algoritmo LMS para data2.lvm

12

Laboratorio de Control Inteligente 2012A

UNAC

Fig 12.- Prueba con algoritmo LMS para data4.lvm

2.- Predictor en tiempo real El programa desarrollado en la simulacin nos permite migrar al tiempo real, ya que el algoritmo diseado y codificado en labview est dando buenos resultados. Para esta prueba utilizamos una tarjeta NIDAQ PCI 6221con entrada analgicas de hasta 14 bits de resolucin que nos permite adquirir datos ms prximos al real. Para este fin implementamos el siguiente programa en Labview que contiene elementos conocidos: El VI del principio de la convolucin (convmtx). El bucle principal del algoritmo Moving Average ms la red ADALINE. Los pesos iniciales aleatorios.

Estos subprogramas son los explicados en la simulacin, con la diferencia que ahora en tiempo real se utilizan los toolkits DAQ Assistant que nos permiten configurar los puertos y parmetros de adquisicin: Para la alimentacin: Se configur el pin ao1 en modo On Demand y configuracin RSE (respecto a la tierra de la tarjeta)

13

Laboratorio de Control Inteligente 2012A

UNAC

Fig 13.- Configuracin del generador

Para la adquisicin: Se configur los pines ai1 y ai0 en modo Continuous Samples con tasa de adquisicin como terminal en el panel de Frontal y configuracin RSE (respecto a la tierra de la tarjeta).

Fig 14.- Configuracin de la dquisidor

Luego de haber configurado la tarjeta, todo el algoritmo deber quedar dentro de un lazo for que se incrementara una vez por cada paquete de datos que recibir el for anidado en cada lectura, al final tendremos un total de datos insertados al programa en proporcin al conteo del for ms grande.

A continuacin se mostraran el panel de bloques del algoritmo para tiempo real:

14

Laboratorio de Control Inteligente 2012A

UNAC

Fig 15.- Diagrama de bloques para tiempo real

Resultados En los resultados se incluirn la visualizacin del labview del entrenamiento de la red y luego su posterior ploteo en Matlab:

Fig 16.- Performance de la red para carga

15

Laboratorio de Control Inteligente 2012A

UNAC

Fig 17.- Performance de la red para carga Como se dijo el programa tiene un toolkit Write to Measurement file que almacena un archivo de datos con extensin lvm con la informacin de la adquisicin, target, salida de la red de neuronal y el Error. Aqu el cdigo y los ploteos: Codigo Matlab: clear all; close all;clc load load load load data_adq.lvm data_tr_target.lvm data_tr_error.lvm data_tr_yrn.lvm

%%-------------------------------------------data=data_adq; % Target (d), Salida (Y), Error (e) x1=data_tr_target(:,2); % Target x2=data_tr_yrn(:,2); % Salida W*X x3=data_tr_error(:,2); % Error %Adquisicion Entrada y Salida t0=data(:,1); % Tiempo u=data(:,2); % Entrada y=data(:,4); % RC Na=length(t0); Nb=length(x1); t1=(0:Nb-1)';

16

Laboratorio de Control Inteligente 2012A


subplot(4,1,1) plot(t1',x1,'b','Linewidth',2) title('\bf Grafica del Target') grid axis([0 10000 0 2]) subplot(4,1,2) plot(t1',x2,'r','Linewidth',2) title('\bf Grafica de la Salida de la RN'); axis([0 10000 0 2]) grid subplot(4,1,3) plot(t1,x3,'b','Linewidth',2) title('\bf Error'); grid axis([0 10000 -2 2]) subplot(4,1,4) plot(t0,y,'m','Linewidth',2) title('\bf Salida de Adq') grid axis([0 14 0 2])

UNAC

Al plotear los resultados nos dimos cuenta que cada 1000 datos (#Muestras por lectura) ocurre una inestabilidad que se evidencia en el error y la salida de la RN. Esto se produce debido a que cada lectura de datos en el for anidado:

Grafica del Target 2 1 0 2 1 0 2 0 -2 2 1 0

1000

2000

3000 4000 5000 6000 7000 Grafica de la Salida de la RN

8000

9000

10000

1000

2000

3000

4000

5000 Error

6000

7000

8000

9000

10000

1000

2000

3000

4000 5000 6000 Salida de Adq

7000

8000

9000

10000

10

12

14

Fig 18.- Performance de la red para carga

17

También podría gustarte