[go: up one dir, main page]

0% encontró este documento útil (0 votos)
59 vistas8 páginas

Informe Control Inteligente

Este documento describe la simulación de un convertidor DC-DC boost usando Simulink y la implementación de una red neuronal entrenada en Matlab en un Arduino. Se modela matemáticamente el convertidor, se adquieren datos con Simulink y se entrena una RNA para emular la dinámica del sistema. Luego se implementa la RNA en un Arduino y se valida tanto en Simulink como en el puerto serial del Arduino.

Cargado por

Javier Cifuentes
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
59 vistas8 páginas

Informe Control Inteligente

Este documento describe la simulación de un convertidor DC-DC boost usando Simulink y la implementación de una red neuronal entrenada en Matlab en un Arduino. Se modela matemáticamente el convertidor, se adquieren datos con Simulink y se entrena una RNA para emular la dinámica del sistema. Luego se implementa la RNA en un Arduino y se valida tanto en Simulink como en el puerto serial del Arduino.

Cargado por

Javier Cifuentes
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

CONVERTIDOR DC-DC BOOST

1 2 3
Daniel Obed Paz Torres ; Nelson Andres Portilla ; Javier Castillo Cifuentes ;
1 2 3
daniel_obed.paz@uao.edu.co nelson.portilla@uao.edu.co javier.castillo@uao.edu.co
Facultad de Ingeniería, Departamento de Electrónica y Automática.
Control Inteligente
Universidad Autónoma de Occidente
Cali, Colombia

Abstract — The following report is based on the simulation of a DC-DC


boost converter, the data acquisition using Simulink having the dynamic II. MARCO TEÓRICO
analysis of the same and thus its representation in state variables and the
subsequent learning process using MATLAB, the verification of the creation
of the neural network and the subsequent implementation in hardware and
A. Convertidor DC-DC Boost
thus also the validation both in its serial port of the arduino IDE arduino and
the simulation in simulink. El convertidor elevador o convertidor boost (del inglés boost
converter) es un convertidor DC a DC que obtiene a su salida una
Keywords – dynamic analysis, learning process, neural network. tensión continua mayor que a su entrada. Es un tipo de fuente de
alimentación conmutada que contiene al menos dos interruptores
I. INTRODUCCIÓN semiconductores (diodo y transistor), y al menos un elemento para
almacenar energía (condensador, bobina o combinación de ambos).
La inteligencia artificial es una herramienta muy importante en Frecuentemente se añaden filtros construidos con inductores y
muchos aspectos relacionados con la ciencia y la tecnología, está a su condensadores para mejorar el rendimiento. A continuación se describe
vez ha revolucionado la manera en cómo vemos y utilizamos una el modelo dinámico del mismo.
computadora, ya que a través de la simulación de algoritmos
relacionados es como nosotros los humanos aprendemos cada día, las
máquinas pueden llegar a simular y hasta razonar de manera artificial
diferentes procesos de manera autónoma y es así cómo podemos
relacionar esta herramienta con los sistemas de control autónomos, con
el hecho de poder enseñar a una red neuronal comportarse como la
planta en su defecto, podemos así controlar esta de manera más
eficiente, así revolucionando el control autónomo de enfoque clásico;
El siguiente informe se basa en la simulación de un convertidor
DC-DC boost, la adquisición de datos utilizando Simulink teniendo el
análisis dinámico del mismo y así su representación en variables de
estado y el posterior proceso de aprendizaje utilizando MATLAB, la Figura 1. Esquemático Convertidor DC-DC boost
comprobación de la creación de la red neuronal y la posterior
implementación en hardware y así también la validación tanto en su Cabe notar que para realizar el análisis se tiene como entrada u la
puerto serial del propio IDE de arduino y la simulación en simulink. conmutación del mosfet.

para u=0
II. OBJETIVOS

A. General

Emular un sistema dinámico no lineal usando una RNA MLP


implementada en Arduino.

B. Específicos Para u=1

● Adquirir los datos a través de su análisis dinámico usando


Simulink

● Entrenar la red neuronal en Matlab y comprobación en simulink

● Implementar la red neuronal en Arduino

● Validar la respuesta de arduino con la implementación en


simulink.

1de8
Así obtenemos el modelo conmutado:

y conociendo los siguientes dato


Para realizar un análisis de eficiencia se tiene que buscar un promedio
de la entrada y definir los valores de eficacia, entonces de la misma
manera anterior obtenemos el modelo promediado

Por lo tanto:

Organizamos las ecuaciones para así obtener la representación en Como se puede apreciar en las ecuaciones L es igual a C porque
variables de estado 1 1
es igual a 𝐶 como a 𝐿 de esta forma podemos encontrar el
valor de R

Dando como estados la corriente en la inductancia y el voltaje en el


capacitor III.MATERIALES Y MÉTODOS

Para el desarrollo de este proyecto se necesitaba de un arduino, no


era necesario tenerlo físico pero era lo ideal así qué hablaremos un
poco sobre él. Además el uso de software como lo es Matlab y
Arduino IDE.

A. Arduino

Es un tipo de hardware de bajo costo el cual incorpora un


microcontrolador específicamente el Atmega2560 o Atmega328P entre
otros según la capacidad del hardware, se usa en conjunto con el
Es así cómo podemos comparar las ecuaciones dadas para este software propio de Arduino para poder realizar la programación debida
proyecto, y así poder encontrar los valores de los parámetros y poder visualizar o realizar diversas acciones.

por lo siguiente podemos igualar los parámetros de las ecuaciones


encontradas por el modelo promediado y las dadas para el desarrollo
de este proyecto.
Figura 2. Hardware Arduino NANO, UNO, MEGA

2de8
Lo qué se debe hacer con este hardware es conectarlo a un ordenador
mediante cable USB para poder programarlo y poder usar sus puertos
ya sea del arduino o los puertos de transferencia entre el computador y
arduino (puertos serie).

B. Matlab

Mediante el uso de software como Matlab y sus diferentes instancias


como Simulink podemos realizar la asignación de parámetros
predefinidos como variables globales y usarlas en código de Matlab y
Simulink simultáneamente, con este último podemos esquematizar el
sistema a identificar con diagramas de bloques y funciones como
integradores, multiplexores, bloques de funciones para obtener los
valores de multiplexores, sumadores y osciloscopios para visualizar
nuestros datos.

Figura 5. Interfaz de Arduino IDE

IV. METODOLOGÍA

Como suministro para llevar a cabo este proyecto, se tiene las


ecuaciones que modelan el sistema de conversión DC-DC Boost las
cuales no son lineales es por ello que se recurre al uso de multiplexores
en Simulink para mediante los bloques de funciones alternar las
variables de estado y la entrada según la ecuación, así para las dos
ecuaciones predispuestas, luego de los bloques de función Fcn se tiene
integradores para obtener finalmente los estados 𝑥 𝑦 𝑥 de manera
1 2
Figura 3. Interfaz de Matlab independiente y poder visualizar según la respuesta planteada, en este
caso la salida será el estado 𝑥 . Adicional a ello se incluyen en Matlab
2
los coeficientes establecidos como 𝑤0, 𝑤1, 𝑏 𝑦 𝑢 y creados en el
workspace para incluirlas en los bloques de función desde Simulink y
proceder a graficar el comportamiento del sistema y capturar datos de
entrada y salida con los bloques llamados To Workspace, los cuales
mediante un tiempo de muestreo y la configuración de array, nos
genera variables manipulables Entrada y Salida en el Workspace de
Matlab y así poder usarlas luego para las posteriores operaciones.

Luego de generar los datos de entrada y salida del sistema se cambia


de nombre a las variables por notación únicamente, para la entrada la
letra U y para la salida la letra Y y con ellas se hace las operaciones
pertinentes para formar un regresor (Phi) de orden [2,2,1] (dos retardos
en la salida, dos retardos en la entrada y delay en 1), se elige ese orden
puesto que las ecuaciones nos muestran que es un sistema de orden
dos; se le realiza la transpuesta al vector Phi y adicionalmente se
obtiene la salida real llamada YReal también transpuesta para generar
Figura 4. Interfaz de Simulink la red neuronal. Siguiendo con lo mencionado, la red neuronal se
construye mediante la función newff a la cual se le envían como
C. Arduino IDE parámetros Phi, YReal, la cantidad de neuronas en la capa oculta, las
funciones de activación de entrada y salida y el tipo de entrenamiento a
Es un software de uso libre para desarrolladores en diferentes usar para dicha red; luego viene el número de iteraciones que la red
ámbitos a aplicar. Aquí se deberá implementar el código realizará para lograr un resultado óptimo, la orden de entrenamiento y
correspondiente a la identificación del sistema y posteriormente la generación de un bloque de Simulink para hacer posteriores
cargarlo en el hardware Arduino para obtener datos de comparación comparaciones y valoraciones de la respuesta del sistema y la red.

La secuencia del código de matlab nos lleva a obtener los pesos


sinápticos de la capa oculta y de salida al igual qué sus vías
correspondientes y concatenarlos en un arreglo tal qué nos permita
pasar ese sistema de entrenamiento por red neuronal hacia Arduino

3de8
IDE. También se obtienen los X minimos y maximos y D minimos y Predicción a un paso
maximos para realizar la normalización tal qué entienda nuestro Después de obtener la red neuronal entrenada se pasa a la simulación
software y hardware Arduino. Ya en el código de Arduino se crean las en las cuatro categorías mencionadas anteriormente. Para la
variables Xmin y max, al igual que las D y se les asigna los valores comparación más básica se tiene la predicción a un paso, configuración
obtenidos en Matlab, de igual forma los pesos de capa oculta y de en la que se tiene un arreglo que permite a la neurona obtener sus datos
salida con sus respectivos bias, luego de ello se empieza con el proceso de entrada por medio de los datos de salida del sistema (X2). En la
de normalización y finalmente la creación de valores random de siguiente figura se muestra la configuración utilizada.
entrada entre el rango establecido para poner a prueba el entrenamiento
de la red a través de arduino. Al cargar el código en el hardware,
podemos habilitar la opción de plot serial para poder observar cómo se
comporta la salida ante valores aleatorios de entrada y ya con esto
desde simulink mediante el bloque Query Instrument podemos
conectar el puerto serie en el qué trabaja arduino y enviar los valores
random hacia la entrada del sistema y de la neurona obtenidos en
Simulink y paralelo la respuesta del entrenamiento en arduino de la red
neuronal para comparar con la salida de la neurona y la salida propia
del sistema; esta visualización se puede hacer mediante un scope
donde se puede comparar las 3 gráficas simultáneamente y observar
cuán semejantes son y si el entrenamiento verdaderamente dió un
resultado satisfactorio.

V. ANÁLISIS Y RESULTADOS

Para el análisis de resultados se debe tener en cuenta que estos se


abordan en base a los diferentes procesos de simulación que se utilizan
para la planta. Así pues se tienen en cuenta las siguientes categorías:
a. Predicción a un paso b. Simulación Pura
Figura 7. Predicción a un paso
c. Simulación Arduino d. Comparación simulaciones
En la figura anterior se puede ver que se está utilizando el bloque de
Teniendo en cuenta las categorías mencionadas anteriormente se
simulink de la red entrenada que se alimenta de la salida del sistema
describe a continuación el procedimiento general para obtener el
para obtener una segunda salida que posteriormente se va comparar
fragmento más importante: la neurona artificial o red entrenada.
con la salida propia del sistema, esta configuración produce los
siguientes resultados:
Neurona Artificial (red entrenada)
Para realizar una correcta simulación de la planta en cuestión se
utilizan diversas técnicas que permiten identificar la planta y así poder
utilizar esta herramienta de manera similar a un observador de estados,
para posteriormente controlar el proceso involucrado.
El proceso descrito anteriormente pasa por ciertas fases que permiten
realizar una adecuada identificación del sistema. Lo primero que se
debe hacer es asignar ciertos valores como el tamaño del regresor, el
número de neuronas, el número de datos que se van a procesar, el
número de interacciones que tendrá el sistema, el tipo de
entrenamiento que se utilizará e incluso el tiempo de muestreo.
Después de haber determinado los valores apropiados para cada uno de
los elementos mencionados se procesa el código y se obtiene la red
entrenada, que se muestra a continuación:

Figura 8. Scope predicción a un paso

En la figura 8 lo primero que se debe apreciar es el correcto proceso de


identificación del sistema, como se puede ver se tienen respuesta
prácticamente iguales, esto en parte se debe a que la simulación no es
pura y solo se está haciendo por el proceso de predicción a un paso,
Figura 6. Neuronal entrenada proceso en el que la neurona regularmente no tiene inconvenientes, ni
siquiera en los picos más altos como en el segundo 9.
Para obtener esta neurona se utilizó el código denominado ANEXO 1.
Ubicado al final del documento.

4de8
Simulación Pura
Después de haber realizado la simulación con predicción a un paso
simplemente basta con cambiar el Switch manual para tener la
simulación pura, pues en este caso se tiene una realimentación propia o
también definida como estructura paralela. En esta sección se define si
el bloque o neurona entrenada realmente está funcionando, ya que esta
sería la representación real de lo que sucedería en el campo en caso de
implementar control inteligente.
En la siguiente figura se muestra el resultado obtenido en simulación
pura (se omite el esquemático de Simulink porque en lo único que
difiere con predicción a un paso es la posición del Switch manual).

Figura 10. Simulación Arduino

En la figura 10 se muestra la respuesta obtenida desde la placa Arduino


uno, esta gráfica se obtuvo del serial plotter propio del IDE.
Como se puede apreciar en la imagen se tiene la línea azul como la
entrada, esta se definió entre 0,8 y 9,5, tal y como se tiene en el
planteamiento del sistema, además se tiene la línea roja que representa
la respuesta obtenida del procesamiento.
Figura 9. Simulación pura
Comparación simulaciones
En la figura anterior se pueden apreciar cada una de las interacciones Finalmente, después de haber realizado cada una de las simulaciones
involucradas en la simulación, la línea amarilla representa la respuesta se procede con la comparación de las respuestas obtenidas, desde
del sistema, la línea negra representa la respuesta obtenida por la Simulink se recopilan los datos de entrada (línea morada), los datos de
neurona y la línea roja representa el valor aleatorio de la entrada, cabe la respuesta del sistema (línea verde) y de la respuesta de la neurona
mencionar que esta entrada está acotada entre 0,8 y 0,95. Teniendo en (línea amarilla), para incluir la respuesta generada desde la placa
cuenta estas apreciaciones se puede observar la fidelidad con la que se arduino fue necesario implementar un bloque denominado Query
está identificando el sistema, se puede llegar a esta consideración por Instrument, con el que se puede obtener la respuesta por el puerto serie
la similitud entre la respuesta dada por el sistema y la respuesta que (línea roja).
obtenemos en la simulación pura. A continuación se muestra en la Figura 11 se muestra lo descrito
anteriormente, se tiene el sistema, la neurona a simulación pura, la
Simulación Arduino entrada y la respuesta de arduino al mismo Scope, con el que se genera
En esta sección se describe el proceso de simulación con arduino, para la gráfica mostrada en la Figura 12.
esta fase se utilizó un Arduino Uno con el que se realizó la
implementación del código y con el cual se pudo ver la respuesta en
base a los datos tomados de Matlab.
Los datos que se utilizaron fueron los valores para normalizar la
entrada y la salida de la red, los pesos de la capa oculta y los pesos de
la capa de salida. Aparte de estos datos se tiene que definir en el
código el mismo número de neuronas de la capa oculta, el número de
entradas y salidas, además de que se debe configurar de tal manera que
el regresor esté implementado de igual forma que en Matlab, ya que
esto es vital para que la simulación sea la adecuada y los pesos de la
capa oculta y de salida sean los correspondientes.
El código utilizado está descrito en su totalidad en el ANEXO 2.
Ubicado al final del documento.

Figura 11. Simulación Sistema En Comparación

5de8
en simulink y la del entrenamiento en arduino no erán tan diferentes, se
podía observar algunas discrepancias en cambios demasiado bruscos o
muy pequeños en los escalones, donde la respuesta de arduino
generaba una gráfica tipo escalera, claro está no siempre era así, la
gran mayoría se tenía una respuesta muy pegada a la red de Matlab por
lo cual ambos métodos de asimilación del sistema original fueron
idóneos y cumplieron las expectativas qué se tenían.

REFERENCIAS

[1]
http://repositorio.utp.edu.co/dspace/bitstream/handle/11059/11359/621
.312136%20O83.pdf?sequence=1&isAllowed=y

Figura 12. Respuestas En Comparación [2]

[3]
Comparando los datos obtenidos en la simulación mostrada
anteriormente podemos observar una clara similitud entre las
respuestas generadas, sin embargo podemos apreciar que existen
diferencias muy pequeñas en los puntos más “complejos” como los
picos, donde la neurona y la respuesta del arduino no son del todo
genuinas o exactas, aun así se puede valorar este resultado como
positivo, ya que existe un rango de error muy bajo (al menos en lo que
se puede apreciar gráficamente).

VI.CONCLUSIONES

Durante la realización de este proyecto el grupo se encontró con


diversas dificultades en algunas ocasiones, esto debido a qué al tratar
de sacar los tiempos de muestreo para la toma de datos y para el ancho
o periodo de cada escalón, esto puesto a qué al hacer la visualización
de la señal de salida, se tenían señales fuera de lo esperado en gran
mayoría con tiempos de estabilización demasiado pequeños en el rango
de 1 ms o cuando más 10 ms, esto debido a qué Matlab presentaba
fallas al ejecutar dichos diagramas, no entendimos la razón y adicional
a eso los tiempos de muestreo no se sincronizaban. Otro error fue en la
obtención del regresor Phi y del vector YReal, al realizar el
entrenamiento de la red neuronaL, Matlab mostraba error dado qué los
vectores no eran de las dimensiones requeridas para ser operados entre
sí y las causas fueron de sintaxis en el código, cada uno de los vectores
debía ir transpuesto para así poder operar sin problema, fue lo qué se
omitió y no permitía continuar con el desarrollo del proyecto según lo
planeado.

Al hacer ya el entrenamiento de la red neuronal el gradiente fue muy


−8
bueno aproximadamente de 9. 03𝑥10 y un performance de
−10
2. 77𝑥10 entonces se puede decir que el entrenamiento de la red fue
correcto y tendrá una buena asimilación del sistema original. Cuando
se realizó la predicción serie-paralelo se obtuvo una respuesta
demasiado buena por parte de la red neuronal, esta seguía de manera
uniforme la respuesta del sistema original y con una mínima diferencia
cuando se realizaba en simulación pura o paralela, así pues se concluye
que hubo un correcto procedimiento.

En cuanto a Arduino, la respuesta en el monitor serial del software fue


algo confuso puesto qué no se comportaba de una manera similar qué
en Simulink, se pensaba qué había error en la forma en cómo estamos ANEXO 1: CÓDIGO MATLAB
graficando o los parámetros no erán los correctos, pero al llevar estos clc
datos a Simulink, la diferencia entre la salida del bloque de la neurona clear all

6de8
********************************************************* const float X1Min = 0.0235;
%%tiempos de estabilización minimo 0.1 y maximo 0.8 const float X1Max = 2.5467;
%%u entre 0.8 y 0.95 const float X2Min = 0;
w0=1.5811e3; const float X2Max = 2.5467;
w1=1.6667e3; const float X3Min = 0.8071;
b=106.06; const float X3Max = 0.9402;
********************************************************* const float X4Min = 0.8071;
%% const float X4Max = 0.9402;
U=Entrada;
Y=Salida; // Valores para normalizar la salida de la red
%regresor de segundo orden [2,2,1] const float DMin =0.0543;
Phi=[Y(2:end-1),Y(1:end-2),U(2:end-1),U(1:end-2)]'; const float DMax =2.5467;
YReal=[Y(3:end)]';
********************************************************* // Los pesos de la red fueron obtenidos en Matlab y se copiaron a este
%% entrenamiento por regresion bayesiana programa
Red=newff(Phi,YReal,[10],{'tansig','purelin'},'trainbr'); // Pesos capa oculta
Red.dividefcn=''; %usa todos los datos proporcionados para entrenar const float PesosOculta[NeuronasOculta][NeuronasEntrada+1]= {
Red.trainparam.epochs=300; { 0.0990, 0.0951, -0.0191, -0.0493, -0.0105},
Red=train(Red,Phi,YReal); %ENTRENO DE LA RED { 0.1751, 0.1386, -0.6637, 0.4336, 0.9934},
gensim(Red,0.002) { -0.1761, -0.0738, 0.0934, 0.1192, -0.0643},
********************************************************* { 0.1328, 0.0421, -0.3419, 0.1550, 0.5755},
%% { -0.1810, -0.0513, 0.0470, 0.0541, -0.0233},
WCO=Red.iw{1}; { 0.1446, 0.0894, -0.0149, -0.0509, -0.0136},
WCS=Red.lw{2,1}; { -0.0851, -0.1050, 0.0079, 0.0571, 0.0146},
BCO=Red.b{1}; { 0.1758, -0.1579, -0.7245, 0.9710, -0.7593},
BCS=Red.b{2}; { 0.3208, -0.1204, 0.9271, -0.7557, 0.2641},
COculta = [WCO BCO] { 0.3025, 0.0576, -0.9696, 0.9786, -0.9710},
CSalida = [WCS BCS] };
Xmin = Red.inputs{1}.processSettings{1}.xmin
Xmax = Red.inputs{1}.processSettings{1}.xmax // Pesos capa de salida
X2min = Red.inputs{1}.processSettings{1}.xmin const float PesosSalida[NeuronasSalida][NeuronasOculta+1] = {
X2max = Red.inputs{1}.processSettings{1}.xmax { 0.1915, 0.8929, -0.3947, 0.6699, -0.3123,
Dmin = Red.outputs{2}.processSettings{1}.xmin 0.2752, -0.1968, 1.0459, 1.3692, 1.1625, 0.0983}
Dmax = Red.outputs{2}.processSettings{1}.xmax };

int i, j, p, q, r;
float Neta;
float CapaOculta[NeuronasOculta];
float CapaSalida[NeuronasSalida];
ANEXO 2: CÓDIGO ARDUINO float CapaEntrada[NeuronasEntrada];
void setup(){
********************************************************* //start serial connection
#include <math.h> Serial.begin(9600);
********************************************************* randomSeed(analogRead(0));
* Configuración de la Red }
********************************************************* void loop(){
const int NeuronasOculta = 10; float Entrada;
const int NeuronasEntrada = 4; float Salida;
const int NeuronasSalida = 1; float Tiempo;
float Samples=0; Samples=Samples+1;
float randNumber; if (Samples==1)
float Y_K_1=0; {
float U_K_1=0; randNumber = random(80,95);
float Y_K_2=0; Samples=Samples+1;
float U_K_2=0; }
if (Samples>60)
// Estos valores son necesarios para la normalización {
//de los datos cuando entran y salen de la red Samples=0;
// Rango de normalización }
const float YMin = -1; Entrada=(randNumber/100);
const float YMax = 1; // Normalización de las entradas que se usará en la red neuronal
CapaEntrada[0]=YMin+
// Valores para normalizar la entrada de la red ((Y_K_1-X1Min)*((YMax-YMin)/(X1Max-X1Min)));

7de8
CapaEntrada[1]=YMin+
((Y_K_2-X2Min)*((YMax-YMin)/(X2Max-X2Min)));
CapaEntrada[2]=YMin+
((U_K_1-X3Min)*((YMax-YMin)/(X3Max-X3Min)));
CapaEntrada[3]=YMin+
((U_K_2-X4Min)*((YMax-YMin)/(X4Max-X4Min)));

*******************************************************
* Calculo de la salida de la capa oculta
*******************************************************
for( i = 0 ; i < NeuronasOculta ; i++ ) {
Neta = PesosOculta[i][NeuronasEntrada] ;
for( j = 0 ; j < NeuronasEntrada ; j++ ) {
Neta += PesosOculta[i][j]*CapaEntrada[j];
}
CapaOculta[i] = (2.0/(1.0 + exp(-2*Neta)))-1.0;
}
********************************************************
* Calculo de la salida de la red
*********************************************************
for( i = 0 ; i < NeuronasSalida ; i++ ) {
Neta = PesosSalida[i][NeuronasOculta] ;
for( j = 0 ; j < NeuronasOculta ; j++ ) {
Neta += PesosSalida[i][j]*CapaOculta[j];
}
CapaSalida[i] = Neta;
}
// La salida da la red esta nromalizada, para que quede en el rango
original //hay que desnormalizar
// Desnormalización de la salida de la red neuronal
Salida=DMin+
((CapaSalida[0]-YMin)*((DMax-DMin)/(YMax-YMin)));
Y_K_2=Y_K_1;
Y_K_1=Salida;
U_K_2=U_K_1;
U_K_1=Entrada;
Serial.println(Entrada);
Serial.println(Salida);
delay(50); }

8de8

También podría gustarte