{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Table of Contents](./table_of_contents.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# H Infinity filter" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#format the book\n", "import book_format\n", "book_format.set_style()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I am still mulling over how to write this chapter. In the meantime, Professor Dan Simon at Cleveland 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": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "