Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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.
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
UNAC
Y(t)
2 1.5 1 0.5 0 0
4 5 Tiempo(s)
4 Tiempo(s)
=0.005
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
4 Tiempo(s)
=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
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
4 Tiempo(s)
=0.005
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.
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)].
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.
UNAC
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
UNAC
11
UNAC
En la siguiente figura, se mostrar tambin resultados para las dos datas pero con optimizacin de W con Widrow Hoff:
12
UNAC
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
UNAC
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).
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.
14
UNAC
Resultados En los resultados se incluirn la visualizacin del labview del entrenamiento de la red y luego su posterior ploteo en Matlab:
15
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
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:
1000
2000
8000
9000
10000
1000
2000
3000
4000
5000 Error
6000
7000
8000
9000
10000
1000
2000
3000
7000
8000
9000
10000
10
12
14
17