Batch processing and RTS.

This belonged with the last check in. Added desciptions on
batch processing and using the RTS smoothing algorithm.
This commit is contained in:
Roger Labbe committed 2014-12-13 20:05:06 -08:00
1 parent a794fdced2
commit 0c6999e25f
3 files changed
+408 -202

No files matched your search

+22 -23
View File
@@ -1,7 +1,7 @@
{
"metadata": {
"name": "",
"signature": "sha256:977e85323406c88caf44809425339ba81920c38d8fdba4011a544e4cea573690"
"signature": "sha256:492530ff0ddd97db5e24c23a8bdc358b1994c47f912d2c7ad0fe4b85f11ec641"
},
"nbformat": 3,
"nbformat_minor": 0,
@@ -261,7 +261,7 @@
"output_type": "pyout",
"prompt_number": 1,
"text": [
"<IPython.core.display.HTML at 0x7f09578a54e0>"
"<IPython.core.display.HTML at 0x7f37de3cbf98>"
]
}
],
@@ -294,7 +294,7 @@
"output_type": "display_data",
"png": "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\nSVJOTk6DAJ2YmKjExEStXbu2RU/q8XhadD8AAAA0jQHC4PCpB7qurs6vT5qWlqaEhARNmjRJJSUl\nfn1sAACAUMUAYXD49P+sy+Xy2xN++umnuu6661RYWKisrCw9/PDDWrJkSaO3dbvdfnteBEd4eLgk\namdX1M/eqJ99UTt7s1L99n33lSRp0JXdLbEeqztXO6N8CtD+3IG+/vrrJUldunTRE088oaFDhzZ5\n27lz59b/Oy0trb6lBAAAABfK+fKoJGngFV1MXol1bdiwQRs3bpQkhYWFKS0tzfBjBH0H+nzewvnU\nqVMbfFxUVBSwdcA/zr3bpVb2RP3sjfrZF7WzNyvV74s9hyVJiZ0iLbEeK0pJSVFKSoqks7XbtGmT\n4cfw2gPt8XhUUVGhmpoa1dbWqrKyUrW1tZKkiooKVVdXq66uTpWVlaqqqmpw35kzZyojI6PBsdzc\nXG3dulW1tbUqKirS7NmzNXLkSMOLBgAAQEMMEAaP1wC9dOlSRUVF6ZlnntGyZcsUGRmpJ598UgUF\nBYqKitKwYcN06NAhRUZG6pZbbmlw38LCQhUUFDQ4duzYMY0ZM0YXX3yx+vXrp65du2r+/Pn+/6oA\nAABCDAOEweP1/92srCxlZWU1+rnmTkW3ePHiC45lZGRo//79vq8OAAAAPuEKhMHDpbwBAAAcgCsQ\nBg8BGgAAwAG4AmHwEKABAABsjgHC4CJAAwAA2BwDhMFFgAYAALA5BgiDiwANAABgcwwQBhcBGgAA\nwOYYIAwuAjQAAICNMUAYfARoAAAAG2OAMPgI0AAAADbGAGHwEaABAABsjAHC4CNAAwAA2BgDhMFH\ngAYAALApBgjNQYAGAACwKQYIzUGABgAAsCkGCM1BgAYAALApBgjNQYAGAACwKQYIzUGABgAAsCEG\nCM1DgAYAALAhBgjNQ4AGAACwIQYIzUOABgAAsCEGCM1DgAYAALAhBgjNQ4AGAACwGQYIzUWABgAA\nsBkGCM1FgAYAALAZBgjNRYAGAACwGQYIzUWABgAAsBkGCM1FgAYAALARBgjNR4AGAACwEQYIzUeA\nBgAAsBEGCM1HgAYAALARBgjNR4AGAACwEQYIzUeABgAAsAkGCK2BAA0AAGATDBBaAwEaAADAJhgg\ntAYCNAAAgE0wQGgNBGgAAACbYIDQGgjQAAAANsAAoXUQoAEAAGyAAULrIEADAADYAAOE1kLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f09578a5b70>"
"<matplotlib.figure.Figure at 0x7f37de3d54e0>"
]
}
],
@@ -335,7 +335,7 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f0957895be0>"
"<matplotlib.figure.Figure at 0x7f37c155d208>"
]
}
],
@@ -371,7 +371,7 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f093b034cf8>"
"<matplotlib.figure.Figure at 0x7f37c14ba5f8>"
]
}
],
@@ -428,18 +428,18 @@
"\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.\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",
"\n",
" Predict Step\n",
"$$\\begin{aligned}\n",
"\\mathbf{P}^- &= \\mathbf{FP}_k\\mathbf{F}^\\mathsf{T} + \\mathbf{Q }\n",
"\\mathbf{P} &= \\mathbf{FP}_k\\mathbf{F}^\\mathsf{T} + \\mathbf{Q }\n",
"\\end{aligned}$$\n",
"\n",
" Update Step\n",
"$$\\begin{aligned}\n",
"\\mathbf{K}_k &= \\mathbf{P}_k\\mathbf{F} \\hspace{2 mm}inv(\\mathbf{P}^-) \\\\\n",
"\\mathbf{K}_k &= \\mathbf{P}_k\\mathbf{F} \\hspace{2 mm}\\mathbf{P}^{-1} \\\\\n",
"\\mathbf{x}_k &= \\mathbf{x}_k + \\mathbf{K}_k(\\mathbf{x}_{x+1} - \\mathbf{FX}_k) \\\\\n",
"\\mathbf{P}_k &= \\mathbf{P}_k + \\mathbf{K}_k(\\mathbf{P}_{K+1} - \\mathbf{P}^-)\\mathbf{K}_k^\\mathsf{T}\n",
"\\mathbf{P}_k &= \\mathbf{P}_k + \\mathbf{K}_k(\\mathbf{P}_{K+1} - \\mathbf{P})\\mathbf{K}_k^\\mathsf{T}\n",
"\\end{aligned}$$\n",
"\n",
"As always, the hardest part of the implementation is correctly accounting for the subscripts. A basic implementation without comments or error checking would be:\n",
@@ -471,20 +471,19 @@
"import numpy as np\n",
"from numpy import random\n",
"import matplotlib.pyplot as plt\n",
"from filterpy.kalman import KalmanFilter, rts_smoother\n",
"from filterpy.kalman import KalmanFilter\n",
"\n",
"def plot_rts(noise):\n",
" random.seed(123)\n",
" fk = KalmanFilter(dim_x=2, dim_z=1)\n",
"\n",
" fk.x = np.array([[0.],\n",
" [1.]]) # initial state (location and velocity)\n",
" fk.x = np.array([0., 1.]) # initial state (location and velocity)\n",
"\n",
" fk.F = np.array([[1., 1.],\n",
" [0., 1.]]) # state transition matrix\n",
"\n",
" fk.H = [[1., 0.]] # Measurement function\n",
" fk.P = .01 # covariance matrix\n",
" fk.P = 10. # covariance matrix\n",
" fk.R = noise # state uncertainty\n",
" fk.Q = 0.001 # process uncertainty\n",
"\n",
@@ -492,13 +491,13 @@
" zs = [t + random.randn()*noise for t in range (40)]\n",
"\n",
" # filter data with Kalman filter, than run smoother on it\n",
" mu, cov, _, _ = fk.batch_filter (zs)\n",
" M,P,C = rts_smoother(mu, cov, fk.F, fk.Q)\n",
" mu, cov, _, _ = fk.batch_filter(zs)\n",
" M,P,C = fk.rts_smoother(mu, cov)\n",
"\n",
" # plot data\n",
" plt.plot(zs,'r', marker='o', linewidth=1, alpha=0.5, label='measurement')\n",
" plt.plot(M[:, 0], c='b', label='RTS')\n",
" plt.plot(mu[:, 0, 0], c='g', linestyle='--', label='KF output')\n",
" plt.plot(mu[:, 0], c='g', linestyle='--', label='KF output')\n",
" plt.plot([0, len(zs)], [0, len(zs)], 'k', linewidth=1, label='ideal') \n",
" plt.legend(loc=4)\n",
"\n",
@@ -512,19 +511,19 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f093afcd7f0>"
"<matplotlib.figure.Figure at 0x7f37c1286320>"
]
}
],
"prompt_number": 5
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I've injected a lot of noise into the signal to allow you to visually distinguis the RTS output from the ideal output. In the graph above we can see that the Kalman filter, drawn as the green dotted line, is reasonably smooth compared to the input, but it still wanders from from the ideal line when several measurements in a row are biased towards one side of the line. In contrast, the RTS output is both extremely smooth and very close to the ideal output.\n",
"I've injected a lot of noise into the signal to allow you to visually distinguish the RTS output from the ideal output. In the graph above we can see that the Kalman filter, drawn as the green dotted line, is reasonably smooth compared to the input, but it still wanders from from the ideal line when several measurements in a row are biased towards one side of the line. In contrast, the RTS output is both extremely smooth and very close to the ideal output.\n",
"\n",
"With a perhaps more reasonable amount of noise we can see that the RTS output nearly lies on the ideal output. The Kalman filter output, while much better, still varies by a far greater amount."
]
@@ -541,13 +540,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAAF2CAYAAACLY5UZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd0VVXexvHvbUluKiGhhyIkgUDoFpAERAQsoSmhSxcQ\nC2UcdUYddZh5xxkRHQuO0rEBUZo0xYgkEVBRRAKEGIoSQg019bbz/hGMRoKAXgjl+ayVBTk5Z5+9\ndy7w5PI7e5sMwzAQEREREbkGmSu6AyIiIiIiFUVhWERERESuWQrDIiIiInLNUhgWERERkWuWwrCI\niIiIXLMUhkVERETkmqUwLCIiIiLXrPMOw6mpqZjNZmbMmAGA0+lkxIgRBAcHU7duXZKSki5aJ0VE\nRERELgbr+Zzkcrl4/PHHiYmJwWQyAfDiiy+ydetWsrOz2bRpEwkJCbRt25aIiIiL2mEREREREW85\nr3eGX3nlFRISEqhatWrpsaSkJB5++GGCg4Pp0KEDbdu2ZdGiRRetoyIiIiIi3nbOMHzgwAFmz57N\nxIkTyxzPzMykYcOGDBo0iPnz59O4cWN27Nhx0ToqIiIiIuJt5wzDjzzyCE888QS+vr5ljufn5xMY\nGEh6ejo5OTkEBQWRl5d30ToqIiIiIuJtv1kz/Pnnn7N792769OkDgGEYGIYBQEBAAPn5+Xz77bcA\njBs3jqCgoDPaSE5O9nafRURERETK1alTpws6/zfD8MaNG1m/fj1m889vIKekpJCenk50dDTbt2+n\nVatWAGzbto0ePXqU205MTMwFdUrKFxYWxsKFC+nQoUNFd+WqoPn0Hs2ld2k+vUvz6T2aS+/SfP5+\nmZmZTJs2jeXLl5OQkMDIkSNp27YtaWlpF9zWb4bhcePGMW7cuNLPO3bsyL333svw4cN5/vnnefnl\nl0lISGDTpk1s2LCB2bNnX3AHREREROTalZ2VRXZqKhaXC7fVSkR8PBGRkWecZxgGqampvPnmm2zd\nupXBgweTmppKWFjYH7r/eS2tVp4JEyaQkZFB7dq1CQ0NZebMmdSqVesPdUZERERErh3ZWVnkJCXR\n2cen9FhyUhIkJpYG4qKiIhYvXsy0adMAGDVqFNOnT8fPz88rfbigMLxmzZqfL7RamTFjRukmHHJp\nqOTEuzSf3qO59C7Np3dpPr1Hc+ld1/p8ZqemlgRhjwecTvD1pZOPD6vT0rCHhjJ37lzmzJlD06ZN\nefrpp4mPjy/d88JbtB3zFeZa/0PjbZpP79Fcepfm07s0n96jufSua30+LS4XuN1YMzKw5OQAkJGb\ny/8++ID4+Hj279/PggULeOutt2jfvr3XgzD8gTIJEREREZE/wm0yYd2+HcPHh9UmE68uXMiWw4fp\n2KaNV+qBz4fCsIiIiIhceoWF1D5+nMcOHCB53z4AHmzdmvtuv516/ftfkiAMCsMiIiIicokd3buX\nd598khlffUWDRo3o2GEgxQVdqBa/mYi4uHJXk7hYVDMsIiIiIpdEZmYmfx4/nrhbbiHb4+H+p6bz\nY6tGvLYnlumr7qLyzSMvaRAGvTMsIiIiIhdRmfWBt2xhRNNmPDJiBi+fSuPw8YFQzQHtP6N/TF/8\n/Y1L3j+FYRERERHxul+vDzw0cRAdfe9nsu96TlYaCVUKwTDR0NGb//Qez/XX5VVIPxWGRURERMRr\ncnNzy6wPPG7cM2R8cwv/nhzEsUI7jPo32AqJMd3F83dOpGWtRhXaX4VhEREREfnDMjMzmTZtGsuX\nLychIYHnn/+Ajz9uxfhxdoodJY+ptWrloGvz/+PmNi5aVW9RwT0uoTAsIiIico3KzsoiOzUVi8uF\n22olIj7+gh5gK1MPvHUrgwcPZsqUDbwzrwZD/5IF+wMw4eGOdocZ/WcTN9zgAGIv3oB+B4VhERER\nkWtQdlYWOUlJJdshn5aclASJiecMxL+uBx4xYhQ9e77NjFmVmJz8HnT4O7Q6ycA17/PAw8HU7Vjr\noo7lj1AYFhEREbkGZaem0tnHB1N+PobVCr6+dPLxYXVa2lnD8K/rgR977Gl++OF2/vuyP9khH0DH\npyHsewCi3FUZ+fcc6ja9vLecVhgWERERuQZZHA4su3djzs3FZBgYFguekBBsBQWY8vIwAgNLz/11\nPfDUqUmsXduK8eMDOHHCDHfdDzf8D4B6fhE8mdeaO+56FOrUq6DRnT+FYREREZFrjOn4cSzffYfJ\n4cDZvDlYrZgKCjCdOIFx7BgBc+bgttv59MQJpq5dS/qePQweMoSZM9cxf349Bgyw43SaAGhUZy83\nhkewnBDuD7+HcQeq4ereC0+ty7c04pcUhkVERESuIdbvv8f3k0+o2aULH23dSiebDQAjIIBPbDbC\nundn+ubNTHvjDUxOJ/fHxXP/dcN5bVk7Ji/aCzsbYzYb3NrhMF2qzGVsnRwA/rszgc9X72D3xLuo\ndYUEYVAYFhEREbk2uN34pqRgzcqisGdPqteogatJE1anpWFxOjnqcLD+2DEWDxxI06ZNeeLpSRw7\n1oWX5u1kV+gs6PkY+OTRf/1KHm3wHdn7UrjVZcHIDQGnE1t2Nh1iY/k4I4NabdpU9GjPm8KwiIiI\nyFXOdPw49mXL8AQFkT9oENjtAERERlLg8ZSpB541K4kvvmjBQ28s43jM7dDlq9J2mlduzdDJULVy\nP36ckgM5OZgPHsTkdOJq0gTDbsfidFbUMH8XhWERERGRq9hPZRGOG2/E2aoVmEzlrg+8YEEaixbV\no39/f06dMsPtX0Gtr7ATQmLDexgcO4CYyj+vDOEKC8NtMsGvSiLcp8surhQKwyIiIiJXI5erpCxi\n1y4Ke/bEU6PGGesDjxo1igkTZjF7dhXuusuOy1XyUFzbtsX07N0fn/rX0a1BAnar/YzmI+LjSU5K\notMv1yl2OIiIi7s04/MShWERERGRq8yvyyJy8/OZ++KLpesD/+1vT1Poupm/r57BD5vug4UfY7EY\n9OhRwOjR+TRv7gRqn/4oX0RkJCQmltYcu202IuLiLmgHu8uBwrCIiIjIVcSamYlvcjKOm25ia0AA\n0556qrQe+O23F5Ce3oxHZi8np0kcNNgLQOKo7/jT8GrUru2+oHtFREZeceH31xSGRURERK4GLhe+\na9di2bWLVdWr88aUKaX1wMuWpbFiRR36P5LO0Rvvgps3AFDN05Tnbv0bXaLCgQsLwlcLhWERERGR\nK1B2VhbZqalYXC48TicReXlsyM1l6pdfgtnMqFGjeOaZWcydG0bXrv4UFJihfTLU3kCQqSpPtH2U\nATF9sJgtFT2UCqUwLCIiInKFyc7KIicpic4+PuTu28fM9esZfvAgMS1a8PSzzxIcfCtvvBHEI4/4\n4fGUPBQXH1/MsPuGsiM0n+FNhhPoE3iOu1wbFIZFRERErjDZqanUzs3l4c8/Z3FODj0jI1nVtz9L\njDt4+eUerN9gA8OE1Qo9exYwenQesbEuwEJXHq7o7l9WFIZFRERErhCGYZC6ejXPv/YaOUeOcF9U\nFOvuHUlydkcGL+tA5tFqUCcN8+jx3OY7gX8M7EStWp6K7vZlTWFYRERE5DJXVFTE4gULmD51Kqai\nIjpFRfFAl/68/f1tdJgfx+GCIKi0G58BvXBEL8YDnKz+KrVqdazorl/2zOdz0qBBg6hRowYhISE0\nb96cpUuXAvDMM89gs9kICgoiKCiI+vXrX9TOioiIiFxLcnNzeXHyZNq0bs2q6dOZ1Lcvb85dR07V\nJJq98y/+se4ODjstVOn2IJaHo3FEL8bP4sfEVhN56/a3Krr7V4Tzemf40UcfZcaMGfj6+rJ69WoS\nEhI4evQoAP3792fu3LkXtZMiIiIi15LMzEymvfEGyz/8kJ7R0SweN46jkffy+ns1WfmCH4ZR8lBc\ny6idJLRZy7QG83Dj4u7Iu/nLDX+hZmDNCh7BleO8wnCzZs2AkjoVh8NBYGAgJpOp9JiIiIiI/DGG\nYZCamsqbb7zB1u++Y2SzZmz461Os8+vDuPdqsXFjybbHNpvB3XcXMGpUHo0a2YHbabG/Er4WX1pW\nbVmxg7gCnXfN8NixY5k5cyZ2u53ly5fj7++PyWTiww8/JDw8nNq1azNp0iQSEhIuZn9FREREKtQv\n1/d1W61ExMdf8C5s2VlZbFmwALPTSW5+PumFhXywZAk4HDzYogXTJjzB+6fu5o5pEezZUxLXgis5\n6TZkCxMH16R69bIPxbWp0cZr47vWmIwLeGvX5XLxxhtv8MILL7Bt2zb27NlD1apVCQkJYenSpdx7\n77188803REdHl16TnJxMXFzcRen8tcZmswHgdDoruCdXB82n92guvUvz6V2aT+/RXMIPO3aw++23\n6eTjU3os2eHgukGDqNuw4QW10dLj4fWNG3l940bqhIYyNj6eTrGdeH1vd95MCic3t+R/4evUcxE/\n5j2+8PsHec6TbB+zHbvNflHGdyWz2WysWbOGTp06XdB1FxSGfxITE8PkyZO56667yhxPSEiga9eu\nPPTQQ6XHkpOTWbNmTenn7du3p0OHDhd6S0F/CXmb5tN7NJfepfn0Ls2n92gu4bPXX6fTkSNQXIzp\n++/BMMBi4dPQUG7p1g3DZgMfH/jp19MfhtVa+vs5U6bwxZo1LMzMpHeDBjwcFobZHcWf80bxacYN\nFBeXhODW17toO3I+qx3/YMfRDADqhdRjYe+FNK7SuCKn4bKxdu1aUlJSALBYLLRv3/6Cw/DvWlrt\nQvPz2LFjy3yem5v7e257zQsLCwM0f96i+fQezaV3aT69S/PpPZpLKDpxgsJTp7Clp+OpXBlPUBAm\nt5sim43jNhsmpxPy80t+dToxnf4wiotZu307r332Gd/88AMP1ajB9hYtyXC15fGdA1mxr1Line truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f093aff1eb8>"
"<matplotlib.figure.Figure at 0x7f37ba2b7080>"
]
}
],
"prompt_number": 6
"prompt_number": 9
},
{
"cell_type": "markdown",