Added fixed lag section.

This commit is contained in:
Roger Labbe committed 2015-06-13 20:05:10 -07:00
1 parent d574383175
commit 1633d9cda9
2 files changed
+279 -59

No files matched your search

+222 -59
View File
@@ -16,7 +16,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 4,
"metadata": {
"collapsed": false
},
@@ -30,7 +30,7 @@
"@import url('http://fonts.googleapis.com/css?family=Arimo');\n",
"\n",
" div.cell{\n",
" width: 850px;\n",
" width: 900px;\n",
" margin-left: 0% !important;\n",
" margin-right: auto;\n",
" }\n",
@@ -109,7 +109,7 @@
" color: #1d3b84;\n",
" font-size: 16pt;\n",
" margin-bottom: 0em;\n",
" margin-top: 1.5em;\n",
" margin-top: 0.5em;\n",
" display: block;\n",
" white-space: nowrap;\n",
" }\n",
@@ -117,9 +117,6 @@
" font-family: 'Arimo',verdana,arial,sans-serif;\n",
" line-height: 125%;\n",
" font-size: 120%;\n",
" width:740px;\n",
" margin-left:auto;\n",
" margin-right:auto;\n",
" text-align:justify;\n",
" text-justify:inter-word;\n",
" }\n",
@@ -133,6 +130,11 @@
" overflow-y: scroll;\n",
" max-height: 50000px;\n",
" }\n",
" div.output_wrapper{\n",
" margin-top:0.2em;\n",
" margin-bottom:0.2em;\n",
"}\n",
"\n",
" code{\n",
" font-size: 70%;\n",
" }\n",
@@ -235,7 +237,10 @@
" },\n",
" displayAlign: 'center', // Change this to 'center' to center equations.\n",
" \"HTML-CSS\": {\n",
" scale:85,\n",
" scale:100,\n",
" availableFonts: [\"Neo-Euler\"],\n",
" preferredFont: \"Neo-Euler\",\n",
" webFont: \"Neo-Euler\",\n",
" styles: {'.MathJax_Display': {\"margin\": 4}}\n",
" }\n",
" });\n",
@@ -245,7 +250,7 @@
"<IPython.core.display.HTML object>"
]
},
"execution_count": 1,
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
@@ -253,6 +258,8 @@
"source": [
"#format the book\n",
"%matplotlib inline\n",
"%load_ext autoreload\n",
"%autoreload 2\n",
"from __future__ import division, print_function\n",
"import book_format\n",
"book_format.load_style()"
@@ -269,23 +276,21 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"It has probably struck you by now that the performance of the Kalman filter is not optimal when you consider future data. For example, suppose we are tracking an aircraft, and the latest measurement is far from the current track, like so (I'll only consider 1 dimension for simplicity):\n",
"\n",
" 10.1 10.2 9.8 10.1 10.2 10.3 10.1 9.9 10.2 10.0 9.9 12.4"
"It has probably struck you by now that the performance of the Kalman filter is not optimal when you consider future data. For example, suppose we are tracking an aircraft, and the latest measurement deviates far from the current track, like so (I'll only consider 1 dimension for simplicity):"
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAucAAAEWCAYAAADFITnpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8U+eZL/Cf5FXeZGNbtuXd4B1sYxvCYggBQjBNaZJp\n9pTQTsPkts00y9Bc2vSSziSkaTKZMFkm3M5t4jTNJF1oSCi0kAZjGwjBxLLBO3iTseUFvMqrpHP/\nkBHIi7xJ1vb7fj7+kHOOztGjHNt6/Op9nlckCIIAIiIiIiKyOrG1AyAiIiIiIj0m50RERERENoLJ\nORERERGRjWByTkRERERkI5icExERERHZCCbnREREREQ2gsk5EREREZGNMJmcFxQUYPv27YiIiIBY\nLEZeXp7hmEajwbPPPov09HT4+PhALpfj4YcfhlKpNPmE+fn5EIvFE75qamrM84qIiIiIiOyUyeRc\nrVYjLS0N+/fvh0QigUgkMjpWUlKC5557DiUlJTh06BCUSiW2bt0KrVY77RNXVFRApVIZvpYsWTL/\nV0NEREREZMdEM10h1NfXF2+99RZ27Ngx5WMqKyuRmpqKCxcuIDU1ddLH5OfnY+PGjejo6EBgYODc\noiYiIiIickBmnXPe09MDAAgICJj2sdnZ2ZDL5di8eTPy8/PNGQYRERERkV0yW3I+MjKCZ555Btu3\nb4dcLp/ycXK5HO+88w4OHjyIgwcPIjExEZs2bUJRUZG5QiEiIiIiskuu5riIRqPBI488gt7eXhw+\nfNjkYxMSEpCQkGDYXrVqFRoaGvDKK68gJyfH6LHXR+KJiIiIiOyRVCqd1ePnPXKu0Wjw4IMP4uLF\ni/j73/8+oykt461cuRK1tbXzDYWIiIiIyK7Na+R8dHQUDzzwACoqKpCfnw+ZTDan6ygUCpNTYYiI\niIiInIHJ5FytVhtGtHU6HRobG6FQKBAYGAi5XI57770XxcXF+OyzzyAIAlQqFQDA398fnp6eAIAd\nO3ZAJBIZeqS//vrriI2NRUpKCkZGRvDBBx/g0KFDOHjwoMlAZ/uRANmW4uJiAPpCYLJfvI+Og/fS\ncfBeOg7eS8cxn6nZJpPzc+fOYePGjQAAkUiEvXv3Yu/evdi5cyf27t2LTz/9FCKRCFlZWUbnvffe\ne4aWi0ql0qg/+ujoKHbv3o3m5mZIJBIsXboUR44cwdatW+f8IoiIiIiIHIHJ5HzDhg3Q6XRTHjd1\n7LoTJ04Ybe/evRu7d++eYXhERERERM7DrH3OiYiIiIho7picExERERHZCLP0OSciIiIiMuXImf+B\nRqdBakwmYsKS4CJ2sXZINonJORERERFZlE7QofDCUagHe/F58Z8gcffCU/e/jNBFkdYOzeZwWgsR\nERERWZSy7RLUg71G+4L9ucbNZJicExEREZFFlTecN9pOjM7gtJYpMDknIiIiIouqaPjaaDs1JmuK\nRxKTcyIiIiKymL6BbjS11RrtS47OtFI0to/JORERERFZTGVjidF2pGwx/LwDrBSN7WNyTkREREQW\nM35KS0oMR81NYXJORERERBah1WlRNW7kPIXzzU1ick5EREREFtGoqsHAcL9h28vTF9Eh8VaMyPYx\nOSciIiIiixg/pSU5ejnEbKFoEpNzIiIiIrKIinH9zTnffHpMzomIiIjI7Hr6r6G5o86wLYIISVHL\nrRiRfWByTkRERERmV9FoPKUlKjQevl5SK0VjP5icExEREZHZTZzSwi4tM8HknIiIiIjMSqvVoLqp\n1GhfKpPzGWFyTkRERERmVddahaGRAcO2r0SKCFmcFSOyH0zOiYiIiMisxk9pSY7JhFjEtHMm+H+J\niIiIiMyK883njsk5EREREZlNV18HWq82GbZFIjGSojKsGJF9YXJORERERGYzflXQ2LBEeHn6WCka\n+8PknIiIiIjMZsKUlmiuCjobTM6JiIiIyCxGNaOoVpYZ7UuJ5Xzz2WByTkRERERmUddSgZHRIcO2\nn3cAwoNirRiR/WFyTkRERERmUT5JlxaRSGSlaOwTk3MiIiIiMovKccWgXBV09picExEREdG8dfao\n0NbVbNgWi12QEJluxYjsk8nkvKCgANu3b0dERATEYjHy8vIMxzQaDZ599lmkp6fDx8cHcrkcDz/8\nMJRK5bRPevLkSWRlZUEikWDx4sU4cODA/F8JEREREVnN+BaKcfJkSDy8rBSN/TKZnKvVaqSlpWH/\n/v2QSCRGc4bUajVKSkrw3HPPoaSkBIcOHYJSqcTWrVuh1WqnvGZ9fT22bduGnJwcKBQK7NmzB088\n8QQOHjxovldFRERERAtqfAtFTmmZG1dTB3Nzc5GbmwsA2Llzp9ExqVSKY8eOGe07cOAAUlNTUVVV\nhdTU1Emv+c477yAiIgL79+8HACQmJuLs2bN49dVXcc8998z1dRARERGRlYxohlGrvGC0L4XJ+ZyY\n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 truncated
"image/png": "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\nFQAAe3t7bgolIiIisjBdrTeXc735gPS6rCUzMxNxcXGIi4tDc3MzUlNTERcXh9TUVADAV199hbi4\nOMyePRsikQhPP/004uLisHnzZv1jKJVKKJVKfXvz5s3QarV48cUXERgYqP/voYceMsJLJCIiIiJj\nKq++goamW7PFDvZOkEnCTRiR5ep15nzmzJnQarXdHk9JSemy/vntDh8+3GObiIiIiCyXokR4V9CI\nwPGwEduYKBrLZhalFImIiIjIcnVOzrmkZeCYnBMRERHRgGm1GtY3H0JMzomIiIhowEoqC9HUota3\nnR1dEegTYrqALByTcyIiIiIaMIMqLUHjIRYxxRwo/ssRERER0YAplDmCNtebDw6TcyIiIiIaEI2m\nHflluYI+uTTWRNFYBybnRERERDQgV65eRktbs77t6uwBfy+pCSOyfEzOiYiIiGhA8pSdSihKYyAS\niUwUjXVgck5EREREA9K5vjlLKA4ek3MiIiIi6re29jYUll0U9MmlTM4Hi8k5EREREfVbUcUltGla\n9W3PUT7wcfc3YUTWgck5EREREfWbovN6cxnXmw8FJudERERE1G+d15tzScvQYHJORERERP3S0taM\nooo8QR+T86HB5JyIiIiI+qWg7AI02nZ928fdH15uviaMyHowOSciIiKiflGUnBO0WUJx6DA5JyIi\nIqJ+UShzBG25NNZEkVgfJudERERE1GdNLWpcuZov6JNLo00UjfVhck5EREREfZZfmgudTqtv+3vJ\n4ObiacKIrEuPyXl6ejoWLlwIqVQKsViMtLQ0wfEdO3Zg3rx5kEgkEIvFOHr0aJ+e9OjRo5g0aRKc\nnJwQHh6OzZs3D/wVEBEREdGwyWMJRaPqMTlXq9WIjY3Fhg0b4OTkZFBYvrGxEYmJiVi3bh0A9Knw\nfGFhIebPn4/ExERkZ2dj1apVeP7557Fjx45BvAwiIiIiGg6d65tzM+jQsu3pYHJyMpKTkwEAKSkp\nBseXLl0KAKiqqurzE7777ruQSqXYsGEDACAqKgonT57E2rVrsXjx4j4/DhERERENL3VTHUorC/Vt\nEUSICBpvwoisz7CvOT9+/DiSkpIEfUlJScjKyoJGoxnucIiIiIiojy6Xnhe0A31D4OLkZqJorNOw\nJ+cqlQp+fn6CPj8/P7S3t/drBp6IiIiIhleestOSFq43H3I9LmsxJ1lZWaYOgYYAx9F6cCytA8fR\nenAsrYc5j2WO4idBW9TsZNbxmopcLh/wtcM+c+7v74+KigpBn0qlgq2tLXx8fIY7HCIiIiLqg6bW\nBtQ23VrlIIIIErfRJozIOg37zPnUqVOxc+dOQd/BgwcxefJk2NjYdHtdfHy8sUMjI7r5VzXH0fJx\nLK0Dx9F6cCyth7mP5alL6YL2aH85piVMN1E05q22tnbA1/aYnKvVaigUCgCAVqtFcXExsrOz4e3t\nDZlMhpqaGhQXF+P69esAAIVCATc3NwQEBOjXlS9btgwikUhfI/3ZZ5/Fxo0b8fLLL+OZZ57Bjz/+\niLS0NGzbtm3AL4KIiIiIjKtzCUXWNzeOHpe1ZGZmIi4uDnFxcWhubkZqairi4uKQmpoKAPjqq68Q\nFxeH2bNnQyQS4emnn0ZcXJzgpkJKpRJKpVLfDgkJwZ49e5Ceno6JEyfiL3/5C95++20sWrTISC+R\niIiIiAaLm0GHR48z5zNnzoRWq+32eEpKSpf1z293+PBhg74ZM2bg1KlTfYuQiIiIiEzqWl0lqmpv\n7Rm0EdsiLHCsCSOyXsO+IZSIiIiILEvnJS0h/pGwt3MwUTTWjck5EREREfXIYL25jEtajIXJORER\nERF1S6fTQaHkZtDhwuSciIiIiLpVVVuBmoZb9c3tbOwR4h9lwoisG5NzIiIiIupWnjJH0A4NHAM7\nWzsTRWP9mJwTERERUbcUJecEbZZQNC4m50RERETUJZ1O18Vm0FgTRTMyMDknIiIioi5VXCtBfeN1\nfdvBzhGjJeEmjMj6MTknIiIioi4pSoTrzcODxsPGpsd7WNIgMTknIiIioi7lsYTisGNyTkREREQG\ntDotLnfeDMqbDxkdk3MiIiIiMlBaWYTGlgZ929lhFIJ8QkwX0AjB5JyIiIiIDHSu0hIhHQ+x2MZE\n0YwcTM6JiIiIyICC681Ngsk5EREREQlotBpcLjsv6GNyPjyYnBMRERGRgPJqPlpam/TtUU7uCPAe\nbcKIRg4m50REREQkkKcU1jeXS6MhEolMFM3IwuSciIiIiAQ6bwaNlMWaKJKRh8k5EREREem1tbeh\noOyCoI/rzYdPj8l5eno6Fi5cCKlUCrFYjLS0NINzVq9ejaCgIDg7O2PWrFnIzc3t9Uk//vhjTJgw\nAS4uLggICMATTzwBlUo18FdBREREREOiWJWHtvZWfdt9lDd8PQJMGNHI0mNyrlarELine truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x68f1668>"
"<matplotlib.figure.Figure at 0x7044cc0>"
]
},
"metadata": {},
@@ -295,7 +300,7 @@
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"data = [10.1, 10.2, 9.8, 10.1, 10.2, 10.3, 10.1, 9.9, 10.2, 10.0, 9.9, 12.4]\n",
"data = [10.1, 10.2, 9.8, 10.1, 10.2, 10.3, 10.1, 9.9, 10.2, 10.0, 9.9, 11.4]\n",
"plt.plot(data)\n",
"plt.show()"
]
@@ -321,16 +326,16 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x69824e0>"
"<matplotlib.figure.Figure at 0x704d320>"
]
},
"metadata": {},
@@ -347,28 +352,23 @@
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"Given these future measurements we can infer that yes, the aircraft initiated a turn. \n",
"\n",
"On the other hand, suppose these are the following measurements.\n",
"\n",
" 9.8 10.2 9.9 10.1 10.0 10.3 9.9 10.1\n",
" \n",
"In this case we are led to conclude that the aircraft did not turn and that the outlying measurement was merely very noisy. "
"On the other hand, suppose these are the following measurements."
]
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAucAAAEWCAYAAADFITnpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4k9f5N/Cv5G088JQt24ABm2HCsM0KhoBNAJOE1SwS\nIGSQQZrVlqa06c9JX5KO0BSakEDTJqGQhCwzkkDZxuzYBhPADIONsZHkvfC2pPcPY8EjyfLS1vdz\nXVxXn/Oso0aWbp3nPvcRqdVqNYiIiIiIyOLElu4AERERERG1YXBORERERGQlGJwTEREREVkJBudE\nRERERFaCwTkRERERkZVgcE5EREREZCUYnBMRERERWQmDwXl6ejrmzJmD8PBwiMVibNy4UbOvtbUV\nr7/+OkaNGgUvLy9IpVI8/vjjKCwsNHjDtLQ0iMVinX+XL182zisiIiIiIrJRBoPzuro6jBw5EmvX\nroWHhwdEIpFg3+nTp/HGG2/g9OnT2L59OwoLCzFr1iwolcpOb5yTkwOFQqH5N3jw4N6/GiIiIiIi\nGybq6gqh3t7eWLduHZYsWdLhMRcuXEBMTAzOnj2LmJgYvcekpaUhMTERpaWlCAgI6FmviYiIiIjs\nkFFzzqurqwEAfn5+nR4bHx8PqVSK6dOnIy0tzZjdICIiIiKySUYLzpubm/HrX/8ac+bMgVQq7fA4\nqVSK9evXIzU1FampqRgyZAiSkpJw5MgRY3WFiIiIiMgmORvjIq2trVi0aBFqamrwww8/GDw2Ojoa\n0dHRmu0JEybg2rVrePfdd5GQkCA4tn0knoiIiIjIFvn6+nbr+F6PnLe2tmLhwoU4d+4c9u/f36WU\nFm3jxo1Dbm5ub7tCRERERGTTejVy3tLSgkcffRQ5OTlIS0tDcHBwj66TnZ1tMBWGiIiIiMgRGAzO\n6+rqNCPaKpUKBQUFyM7ORkBAAKRSKR566CFkZmbi+++/h1qthkKhAAD07dsX7u7uAIAlS5ZAJBJp\naqSvWbMGkZGRGD58OJqbm7F582Zs374dqampBjva3UcCROaWmZkJoG2yM5G14/uVbA3fs2RLepOa\nbTA4z8jIQGJiIgBAJBIhJSUFKSkpWLp0KVJSUrBjxw6IRCLExcUJzvvss880JRcLCwsF9dFbWlqw\nYsUKFBUVwcPDAyNGjMDOnTsxa9asHr8IIiIiIiJ7YDA4nzp1KlQqVYf7De1rd/DgQcH2ihUrsGLF\nii52j4iIiIjIcRi1zjkREVF3qNQqFJXmoba+ytJdISKyCkYppUhERNRdarUa67f9CRevZ8PNxR3P\nzf0jBofpX12aiMhRcOSciIgsIk92ARevZwMAmloasT9rq4V7RERkeQzOiYjIIopK87S28y3UEyIi\n68HgnIiILEJeXiDYrr5ZjoamOgv1hojIOjA4JyIii5CVX9dpU1QUWqAnRETWg8E5ERGZnVqthlxf\ncF7O4JyIHBuDcyIiMrvK2lI0NTfotMs5ck5EDo7BORERmZ2+UXMAUHTQTkTkKBicExGR2cnKCvS2\nM+eciBwdg3MiIjK7jkbOq1ixhYgcHINzIiIyO+0yindSVBSZsSdERNaFwTkREZmVUqWEorLjAJx5\n50TkyBicExGRWZVWyaBUtna4n3nnROTIGJwTEZFZaeebi0XCryKWUyQiR8bgnIiIzEpeJgzOoyLu\nEmwzrYWIHBmDcyIiMiuZ1mTQUYMmCkbP2yq21Ju7W0REVoHBORERmZV2WktE8CAE9ZUK2ph3TkSO\nisE5ERGZTXNrE8qq5IK2kIAIhARECNoYnBORo2JwTkREZlNcUQQ11JrtAF8J3FzcEeKvFZwz75yI\nHBSDcyIiMhtZmTDfXBrQHwAQGtBP0M6FiIjIUTE4JyIis9HONw+9FZyH+IcL2jlyTkSOisE5ERGZ\njW5w3jZiHtQ3TFCxpfJmGSu2EJFDYnBORERmI9cqoygNbBs5d3F2QWDfUMG+4kqmthCR42FwTkRE\nZlHfeBNVN8s1205iZwTdEZCHak0K1R5lJyJyBAzOiYjILLSD7WA/KZydXDTbIVqTQotZTpGIHBCD\ncyIiMouOJoO20y6nKC9ncE5EjofBORERmYVMO99ca6Q8lAsRERExOCciIvPQGTkPFI6c61RsqS1F\nY3ODWfpGRGQtDAbn6enpmDNnDsLDwyEWi7Fx40bNvtbWVrz++usYNWoUvLy8IJVK8fjjj6OwsPOR\njkOHDiEuLg4eHh4YNGgQNmzY0PtXQkREVkutVndYRrGdvootHD0nIkdjMDivq6vDyJEjsXbtWnh4\neEAkEgn2nT59Gm+88QZOnz6N7du3o7CwELNmzYJSqezwmvn5+Zg9ezYSEhKQnZ2NlStX4qWXXkJq\naqrxXhUREVmVmvpK1DfWarZdXdzh7xOsc5x23rmCeedE5GCcDe1MTk5GcnIyAGDp0qWCfb6+vtiz\nZ4+gbcOGDYiJicHFixcRExOj95rr169HeHg41q5dCwAYMmQITp48idWrV2PBggU9fR1ERGTFZGXC\nfPNQ/whBCoumPSACP189odlWVLCcIhE5FqPmnFdXVwMA/Pz8Ojzm+PHjmDFjhqBtxowZyMzMNDji\nTkREtquzlJZ2If7Cdo6cE5GjMVpw3tzcjF//+teYM2cOpFJph8cVFxdDIpEI2iQSCVpbW1FWVmas\n7hARkRXprIxiO51yisw5JyIHYzCtpataW1uxaNEi1NTU4IcffjDGJXVkZmaa5LpExsb3KtkSc71f\nr1zPEWzXVjTqvbdS1QoRRFBDDaCtYsvxE0fh4uxmln6S9eNnLNmCqKioHp/b65Hz1tZWLFy4EOfO\nncP+/fsNprQAQEhICBQKhaCtuLgYzs7OCAwM7G13iIjIyqjValTVlwra/Dx1J4MCgJPYGd7uwu+R\n6gY+VSUix9GrkfOWlhY8+uijyMnJQVpaGoKD9X/Y3mnixInYunWroG3v3r0YO3YsnJycOjwvPj6+\nN10lMrn20Ry+V8kWmPP9Wlolh/JYq2a7j7s3EibeI6gAdqdsRbRgUmjfYC/Ex/DvytHxM5ZsSfs8\nzJ7otJRidnY2srOzoVKpUFBQgOzsbBQWFkKpVOKhhx7CyZMn8cUXX0CtVkOhUEChUKCxsVFzjSVL\nluCJJ57QbD///PO4ceMGXnvtNVy4cAH//ve/sXHjRvzmN7/p8YsgIiLrpW8yaEeBOaCnnCLzzonI\ngRgMzjMyMhAbG4vY2Fg0NjYiJSUFsbGxSElJQVFREXbs2AG5XI64uDhIpVLNv6+//lpzjcLCQsHC\nRAMGDMDOnTuRnp6OMWPG4M9//jPef/99zJ8/33SvkoiILEZeLiyjKA3UPxm0XWiAdq1zllMkIsdh\nMK1l6tSpUKlUHe43tK/dwYMHddqmTJmCrKysLnSPiIhsXVcrtbTTKafIkXMiciBGrXNORESkras1\nztsF+0khumOBooraUjQ1N5ikb0RE1obBORERmUyrsgXFlTcEbSFaaSvaXJxdEeQbImhTVBQZvW9E\nRNaIwTkREZlMSeUNqFS3V3/28wqEp5tXp+dpB/CKCuadE5FjYHBOREQm092UlnbaeefycuadE5Fj\nYHBOREQmoxOcB3Y1OA8XbHNSKBE5CgbnRERkMrIyYRnFziq13D5Oq2ILyykSkYNgcE5ERCbT3TKK\n7YL9wlixhYgcEoNzIiIyiabmBpTXFGu2RSIxJP5hXTrXxdkVgazYQkQOiME5ERGZhHaeeJBvCFyd\n3bp8vs5Kocw7JyIHwOCciIhMQiffPLBrKS3tQvxZTpGIHA+DcyIiMomellFspx2cs5wiETkCBudE\nRGQSPZ0Mevt4rYotTGshIgfA4JyIiExCVi5Ma5F2c+Rcp2JLTQkrthCR3WNwTkRERldbX43a+irN\ntrOTCwL7hnbrGvoqthRX3jBK/4iIrBWDcyIiMjrtyZsS/3A4iZ26fR3tlUK1U2WIiOwNg3MiIjK6\n3k4G7eg85p0Tkb1jcE5EREanXUZR2s3JoO0k2uUUWbGFiOwcg3MiIjI6442ca5VTZK1zIrJzDM6J\niMio1Gp1r8sottNbsaWlsVf9IyKyZgzOiYjIqCpry9DYXK/Zdnf1hJ93YI+u5ershkAfiaCtuKKo\nV/0jIrJmDM6JiMio5Fr1zUMD+kEkEvX4eiFaqS2cFEpE9ozBORERGZWx8s3bhWhNCmU5RSKyZwzO\niYjIqIwenLOcIhE5EAbnRERkVDKdtJaeTQZtpz1yznKKRGTPGJwTEZHRKFVKnQmbvR05l/gLK7aU\n1xSzYgsR2S0G50REZDRl1Qq0Kls0296efeHt6dura7JiCxE5EgbnRERkNPIy3UotxiBhxRYichAM\nzomIyGi0882lvcw3bxfKvHMichAMzomIyGiMXamlnXatc3kFyykSkX0yGJynp6djzpw5CA8Ph1gs\nxsaNGwX7U1NTMXPmTAQHB0MsFuPQoUOd3jAtLQ1isVjn3+XLl3v3SoiIyOJ0gvNA44ych/iznCIR\nOQaDwXldXR1GjhyJtWvXwsPDQ2eFt/r6eiQkJOC9994DgG6tAJeTkwOFQqH5N3jw4B50n4iIrEVz\naxNKq+SCNu0yiD0l8QuDCLe/YyqqS9Dc0mSUaxMRWRNnQzuTk5ORnJwMAFi6dKnO/kWLFgEAysrK\nun3joKAgBAQEdPs8IiKyTsUVN6BWqzTbAT4SuLt6GOXari5uCPCVoKxaAQBQQw1FRSH6STiwQ0T2\nxWI55/Hx8ZBKpZg+fTrS0tIs1Q0iIjISuc7iQ8bJN2/HlUKJyBEYHDk3BalUivXr12Ps2LFoamrC\npk2bkJSUhEOHDiEhIaHD8zIzM83YS6Ke43uVbIkx36+nr/0kbGhxMe7fQ5PwK+v0+Line truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAugAAAEWCAYAAAA0KmJkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4U1X+P/B30n3f04WW1QqyFAhFWSr7YgFBwBUFigjq\nFxnEmcFhRikuo4MyBX4iyoyCRUVkE5S1iNhSUGiBsliQIlAKpemetune3N8fTNPepHuz9/16Hp/H\nc3Jv7snDbfLJyed8jkQQBAFERERERGQWpKYeABERERER1WGATkRERERkRhigExERERGZEQboRERE\nRERmhAE6EREREZEZYYBORERERGRGGKATEREREZmRJgP0hIQETJ06FcHBwZBKpYiNjRU9vnv3bkyc\nOBEymQxSqRTx8fGtunhiYiJsbW3Rr1+/1o+ciIiIiMgKNRmgq1QqhIWFYd26dXBycoJEIhE9Xlpa\nioiICMTExACAzuNNKSgowJw5czBu3LhWnUdEREREZM1sm3owMjISkZGRAICoqCidx5977jkAQG5u\nbqsvPH/+fMybNw9qtRo7d+5s9flERERERNbIJDnoGzZsQE5ODt544w0IgmCKIRARERERmaUmZ9AN\n4eLFi3j77bdx6tQpprYQEREREWkxaoBeUVGBp556CqtXr0aXLl2aPV6pVBphVEREREREhuHh4dHq\nc4waoN+9exdXrlzBvHnzMG/ePACAWq2GIAiws7PDwYMHMW7cOGMOiYiIiIjIrBg1QA8ODsalS5dE\nfR9//DGOHDmCPXv2tGhWnYiIiIjImjUZoKtUKqSlpQG4N9Odnp6OlJQU+Pj4ICQkBAUFBUhPT0dh\nYSEAIC0tDe7u7ggMDIS/vz8AYM6cOZBIJIiNjYWtrS169+4tuoafnx8cHBx0+rW15ecBImNKTk4G\nAISHh5t4JETNM4f7dXfCJvx87ntR34JH/45+3R800YjInJnDPUvUUu1N026yiktSUhLkcjnkcjnK\ny8sRHR0NuVyO6OhoAMDevXshl8sxZswYSCQSLFiwAHK5HBs3btQ8R0ZGBjIyMhq9hkQi4WJRIqIO\nKDv/tk5fTmGmCUZCRGRempxBHzVqFNRqdaOPR0VFNVgfvb5jx441+Xh0dLQm4Ccioo5DUXhHpy+n\n4K4JRkJEZF5MUgediIg6tqrqSuQX5ej0cwadiIgBOhERmUBO4V0Igu4vtDmFnEEnImKATkRERpdd\n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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x70d1438>"
"<matplotlib.figure.Figure at 0x7bc4668>"
]
},
"metadata": {},
@@ -385,34 +385,43 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Since this type of smoothing requires knowing data from \"the future\", there are some applications for the Kalman filter where these observations are not helpful. For example, if we are using a Kalman filter as our navigation filter for an aircraft we have little interest in where we have been. While we could use a smoother to create a smooth history for the plane, we probably are not interested in it. However if we can afford a bit of latency some smoothers only require a few measurements into the future produce better results. And, of course any problem where we can batch collect the data and then run the Kalman filter on the data will be able to take maximum advantage of this type of algorithm."
"In this case we are led to conclude that the aircraft did not turn and that the outlying measurement was merely very noisy. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Types of Smoothers"
"## An Overview of How They Work\n",
"\n",
"The Kalman filter is a **recursive** filter - it's estimate at step `k` is partially based on its estimate from step `k-1`. But this means that the estimate from step `k-1` is partially based on step `k-2`, and so on back to the first measurement. Hence, the estimate at step `k` depends on *all* of the previous measurements, though to varying degrees. `k-1` has the most influence, `k-2` has the next most, and so on. \n",
"\n",
"Smoothing filters incorporate future measurements into the estimate for step `k`. The measurement from `k+1` will have the most effect, `k+2` will have less effect, `k+3` less yet, and so on. \n",
"\n",
"This topic is called **smoothing**, but I think that is a misleading name. I could smooth the data above just by passing it through a low pass filter. The result would be smooth, but not necessarily accurate because a low pass filter will remove real variations just as much as it removes noise. In contrast, Kalman smoothers are *optimal* - they incorporate all available information to make the best estimate that is mathematically achievable."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Types of Smoothers\n",
"\n",
"There are three broad classes of Kalman smoothers that produce better tracking in these situations.\n",
"\n",
"* Fixed Point Smoothing\n",
"\n",
"Fixed point smoothers start out as a normal Kalman filter. But once they get to measurement 4 (say) it then looks backwards and revises the filter output for the previous measurement(s). So, at step 5 the filter will produce a result for 5, and update the result for measurement 4 taking measurement 5 into account. When measurement 6 comes in the filter produces the result for 6, and then goes back and revises 4 using the measurements from 5 and 6. It will revise the output for measurement 5 as well. This process continues, with all previous outputs being revised each time a new input comes in.\n",
"\n",
"* Fixed Lag Smoothing\n",
"\n",
"Fixed lag smoothers introduce latency into the output. Suppose we choose a lag of 4 steps. The filter will ingest the first 3 measurements but not output a filtered result. Then, when the 4th measurement comes in the filter will produce the output for measurement 1, taking measurements 1 through 4 into account. When the 5th measurement comes in, the filter will produce the result for measurement 2, taking measurements 2 through 5 into account.\n",
"\n",
"\n",
"* Fixed Interval Smoothing\n",
"\n",
"This is a batch processing based filter. It requires all measurements for the track before it attempts to filter the data. Having the full history and future of the data allows it to find the optimal answer, at the cost of not being able to run in real time. If it is possible for you to run your Kalman filter in batch mode it is always recommended to use one of these filters a it will provide much better results than the recursive forms of the filter from the previous chapters.\n",
"This is a batch processing based filter. This filter waits for all of the data to be collected before making any estimates. For example, you may be a scientist collecting data for an experiment, and don't need to know the result until the experiment is complete. A fixed interval smoother will collect all the data than estimate the state at each measurement using all available previous and future measurements. If it is possible for you to run your Kalman filter in batch mode it is always recommended to use one of these filters a it will provide much better results than the recursive forms of the filter from the previous chapters.\n",
"\n",
"\n",
"* Fixed Lag Smoothing\n",
"\n",
"Fixed lag smoothers introduce latency into the output. Suppose we choose a lag of 4 steps. The filter will ingest the first 3 measurements but not output a filtered result. Then, when the 4th measurement comes in the filter will produce the output for measurement 1, taking measurements 1 through 4 into account. When the 5th measurement comes in, the filter will produce the result for measurement 2, taking measurements 2 through 5 into account. This is useful when you need recent data but can afford a bit of lag. For example, perhaps you are using machine vision to monitor a manufacturing process. If you can afford a few seconds delay in the estimate a fixed lag smoother will allow you to produce very accurate and smooth results.\n",
"\n",
"\n",
"* Fixed Point Smoothing\n",
"\n",
"Fixed point smoothers start out as a normal Kalman filter. But once they get to measurement 4 (say) it then looks backwards and revises the filter output for the previous measurement(s). So, at step 5 the filter will produce a result for 5, and update the result for measurement 4 taking measurement 5 into account. When measurement 6 comes in the filter produces the result for 6, and then goes back and revises 4 using the measurements from 5 and 6. It will revise the output for measurement 5 as well. This process continues, with all previous outputs being revised each time a new input comes in. This filter can be used to fill in gaps. For example, suppose you did not get a sensor reading at step `k`. Instead of just using the prediction from step `k-1` you can continue using data collected at steps `k+1`, `k+2`, and so on to refine the estimate. \n",
"\n",
"\n",
"The choice of these filters depends on your needs and how much memory and processing time you can spare. Fixed point smoothing requires storage of all measurements, and is very costly to compute because the output is for every time step is recomputed for every measurement. On the other hand, the filter does produce a decent output for the current measurement, so this filter can be used for real time applications.\n",
@@ -436,20 +445,6 @@
"not done"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Fixed Lag Smoothing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"not done"
]
},
{
"cell_type": "markdown",
"metadata": {},
@@ -467,7 +462,7 @@
"\n",
"The RTS smoother works by first running the Kalman filter in a batch mode, computing the filter output for each step. Given the filter output for each measurement along with the covariance matrix corresponding to each output the RTS runs over the data backwards, incorporating it's knowledge of the future into the past measurements. When it reaches the first measurement it is done, and the filtered output incorporates all of the information in a maximally optimal form.\n",
"\n",
"The equations for the RTS smoother are very straightforward and easy to implement. This derivation is for the linear Kalman filter. Similar derivations exist for the EKF and UKF. These steps are performed on the output of the batch processing, going backwards from the most recent in time back to the first estimate. Each iteration incorporates the knowledge of the future into the state estimate. Since the state estimate already incorporates all of the past measurements the result will be that each estimate will contain knowledge of all measurements in the past and future.\n",
"The equations for the RTS smoother are very straightforward and easy to implement. This derivation is for the linear Kalman filter. Similar derivations exist for the EKF and UKF. These steps are performed on the output of the batch processing, going backwards from the most recent in time back to the first estimate. Each iteration incorporates the knowledge of the future into the state estimate. Since the state estimate already incorporates all of the past measurements the result will be that each estimate will contain knowledge of all measurements in the past and future. Here is it very important to distinguish between past, present, and future so I have used subscripts to denote whether the data is from the future or not.\n",
"\n",
" Predict Step\n",
" \n",
@@ -507,16 +502,16 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x79d3198>"
"<matplotlib.figure.Figure at 0x7bc4b38>"
]
},
"metadata": {},
@@ -530,7 +525,7 @@
"from filterpy.kalman import KalmanFilter\n",
"import book_plots as bp\n",
"\n",
"def plot_rts(noise):\n",
"def plot_rts(noise, Q=0.001):\n",
" random.seed(123)\n",
" fk = KalmanFilter(dim_x=2, dim_z=1)\n",
"\n",
@@ -542,7 +537,7 @@
" fk.H = np.array([[1., 0.]]) # Measurement function\n",
" fk.P = 10. # covariance matrix\n",
" fk.R = noise # state uncertainty\n",
" fk.Q = 0.001 # process uncertainty\n",
" fk.Q = Q # process uncertainty\n",
"\n",
" # create noisy data\n",
" zs = np.asarray([t + random.randn()*noise for t in range (40)])\n",
@@ -593,6 +588,172 @@
"plot_rts(noise=1.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, we must understand that this smoothing is predicated on the system model. We have told the filter that that what we are tracking follows a constant velocity model with very low process error. When the filter *looks ahead* it sees that the future behavior closely matches a constant velocity so it is able to reject most of the noise in the signal. Suppose instead our system has a lot of process noise. For example, if we are tracking a light aircraft in gusty winds its velocity will change often, and the filter will be less able to distinguish between noise and erratic movement due to the wind. We can see this in the next graph. "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAuYAAAEPCAYAAAAOOgGEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYVMcawOHfFnqTDopdLKhYsKJiQTTRxBpTbCkmxuhN\nu8nVGBNL7MYWjRp7N8U0jVGDFLEL2BV7VwSk97Z77h+rR1dAKUsz8z7PPsCZ2XM+DqDfzn4zo5Ak\nSUIQBEEQBEEQhHKlLO8ABEEQBEEQBEEQibkgCIIgCIIgVAgiMRcEQRAEQRCECkAk5oIgCIIgCIJQ\nAYjEXBAEQRAEQRAqAHV5B5CfpKSk8g5BEARBEARBEIrNxsamyM8RI+aCIAiCIAiCUAGIxFwQBEEQ\nBEEQKoBSK2WZOXMmEyZMYMyYMSxevFg+PnnyZFauXElCQgJt27ZlyZIleHh4FHie4rwNIOQvPDwc\ngFatWpVzJM8XcV9Lj7i3pUPc19Ih7mvpEPe1dFSk+6rRapi05l3+M+AbXOyql3c4JVLScuxSGTE/\ncuQIK1euxNPTE4VCIR+fPXs28+fP5/vvvycsLAwnJyf8/PxITU0tjTAEQRAEQRCECk6lVNG6YReO\nRgSWdyjlzuCJeVJSEkOHDmXt2rXY2trKxyVJYuHChYwfP57+/fvTuHFj1q9fT0pKClu2bDF0GIIg\nCIIgCEIFlJGVhiRJesfaefgSfnE/WklbTlFVDAZPzEeOHMmgQYPo3Lmz3k2/fv060dHR9OjRQz5m\namqKj48Phw4dMnQYgiAIgiAIQgWj1WpY+ucUzl0P1zvubOfG2DfmoVT8u6c/GvS7X7lyJdeuXWPa\ntGkAemUsUVFRADg7O+s9x8nJSW4TBEEQBEEQnl97T+7ASG2MR22vPG1W5lXKISLQaCQW/HSDoxGa\ncrn+4ww2+fPixYtMmDCBAwcOoFKpAF35ypNvVeTn8QT+SQ8nJwiGI+5p6RD3tfSIe1s6xH0tHeK+\nlg5xX/VFJ90iOTMOd+cWJTpPWd7X5Ix4dp3+iV6eb3P82PEyu25BcjWwO9yeNf4O3ImtSbuGiSz6\n4GqRz5OYmMixY8cICwtj9erVJYrJYIn54cOHiY2NpXHjxvIxjUbD/v37Wb58OWfPngUgOjoaNzc3\nuU90dDQuLi6GCkMQBEEQBOG5Z2Zswd4LW3GzdcfM2LK8w3kmSZI4fGUHTat3xMrMrlxjycpRsO2Q\nLZsDbbiX9CiWIxeqEHHLHI8a6U99fmZmJidOnCAsLIywsDAuXrwoD0RXmMS8f//+tGnTRv5akiTe\nfvtt6tevz5dffom7uzsuLi74+/vj5aV7+yIzM5MDBw4wd+7cAs9bEZbxeV5UpKWRnifivpYecW9L\nh7ivpUPc19Ih7qu+sAsheNZti4mRKYnSXe5mRPC69+gin6es72vo+WDMLMwY+tIolEpVmVzzSanp\nEsu3wfzVp5BufUyOUSOoMluvz7awRgwfoF/JkZOTQ1hYGIGBgQQGBnL48GGys7PldmNjY7y9vfH1\n9S1xjAZLzG1sbPKsOW5ubo6tra28Tvknn3zCjBkzaNiwIe7u7kybNg0rKysGDx5sqDAEQRAEQRCe\nS8lpCfwavJwW7t4AvNDmVaZvGINPs15UdahVvsE9Qwv3jjSo3qxQSfnNqEuYmVjgZFvNINdOTJFY\n/Ct892MS3J2LZfoWFEiY5Jwl1WwQWSatUKtgaE8YN1Q3uHzu3DkCAgIIDAwkJCSElJQU+XwKhQIv\nLy98fX3x9fWlY8eOmJubAyVfx7zUNhgCXeCP14+PHTuWjIwMxowZQ0JCAu3atcPf3x8LC4vSDEMQ\nBEEQBKHSO3s9nIY1W6BWGQFgbmpJz7av8vu+NYzpP+Wpc/bKm5HaCBvLwpWwXLh1isTUOF7rNqpE\n17yfILHgZ1jyG2hj/8Q2eToqbZxeH/vkr+j0+nrGvJzJxdOBTBkfSFBQENHR0Xr96tevLyfiXbt2\nxc6udMpxSjUxDw4OznNs0qRJTJo0qTQvKwiCIAiC8Nw5ey2UlvU76h3r0KQnF2+dIjUjGSvz52O3\ndCfT2ixdugSvmr7Uq+te5OffiZGYuwVWboeMLN0xu+xwvaRco9GQmZmJlc01jm7y5qep1/XO4erq\nKifivr6+VK9eNjuSlmpiLgiCIAiCIJRcVk4ml++eZWiPj/WOq1Rq3nv5y3KKqni0Wi1z587ljTfe\nyDfhDQ7Yx+mQm/iF9MDDw4NevXrx4osvUqdOnaee99pdidmbYd3fkJOr35ZgMRpF/C9kp8eQmZkp\n14jfv38f0JVkd+nSBV9fX7p3707Dhg3L5R0IkZgLgiAIgiBUcBdvnaSmUz3MTSv+Ciygq9POzs3C\nxMg0z/HJkyezceNGfv/9dzZt2kS9evX0+uzatUv+PCIigoiICObOncvUqVMZOnRonmudvSYxZxP8\nGACaB0uRS9ocSA2FpABICkJKOUKslCM/x8TEhA4dOsgj4l5eXqjV5Z8Wl38EgiAIgiAIwlM521Wn\nV/vKs1jGsYv7CL8Qwqh+E/WOz507l40bNwK6JbNfe+01Nm7cKC8UcunSJa5cuZLvOdu3by9/LkkS\nwcdh7hbYfQQkSYsqJQiLmImkZ6mQUk6BNlXur1AoaNW6NW3atKFfv3506NABMzMzQ3/bJSYSc0EQ\nBEEQhArO2bYaGGiVktKWnJbIH/vW8H7fr/WOL1u2jKVLl+odU6vVeouAODk5MWXKFHbt2kVoaCha\nrRaABg0aULduXXJyJbYGwbwf4fjp65AYgMn9mWSnx6DRpJP62Lld3BrS76Vu9OjRnS5dumBra1tq\n37OhiMRcEARBEAThOZGVnUFmTgY2FuW3ic+ve1fQ1sOXGs6PSlROnjzJnDlz9PpVqVKFjRs3UrNm\nTb1jw4cPZ/jw4dy/f59//vmHXbt24dWqPVNXxLBoVRCxN3XlKWTpJmw+mN+JSqXC1NQUMzMz/ve/\nsYwd+79844tJiMTK3AYzk4q3KqCyvAMQBEEQBEEQDONIRCA/BSx9dsdScuLyISLjbvJCu9f0jjdv\n3pxx48bJX1taWrJ+/Xrq169f4LnMzMzQqmy5FOXM/yauZOL7zsSGvQExq3VJuaoKRtZNsLOzo2rV\nqri5ueHo6IilpSVnzpyWd+N80k9BSzl/84RhvmEDEyPmgiAIgiAIzwnvJj0JObmDCzdP0rBm8zK9\ndnZOFr+FrOSdXmMxVpvkaR81ahRWVlbMmDGD1atX4+npqf/87GyOHj1KYGAg23cEcPLEUSTtY8ur\nKE3BqiPYdAMbXxRWLamb2ovM5EcFLDY2NowdO5bXX38931VV7sXdIib+Lp512xruGzcgkZgLgiAI\ngiBUUFpJi1JR+AIHI7URfTu+xR/71zC2+gJUhdhp01CMjUz4cOA0XT18AYYMGUKPHj1wdHREq9Vy\n+vRpeav7ffv2kZaW9lhvJVi21SXiVXzByhuF0hRTY3izF3z6GjhZ/4K/vz+HDx/G1dWVESNGYG9v\nX+D195/eRfsmfvImTRWNSMwFQRAEQRAqqODj28jJzeaFtq89u/MDnnXbEnLyLw6f3UNHzxdKMbq8\nHiblGo0GlUr/RYEkSVy7dk1OxIOCgoiNjdU/gVkjsPHVJeLWnVGoq8hNDlVg9AAYMwAcbR+Ohlfh\n1Vdf5dVXX31mbJnZGRy7uI8vhnxXou+xNInEXBAEQRAEoYI6ffUoPds8O+l8nEKhoL/PCH7Y9g2t\nG3XJs5Z4aTtz5gyfffYZy5Ytw9LSkqCgIAIDAwkICODmzZt6favYuZFt2Z10k25g0w2FcdU856vh\nnEmrRjvZ8PUAzE2Lv+lP2Plg6rs1xdbKodjnKG0iMRcEQRAEQaiAUtITiYq7hbtb0yI/t7pTHT4a\nOK3Mk/ITJ07wyiuvEBsbS5MmTcjMzNRrt7W1pZNPV5S2vuy/7ktctjsKhYL80m3vpvDZG/CStzHf\nbNhJYmorzE1r5tOzcGo4u1OnaqNiP78siMRcEARBEAShAjp7PZwGNZpjpC5ePbSznZuBI8orNS2F\nY+HHCQwMZOfOnRw7dkyvXaFQ0KlTJ3r37k3b9t3Yd6U5i7aqiLv0sJ0n+kN/H/jvG+Dd9GGjiraN\nunI0IpD+Pu8UO9aaLu7Ffm5ZEYm5IAiCIAhCBXTmWigt3L3LOww9Wq2WkydPEhgYyO5/drF//35y\nsnP1+piYmGBqaoqpqSkffvghoz/8ku+2Qv/pkJiS/3lNjeGt3roJne7V846ft2nUje+2jqdPh+Go\nVM9v+vr8fmeCIAiCIAiVlFbSkpQah0ctr3KNQ5Ikrly5Ik/YDA4OJi4uTq9P48aNqVGjBseOHcPU\n1BSlUreKzMBBQ0izH0+tgZCSnv/5Lc1gzED49HVwsi24ftzJtipOttU4dyMcz7rtDPb9VTQiMRcE\nQRAEQahglAol/3tjXrlcOyoqSk7EAwMDuXXrll67jb0lTVo0YPjrI+jTuz8uLi4AbNq0iYkTJyJJ\nEjU9+rP82BTSDuafbFtbwEeD4ONXwd6mcBM6e7QZVGGXOTQUkZgLgiAIgiA85w6c3o2xkQltGnXN\n05aUlERISIiciJ87d06v3c7Ojm7dutG1a1filJcZ9OKb+W5e5PvCEP48aMHB/QHsS5gN+ay/bmsF\nn7wGH74CVayKtsJKo5otitQfQKPJJTk9sUKvxPI4kZgLgiAIgiA859yc6rB6xyya1W0HkpLw8HDC\nwsKIiIggLCwMjUYj9zU3N6dTp074+vrSvXt3mjVrJpen5OdOjMTsTbDqL8jK7gfWffPM6nSoAv99\nXbcOubVF8Zc8LKrT10LZf+pvPnplepldsyREYi4IgiAIgvAc02g0xN5J5tKhGNqvaLine truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7bdfac8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_rts(noise=7., Q=.1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This underscores the fact that these filters are not *smoothing* the data in colloquial sense of the term. The filter is making an optimal estimate based on previous measurements, future measurements, and what you tell it about the behavior of the system and the noise in the system and measurements."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Fixed Lag Smoothing\n",
"\n",
"The RTS smoother presented above should always be your choice of algorithm if you can run in batch mode because it incorporates all available data into each estimate. Not all problems allow you to do that, but you may still be interested in receiving smoothed values for previous estimates. The number line below illustrates this concept."
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtoAAADaCAYAAACYceUaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADTlJREFUeJzt3XmIVeX/wPHPNakwi9Ro0TARApuoSKNEEEwhRP9oQaE9\nW/6wEluGQjPQNiorWzDNcKmsKAr7owVSK4wWw6TAdDK0rEYnJUxR07Dm+f0R36H5GTbj+JnrjK8X\nCN5z5p77zHmc+7w93HunUkopAQAAHFRdqj0AAADojIQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAk\nENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAA\nCYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMA\nQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoA\nAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2\nAAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKh\nDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBA\naAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAk\nENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAACYQ2AAAkENoAAJBAaAMAQAKhDQAA\nCbpWewCHo0ql0ux2KaVKIwEOhJ/hQ5v5oSX8O9mXc3LwuaINAAAJhDYAACQQ2gAAkEBoAwBAAqEN\nAAAJhDYAACSoFJ/d0u7+/8fnAAAcaiRi27miDQAACYQ2AAAkENoAAJDAr2A/BHgNFHQsfk3xoc38\n0BL+nezLe8gOPle0AQAggdAGAIAEQhsAABIIbQAASCC0AQAggdAGAIAEfgU7AAAkcEUbAAAS+IU1\nyVauXBkLFy6MI444IjZs2BBz586NOXPmxLZt22Ljxo1x3333Rf/+/as9TADokKyzreectR+hnej7\n77+PBQsWxMyZMyMiYty4cTF48OB48cUXo7GxMYYOHRoDBw6MO+64o8ojhc7B4nHoMjdksM62nnPW\nvoR2oieeeCKmT5/edHvXrl3Rs2fPGDx4cNTX10dtbW2MGzeuegOETsTicegyN2Sxzraec9a+vBky\n0YYNG6Jfv35Nt0899dS4/vrr44EHHqjeoKCTuvXWW2P69OlxzDHHRETE2LFjo76+Pj7//POor6+P\nZ555JiZPnhw9evSo8kgPP+aGLNbZ1nPO2pfQbidr166NM844I5YuXRrDhw+v9nCg07F4HLrMDe3B\nOtt6zlk+nzrSTj788MM48sgjY8iQIU3bvv/++6a/f/nll3HbbbfFwoULY/z48bF+/fpqDBM6rH+G\n3Nq1a2PTpk1x4YUXVm9ANDE3tIf/Wmc3b94cV111VZx77rltfqwdO3bEmDFj4ueff27zsaqpPc/Z\n4UpoJ9m9e3fcfffd8c0330RExJIlS+Kcc86Jo48+OiIiGhsb47HHHouIiD/++CPGjBkT99xzT1xz\nzTVx0003xRVXXFG1sUNH156Lx2+//RbTpk2L4447Li655JJm+6ZOnRq9evWKCRMmxLp169r0OBb2\n1muPufniiy9ixowZMW3atLjooovi448/buuwaaHWrLMRESeddFIMHz48Ro8e3abHnTdvXsyYMSMW\nLVoUHe1FAdU6Z4e1Qoo333yzVCqV8tprr5W6urpy1llnlaFDhzbtv//++8vy5ctLKaUsXry4nHnm\nmU37GhsbS/fu3csPP/zQ3sPmH9atW1fq6urK3r17m7Y1NDSUurq6sn379mZfu3379lJXV1caGhqa\nbd+7d2+pq6sr69evb9HxOTC///57ueuuu8qqVatKKaVceuml5fzzz2/a/9dff5Xx48c3u8/cuXPL\nlClTDsrjNzQ0lMmTJ5euXbuW7777rtm+Rx999D/vP2vWrP3unzt3bpk2bVqpVCrlxx9/bNNY21tn\nnptdu3aVSZMmNd1+4403Srdu3crGjRsPfMDJOtPzWmvW2f8ZO3Zs+fTTTw/K43fEn8dqn7PDkSva\nSYYNGxbjxo2LlStXxgsvvBDLly+P/v37x/jx42PixIkxZMiQuOCCCyLi79cv9urVq+m+lUolevTo\nEatXr67W8ImIESNGRE1NTWzatKlp26RJk6KmpibeeuutZl+7aNGiqKmpicmTJzfbXl9fHzU1NTFi\nxIgWHZ8D895778Xjjz8eq1evjm+//TbWrVsXRx11VNP+hx56aJ930b///vsxatSog/L4H3zwQUyY\nMCFGjhwZTz75ZNP2tWvXRk1NzX/ef8uWLfvdf+ONN8bUqVPbPM5q6Mxzs27dunj00UebrshfdNFF\nsXv37vjss8/aPvAknel5rTXrbMTfV2u//vrrGDx4cLz77rtx++23R7du3TrcVem2cM7an4/3S9Kr\nV6+YP39+s20vvPDCv37tr7/+Gt26dWu27eijj44dO3ZkDY8WqFQqUalU/nVbS7f/c39Ljs+B+efi\n8dVXX8Xy5cvjlltuifHjx8eRRx4ZF1988X4XjyVLlsTzzz8fu3btOqA52bhxY/Tu3Ttqa2tj9OjR\n8eCDD0bPnj1j2bJlceWVVx7Mb7XD6cxzc/bZZ8dnn33W9Pnf9fX1ERFx+umnt+m4mTrT81pr1tmI\nvz/LvW/fvvHqq6/G8OHDY+TIkXHnnXceVs/Dzln7E9qHgOOPP36f/x3u3LkzTjjhhCqNiIiIH374\nYZ9tCxYsiAULFuyz/brrrovrrrtun+39+vWLxsbGFh+fA1PtxeN/9xs2bFgMGDAgZs2aFffee29s\n3749unfvfkDH7Cw6+9wMHjy46e8PP/xw1NbWxjnnnNPm42Y5nJ/XFi9eHKtXr47nnnsuevToEaNH\nj46+fftGRMTMmTP3+yEE5513Xlx11VXtNdRDxv7OGS0jtA8BAwYMiDlz5jTd/vPPP2Pr1q1x2mmn\nVXFU0HkdzAV3zZo1MWDAgKbbtbW1UVtbG3feeWd07brvU+yWLVviqaeeavaf608++ST27NnTdLt7\n9+4xZcqUNn2PHVVHnZt58+ZFnz594pFHHmndN0y7Wbp0abz99tuxc+fOuOyyy2Lr1q2xZs2aqKmp\niQkTJlR7eIek/Z0zWqiqrxCnlPL3G0t69+5dfvrpp1JKKUuXLi0DBw6s8qig8xo2bFhZsWJF+eij\nj0qPHj1KKaWsXr36gI41e/bssmPHjqbbe/fuLaeeemq54YYbyieffNKiY0ybNq1FX9cR33zVWh1x\nbt55550yf/78Ukope/bsKRs2bDig8ZJn586d5cQTTyyNjY2loaGh1NTUlFL++43I+1OpVDr1XGec\ns8ORN0MeArp27RoLFy6Mhx56KF566aV4+eWX4/XXX6/2sKBT2rVrV6xZsyYGDRoUAwYMiFNOOSUi\nIpYtW3ZAx/vtt9+avQSha9euMXHixHjjjTeavazgYCmd+E1IHXFuli1bFps3b45Ro0bFL7/8Eu+9\n9140NDQclGNz8KxatSpGjhwZlUolTj755Bg0aFA899xzcemll7b6WK+++mrccsstUalUYtKkSfHs\ns88mjLj6DuY5O6xVu/QB2tPnn39err322qbb11xzTZk9e/Y+H2H2X1asWFGuv/760qdPn/L00083\n27dt27Zy9dVXt/hY/3XV9JVXXik333xz6dKlS7n88svLzJkzWzXWjqKjzc369evLscceWyqVStOf\nLl26NLuKDhze/Ap2gCqbPn163H333dUeBv/C3ABtIbQBACCB12gDAEACoQ0AAAmENgAAJBDaAACQ\nQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAA\nJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0A\nAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgD\nAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDa\nAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmE\nNgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEAC\noQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJBDaAACQ\nQGgDAEACoQ0AAAmENgAAJBDaAACQQGgDAEACoQ0AAAmENgAAJPg/x7mK9+JUODQAAAAASUVORK5C\nYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x9790908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from smoothing_internal import *\n",
"with book_format.figsize(y=3.):\n",
" show_fixed_lag_numberline()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"At step $k$ we can estimate $x_k$ using the normal Kalman filter equations. However, we can make a better estimate for $x_{k-1}$ by using the measurement received for $x_k$. Likewise, we can make a better estimate for $x_{k-2}$ by using the measurements recevied for $x_{k-1}$ and $x_{k}$. We can extend this computation back for an arbitrary $N$ steps.\n",
"\n",
"Derivation for this math is beyond the scope of this book; Dan Simon's *Optimal State Estimation* [2] has a very good exposition if you are interested. The essense of the idea is that instead of having a state vector $\\mathbf{x}$ we make an augmented state containing\n",
"\n",
"$$\\mathbf{x} = \\begin{bmatrix}\\mathbf{x}_k \\\\ \\mathbf{x}_{k-1} \\\\ \\vdots\\\\ \\mathbf{x}_{k-N+1}\\end{bmatrix}$$\n",
"\n",
"This yields a very large covariance matrix that contains the covariance between states at different steps. FilterPy's class `FixedLagSmoother` takes care of all of this computation for you, including creation of the augmented matrices. All you need to do is compose it just as if you are using the `KalmanFilter` class and then call `smooth()`, which implements the predict and update steps of the algorithm. \n",
"\n",
"Each call of `smooth` computes the estimate for the current measurement, but it also goes back and adjusts the previous `N-1` points as well. The smoothed values are contained in the list `FixedLagSmoother.xSmooth`. If you use `FixedLagSmoother.x` you will get the most recent estimate, but it is not smoothed and is no different from a standard Kalman filter output."
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x9a148d0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"standard deviation fixed lag: 0.682200657746\n",
"standard deviation kalman: 0.915729357528\n"
]
}
],
"source": [
"from filterpy.kalman import FixedLagSmoother, KalmanFilter\n",
"import numpy.random as random\n",
"\n",
"fls = FixedLagSmoother(dim_x=2, dim_z=1, N=8)\n",
"\n",
"fls.x = np.array([0., .5])\n",
"fls.F = np.array([[1.,1.],\n",
" [0.,1.]])\n",
"\n",
"fls.H = np.array([[1.,0.]])\n",
"fls.P *= 200\n",
"fls.R *= 5.\n",
"fls.Q *= 0.001\n",
"\n",
"kf = KalmanFilter(dim_x=2, dim_z=1)\n",
"kf.x = np.array([0., .5])\n",
"kf.F = np.array([[1.,1.],\n",
" [0.,1.]])\n",
"kf.H = np.array([[1.,0.]])\n",
"kf.P *= 200\n",
"kf.R *= 5.\n",
"kf.Q *= 0.001\n",
"\n",
"N = 4 # size of lag\n",
"\n",
"nom = np.array([t/2. for t in range (0, 40)])\n",
"zs = np.array([t + random.randn()*5.1 for t in nom])\n",
"\n",
"for z in zs:\n",
" fls.smooth(z)\n",
" \n",
"kf_x, _, _, _ = kf.batch_filter(zs)\n",
"x_smooth = np.array(fls.xSmooth)[:, 0]\n",
"\n",
"\n",
"fls_res = abs(x_smooth - nom)\n",
"kf_res = abs(kf_x[:, 0] - nom)\n",
"\n",
"plt.plot(zs,'o', alpha=0.5, marker='o', label='zs')\n",
"plt.plot(x_smooth, label='FLS')\n",
"plt.plot(kf_x[:, 0], label='KF', ls='--')\n",
"plt.legend(loc=4)\n",
"plt.show()\n",
"\n",
"print('standard deviation fixed lag:', np.mean(fls_res))\n",
"print('standard deviation kalman:', np.mean(kf_res))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here I have set `N=8` which means that we will incorporate 8 future measurements into our estimates. This provides us with a very smooth estimate once the filter converges, at the cost of roughly 8x the amount of computation of the standard Kalman filter. Feel free to experiment with larger and smaller values of `N`. I chose 8 somewhat at random, not due to any theoretical concerns."
]
},
{
"cell_type": "markdown",
"metadata": {},
@@ -606,6 +767,8 @@
"source": [
"[1] H. Rauch, F. Tung, and C. Striebel. \"Maximum likelihood estimates of linear dynamic systems,\" *AIAA Journal*, **3**(8), pp. 1445-1450 (August 1965).\n",
"\n",
"[2] Dan Simon. \"Optimal State Estimation,\" John Wiley & Sons, 2006.\n",
"\n",
"http://arc.aiaa.org/doi/abs/10.2514/3.3166"
]
}
+57
View File
@@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
"""
Created on Tue May 27 21:21:19 2014
@author: rlabbe
"""
from filterpy.kalman import UnscentedKalmanFilter as UKF
from filterpy.kalman import MerweScaledSigmaPoints
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse,Arrow
import math
import numpy as np
import stats
from stats import plot_covariance_ellipse
def show_fixed_lag_numberline():
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim(0,10)
ax.set_ylim(0,10)
# draw lines
xmin = 1
xmax = 9
y = 5
height = 1
plt.hlines(y, xmin, xmax)
plt.vlines(xmin, y - height / 2., y + height / 2.)
plt.vlines(4.5, y - height / 2., y + height / 2.)
plt.vlines(6, y - height / 2., y + height / 2.)
plt.vlines(xmax, y - height / 2., y + height / 2.)
plt.vlines(xmax-1, y - height / 2., y + height / 2.)
# add numbers
plt.text(xmin, y-1.1, '$x_0$', fontsize=20, horizontalalignment='center')
plt.text(xmax, y-1.1, '$x_k$', fontsize=20, horizontalalignment='center')
plt.text(xmax-1, y-1.1, '$x_{k-1}$', fontsize=20, horizontalalignment='center')
plt.text(4.5, y-1.1, '$x_{k-N+1}$', fontsize=20, horizontalalignment='center')
plt.text(6, y-1.1, '$x_{k-N+2}$', fontsize=20, horizontalalignment='center')
plt.text(2.7, y-1.1, '.....', fontsize=20, horizontalalignment='center')
plt.text(7.2, y-1.1, '.....', fontsize=20, horizontalalignment='center')
plt.axis('off')
plt.show()
if __name__ == '__main__':
#show_2d_transform()
#show_sigma_selections()
show_sigma_transform(True)
#show_four_gps()
#show_sigma_transform()
#show_sigma_selections()