Diseño de una arquitectura para un sistema neurodifuso ANFIS sobre un FPGA aplicado a la generación de funciones - Block Saldaña, Henry José (2010)
En la presente tesis, se realizó el diseño de una arquitectura para un sistema neurodifuso ANFIS. Se tomó en consideración un sistema de orden cero de dos entradas y una salida, que cuenta con funciones de pertenencia triangulares en los antecedentes de las reglas difusas. Además, se tuvo en cuenta que el entrenamiento del sistema es realizado fuera de línea (off-line), en MATLAB. La arquitectura diseñada se dividió en cuatro bloques: Fuzzificador, Permutador, Inferencia y Defuzzificador. Cada uno de estos bloques fue tratado como un subsistema y descrito por separado para facilitar su diseño. Posteriormente, se procedió a juntar los cuatro bloques, dando como resultado la arquitectura propuesta para el sistema neurodifuso ANFIS. Esta arquitectura fue descrita de manera modular y genérica mediante el lenguaje de descripción de hardware VHDL y fue implementada en los FPGA Spartan-3 XC3S200 de la empresa Xilinx y Cyclone II EP2C35 de la empresa Altera, utilizando las herramientas que se encuentran dentro de los entornos de desarrollo ISE 11 y Quartus II 9.1, respectivamente. El sistema diseñado fue aplicado a la generación de funciones. Primero, se eligió una función no lineal y se llevó a cabo el entrenamiento del sistema en MATLAB para obtener los parámetros de los antecedentes y consecuentes de las reglas difusas. Después, estos parámetros fueron convertidos a una representación binaria en punto-fijo complemento a dos y almacenados en las memorias ROM del código en VHDL. Finalmente, se realizaron simulaciones sobre los dos FPGA, mencionados anteriormente, para verificar la operación del sistema y poder evaluar su desempeño. Entre los resultados obtenidos, destaca que el tiempo requerido por el sistema para calcular un valor de la función es menor a 10 s (trabajando a una frecuencia de reloj de 50 MHz). Este valor es mucho menor al tiempo requerido por la aplicación en MATLAB, el cual fue de alrededor de 100 ms.