Documente Academic
Documente Profesional
Documente Cultură
FACULTAD DE INGENIERÍAS
CARTAGENA D. T. Y C.
2009
DISEÑO DE UN CONTROLADOR DIFUSO EMBEBIDO A PARTIR DE
MODELO INTERPRETABLE DE DATOS DE ENTRADA Y SALIDA
Asesores:
Luís Fernando Murillo
Facultad de Ingeniería Electrónica y Biomédica
Universidad Antonio Nariño Cartagena
FACULTAD DE INGENIERÍAS
CARTAGENA D. T. Y C.
2009
Notas de Aceptación
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
Presidente del Jurado
_________________________________
Firma del Jurado
_________________________________
Firma del jurado
CARTAGENA, D. T Y C, 2009.
DEDICATORIA
A mis padres
Por dejar de vestir bien para darme abrigo todos los días.
Anónimo
AGRADECIMIENTOS
A dios.
A mi abuelita
Pág.
Introducción
Objetivos
Objetivo general
Objetivo especifico
Justificación
Marco teórico
Diseño de ingeniería
Conclusiones
Recomendaciones
Bibliografía
Anexos
Lista de figuras
pag
Fig 1
Fig 2
Fig 3
Fig 4
Lista de tablas
pag
Tabla 1
Tabla 2
Tabla 3
Lista de anexos
pag
Anexo 1
Anexo 2
Anexo 3
Anexo 4
RESUMEN
This design is a practical tool for learning basic operation of the embedded fuzzy
control systems.
Was designed and built a fuzzy controller from a controller algorithm for
interpretable fuzzy model from data input and output. And was carried out on the
implementation of this MCF51QE128 Freescale microcontroller in order to
achieve a degree of automation during the implementation of a process and
evaluate their response to a classical PID controller. The system has the
components necessary for operation, power supply, control system embedded in
the microcontroller and a control system input and display of response developed
in LabVIEW virtual instrumentation software.
The design and development of embedded fuzzy controller is centered on the use
of an interpretable fuzzy model input and output data which will be developed as
an algorithm in high-level language, to be implemented in a programmable device
with 32-bit kernel, evaluate their performance and compare their response to a
classic controller the novelty of this project is in the controller algorithm
implementation from fuzzy model interpretable data input and output, and using
32-bit microcontrollers and their applicability to control variables.
INTRODUCCION
Los sistemas de control que manejan los procesos industriales están sufriendo
cambios significativos en el manejo de variables, modo de intervención del
usuario y velocidad de respuesta…
PLANTEAMIENTO DEL PROBLEMA
DESCRIPCION DEL PROBLEMA.
La lógica difusa día a día adquiere gran importancia en nuestras vidas a nivel
doméstico, teniendo un gran impacto en el desarrollo socio cultural y
tecnológico. Una de las áreas de la lógica difusa con mayor proyección hacia el
futuro es el control difuso orientado a la industria, el cual por su sencillez
conceptual, su facilidad para adaptarse a casos particulares con pocas
variaciones de parámetros, su habilidad para combinar en forma unificada
expresiones lingüísticas con datos numéricos, y el no requerir de algoritmos muy
sofisticados para su implementación lo han convertido paulatinamente en una
alternativa frente al control clásico que ha permanecido vigente estos últimos
años como soporte de la mayoría de sistemas tanto industriales como
domésticos y que poco a poco cede terreno ante los nuevos desarrollos
orientados en materia del control avanzado de variables.
OBJETIVOS.
OBJETIVO GENERAL.
OBJETIVOS ESPECIFICOS.
• Realizar la selección del proceso a simular por medio del controlador, con
el propósito de establecer los parámetros necesarios para su
funcionamiento y evaluación de desempeño.
6. JUSTIFICACION.
Así pues, como resultado final, este trabajo de investigación pretende proponer
una estructura general para la elaboración de nuevos mecanismos o procesos,
que pueden ser utilizados para implementación a una planta dándole mayor
eficacia en su proceso de trabajo, basado en la lógica difusa.
Para entender con mayor claridad este proyecto se trabajará con los conceptos
más relevantes relacionados, algunos de estos son:
Crisp Sets o conjuntos clásicos: estos son valores que el ser humano
establece para clasificar objetos y conceptos. Estos se establecen en función de
la pertenencia o no a un grupo especifico de un elemento. (Ej.: un conjunto de
prendas de vestir: suéter, camisa, pantalón.
Fuzzy Sets o conjuntos difusos: son valores que desde el punto de vista de
que se aplican palabras a la definición de cualquier propiedad por ejemplo:
mujeres altas, edificios viejos, hombres bajos, elevada inteligencia, baja
velocidad, viscosidad moderada… Desde este punto de vista estos valores no
podrían ser definidos solo con 2 valores, 0 y 1, se ha de establecer un peso
para la característica estableciendo valores intermedios (ejemplo entre 0 y 1
tomando todos los valores intermedios, o bien estableciendo una escala de 0
a 100).
Grado de pertenencia: este valor establece el punto de transición entre 0 y 1
entre las condiciones del conjunto difuso, por ejemplo si se establece que un
edificio en el aspecto de lo nuevo que es tiene un valor de 7, este será el
grado de pertenencia entre los nuevos edificios. Un ejemplo de uso del grado
de pertenencia podría ser el siguiente, en el control de la velocidad de un
vehículo, se contemplaría la pertenencia en el aspecto de velocidad excesiva
y no existe necesidad de cambio en la velocidad. Con estos dos aspectos se
podría calcular cual es la acción que se ha de llevar a cabo según los valores
de entrada de estos.
Variable difusa: es cualquier valor que está basado en la percepción humana
más que en valores precisos de medición (Ej. un color, que está compuesto
en realidad por varias tintas, si la presión de la caldera es excesiva, si la
temperatura del agua es la adecuada, si la cantidad de sal que lleva la tortilla
es excesiva, si la velocidad de un tren es elevada…) todas estas dependen de
la percepción.
Universo de discurso: Este es el conjunto de elementos que vamos a tener
en consideración, por ejemplo si se considera que las personas de una
comunidad, este universo estará formado por las personas bajas, las
personas altas, los hombres con gafas…
SISTEMAS DIFUSOS
Son los mecanismos que se encargan de manejar los parámetros de entrada,
realizar los debidos cálculos y generar la acción de control correspondiente La
figura muestra como está compuesto de un sistema difuso tal como el que se
muestra en la figura.
En la lógica difusa los sistemas mas conocidos son: los sistemas tipo mamdani
que cuentan con una estructura como la mostrada mas arriba (véase fig.4).
Y los sistemas Takagi-Sugeno (ver figura 6) que cuentan con una estructura
semejante al sistema mamdani pero con la diferencia de que este no requiere
defuzzificacion, debido a que la salida que entrega el mecanismo de inferencia en
estos sistemas arroja un consecuente en valor numérico.
ERROR DE INFERENCIA.
En lógica borrosa es común tratar con reglas del tipo “Si u es A, entonces y es B”,
donde u e y representan dos variables numéricas, A c U y B c Y, son dos
conjuntos borrosos de entrada y salida respectivamente, definidos en los
universos U e Y. La regla mencionada es equivalente a la inecuación
(1)
(2)
(3)
Si el sistema tiene p entradas se debe representar por reglas del tipo “Si u1 es A1
, u2 es A2 , …, up es Ap, entonces y es B”, la regla j deberá cumplir con la
condición.
(4)
Donde se representa un operador de combinación de la lógica borrosa de la
clase promedio ponderado, (i)
kx ,con k=1,…,p; i=1,…,N, es el vector entrada p-dimensional, con N datos por
variable de entrada, y yi es el vector unidimensional de salida.
IDENTIFICACIÓN BORROSA.
Funciones de Pertenencia
La partición de los universos de las variables de entrada en el proceso de
aprendizaje se hace con conjuntos triangulares normalizados con solapamiento
específico de 0.5. Las funciones de pertenencia triangulares permiten la
reconstrucción del valor lingüístico en el mismo valor numérico, luego de aplicar
un método de concreción; además, el solapamiento en 0.5 asegura que los
soportes de los conjuntos borrosos sean diferentes.
Los conjuntos borrosos generados para la variable de salida son tipo singleton.
Distribución de las Funciones de Pertenencia
Los conjuntos borrosos triangulares de las variables de entrada se distribuyen
uniformemente en cada universo respectivo de manera tal que cada uno de los
elementos de los universos de discurso de cada variable debe pertenecer, al
menos, a un conjunto borroso.
Operadores
Para la combinación de los antecedentes se emplea un operador de combinación
de la clase OWA, cuya denominación obedece a sus siglas en inglés (Ordered
Weighted Averaging operators)
Método de Inferencia
(5)
Donde
(6)
(7)
(8)
Donde
(9)
(10)
2 2
E2 = ( Y −Wθ ) = ( Y2− 2YWθ + ( Wθ ) ) ( 11)
De donde se obtiene
θ =Y Τ
W/W Τ
W = (W Τ
W)-1 Y T W
Esta solución es válida si (WTW) es no singular, lo que quiere decir que todas las
reglas deben recibir suficiente excitación durante el entrenamiento. En la práctica
esto no es siempre posible, por lo que es recomendable recurrir a la aplicación de
mínimos cuadrados recursivos, buscando garantizar que la adaptación solo
afecte las reglas excitadas
BLOQUE DE CONTROL
Fig.
PROCESO DE ESCALIZADO: esta parte de la función se encarga de tomar el
valor de entrada previamente convertido y normalizarlo a unidades de ingeniería.
Para ello se debe tener en cuenta lo siguiente.
y 2 − y1
( x1, x 2) = (0,360 ) (1) y ( y1, y 2) = (0,255 ) (2), las ecuaciones y − y1 =
x 2 − x1
(3) y y = mx + b (4)
360 − 0
y − y1 = = 1.41 (5)
255 − 0
m =1.41 (6)
y = (1.41 ) x + b (7)
A = (1,41 ) n + b (8)
Para hallar el valor de escalado a 12 bits reemplazamos el valor obtenido de
resolución 2n, (en este caso 4096) junto con el valor del Angulo máximo (360)
Se reemplazan en la ecuación 3 y el resultado se reemplaza en 4, obteniendo el
siguiente resultado. Donde y representa el valor en grados (A), x representa el
valor de la entrada en bits(n), reemplazando nos queda.
A = (0,0878 ) n + b
FUNCION FUZZIFICACION.
Fig.
Esta es una de las operaciones principales que realiza el programa, cuya función
es tomar el valor de entrada, evaluarlo sobre los conjuntos definidos y entregar a
su salida la pertenencia asociada a cada uno de estos esta bloque parte de los
siguientes parámetros:
Fig.
ESTRUCTURA ALGORITMICA:
Como se puede observar los conjuntos triangulares tienen tres puntos y cada uno
de ellos es representado por un valor (A, B y C) ubicado en las columnas del
array de la figura, el valor 0 en la fila representa el conjunto sobre el cual se esta
evaluando el dato.
x−y
p= Donde p = pendiente x = valor de entrada m = punto de inflexión
m−y
dato − P 2
U= Donde u= pendiente obtenida, dato= registro de valor
P 2 − P1
almacenado, p1= punto de inflexión mínimo y p2= punto de inflexión máximo.
Int P1
Int P2
Int U
Return (U)
}
Inicialmente se declaran los valores a utilizar por esta función, P1 que es la
representación del numerador en el calculo de la pendiente, P2 como
representación del denominador y u como el resultado de la pendiente. Luego
de esto se procede con la primera expresión que es la diferencia entre el valor
de la entrada y el punto de inflexión mínimo, y es representada como P1,
después de esto se coloca la segunda expresión, que es la diferencia entre el
punto de inflexión máximo y el punto de inflexión mínimo, y es representada
como P2. Luego de esto se ubica la última expresión, la cual es una división
entre las expresiones P1 y P2 respectivamente, de donde se obtiene el valor de
la pendiente positiva que es representada por U, finalmente la función retorna a
la fuzzificacion este valor y lo almacena en un array para representar los grados
de pertenencia del conjunto evaluado.
m −x
p= Donde p = pendiente x = valor de entrada m = punto de inflexión
m−y
P 2 − dato
U= Donde u= pendiente obtenida, dato= registro de valor
P 2 − P1
almacenado, p1= punto de inflexión superior y p2= punto de inflexión inferior.
Int P1
Int P2
Int U
P1= p2 - dato;
P2= p2 – p1;
U= P1/P2;
Return (U)
}
Inicialmente se declaran los valores a utilizar por esta función, P1 que es la
representación del numerador en el calculo de la pendiente, P2 como
representación del denominador y U como el resultado de la pendiente. Luego
de esto se procede con la primera expresión que es la diferencia entre el punto
de inflexión mínimo y el valor de la entrada, y es representada como P1, después
de esto se coloca la segunda expresión, que es la diferencia entre el punto de
inflexión mínimo y el punto de inflexión máximo, y es representada como P2.
Luego de esto se ubica la última expresión, la cual es una división entre las
expresiones P1 y P2 respectivamente, de donde se obtiene el valor de la
pendiente positiva que es representada por U, finalmente la función retorna a la
fuzzificacion este valor y lo almacena en un array para representar los grados de
pertenencia del conjunto evaluado.
Tabla tal
Una vez estos arrays son definidos se llama una nueva función la cual se explica
a continuación.
Fig. Tal
Antes de iniciar esta explicación es necesario saber que existe una estructura
adicional donde serán almacenados los valores obtenidos del cálculo del mínimo
entre los arrays de pertenencia, esta es la matriz de reglas activas (Reg_Act),
representada como un array bidimensional.
Int i;
Int min;
For (i = 0, i <= 2, i + 1) {
If (GPEe[i] <=0)
{
Min=GPEe[i];
Else
Min=GPEd [0];
If (GPEe[i] <=0)
{
Min=GPEe[i];
Else
Min=GPEd [0];
If (GPEe[i] <=0)
{
Min=GPEe[i];
Else
Min=GPEd [0];
I ++;
Existen dos opciones de conectores lógicos (AND y OR). Si se utiliza AND entre
antecedentes, el operador difuso aplicado es el mínimo y si es OR se aplica el
máximo. Para este diseño los antecedentes utilizan AND como conector lógico por
lo tanto se aplica el cálculo del mínimo a los antecedentes. Esta sección del
programa define el valor menor entre los dos valores operados de los grados de
pertenencia y lo entrega a la matriz de reglas activas
If (GPEe[i] <=0)
Min=GPEe[i];
Else
Min=GPEd [0];
Esta parte del código pregunta si el valor de la posición del array de pertenencia
que se esta iterando (GPEe [i]) es menor o igual a cero, si la afirmación es cierta
su valor es entregado como minimo a la matriz de reglas activas, de lo contrario el
segundo array de pertenencia que se evalúa (GPEd [0]) pasa a ser el minimo
entregado. Este procedimiento se realiza hasta recorrer las pertenencias y cargar
las reglas determinadas como activas en la matriz correspondiente.
Fig. Tal.
Donde las estructuras del lado derecho representan las pertenencias y la del lado
izquierdo representa la matriz de reglas activas, las pertenencias diferentes de
cero se operan para obtener el mínimo y entregarlo a la siguiente etapa.
BASE DE REGLAS
Fig. Tal
Int i
Int j
Goto incremento
“implicación Vneg”
Else
“implicación Vcer”
Else
“implicación Vpos”
Else
Incremento
I ++
J ++
}
}
En esta sección del código pregunta si la regla activa evaluada es igual a cero, si
la afirmación es cierta, significa que en la posición actual la regla no esta activa y
salta hacia la etiqueta de incremento para continuar evaluando las reglas activas.
Si ocurre lo contrario, procede a preguntar por el valor almacenado en la base de
reglas, si el valor es cero, se procede a realizar la implicación con el subconjunto
de salida Vneg si el valor es uno, realiza la implicación con el subconjunto de
salida Vcer, y si el valor es dos, lo hace con el subconjunto de salida Vpos
MECANISMO DE IMPLICACIÓN
La grafica muestra la forma en la cual se obtienen los valores de salida que utiliza
El operador de implicación, la manera de evaluación se realiza discretizando los
voltajes establecidos previo diseño, representados por los valores en el eje X de la
grafica, y obteniendo su respectiva pertenencia en el eje Y tomando como
referencia la función establecida para cada subconjunto (en este caso triangular).
Y almacenando estos resultados en variables tipo array unidimensional que
representan cada subconjunto (Vneg, Vcer y Vpos)
Discretiza (Voltaje)
Int i;
Int p0, p1, p2, p3, p4, p5, p6;
P0=Voltaje [0];
P1=Voltaje [2];
P2=Voltaje [0];
P3=Voltaje [2];
P4=Voltaje [5];
P5=Voltaje [2];
P6=Voltaje [5];
FUNCION IMPLICACION
Esta función esta ligada directamente a la detección de reglas activas, dado que
los valores diferentes de cero que se encuentran en la matriz de reglas activas
son los que se operan con los conjuntos de salida, además la base de reglas
entrega la información sobre que subconjunto se va a operar. Estas dos
informaciones y la función realizan el proceso completo de implicación.
FUNCION AGREGACION
Tabla tal
Int p
Int n
Int max
Max = 0
If (implica[p] [n]>max)
N++
P++
}
}
Fig. tal
COG =
∫ µ(i ) ∗ x(i)
∫ µ(i)
Donde ∫µ(i ) ∗x(i ) representa el momento de la función y ∫x(i ) representa el
área de la función
COG =
∑voltaje ∗ salida
∑ salida
Int prodn
Int num
Int den
Int z
Int COG
Prodn=0
Num=0
Den=0
Z++
Bit RSTPE (Habilitación de pin de reset): Este bit individual se configura para
habilitar el reset por medio del pin PTA5, si se coloca en uno el reset se habilita, si
esta en cero el pin funciona en configuración de entrada/salida.
Como nota adicional, estos bits mencionados a excepción del bit WAITE solo
pueden ser escritos una vez, es decir después de hacer un reset, solo la primera
escritura hecha a estos bits será reconocida y almacenada.
Sus estructuras internas son las que se muestran a continuación en la Fig. tal
Fig. tal
la captura de una señal del medio y el envío de datos del controlador hacia la
planta se hace utilizando las entradas y salidas del microcontrolador llamadas
puertos, Internamente un puerto típico (tomando de ejemplo el puerto A para
efectos explicativos) de este microcontrolador funciona configurando los siguientes
registros:
Fig. Tal
Fig. Tal
Fig.
Donde los bits 0-4 (ADCH) están destinados para la selección del canal de
conversión, como se menciona anteriormente el MCF51QE128 cuenta con 28
canales organizados desde el 00000 hasta el 11011 para su respectivo uso como
entradas analógicas, el bit 5 (ADCO) habilita conversiones continuas escribiendo
en este. Si se encuentra en cero solo se realizara una conversión al escribir en el
registro ADCSC1, si se encuentra en 1 se realizara continuamente la conversión al
escribir sobre este registro, el bit 6 (AIEN) activa la interrupción por conversión
completa, esta se activa cuando el bit COCO se coloca en 1 mientras este bit se
encuentre en 1, cuando se encuentra en cero la interrupción esta deshabilitada. el
bit 7 (COCO) es la bandera que indica una conversión completa, este bit es de
solo lectura y se aclara solo cuando este registro es escrito o cuando el registro de
datos del conversor es leído.
Fig.
El conversor utiliza solo 2 bits de este registro de los cuales solo uno es
configurable, este es el bit 6 (ADTRG) que indica el tipo de disparo que inicia una
conversión. Si esta en cero quiere decir que la conversión inicia por software, si
esta en uno la conversión se inicia por hardware, esto es escribiendo en los bits
del registro ADCSC1 y adicionalmente habilitando la entrada ADHWT,El otro bit es
el bit 7 (ADACT) que funciona como indicador para hacer saber si hay o no una
conversión en proceso.
Fig.
Los bits 0-1 (ADICLK) seleccionan la fuente de reloj de entrada para generar el
reloj interno ADCLK (nota al pie),Los bits 2-3 (MODE) seleccionan el modo de
operación del conversor A/D sea 8,10 o 12 bits (nota al pie), El bit 4 (ADLSMP)
configura el periodo de muestreo largo, esto sirve para ajustar el periodo de
muestreo para permitir que las entradas de alta impedancia sean muestreadas de
forma precisa o para maximizar la velocidad de conversión para entradas de baja
impedancia. Si esta en cero habilita periodos de muestreo corto, si esta en uno
habilita periodos de muestreo largo., Los bits 5 y 6 (ADIV) seleccionan el divisor
de reloj es decir la relación de división usada por el ADC para generar el reloj
interno ADCK, El bit 7 (ADLPC) configura la velocidad y consumo del conversor,
(nota al pie).
Fig.
Donde el registro ADCRL almacena los 8 bits de una conversión sencilla o los
primeros 8 bits de una de 10 o 12 bits y el registro ADCRH almacena los 2 últimos
bits de una conversión de 10 bits o los 4 últimos de una de 12 bits
respectivamente.
Registros APCTL: (registros de control de pin) la función de esto registros es
deshabilitar el control de puertos E/S de los pines del microcontrolador usados
como entradas análogas. En total son 3 registros (APCTL 1, 2 y 3) Internamente
estos registros están descritos tal y como se puede apreciar en la figura:
Si ADPC0 esta en cero (valor por defecto) el control de pin de E/S esta activo, esto
quiere decir que el pin relacionado a este bit se comporta como entrada y salida
de datos dependiendo de cómo se configure.
Si ADPC0 esta en uno, el control de pin de E/S esta inactivo, a partir de este
momento el pin relacionado a este bit se comporta como entrada análoga para el
convertidor.
ESTRUCTURA DE PROGRAMACION
Todo el proceso de control difuso por parte algorítmica sigue un orden lógico que
parte de su descripción general, de igual manera al transformar los algoritmos a
código para el microcontrolador se debe seguir un orden que garantice la
ejecución del programa en el orden correcto, para ello se define el siguiente orden
de ejecución:
*******************************************
Declaraciones
*******************************************
Variables
Tipo variable 1
Tipo variable 2
Tipo variable n
*******************************************
Programa principal
*******************************************
Main {
Ciclo
Estructura interna
Llamado a funciones
}
********************************************
Funciones
********************************************
Nombre función 1
Nombre función 2
Nombre función n
Esta es la organización planteada y aplicada a la implementación de este código,
podrá ser visto con más claridad en la siguiente parte donde son mostrados los
algoritmos mencionados en el capitulo anterior ya implementados para ingresarlos
al microcontrolador
/*********************************************************************************************/
/*Controlador difuso embebido V0.0
/*********************************************************************************************/
/* cabecera */
# include <hidef.h> // macro incluida para interrupciones
# include "derivative.h" // macro incluida para declaracion de perifericos
/*********************************************************************************************/
/* variables */
/*variables globales*/
extern int temp;
extern int dato; // variable que define valor de entrada
extern int Tg; // variable que define el tipo de conjunto ( triangular)
int p1;
int p2;
extern int U;
extern int C;
extern int numC; // variable que define el numero de conjuntos
/****************************************************************************/
/*ARRAYS */
int Cerror_Tg [3][3]={{0,5,0},{0,5,9},{0,5,9}};// array de conjuntos para Error
( triangular)
int CDerror_Tg[3][3]={{0,5,0},{0,5,9},{0,5,9}};// array de conjuntos para derivada de
error ( triangular)
int Voltaje [6] = {0,1,2,3,4,6};
int GPEe [3][4]={0}; // array para almacenar grados de pertenencia de error
int GPEd [3][4]={0}; // array para almacenar grados de pertenencia de derivada
error
int Vneg [6]={0};// array para discretizacion
int Vcer [6]={0};// array para discretizacion
int Vpos [6]={0};// array para discretizacion
int salida [6]={0}; //array para almacenar agregación
int implica[6]={0};//array para almacenar implicación
/********************************************************************************************/
/*Definiciones*/
/***************************************************************************/
/*Funciones*/
void MCU_init(void);
void ADC_init(void);
void GPIO_init(void);
void Fuzzificacion(void);
void Delay(void);
void delay(void);
void P_Pos(void);
void P_Neg(void);
void lectconvescal(void);
void mínimo(void);
void detección Reg_Act(void);
void discretiza (void);
void implicación (void);
void agregación(void);
void centro _ gravedad(void);
MCU_init ();
GPIO_init ();
ADC_init ();
Disable_COP (); //deshabilita el COP
EnableInterrupts; //habilita interrupciones
ADCSC1_AIEN = 1;
APCTL1_ADPC0 = 1;
For (;;){
Lectconvescal ();
Fuzzificacion ();
Mínimo ();
Detección Reg_Act ();
Implicación ();
Discretiza ();
Agregación ();
Centro _ gravedad ();
DISEÑO ARQUITECTONICO
Fig tal
BIBLIOGRAFIA
Jan Jantzen, FOUNDATIONS OF FUZZY CONTROL, John Wiley & Sons 2007
220p.
[3] Juan Contreras Montes, Roger Misa Llorca, Luís F. Murillo Fernández,
OBTENCIÓN DE MODELOS BORROSOS INTERPRETABLES DE PROCESOS
DINÁMICOS, Revista iberoamericana de Automática e Informática Industrial vol5,
num. 3, julio 2008, pp. 70-77