CAPITULO 6.
IMPLEMENTACION DEL FILTRO DE KALMAN EN EL FPGA
Para la implementacin del filtro, es necesario conocer el proceso de diseo con FPGAs, utilizando la herramienta system generator de xilinx, la cual nos dar un mejor panorama del diseo final.
6.1 SYSTEM GENERATOR.
Los FPGAs son ampliamente utilizados para PDS de alto rendimiento. La Plataforma de FPGAs Virtex II de Xilinx, se ha convertido rpidamente en la principal plataforma de alto rendimiento para aplicaciones de PDS. El System Generator de Xilinx llena el vaco entre la versin abstracta de un diseo de PDS y su aplicacin efectiva en un FPGA de Xilinx. El System Generator de PDS desarrollado en colaboracin con MathWorks, permite a los diseadores implementar sistemas de alto rendimiento de PDS en FPGAs de Xilinx utilizando el Simulink de MATLAB. Las
capacidades incluyen la Co-Simulacin, Hardware in the loop (HIL), y la capacidad para estimar los recursos del FPGA dentro de Simulink. En la figura 46, se muestra la pantalla principal de Matlab.
Figura 46. Pantalla principal de Matlab. Al utilizar Simulink de Matlab, es necesario estar familiarizado con los Toolbox de esta herramienta, puesto que System generator se va colocar como una de ellas. Esta herramienta simplificadora permite a los diseadores utilizar el software de desarrollo ISE, que sirve para la sntesis de VHDL, la cual es llamada desde Matlab por System Generator para la compilacin, ruteo y mapeo en el FPGA, la cual directamente en el FPGA desde Matlab. En la figura 47, se muestra el toolbox de simulink en donde aparece el blockset de xilinx. puede ser implementada
Figura 47. Blockset de Xilinx. El System Generator provee una simulacin que se proporciona a travs de hardware cosimulation. La herramienta crea automticamente una plataforma de simulacin de hardware para un diseo hecho con el blockset de Xilinx, la que se puede ejecutar en ms de 20 hardwares.
Esta herramienta tambin puede ser co-simulado con el resto del sistema de Simulink. Un ejemplo de desarrollo en simulink y system generator se muestra en la figura 48.
Figura 48. Desarrollo en simulink con system generator.
6.1.1 El diseo con system generator.
System Generator trabaja dentro de Simulink, que es una herramienta de matlab basado en diseo de sistemas. A menudo, los modelos los sistemas se realizan en simulink mediante los bloques de Simulink, los cuales usan punto flotante de precisin numrica, conforme al estndar IEEE 754, y sin ninguna caracterstica de hardware. Una vez que la funcionalidad y flujo de datos bsicos de las cuestiones se han definido, System Generator puede usarse para especificar los detalles de la implementacin de hardware para los dispositivos de Xilinx. Ya creado el sistema con system generator, se puede dar inicio al Core Generador Xilinx para generar los netlists altamente optimizados para la construccin de bloques de PDS.
Desde system generador, llama a ISE para ejecutar todas las operaciones necesarias para crear el bitstream para la programacin del FPGA. Se pueden crear Testbenchs opcionales a travs de Simulink para ser usados con ModelSim o el Simulador de ISE de Xilinx. El flujo de diseo se muestra en la figura 49, la cual es adaptada de [12].
Figura 49. Flujo de desarrollo con System generator. Un diagrama del sistema de desarrollo se muestra en la figura 50, la cual es adaptada de [12].
Figura 50. Diagrama del Sistema de desarrollo. Con estas herramientas, se pueden hacer las comprobaciones HARDWARE-SOFTWARE, para probar de una manera ms realista los filtros desarrollados en Matlab, que despus se implementan en hardware por medio de system generator.
6.2 Desarrollo del Hardware para el Filtro de Kalman.
En esta parte del trabajo de investigacin, primero se va a analizar el sistema con ecuaciones de espacio de estado, para poder implementarlas despus en hardware. Segundo se va a mostrar cmo se empez a implementar el filtro de kalman, comenzando con un diagrama de bloques hasta el uso de system generator. Para este trabajo usamos el FPGA Virtex 2 pro de xilinx, el cual tiene muchos recursos para PDS, tal como se describi anteriormente, el cual su layout del FPGA se muestra en la figura 51, que es adaptada de [12].
Figura 51. Layout real del FPGA virtex 2 pro. Este FPGA ya se mencion anteriormente, y sus caractersticas estn en la tabla 1, entonces procedamos a implementar el filtro de kalman. Ahora, tenemos que ver que ecuaciones se van a implementar, es por ello que tenemos que establecer las ecuaciones para este proceso.
6.2.1 El modelo del proceso.
Para poder implementar las ecuaciones del filtro de kalman es muy necesario conocer el proceso, por ello empezamos definiendo el trabajo, el cual trata de estimar la seal del sensor de temperatura, que es la salida de voltaje del circuito de acondicionamiento de seal que est en funcin de la temperatura. Con el anlisis en los anteriores captulos, hemos comprobado que es un ruido blanco gaussiano, la cual contamina a la seal con un voltaje aproximado de 0.01v. Esto se mostr en la figura 20, con ello vemos tambin la no correlacin del ruido con el tiempo. El sistema se puede escribir de esta manera, de la ecuacin 4.1 podemos simplificar a la siguiente:
xk = Axk 1 + wk . (6.1)
Y para el caso de la medicin se escribe de esta manera de la ecuacin 4.2:
zk = xk + vk . (6.2)
Nuestro objetivo es el de estimar el estado, y viendo que no hay entrada de control podemos colocar ( A = 1 ). Nuestra medicin de ruido es de manera directa, entonces H = 1
6.2.2 Las ecuaciones y los parmetros del filtro.
Nuestras ecuaciones de tiempo de actualizacin son
x k =x k 1 (6.3)
P k = Pk 1 + Q . (6.4)
Y nuestras ecuaciones de medida de actualizacin son:
Pk Kk = ( P k + R) . . (6.5)
x k = x k + K k ( zk x k ) . .. (6.6)
Pk = (1 K k ) P k
. (6.7)
Analizando el proceso, la varianza es muy pequea, (pero para afinar el filtro de kalman ciertamente se podra dejar el valor de valor ms pequeo con nos da mayor flexibilidad.
Q = 0 , pero podemos colocar un
Q = 0.00001
para obtener un mejor resultado, pues
Se sabe que el verdadero valor randomica tiene una distribucin estndar de probabilidad normal, por lo que podemos comenzar con un valor de inicio para x , hacindolo de esta manera:
x k 1 = 0 .
Del mismo modo tenemos que elegir un valor inicial para P. Si estuviramos absolutamente seguros de que nuestra estimacin inicial era correcta entonces
x = 0 . Sin embargo,
dada la incertidumbre en nuestra estimacin inicial, la eleccin podra causar que el filtro se demore en el procesamiento, aunque la alternativa no es crtica, podramos elegir un
P = 0 , y sabiendo que el valor P del filtro a la larga convergen.
6.2.3 Implementacin del filtro de kalman en el FPGA.
Como ya tenemos el proceso modelado con las respectivas ecuaciones, ahora con ello podemos realizar una arquitectura caracterstica que envuelva rapidez y rea para poder implementar el filtro discreto de kalman. Primero, las ecuaciones deben usar un tipo de formato, lo cual se escogi un formato de punto flotante de 64 bits, por tener muchas ventajas con respecto a los punto fijo, tambin es necesario tener un conocimiento previo de los clculos con punto flotante en hardware, como tambin tener un conocimiento previo de usar el punto flotante en Matlab. Entonces empezamos haciendo una arquitectura que nos describa las ecuaciones del filtro discreto de kalman, que trabajen en forma paralela como se muestra en la figura 52.
Figura 52. Diagrama de bloques del filtro discreto de kalman. En este caso tenemos que tener en cuenta los siguientes puntos:
Bloques de aritmtica en punto flotante, el cual nos ayuda a trabajar con nmeros de
64 bits, se deben primero ser implementados usando el core generator de xilinx, los cuales son exportados por Matlab, por medio de simulink con los bloques de black box de system generator.
Datos para el procesamiento, para este caso, es muy necesario tener en cuenta los
datos en Matlab, para poder exportarlos a simulink, y asi poder hacer el procesamiento con el filtro de kalman.
Sincronizacin de los circuitos, en este caso cuando tengamos el sistema funcionando,
tenemos que tener en cuenta cuanto tiempo consume cada bloque, con ello se coloca los delays necesarios para poder hacer que el bloque total funcione correctamente y se estn haciendo las operaciones en su respectivo orden. Tambin hay que enfatizar que los circuitos funcionan desde el primer ciclo de reloj, lo cual nos muestra que empiezan todos en paralelo. Por ejemplo se muestra la cantidad de pulsos de clock que se demoran en hacer las respectivas operaciones en la tabla 3, que es adaptado de [11].
Tabla 3. Retardos de procesamiento de datos, acondicionado del datasheet del core generator. Al poder entrar a simulink, tenemos que usar los bloques black box, el cual tenemos que modificar el archivo .m creado por matlab para poder importarlos desde simulink. Cada circuito que se crea, se debe tener en cuenta que cuando se corre en el simulink, todos estos empiezan a correr al mismo tiempo, pues son paralelos. Cuando se termina de importar, en la misma pagina de simulink, se deben estructurar las ecuaciones como la arquitectura ya mostrada en la figura 52. Cuando terminemos de armar
las ecuaciones del filtro de kalman dentro de simulink, tendremos un diagrama como en la siguiente figura 53.
Figura 53. Diagrama de hardware en simulink. Cuando esta correcto, sin ningn error y ya depurado por medio de system genrator , la herramienta crea una nueva librera para la co-simulacion, la cual se debe interfasear con el hadrware del FPGA, en este caso el XUPV2P30, esta librera se muestra en la figura 54.
Figura 54. Circuito generado para la co-simulacin. Tenemos que tener en cuenta que en simulink, estamos viendo el hardware como todo un sistema, como si estuviramos usando solo componentes como en VHDL, que se unen por medio de seales.
Usando el Block Parameters Dialog Box de system generator, como se muestra en la figura 55, podemos configurar los parmetros para la simulacin, tambin qu tipo de FPGA se va a usar y por ltimo el de generar la compilacin para crear el hardware que se desarrollo en simulink.
Figura 55. Parmetros del Block Parameters Dialog Box de system generator. Si hay errores en el hardware que se crea por medio de ISE de Xilinx, se pueden corregir tambin en simulink. Cuando el hardware esta creado, nos aparece una librera nueva para poder hacer la co-simulacin con la tarjeta XUP2VP30 de Xilinx, la que se muestra en la figura 56.
Figura 56. Tarjeta de desarrollo XUP2VP30. Para hacer la co-simulacin tenemos que cambiar de parmetros para poder llevar a cabo el trabajo, tal como se muestra en la figura 57.
Figura 57. Parmetros para la co-simulacin. Al poder generar el hardware requerido podemos ir a ISE para ver los archivos generados por la herramienta, como se muestra en la figura 58.
Figura 58. Pantalla principal de ISE de Xilinx. Tambin podemos visualizar el consumo de los recursos para nuestro filtro, puesto que en esta versin ya existe un generador de resumen de consumo de recursos de los FPGAs y CPLDs soportados por esta herramienta de xilinx, como se muestra en la figura 59.
Figura 59. Resumen de los recursos utilizados para el filtro. En la tabla 4 se muestra los recursos utilizados por el filtro discreto de kalman.
Utilizacin Lgica Nmero flops Nmero de LUTs 14,289 de 4 entradas. Distribucin Lgica Nmeros de Slices 13,684 ocupados Nmero de LUTs 22,319 de 4 entradas Numero de lgica 14,289 usada. Numero de route-thru Numero de Shift registers 6,961 1,069 27,392 81% 13,696 99% Usado Disponible Utilizado 27,392 52% de Usado Disponible 27,392 Utilizado 80%
flip- 22,152
Tabla 4. Recursos utilizados por el filtro de kalman. El equivalente de la cantidad de compuertas usadas es de: 1,116.401.
En ISE de Xilinx, podemos ver el diagrama RTL que se compil para el filtro discreto de kalman, la cual se muestra en la figura 60.
Figura 60. Filtro de Kalman empaquetado. Se puede expandir el RTL, para obtener el circuito de la siguiente figura 61.
Figura 61. RTL del filtro de Kalman. Usando las herramientas de ISE, entramos al FPGA editor, en donde podemos visualizar los recursos requerido por el filtro para su desarrollo por la herramienta, esta se muestra en la figura 62.
Figura 62. Layout total del filtro de Kalman. Expandiendo dentro del layout, podemos ver lo siguiente, como se muestra en la figura 63.
Figura 63. Layout Expandido del filtro de Kalman.
6.2.4 Prueba de linealidad del filtro.
En esta parte del trabajo se le hace una prueba al filtro discreto de kalman con una seal constante creada en matlab, en este caso se le coloca el valor de 0.226 voltios constante, para ver la respuesta del filtro. En la figura 64, se puede visualizar la seal constante, la seal estimada de co-simulacin y la resta entre la seal constante y la seal estimada por el filtro discreto de kalman.
Figura 64. Seal constante, seal estimada y la resta. En la figura 65, se puede visualizar la conexin de la tarjeta XUP2VP30 de xilinx con la PC, para realizar la co-simulacin, para ello se debe definir que el puerto de comunicacin es el USB.
Figura 65. Sistema de co-simulacin entre la XUP2VP30 y la PC. Al termino de la co-simulacin podemos observar la respuesta mediante matlab, la seal co-simulada y la seal constante en la misma grfica para su comparacin en el tiempo, tal como se muestra en la figura 66.
Figura 66. Entrada constante y seal co-simulada.
Al analizar la grfica anterior, vemos que la seal estimada sigue a la seal constante por lo cual se concluye que el filtro de kalman es lineal. En la siguiente figura, podemos visualizar una versin mas ampliada de la grafica anterior como se muestra en la figura 67.
Figura 67. Versin ampliada de las seales. En la figura 68, podemos visualizar como los parmetros del filtro de kalman evolucionan con respecto al tiempo.
Figura 68. Evolucin de los parmetros del filtro. Al inicio, inicializamos los filtros con valores fijos: K=0 y P=0, Lo cual evolucionan en el tiempo, llegando a un valor constante al momento de que la seal est estimada de una manera ptima. Si vemos ms en detalle en la figura, podemos apreciar como las seales estn en forma de escalera, esto se debe a que hay registros o delays que mantienen los datos hasta que se pueda obtener la respuesta de un bloque para poder hacer la operacin.
6.3 Estimacin de la respuesta del sensor de temperatura.
En esta parte del trabajo vamos a visualizar el funcionamiento implementado del filtro discreto de kalman, usando las medidas que se tienen en matlab, con ello vamos a ver el funcionamiento real tanto en software como en hardware del filtro de kalman.
Para esa temperatura medida por medio de la termocupla y comparada con la del patrn y a
travs del circuito de acondicionamiento de seal, podemos ver como esta contaminada la
seal de la termocupla con un ruido aleatorio, as mismo podemos visualizar la dispersin de las medidas, como se muestra en la figura 69.
Figura 69. Seal contaminada con ruido blanco gaussiano. As mismo, como ya hemos definido al ruido en los captulos anteriores, vamos a ver histograma de la seal con ruido contaminada, se nota que tiene una distribucin gaussiana, esto se muestra en la figura 70.
Figura 70. Histograma de la seal con ruido. Los parmetros calculados son los siguientes: Media = 0.2261. Varianza = 1.2130e-004. Desviacin estndar = 0.0110. Se han utilizado 11000 muestras de la variable con ruido para el procesamiento con el filtro de kalman, tambin se muestra la respuesta estimada en hardware que hizo el calculo del filtro de kalman, y se muestra la resta de la seal con ruido y la seal estimada, todo lo que se menciono se muestra en al figura 71.
Figura 71. Graficas de la Seal ruidosa, seal estimada y resta de la seal ruidosa y estimada. Tambin hacemos referencia a las seales estimadas por el filtro para este caso como se muestra en la figura 72.
Figura. 72. Evolucin de los parmetros del filtro de kalman para estimar la seal del sensor de temperatura. En la siguiente figura 73, podemos visualizar la respuesta de la seal estimada por el filtro de kalman y la seal de entrada ruidosa de temperatura.
Figura 73. Seal ruidosa y seal estimada.
Para hacer una comparacin entre la salida co-simulada o que resulta del filtraje, se toma la porcin de la muestra 8000 a la muestra 11000, tal como se muestra en la figura 74.
Figura 74. Muestras de la seal estimada. En la figura 75, se muestra el histograma de la seal estimada, y se nota un grafico mas estrecho que el histograma de la seal contaminada con ruido.
Figura 75. Histograma de la seal estimada. Tambin se procedi a calcular la media, varianza y desviacin estndar de la seal estimada y estos son los siguientes: Media = 0.2263. Varianza = 3.9019e-006 Desviacin estndar = 0.0020 En la figura 76, se muestra cuando el filtro no tiene un buen tunning con sus parmetros iniciales de ruido, como la covarianza de ruido de medicin, lo cual da a lugar una distorsin en su salida. Esto se debe que el filtro debe actualizar sus datos del ruido cada tramo de datos, para poder adaptarse mejor al sistema, con ello se garantiza una mejor performance del filtro discreto de kalman.
Figura 76. Salida no lineal debido al parmetro de covarianza del ruido de medicin. Debido a la respuesta mostrada, se pudo ver en la figura 73 que el ruido se reduce estadsticamente para la estimacin de la seal de temperatura.
En la tabla 5, se muestran los resultados mas resaltantes del filtro discreto de kalman.
Seal con ruido Media ( u ) Varianza ( 2 ) Desviacin estndar ( ) Seal estimada Reduccin % 0.08 96.78 81.81
0.2261. 1.2130e-004 0.0110.
0.2263. 3.9019e-006 0.0020
Tabla 5. Resultados de comparacin.