{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Table of Contents](http://nbviewer.ipython.org/github/rlabbe/Kalman-and-Bayesian-Filters-in-Python/blob/master/table_of_contents.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# H Infinity filter" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#format the book\n", "%matplotlib inline\n", "from __future__ import division, print_function\n", "import book_format\n", "book_format.load_style()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I am still mulling over how to write this chapter. In the meantime, Professor Dan Simon at Clevant State University has an accessible introduction here:\n", "\n", "http://academic.csuohio.edu/simond/courses/eec641/hinfinity.pdf\n", "\n", "In one sentence the $H_\\infty$ (H infinity) filter is like a Kalman filter, but it is robust in the face of non-Gaussian, non-predictable inputs.\n", "\n", "\n", "My FilterPy library contains an H-Infinity filter. I've pasted some test code below which implements the filter designed by Simon in the article above. Hope it helps." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nC/j+++9ZvxYsWrRIahBHjBhhto8165jectsd1qx9jEYjTCYT69XJbuW1O6xV62RkZOCbb75BY2Mj\nGhsb0dDQALVajblz56KhoQHR0dF216yiqKioyMXx3yYgIAAvvfQSQkND4efnh+LiYuh0Oqxbt463\np3fA4sWL4evrC5PJhO+++w55eXloaWnB6tWrmVcrXblyBUeOHIFer8c777yD+++/H4Ig4MaNGxAE\nAUajEa+++ipiYmJgNBpRUFAAg8GANWvWcB2dBb3l1svLC88//zwCAgJw8+ZNNDQ04KmnnoLJZMLK\nlSuZ2x7k5uZiw4YNKC8vR3h4ONrb29He3g6ZTAalUgmZTMaatZOl3F65coU1a4clS5ZI/6fOnj2L\nN954A1u2bEFJSQmGDx/OerVTb3kNDg5mrdrJ19cXgwcPlh4qlQqbN29GREQEnnzyScf+xrruoi29\nKysrEyMjI0UfHx9RrVaL+/fvd1co/UZmZqYYGhoqKpVKMSwsTHzsscfEo0ePujssj1JdXS3KZDJR\nJpOJcrlcep6TkyPNKSoqEkNCQkRfX18xOTlZbG5udmPEnqO33F67dk185JFHRJVKJSqVSjEiIkLM\nyckRz5075+6w72hdc3nr8fLLL5vNY83azlJuWbP2yc7OFiMiIkQfHx9RpVKJqamp4t69e83msF5t\n11teWavO9dvLEN5iT83yVvRERERERH3IbbeiJyIiIiL6PWIDTkRERETUh9iAExERERH1ITbgRERE\nRER9iA04EREREVEfYgNORERERNSH2IATEREREfUhNuBERERERH2IDTgRERERUR/6f2oQMaCQb3gQ\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from __future__ import (absolute_import, division, print_function,\n", " unicode_literals)\n", "\n", "from numpy import array\n", "import matplotlib.pyplot as plt\n", "\n", "from filterpy.hinfinity import HInfinityFilter\n", "\n", "dt = 0.1\n", "f = HInfinityFilter(2, 1, dim_u=1, gamma=.01)\n", "\n", "f.F = array([[1., dt],\n", " [0., 1.]])\n", "\n", "f.H = array([[0., 1.]])\n", "f.G = array([[dt**2 / 2, dt]]).T\n", "\n", "f.P = 0.01\n", "f.W = array([[0.0003, 0.005],\n", " [0.0050, 0.100]])/ 1000 #process noise\n", "\n", "f.V = 0.01\n", "f.Q = 0.01\n", "u = 1. #acceleration of 1 f/sec**2\n", "\n", "xs = []\n", "vs = []\n", "\n", "for i in range(1,40):\n", " f.update (5)\n", " #print(f.x.T)\n", " xs.append(f.x[0,0])\n", " vs.append(f.x[1,0])\n", " f.predict(u=u)\n", "\n", "plt.subplot(211)\n", "plt.plot(xs)\n", "plt.title('position')\n", "plt.subplot(212)\n", "plt.plot(vs) \n", "plt.title('velocity');" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }