Red Btrabajo de Grado
Red Btrabajo de Grado
Red Btrabajo de Grado
Proyecto:
Red Neuronal
para la Identificación de sistemas
Índice
Esto es solo el principio de un proyecto que puede dar mucho de si, en un presente
y en un futuro. Se trata de copiar el funcionamiento de circuitos, sin importarnos la
composición de dicho circuito, un amplio abanico de posibilidades, con una sola red.
2 Motivación y justificación
Una comunicación serie RS-232, con el PC, completa la información que se recibe
por el display.
De las dos opciones, se pude seccionar que tipo de entrenamiento se desea realizar
de los dos modelos, enseñando por display como disminuye el error en cada uno de
los modelos, una vez entrenados se podrá utilizar el que más convenga a las
necesidades del usuario. En un principio no se puede saber que número de
neuronas enterradas, se deben utilizar para encontrar la solución, así de esta
manera, la Red hace diferentes entrenamientos desde un número de capas
enterradas mínimo, a un número máximo. La solución escogida es el mejor resultado
de todos los entrenamientos.
Dentro del campo de las redes neuronales hay diferentes estructuras para la
identificación de sistemas [1], para el caso que se presenta, se han hecho pruebas
sobre tres tipos de estructuras diferentes:
No se realizó ningún tipo de ensayo más con este tipo de Red, aunque se puede
descartar de su implementación en el PIC, ya que los resultados no hubiesen sido
óptimos.
Una de las soluciones para la realización del identificador, y primera utilizada en los
ensayos es una Red Elman.
Con este tipo de Red es posible identificar, todos los circuitos de orden 0, es decir
circuitos resistivo puros o junto a algún semiconductor. Así como circuitos de orden
1, circuito RC y RL.
1
G( s ) = k G( s ) =
as + 1
Los ensayos son de una Red RC, con una señal cuadrada como entrada y con una
señal senoidal como entrada.
En las primeras simulaciones que se realizaron, se trabajó con Matlab, para ver el
comportamiento que tenía la Red, en el entrenamiento de dichos ensayos. Los
resultados de las redes quedan expuestos dentro del capítulo 8.
Pero el objetivo del proyecto no es realizar la identificación mediante PC, sino que el
entrenamiento se realiza dentro del PIC 18F452. Se ha de mencionar que Matlab a
la hora del cálculo, trabaja con una serie de decimales, que a la hora de simular el
mismo entrenamiento en el PIC, consumiría demasiados recursos. Sobre estas
consideraciones, posteriormente se volvieron a repetir las mismas simulaciones,
pero esta vez reduciendo el número de decimales para el cálculo.
En cuanto a forma de entrenamiento de la Red, dos han sido los métodos utilizados:
Con este método la Red es capaz de salir de errores locales y dirigirse hacía
el error mínimo de la función. Las diferentes “sacudidas”, a que es sometida la
Red cada cierto número de epoch’s, hace que el error aumente para luego
bajar hacía un error menor.
Conclusión: Este tipo de Red tiene mejores resultados en circuitos de primer orden,
donde se pretende obtener la respuesta de un circuito en a un amplio margen de
frecuencias. Pero al no poder representar este tipo de ensayos físicamente, y en otro
tipo de ensayos la Red Jordan es más rápida en cuanto a cálculo y sus resultados
son similares, la Red Elman se descarta para su implementación dentro del PIC.
Dentro del capítulo 8, se verán todas las simulaciones con esta Red.
Si el lector está familiarizado con el mundo de las redes neuronales, sabrá que
después de cada capa el resultado denominado Entrada Neta, pasa por una función
de transferencia para dar el resultado final.
- tangente sigmoidal
- Lineal
Con la función lineal no hay ningún problema, ya que el Net input es igual al
resultado final, pero en el caso de la tangente sigmoidal, la función que la define es
la siguiente:
2
n= −1
(1 + e − 2· NI )
Como se ve en la función, tiene un factor exponencial, bastante largo de programar
en el PIC. Se intentó hacer una tabla con diferentes valores de la función de salida,
es decir que para una serie de valores de entrada, tendría la misma salida:
Comparando los resultados obtenidos en los entrenamientos con esta función, y los
de la función original, son muy similares. A continuación se presenta una serie de
valores de entrada, para que se pueda comprobar que los valores de salida que se
obtienen tanto con una función como con otra son similares:
Con esta opción el sistema seria autónomo y podría trabajar sin necesidad de
incorporar ningún otro dispositivo. El inconveniente es la complejidad de cálculo que
tiene el entrenamiento de la red neuronal, bastante engorroso de implementar en el
PIC, y el no menos preocupante tiempo de cálculo de dicha Red a la hora de la
ejecución. Dicho tiempo de cálculo hace que el tiempo entre patrón y patrón sea del
orden de 0,7ms.
- Como primera opción se consideró, colocar un pequeño PIC que solo haga de
multiplicador, junto con el mismo 16F877. Existe la serie 18F1x20 con 18
patillas, el cual incorpora una instrucción de multiplicación de 8 bits, que
acelera el proceso de calculo de una manera considerable. De esta manera y
utilizando el puerto B del PIC libre, y el puerto E, como control, se tiene un
multiplicador externo que solventa en parte el problema.
- Otra solución que tiene más ventajas que inconvenientes, es cambiar el PIC
16F877, por un 18F452, también de 40 patillas y con una estructura interna
muy similar al anterior, con la ventaja de tener la instrucción de multiplicación
mencionada anteriormente, con lo cual ya no se ha de colocar el multiplicador
auxiliar.
A parte, otra ventaja del cambio es el aumento de memoria RAM que supone.
Se pasa de tener 368 bytes a 1536 bytes, con lo cual se evita colocar otro
chip adicional de memoria RAM, que posiblemente hubiera sido necesario por
la gran cantidad de datos a almacenar.
Como se verá más adelante, el excesivo tiempo de cálculo impide que la Red
físicamente sea incapaz de identificar según que respuestas.
Para recoger los valores tanto de la entrada como de la salida del cuadripolo,
contamos con las dos señales físicas de forma analógica. La solución es utilizar un
convertidor A/D, que como se muestra en el apartado 4.2, el PIC18F452 lleva
incorporado uno internamente. Se irán tomando valores y guardando en la memoria
RAM, en forma de tabla, los cuales servirán luego para el entrenamiento de la Red.
TCONVERSIÓN = 35µs
Otro dato a tener en cuenta, es que el convertidor A/D tiene una resolución de 10
bits, lo que da para una tensión de 5V, que cada bit tiene un peso de 0,005V:
V 5V
Vbit = max
= = 0,005 V
2 Nº de bits
−1 2 −1
10
El problema que tiene trabajar con 10 bits es que, al incluir el PIC una memoria RAM
de 8 bits, y al tener la necesidad de guardar los datos para posteriormente
mostrarlos a la red para que se los aprenda, se limita el número de datos que se
pueden guardar en la memoria.
La que se cogerá será la parte alta del resultado final, de esta manera se perderá
algo de resolución, admisible para la aplicación. La resolución resultante con 8 bits
es de 0,02V. Con los 2 bits que se eliminan, se realizará el redondeo, si su valor en
binario es mayor o igual a 2, se suma 1 a los 8 bits del resultado, pero si su valor es
menor que 2, el resultado queda como está.
o Velocidad de aprendizaje
o Nº de Epoch's totales
o Error cuadrático al que se desea llegar
o Nº de capas enterradas que se desea que tenga la red
• Una vez se hallan obtenido los valores digitales, tanto de la entrada como de la
salida del cuadripolo, habrá la opción de poder sacar al exterior la secuencia de
valores, tanto de la entrada como de la salida, con el fin de comprobar que los
datos recogidos son coherentes.
4 Hardware
A continuación se irá detallando cada parte, del diagrama de bloques del sistema:
- Adquisición de datos
- Visualización por display
- Comunicación con el PC
- Ejecución de la función de la Red Neuronal para obtener la salida
- Comunicación con el usuario a través de teclado
o Memoria RAM para guardar los valores adquiridos de las señales tanto
de entrada como de salida, que harán de patrones y de objetivos de la
Red Neuronal.
A la vista de los puertos utilizados, ¿por qué se utiliza un PIC, con dos puertos
más?, La explicación es que cabe la posibilidad de aumentar las posibilidades del
circuito en un futuro, quedando un puerto libre de ocho bits, y cuatro patitas más de
control, se puede colgar del circuito o una extensión de memoria RAM serie, o un
multiplicador exterior, que haga esta función y desahogar e PIC principal. También
es posible realizar una comunicación serie, mediante las patillas RC6 y RC7 del
puerto C, que corresponden a la comunicación serie RS-232 del PIC (Rx, Tx).
PIC 18F452
Frecuencia de operación DC-40MHz
RESETS (y retardos) POR, BOR (PWRT, OST)
RESET Instruction
Stack Full, Stack Underflow
Memoria de programa FLASH (14 bits) 32K
Memoria de datos RAM (8 bits) 1536
Memoria de datos EEPROM 256
Interrupciones 18
Puertos E/S Puertos A, B, C, D, E
Timers 4
Comunicación serie MSSP, Adressable USART
Modulo A/D de 10 bits 8 canales de entrada
Juego de instrucciones 75 instrucciones
Para más información acerca del PIC, remitirse al Anexo 1 [2], donde se encuentra
el manual de información del componente.
Por parte del convertidor D/A, su corriente máxima de salida con todos los bits a
uno, se obtiene con la fórmula siguiente:
+ Vref 255
I FS = · : Io + Io = I FS
R8 + P3 256
Si se limita esta corriente de salida IFS = 1mA, se obtiene los valores de R8 y P3.
R8 = 4 k 9Ω P3 = 200Ω
R9 ≈ R8 + P3 = 4k 9Ω
En cuanto al amplificador inversor, se tiene que su salida máxima será de 5V, por lo
tanto R12+P4:
Vout 5v
P 4 + R12 = = = 5k Ω
I FS 1·10 − 3
Para el cálculo del filtro de salida, se coge como frecuencia de corte la frecuencia de
muestreo de la Red à 0,7ms
Para tener una impedancia de salida baja, se escoge una resistencia de valor bajo:
1 1
Rà 50Ω fcà 1500Hz C= = = 2µF
2·π·R· fc 2·π·50·1500
El teclado funciona de la siguiente manera, todas las teclas se cuentan como activas
cuando en la entrada del PIC, este ve un 0. Por lo tanto la secuencia es la siguiente.
Primero se lee el estado del puerto A, y se comprueba patilla por patilla a ver si hay
alguna a 0, en caso afirmativo el dispositivo identifica cual es y actúa en
consecuencia. Internamente hay retardos para evitar, que no se ejecuten acciones
que no se desean.
La misión del zener es que la entrada que se introduce al PIC, no supere los 5V, y el
diodo mismo diodo zener, limita la entrada negativa a –0,5V. Con estos valores se
cumple los requisitos del fabricante.
Para ello con el montaje que se ha realizado, sea cual sea, el circuito conectado a la
entrada, la impedancia que verá el PIC, será el valor de 2,5kΩ, resistencia que hay
en la salida del segundo seguidor de tensión.
Por último para el cálculo del filtro RC, tomamos como valor del condensador 0,1µF
fc = 1500 Hz
1 1
R= = = 1100Ω ⇒ 1k 2Ω
2·π· fc·C 2·π·1500·0,1·10 − 6
Este integrado tiene la particularidad de adaptar la tensión de salida tanto del PIC,
como del PC, para que al llegar a cada una de las entradas, estas estén dentro de
los márgenes permitidos. Es una solución fácil y de bajo coste.
Para más información sobre el integrado MAX-232, ver el catálogo del fabricante, en
el anexo 5.
Para más información acerca de los controladores de la serie 78xx y 79xx consultar
los catálogos del fabricante, en el anexo 5 [8],[9].
Para empezar a hablar de las características del sistema, se empezará a hablar del
bloque de entrada.
Mínimo Máximo
Velocidad de aprendizaje 0,008 0,1
Nº de capas enterradas 2 15
Nº de epoch’s 100 9900
Error mínimo 0,001 0,1
Nº de muestras a adquirir 2 254
5 Software
5.2 Pseudocódigo
Inicio secuencia
Iniciar_PIC; {Desactivar interrupciones, watchdog, puertos I/O}
Borrar puertos
Inicializar_Red {Iniciar los datos por defecto de la Red Neuronal}
Iniciar_LCD {LCD con 4 bits de datos}
visualizar_LCDà 1ª línea (ENTRENAMIENTO); 2ª línea (EJECUTAR);
opción=entrenar; {Opción por defecto entrenamiento}
Repetir
Mirar_tecla
Si ((tecla=subir)&(opción=entrenamiento) o(tecla=bajar)&(opción=opciones))
entonces
visualizar_LCDà 1ª línea (EJUCUTAR); 2ª línea (OPCIONES);
opción=ejecutar; {Se elige la opción de ejecutar}
Fin_si
Si ((tecla=subir)&(opción=ejecutar)o(tecla=bajar)&(opción=adquisición))
entonces
visualizar_LCDà 1ª línea (OPCIONES); 2ª línea (ADQUISICION);
opción=opciones {Se elige la opción de opciones}
Fin_si
Si ((tecla=subir)&(opción=opciones)o(tecla=bajar)&(opción=test))
entonces
visualizar_LCDà 1ª línea (ADQUISICION); 2ª línea (TEST I/O);
opción=adquisición {Se elige la opción de adquisición}
Fin_si
Si ((tecla=subir)&(opción=adquisición)o(tecla=bajar)&(opción=entrenamiento))
entonces
visualizar_LCDà 1ª línea (TEST I/O); 2ª línea (ENTRENAMIENTO);
opción=test {Se elige la opción de ejecutar}
Fin_si
Si ((tecla=subir)&(opción=test)o(tecla=bajar)&(opción=ejecutar))
entonces
visualizar_LCDà 1ª línea (ENTRENAMIENTO); 2ª línea (EJECUTAR);
opción=entrenamiento {Se elige la opción de ejecutar}
Fin_si
Repetir hasta que (tecla=aceptar)
Si tecla=aceptar entonces
Si opción=entrenamiento entonces Ejecutar Programa entrenar;
Fin_si
Si opción=ejecutar entonces Ejecutar Programa ejecutar;
Fin_si
Si opción=opciones entonces Ejecutar Programa opciones;
Fin_si
Si opción=adquisición entonces Ejecutar Programa adqusición;
Fin_si
Si opción=test entonces Ejecutar Programa test;
Fin_si
Fin_secuencia
Inicio secuencia
Desde i=nº enterradas mínimo hasta nº enterradas máximo
Iniciar_Pesos {Inicializar según el número de capas enterradas
los valores de los pesos y polarizaciones}
Iniciar_velocidad_de_aprendizaje
Iniciar_nº_de_epoch’s_actual
Iniciar_error_actual
visualizar_LCDà 1ª línea (Nº de epoch, Velocidad de aprendizaje);
2ª línea (Error actual);
Desde a=1 hasta epoch máximo/100
Desde 1 hasta 100
Mirar_tecla
Si error actual<error consigna o tecla=cancelar
Entonces acabar entrenamiento
Fin_si
Programa Red Neuronal
LR=LR-LRoriginal/100
Fin_desde
Fin_desde
Si Error obtenido< Error red anterior {Se comparan los resultados de cada
entrenamiento, con las diferentes
capas enterradas}
Entonces guardar pesos en EEPROM.
Fin_si
Fin_desde
visualizar_LCDà 1ª línea (SOLUCION, Nº de capas enterradas);
2ª línea (Error final);
Repetir
Mirar_tecla
Repetir hasta que tecla=aceptar
Fin_secuencia
Inicio secuencia
visualizar_LCDà 1ª línea (EJECUTAR RED); 2ª línea (EJEC. ENTRADA);
opción=ejecutar red; {Opción por defecto ejecutar red}
Repetir
Mirar_tecla
Si ((tecla=subir)&(opción=ejecutar red)
o (tecla=bajar)&(opción=ejecutar salida))
entonces
visualizar_LCDà 1ª línea (EJEC. ENTRADA);
2ª línea (EJEC. SALIDA);
opción=ejecutar entrada;
Fin_si
Si ((tecla=subir)&(opción=ejecutar entrada)
o (tecla=bajar)&(opción=ejecutar red))
entonces
visualizar_LCDà 1ª línea (EJEC. SALIDA);
2ª línea (EJECUTAR RED);
opción=ejecutar salida;
Fin_si
Si ((tecla=subir)&(opción=ejecutar salida)
o (tecla=bajar)&(opción=ejecutar entrada))
entonces
visualizar_LCDà 1ª línea (EJECUTAR RED);
2ª línea (EJEC. ENTRADA);
opción=ejecutar red;
Fin_si
Repetir hasta que (tecla=aceptar)
Si tecla=aceptar entonces
Si opción= ejecutar red entonces
Ejecutar Programa ejecutar red;
Fin_si
Inicio secuencia
Repetir
Iniciar cuenta de 1 milisegundo
Iniciar_CAD {Inicializar convertidor y pasar a entradas
analógicas PA0 y PA1}
Convertir dato entrada 1;
Función Red Neuronal (Dato entrada 1);
Espera hasta que cuenta 1 milisegundo acabe
EntradasA_digitales {Pasar las entradas del puerto A, todas a digitales}
Mirar_tecla
Repetir hasta que (tecla=cancelar)
Si tecla=cancelar entonces
Volver Programa principal;
Fin_si
Fin_secuencia
Inicio secuencia
Repetir
Desde n=1 hasta patrón máximo+1
Iniciar cuenta de 1 milisegundo
PuertoD=Patrón(n,Entrada)
Espera hasta que cuenta 1 milisegundo acabe
Fin_desde
Mirar_tecla
Repetir hasta que (tecla=cancelar)
Si tecla=cancelar entonces
Volver Programa principal;
Fin_si
Fin_secuencia
Inicio secuencia
Repetir
Desde n=1 hasta patrón máximo+1
Iniciar cuenta de 1 milisegundo
PuertoD=Patrón(n,Salida)
Espera hasta que cuenta 1 milisegundo acabe
Fin_desde
Mirar_tecla
Repetir hasta que (tecla=cancelar)
Si tecla=cancelar entonces Volver Programa principal;
Fin_si
Fin_secuencia
opción=entmax;
Fin_si
Si ((tecla=subir)&(opción=entmax)o(tecla=bajar)&(opción=muestras))
entonces
visualizar_LCDà 1ª línea (ENTERRADAS MIN);
2ª línea (Nº MUESTRAS);
opción=entmin
Fin_si
Si ((tecla=subir)&(opción=entmin)o(tecla=bajar)&(opción=epoch))
entonces
visualizar_LCDà 1ª línea (Nº MUESTRAS);
2ª línea (Nº EPOCHS);
opción=muestras
Fin_si
Si ((tecla=subir)&(opción=muestras)o(tecla=bajar)&(opción=error))
entonces
visualizar_LCDà 1ª línea (Nº EPOCHS);
2ª línea (ERROR MIN);
opción=epoch
Fin_si
Si ((tecla=subir)&(opción= epoch)o(tecla=bajar)&(opción=lr))
entonces
visualizar_LCDà 1ª línea (ERROR MIN);
2ª línea (VEL. APRENDIZ.);
opción=error
Fin_si
Si ((tecla=subir)&(opción=error)o(tecla=bajar)&(opción=entmax))
entonces
visualizar_LCDà 1ª línea (VEL. APRENDIZ.);
2ª línea (ENTERRADAS MAX);
opción=lr
Fin_si
Inicio secuencia
Repetir
visualizar_LCDà 1ª línea (VEL. APRENDIZ.);
2ª línea (“Valor actual de lr”);
Mirar_tecla
Si tecla=aceptar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=cancelar
Inicio secuencia
Repetir
visualizar_LCDà 1ª línea (ENTERRADAS MAX);
2ª línea (“Valor actual de enterrmax”);
Mirar_tecla
Si tecla=aceptar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=cancelar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=subir
Entonces enterrmax=enterrmax+1
Fin_si
Si tecla=bajar
Entonces enterrmax=enterrmax-1
Fin_si
Repetir hasta que tecla= aceptar o tecla=cancelar
Fin_secuencia
Inicio secuencia
Repetir
visualizar_LCDà 1ª línea (ENTERRADAS MIN);
2ª línea (“Valor actual de enterrmin”);
Mirar_tecla
Si tecla=aceptar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=cancelar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=subir
Entonces enterrmin=enterrmin+1
Fin_si
Si tecla=bajar
Entonces enterrmin=enterrmin-1
Fin_si
Repetir hasta que tecla= aceptar o tecla=cancelar
Fin_secuencia
Inicio secuencia
Repetir
visualizar_LCDà 1ª línea (Nº MUESTRAS);
2ª línea (“Valor actual de numues”);
Mirar_tecla
Si tecla=aceptar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=cancelar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=subir
Entonces numues =numues+1
Fin_si
Si tecla=bajar
Entonces numues = numues -1
Fin_si
Repetir hasta que tecla= aceptar o tecla=cancelar
Fin_secuencia
Inicio secuencia
Repetir
visualizar_LCDà 1ª línea (Nº EPOCHS);
2ª línea (“Valor actual de epoch”);
Mirar_tecla
Si tecla=aceptar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=cancelar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=subir
Entonces epoch = epoch +1
Fin_si
Si tecla=bajar
Entonces epoch = epoch -1
Fin_si
Repetir hasta que tecla= aceptar o tecla=cancelar
Fin_secuencia
Inicio secuencia
Repetir
visualizar_LCDà 1ª línea (ERROR MIN);
2ª línea (“Valor actual de sse”);
Mirar_tecla
Si tecla=aceptar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=cancelar
Entonces Volver al Programa Opciones
Fin_si
Si tecla=subir
Entonces sse = sse +1
Fin_si
Si tecla=bajar
Entonces sse = sse -1
Fin_si
Repetir hasta que tecla= aceptar o tecla=cancelar
Fin_secuencia
Inicio secuencia
Iniciar_CAD {Inicializar convertidor y pasar a entradas analógicas PA0 y PA1}
Desde n=1 hasta patrón máximo+1
Convertir dato entrada1;
Guardarlo en (posición entrada+(n-1));
Convertir dato entrada 2;
Guardarlo en (posición salida+(n-1));
Fin_desde
Apagar_CAD {Apagar convertidor y pasar a entradas digitales PA0 y PA1}
Fin_secuencia
Inicio secuencia
Entrada2=Patrón (1,Salida)
Desde i=2 hasta patrón máximo+1
Entrada1=Patrón (i,Entrada) {Valor actual de la entrada}
Entrada2=Patrón (i-1,Salida) {Valor anterior de la salida}
Target= Patrón (i,Salida) {Valor actual de la salida}
Algoritmo Red neuronal
Fin_desde
Fin_secuencia
Todos los datos se componen de tres o dos bytes, dependiendo si lleva parte entera
o no, excepto la variable de error cuadrática, que al superar el rango de
representación en la parte entera, incorpora otro byte para esta.
6 Comunicaciones
En este apartado se explica la utilización del dispositivo, para que el usuario sea
capaz de utilizar el sistema con toda facilidad.
à (3) Tecla arriba; sirve tanto para irse moviendo en los menús, como
para variar los valores de los parámetros modificables.
à (4) Tecla abajo; sirve tanto para irse moviendo en los menús, como
para variar los valores de los parámetros modificables.
à (2) Tecla aceptar; Utilizada para aceptar una opción y dar la orden para
iniciar alguna secuencia.
- Entrenamiento
- Ejecutar
- Opciones
- Adquisición
- Test
- Comunicación
Dentro del menú para moverse en el mismo, es posible con las teclas (3) y (4), la
opción seleccionada es aquella, que en su derecha tiene el símbolo (<).
7.2 Entrenamiento
Sin ningún otro menú, según las opciones de entrenamiento que se hallan
preseleccionado, mirar opciones, y los datos adquiridos del cuadripolo, mirar
adquisición, se realizará el entrenamiento de la Red Neuronal.
Una vez acabado el entrenamiento mostrará la solución obtenida, con la tecla (2), se
volverá al menú principal.
7.3 Ejecutar
- Ejecutar Red
- Ejecutar Entrada
- Ejecutar Salida
Dentro del menú para moverse en el mismo, es posible con las teclas (3) y (4), la
opción seleccionada es aquella, que en su derecha tiene el símbolo (<).
Esta opción es para que una vez entrenada la Red, y con los valores de pesos
calculados, se ejecuta la Red tomando como entrada Vin1. En la salida, si el
entrenamiento hubiese sido correcto, se debería tener la respuesta esperada.
Esta opción tiene la finalidad de comprobar que valores se han adquirido, por la
entrada Vin1. En la salida del sistema, aparecerá la señal almacenada de la
adquisición de Vin1.
Esta opción tiene la finalidad de comprobar que valores se han adquirido, por la
entrada Vin2. En la salida del sistema, aparecerá la señal almacenada de la
adquisición de Vin2.
7.4 Opciones
- Velocidad de aprendizaje
- Nº de capas enterradas máxima
- Nº de capas enterradas mínima
- Nº de muestras
- Nº de epoch’s
- Error cuadrático mínimo
Dentro del menú para moverse en el mismo, es posible con las teclas (3) y (4), la
opción seleccionada es aquella, que en su derecha tiene el símbolo (<).
Una vez dentro de los diferentes opciones, mediante las teclas (3) y (4), se aumenta
y disminuye el valor de la opción escogida. Con la tecla (2) aceptamos el valor y con
la tecla (1) cancelamos.
7.5 Adquisición
7.6 Test
- Test entrada 1
- Test entrada 2
- Test salida
Dentro del menú para moverse en el mismo, es posible con las teclas (3) y (4), la
opción seleccionada es aquella, que en su derecha tiene el símbolo (<).
Este nivel de tensión, que aparecerá en la salida, se puede variar por medio de las
teclas (3) y (4).
Es decir, si por pantalla se tiene la tensión de 5,000 (V), hasta que la tecla (2) no se
pulse, esta tensión no aparecerá por la salida.
7.7 Comunicación
Sin ningún otro menú, la función de esta opción es mandar al PC los valores de
pesos y polarizaciones que el sistema a encontrado como solución.
8 Simulaciones
El cuadro anterior explica de una manera rápida cuales han sido los resultados, de
las redes utilizadas en las simulaciones.
Todas las archivos Matlab con las simulaciones, dentro del anexo 4.
Una vez realizado el entrenamiento el valor de salida que da la red, respecto del que
se le había enseñado.
Que pasaría si se variase el número de capas enterradas, dejando igual los otros
parámetros. El numero de capas enterradas pasa a ser 18:
Simulación con la misma Red, pero ahora con diferente entrada y diferente salida:
Las señales las cuales se desea que la Red aprenda, y la salida de dicha Red son
las siguientes:
Las señales las cuales se desea, que la Red aprenda son las mismas que en la
primera simulación realizada con la Red Backpropagation, ver Fig. 8.1
Su respuesta es la siguiente:
Red Elman con una entrada escalón y una Red RC en el cuadripolo. (ElmanIaut2.m,
SimelmanIaut2.m)
Su error mínimo que alcanza con 5000 epoch's es de 0.08, y el resultado que se
obtiene, es:
Una vez realizado el entrenamiento el valor de salida que da la red, respecto del que
se le había enseñado.
Red Elman con una entrada senoidal y una red compuesta por un Diodo y una
resistencia en el cuadripolo. (ElmanIaut4.m, SimelmanIaut4.m)
Fig. 8.13 Entrada senoidal y cuadripolo compuesto por un diodo y una resistencia
Fig. 8.14 Entrada y salida teóricas de la Red formada por el diodo y la resistencia
Una vez realizado el entrenamiento, el valor de salida que da la red respecto del que
se le había enseñado es el siguiente:
Red Elman con una entrada senoidal y rectificador de media onda en el cuadripolo.
(ElmanIaut5.m, SimelmanIaut5.m)
Fig. 8.17 Entrada y salida teóricas de la Red formada por el rectificador de media onda
Una vez realizado el entrenamiento, el valor de salida que da la red respecto del que
se le había enseñado, es el que muestra la figura siguiente:
En este caso, se ha trabajado con todos los recursos disponibles del PC, una vez se
obtuvieron buenos resultados, se limitó el número de decimales con los que Matlab
trabajaba, fueron muchas las pruebas para reducir el número al máximo, y para que
a la vez el resultado que se obtuviera fuera bastante bueno. Los resultados
obtenidos se aproximan bastante a los expuestos en la simulación anterior, y el
número de decimales a utilizar es 4.
Las respuestas que obtenemos en las distintas pruebas son las siguientes:
8.4.1 Cuadripolo RC
Fig. 8.20 Respuesta de la Red Jordan y gráfica del error durante el entrenamiento
Los picos de la curva de error son debidos a que en este caso el valor de velocidad
de aprendizaje máximo es un poco elevado para la Red, con valores menores su
respuesta es parecida y se eliminan estos picos.
Fig. 8.21 Respuesta de la Red Jordan y gráfica del error durante el entrenamiento
Fig. 8.22 Respuesta de la Red Jordan y gráfica del error durante el entrenamiento
Fig. 8.23 Respuesta de la Red Jordan y gráfica del error durante el entrenamiento
Vo( s ) 1
=
Vi( s) RCs + 1
La respuesta de este sistema de una manera teórica tiene una respuesta plana,
hasta llegar a la frecuencia de corte, donde la amplitud cae 3dB, y más allá de esta
frecuencia según va aumentando la amplitud decae del orden de 20dB por década.
Vo( t )
Vo( t )
=
1
→ Argumento =
1 Fase [arctg(− wRC ) ]
Vi(t ) RC ( jw) + 1 Vi(t ) ( RCw) 2 + 12
Vi
Vo(t ) = sen ( wt + arctg(− wRC ))
( RCw) 2 + 12
1 1
arctg( − wRC ) = −45º → − wRC = tg( −45º ) → w = = = 250 rad / s
RC 0,004
w 250
w = 2πfc → fc = = = 40 Hz
2π 2π
- 14 neuronas enterradas
- Error alcanzado por la Red = 0,4
- Número de epoch’s = 5000
Señalar que en las simulaciones con frecuencias cercanas a los 400Hz, las
muestras que se han utilizado son muy pocas, ya que si aumentamos el número de
muestras en estas frecuencias, las muestras totales que se toman y se han de
presentar a la Red, son muchas y aumenta mucho el tiempo de entrenamiento y
para el propósito de esta simulación no eran necesarias tantas muestras.
Queda claro que con la Red Elman y aumentando el número de muestras, es capaz
de reproducir totalmente el espectro de trabajo del sistema R-C.
Para este caso se toman las mismas variables de entrada, que ha la Red
mencionada anteriormente, Fig. 8.25. Por lo tanto queda claro el propósito de la
siguiente simulación, lo único que se varía es el tipo de Red a utilizar. Las
respuestas de la simulación son las siguientes:
- 18 neuronas enterradas
- Error alcanzado por la Red = 2,1
- Número de epoch’s = 9000
Aunque los resultados entre la Red Elman y la Jordan sean tan parecidos, la
diferencia está en el número de vueltas que debe de dar y en el número de capas
enterradas que utilizan para solucionar el problema.
9 Ensayos
9.1 Cuadripolo RC
El primer cuadripolo del cual se sacan los patrones de entrada y de salida es una red
RC, la cual esta excitada por una señal cuadrada, de 0 a 2V de amplitud y una
frecuencia de 20Hz:
En la figura 9.2, se presentan lo que son las señales reales tanto de entrada, como
de salida de la Red RC. Donde:
Una vez los datos fueron adquiridos por el sistema, a un tiempo 1,5ms por pareja de
patrones. El entrenamiento tubo como resultado, un error de 0,087 y un número de
neuronas enterradas de 10. Las características de las variables de entrenamiento
fueron las siguientes:
Valor
Velocidad de aprendizaje máxima 0,04
Nº de muestras 70
Nº de epoch’s 3000
Ya por último y para acabar con este ensayo se muestran los resultados si se
aumenta la frecuencia de la señal de entrada. La señal de salida de la Red Neuronal
como se ve en la siguiente figura, generaliza bastante bien para frecuencias de
entrada diferentes.
Una vez los datos fueron adquiridos por el sistema, a un tiempo 1,5ms por pareja de
patrones. El entrenamiento tubo como resultado, un error de 0,021 y un número de
neuronas enterradas de 8. Las características de las variables de entrenamiento
fueron las siguientes:
Valor
Velocidad de aprendizaje máxima 0,04
Nº de muestras 70
Nº de epoch’s 3000
El primer cuadripolo del cual se sacan los patrones de entrada y de salida es una red
rectificadora de media onda, la cual esta excitada por una señal senoidal, de 0 a 3V
de amplitud y una frecuencia de 10Hz:
Una vez los datos fueron adquiridos por el sistema, a un tiempo 1,5ms por pareja de
patrones. El entrenamiento tubo como resultado, un error de 0,054 y un número de
neuronas enterradas de 8. Las características de las variables de entrenamiento
fueron las siguientes:
Valor
Velocidad de aprendizaje máxima 0,05
Nº de muestras 99
Nº de epoch’s 3000
10 Conclusiones
- Comentar de alguna manera los buenos resultados obtenidos con la Red Jordan
utilizada en la implementación del PIC. Converge de una manera similar, a como
lo hacía en la simulaciones con Matlab, ahora ya con datos almacenados reales,
no teóricos.
- Una de las pegas del circuito, es que el diodo zener colocado para limitar la
tensión de entrada a 5V, debido a su curva característica, empieza a estabilizar
mucho antes de los 5V. Con lo cual se limita la tensión de entrada a poco más de
4V, si se pretende que la señal de adquisición sea fiable.
11 Mejoras posibles
- Procurar bajar el tiempo de cálculo, con algún otro dispositivo exterior, para
que las señales a representar puedan ser más complejas y con un rango de
frecuencia más grande, que las utilizadas en el actual identificador.
- Una vez comprobado el buen funcionamiento, con este tipo de Redes con
funciones de primer orden, buscar soluciones para circuitos de mayor orden.
12 Estudio económico
Circuito impreso
Fuente de alimentación
Referencia Descripción Cantidad PVP(€)
D1,2,3,4,5,6 Diodo 1N4004 6 0,08
Trafo Transformador 220/18 18VA 1 7,00
C29 Condensador electrolítico radial 2’’ 1000µF/25V 1 0,16
C30,32 Condensador cerámico 2’’ 100nF/100V 2 0,06
C31,33 Condensador cerámico 2’’ 330nF/63V 2 0,12
C33 Condensador electrolítico radial 1’’ 1µF/100V 1 0,02
C34 Condensador electrolítico radial 1’’ 2,2µF/63V 1 0,02
U10 7805 Regulador de tensión +5V 1A TO-220 1 0,16
U11 7812 Regulador de tensión +12V 1A TO-220 1 0,18
U12 7912 Regulador de tensión –12V 1A TO-220 1 0,17
TOTAL 36,00