Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rlabbe
GitHub Repository: rlabbe/Kalman-and-Bayesian-Filters-in-Python
Path: blob/master/Appendix-D-HInfinity-Filters.ipynb
686 views
Kernel: Python 3

H Infinity filter

%matplotlib inline
#format the book import book_format book_format.set_style()

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:

http://academic.csuohio.edu/simond/courses/eec641/hinfinity.pdf

In one sentence the HH_\infty (H infinity) filter is like a Kalman filter, but it is robust in the face of non-Gaussian, non-predictable inputs.

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.

import numpy as np import matplotlib.pyplot as plt from filterpy.hinfinity import HInfinityFilter dt = 0.1 f = HInfinityFilter(2, 1, dim_u=1, gamma=.01) f.F = np.array([[1., dt], [0., 1.]]) f.H = np.array([[0., 1.]]) f.G = np.array([[dt**2 / 2, dt]]).T f.P = 0.01 f.W = np.array([[0.0003, 0.005], [0.0050, 0.100]])/ 1000 #process noise f.V = 0.01 f.Q = 0.01 u = 1. #acceleration of 1 f/sec**2 xs = [] vs = [] for i in range(1,40): f.update (5) #print(f.x.T) xs.append(f.x[0,0]) vs.append(f.x[1,0]) f.predict(u=u) plt.subplot(211) plt.plot(xs) plt.title('position') plt.subplot(212) plt.plot(vs) plt.title('velocity');
Image in a Jupyter notebook