Copy editing.
`
This commit is contained in:
1 parent
1610678354
commit
f64aec3693
3 files changed
+173
-158
No files matched your search
+75
-44
@@ -210,19 +210,15 @@
|
||||
" margin-top: 0.2em; \n",
|
||||
" }\n",
|
||||
" a:link{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:visited{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:hover{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:focus{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:active{\n",
|
||||
@@ -555,7 +551,7 @@
|
||||
"\n",
|
||||
"which is the form we are looking for! We have reduced the problem of finding the fundamental matrix to one of finding the value for $e^{\\mathbf At}$.\n",
|
||||
"\n",
|
||||
"$e^{\\mathbf At}$ is known as the matrix exponential. It can be computed with this power series:\n",
|
||||
"$e^{\\mathbf At}$ is known as the [matrix exponential](https://en.wikipedia.org/wiki/Matrix_exponential). It can be computed with this power series:\n",
|
||||
"\n",
|
||||
"$$e^{\\mathbf At} = \\mathbf{I} + \\mathbf{A}t + \\frac{(\\mathbf{A}t)^2}{2!} + \\frac{(\\mathbf{A}t)^3}{3!} + ... $$\n",
|
||||
"\n",
|
||||
@@ -574,8 +570,8 @@
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"\\mathbf F &=\\mathbf{I} + \\mathbf A \\Delta t + \\mathbf{0} \\\\\n",
|
||||
"&= \\begin{bmatrix}1&0\\\\0&1\\end{bmatrix} + \\begin{bmatrix}0&1\\\\0&0\\end{bmatrix}t\\\\\n",
|
||||
"&= \\begin{bmatrix}1&t\\\\0&1\\end{bmatrix}\n",
|
||||
"&= \\begin{bmatrix}1&0\\\\0&1\\end{bmatrix} + \\begin{bmatrix}0&1\\\\0&0\\end{bmatrix}\\Delta t\\\\\n",
|
||||
"&= \\begin{bmatrix}1&\\Delta t\\\\0&1\\end{bmatrix}\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"We plug this into $\\mathbf x_k= \\mathbf{Fx}_{k-1}$ to get\n",
|
||||
@@ -585,7 +581,42 @@
|
||||
"x_k &=\\begin{bmatrix}1&\\Delta t\\\\0&1\\end{bmatrix}x_{k-1}\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"You will recognize this as the matrix we derived analytically for the constant velocity Kalman filter in the **Multivariate Kalman Filter** chapter."
|
||||
"You will recognize this as the matrix we derived analytically for the constant velocity Kalman filter in the **Multivariate Kalman Filter** chapter.\n",
|
||||
"\n",
|
||||
"SciPy's linalg module includes a routine `expm()` to compute the matrix exponential. It does not use the Taylor series method, but the [Padé Approximation](https://en.wikipedia.org/wiki/Pad%C3%A9_approximant). There are many (at least 19) methods to computed the matrix exponential, and all suffer from numerical difficulties[1]. But you should be aware of the problems, especially when $\\mathbf A$ is large. If you search for \"pade approximation matrix exponential\" you will find many publications devoted to this problem. \n",
|
||||
"\n",
|
||||
"In practice this may not be of concern to you as for the Kalman filter we normally just take the first two terms of the Taylor series. But don't assume my treatment of the problem is complete and run off and try to use this technique for other problem without doing a numerical analysis of the performance of this technique. Interestingly, one of the favored ways of solving $e^{\\mathbf At}$ is to use a generalized ode solver. In other words, they do the opposite of what we do - turn $\\mathbf A$ into a set of differential equations, and then solve that set using numerical techniques! \n",
|
||||
"\n",
|
||||
"Here is an example of using `expm()` to solve $e^{\\mathbf At}$."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[ 1.0, 0.1],\n",
|
||||
" [ 0.0, 1.0]])"
|
||||
]
|
||||
},
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"from scipy.linalg import expm\n",
|
||||
"\n",
|
||||
"dt = 0.1\n",
|
||||
"A = np.array([[0, 1], \n",
|
||||
" [0, 0]])\n",
|
||||
"expm(A*dt)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -676,7 +707,7 @@
|
||||
"\n",
|
||||
"$$\\mathbf F = \\begin{bmatrix}1 & t \\\\ -(k/m) t & 1-(c/m) t \\end{bmatrix}$$\n",
|
||||
"\n",
|
||||
"This may or may not give you enough precision. You can easily check this by computing $\\frac{(\\mathbf At)^2}{2!}$ for your constants and seeing how much this matrix contributes to the results. "
|
||||
"This may or may not give you enough precision. You can easily check this by computing $\\frac{(\\mathbf At)^2}{2!}$ for your constants and seeing how much this matrix contributes to the results."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -685,11 +716,11 @@
|
||||
"source": [
|
||||
"### Linear Time Invariant Theory\n",
|
||||
"\n",
|
||||
"*Linear Time Invariant Theory*, also known as LTI System Theory, gives us a way to find $\\Phi$ using the inverse Laplace transform. You are either nodding your head now, or completely lost. I will not be using the Laplace transform in this book. LTI system theory tells us that \n",
|
||||
"[*Linear Time Invariant Theory*](https://en.wikipedia.org/wiki/LTI_system_theory), also known as LTI System Theory, gives us a way to find $\\Phi$ using the inverse Laplace transform. You are either nodding your head now, or completely lost. I will not be using the Laplace transform in this book. LTI system theory tells us that \n",
|
||||
"\n",
|
||||
"$$ \\Phi(t) = \\mathcal{L}^{-1}[(s\\mathbf{I} - \\mathbf{F})^{-1}]$$\n",
|
||||
"\n",
|
||||
"I have no intention of going into this other than to say that the Laplace transform $\\mathcal{L}$ converts a signal into a space $s$ that excludes time, but finding a solution to the equation above is non-trivial. If you are interested, the Wikipedia article on LTI system theory provides an introduction [2]. I mention LTI because you will find some literature using it to design the Kalman filter matrices for difficult problems. "
|
||||
"I have no intention of going into this other than to say that the Laplace transform $\\mathcal{L}$ converts a signal into a space $s$ that excludes time, but finding a solution to the equation above is non-trivial. If you are interested, the Wikipedia article on LTI system theory provides an introduction. I mention LTI because you will find some literature using it to design the Kalman filter matrices for difficult problems. "
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -698,7 +729,7 @@
|
||||
"source": [
|
||||
"### Numerical Solutions\n",
|
||||
"\n",
|
||||
"Finally, there are numerical techniques to find $\\mathbf F$. As filters get larger finding analytical solutions becomes very tedious (though packages like SymPy make it easier). C. F. van Loan [3] has developed a technique that finds both $\\Phi$ and $\\mathbf Q$ numerically. Given the continuous model\n",
|
||||
"Finally, there are numerical techniques to find $\\mathbf F$. As filters get larger finding analytical solutions becomes very tedious (though packages like SymPy make it easier). C. F. van Loan [2] has developed a technique that finds both $\\Phi$ and $\\mathbf Q$ numerically. Given the continuous model\n",
|
||||
"\n",
|
||||
"$$ \\dot x = Ax + Gw$$\n",
|
||||
"\n",
|
||||
@@ -772,7 +803,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -799,7 +830,7 @@
|
||||
"⎣ 6 2 ⎦ "
|
||||
]
|
||||
},
|
||||
"execution_count": 2,
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -834,7 +865,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -855,7 +886,7 @@
|
||||
"[\\Delta{t}⋅\\Phi_s]"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -870,7 +901,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -899,7 +930,7 @@
|
||||
"⎣ 2 ⎦ "
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -949,7 +980,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -971,7 +1002,7 @@
|
||||
"⎣ 2 ⎦ "
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1011,7 +1042,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1038,7 +1069,7 @@
|
||||
"⎣ 2 ⎦ "
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1076,7 +1107,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1100,7 +1131,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1129,7 +1160,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1150,7 +1181,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1181,7 +1212,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"execution_count": 12,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1263,7 +1294,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -1273,7 +1304,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x5c29940>"
|
||||
"<matplotlib.figure.Figure at 0x9163eb8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1298,7 +1329,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1307,7 +1338,7 @@
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAu4AAADxCAYAAACUAjKtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VOW9B/DvLJlJMkkmezIhgSSQPWxJQHZkEY0ILr1u\nVEV97lNbxQV722qVq15Fqe2t1fbC0+JVqSsoLlwFBSv7JskkQICEsCRkmcmeyT7ruX8kjBlmAoQs\nZ2by/TxPnjl5zzsnv8npsV/evOc9EkEQBBARERERkVuTil0AERERERFdGYM7EREREZEHYHAnIiIi\nIvIADO5ERERERB6AwZ2IiIiIyAMwuBMREREReQAGdyIiIiIiDyBqcLfZbFi1ahUSExPh5+eHxMRE\nrFq1CjabTcyyiIiIiIjcjlzMH75mzRqsW7cO//znP5GZmYljx45h+fLl8PX1xXPPPSdmaURERERE\nbkXU4H7w4EEsWbIEN998MwBg9OjRWLJkCQ4fPixmWUREREREbkfUqTKzZs3Czp07UVJSAgA4efIk\nfvjhByxevFjMsoiIiIiI3I6oI+6/+93v0NraivT0dMhkMlitVjz33HN45JFHxCyLiIiIiMjtiBrc\nP/nkE7z//vv45JNPkJ6ejsLCQjzxxBNISEjAQw895NDXYDCIVCURERER0cCp1eoBvV8iCIIwSLX0\n2+jRo/Hb3/4WK1assLetXr0aGzZswOnTpx36MrgTERERkScbaHAXdY57R0cHpFLHEqRSKZeDJCIi\nIiK6hKhTZZYsWYI1a9YgPj4eGRkZ0Gq1eOONN/Dggw9e9n0D/dcKiSsvLw8AkJOTI3IlNFA8l96D\n59I78Dx6D55L7zGYs0ZEDe5/+9vfsGrVKjz22GOora2FRqPBI488glWrVolZFhERERGR2xE1uKtU\nKvz5z3/Gn//8ZzHLICIiIiJye6LOcSciIiIioqvD4E5ERERE5AEY3ImIiIiIPACDOxERERGRB2Bw\nJyIiIiLyAAzuREREREQegMGdiIiIiMgDMLgTEREREQ0ys8WMrw98MKjHFPUBTERERERE3uZCzRl8\nuOMt6BouYHbGkkE7LoM7EREREdEgMFvM+O7Hjfg+73PYBNugH5/BnYiIiIhogHqPsl+kkCsH9Wcw\nuBMRERERXaPuUfZN+D5vs8Mo+7hRGbh34YpB/VmiBveEhASUl5c7tS9evBj/93//J0JFRERERERX\np69R9qWzHsCsCbmQSqQwGAyD9vNEDe55eXmwWq3276urq5GdnY27775bxKqIiIiIiPrW1yj72FEZ\nWLZwBSKCNUPyc0UN7mFhYQ7fr1+/Hmq1GnfeeadIFRERERER9a2vUfYlM+/H7Ik3QyoZutXW3WqO\n+zvvvIP7778fSuXgTuQnIiIiIhoIsUbZe5MIgiAM+U+5Ctu3b0dubi6OHj2KzMxMp/295weVlpYO\nZ2lERERENII1tOmwv3QLmjvq7G1yqQ8mj5mPVE0OJBJJn+9NSkqyb6vV6gHV4TYj7uvXr8eUKVNc\nhnYiIiIiouFmtVlwrGIfiir3Q8BPY91RQaMxY9wtCPQLHdZ63CK419XVYcuWLVi3bt1V9c/JyRni\nimgo5eXlAeB59AY8l96D59I78Dx6D55L8Q3WXHavWVXmonfffRe+vr645557xC6FiIiIiEYws8WM\n7Uc2YccR8eay98Utgvv//u//4t5774W/v7/YpRARERHRCCXmijFXQ/TgvmvXLpw5cwYfffSR2KUQ\nERER0QjkzqPsvYke3K+//nqHhzAREREREQ2Xitqz+GD7m247yt6b6MGdiIiIiGi4Wazd67K7+yh7\nbwzuRERERDSiVNSexYfb30J1Q7m9zUeuwNKZD7jdKHtvDO5ERERENCL0Ocoek45lNzzulqPsvTG4\nExEREZHX89RR9t4Y3ImIiIjIa3n6KHtvDO5ERERE5JW8YZS9NwZ3IiIiIvIq3aPsn2LHkc88fpS9\nNwZ3IiIiIvIa3jbK3huDOxERERF5vPauVnx7eCP2HtsGm+2nh3t6+ih7bwzuREREROSxrFYL9hd9\nh62HPkFHV6u93UeuwJIZ92POpMUePcreG4M7EREREXmkk2X5+GLPu6hpqnRoHxebiXsXPOYVo+y9\niR7c9Xo9nnnmGWzduhWtra0YO3Ys1q1bh9mzZ4tdGhERERG5IV1DBb7c+y5OlWsd2sOConDb7Acx\nYew0SCQSkaobOqIGd4PBgJkzZ2LOnDnYtm0bwsPDce7cOURGRopZFhERERG5ofbOFmw7/An2HfvW\nYbUYpcIPN065E3MnLYGP3EfECoeWqMH9D3/4A2JiYvDuu+/a28aMGSNiRURERETkbixWM/Ye24Zv\nD29Ep7Hd3i6RSDE9YyFunrYMQapgESscHqIG96+++gq5ubm45557sHPnTsTExODf//3f8dhjj4lZ\nFhERERG5AUEQcOJ8Hr7c+y5qm6sd9iXFjscdcx7GqIgEkaobfhJBEASxfrifnx8kEglWrlyJu+66\nC4WFhVixYgX+8Ic/4NFHH3XoazAY7NulpaXDXSoRERERDaOm9lrknd8BneG8Q3ugbwiy4xciLjTZ\nI+axJyUl2bfVavWAjiVqcFcqlZg6dSr27t1rb3vuuefw5Zdf4sSJEw59GdyJiIiIvF+XuR2FF3aj\nVF8AAT/FVB+ZEhPjZiNFMwUyqUzECvtnMIO7qFNlNBoN0tLSHNrS0tLw1ltvXfZ9OTk5Q1kWDbG8\nvDwAPI/egOfSe/BcegeeR+8xEs+l2WLGnqPf4LvCTegyddjbJRIpZmYuQu60exHoP7DgK4beg88D\nJWpwnzlzJkpKShzaSkpKeIMqERER0QghCAKOnzuML/e+h3qD3mFfyuiJuH32w4gJZzYERA7uK1eu\nxMyZM/Hqq6/i7rvvhlarxV//+lesWbNGzLKIiIiIaBhU1Z3H53veQWnlcYf2yOAY3D7nYaTHZ3vE\nPPbhImpwz8nJwZdffolnn30Wr7zyCkaPHo3Vq1fjl7/8pZhlEREREdEQamlvxjcHP8ShE987zGP3\nU6qQe909mD0hFzKZ6M8JdTui/0Zyc3ORm5srdhlERERENMTMFhN2FX6N7Uc+hdHUaW+XSqSYNSEX\nudfdDZVfkIgVujfRgzsREREReTdBEFB45iC27NuAhpYah33pY7Jw25yHEB0aJ1J1noPBnYiIiIiG\nTEXtWXy++39xtvqkQ3tUaCxun/0Q0uOzRarM8zC4ExEREdGgM7Q34usDH+LHkz84zGP39w3EzdPu\nxczMRZzH3k/8bRERERHRoDFZjNip3YIdeZthMnfZ26VSGeZMuBk3XXc3/H0DRKzQczG4ExEREdGA\nCYKAgtL9+GrfBjS11jnsy0jIwW2zH0JUyCiRqvMODO5ERERENCDl+tP4fM87OK8rdmjXhI3G7bMf\nRuqYSSJV5l0Y3ImIiIjomjS21OGbgx/iSPEuh3aVXxAWT1uG6Zk3QCaViVOcF2JwJyIiIqJ+qWvW\nYUfeZvx4aidsNqu9XSaVY+6kxVg09U74KzmPfbAxuBMRERHRVdE3VmD7kc+QX7IXgmBz2Ddh7HW4\nddaDiAjWiFSd92NwJyIiIqLLqqorw3dHNuFo6UGHpR0BIDEmDTdPW4bkuPEiVTdyMLgTERERkUvl\n+lJ8d+RTFJ370WlfStxELJp6J5JiM0WobGQSNbi/9NJLeOmllxzaoqOjUV1dLVJFRERERHSu+hS+\n/XETissLnPZlxOdg0dR/Q4ImVYTKRjbRR9xTU1Oxe/duCEL3n11kMt55TERERDTcBEFAaeVxfPvj\nJpypLHLaP3HsNCyaeifiIseKUB0BbhDc5XI5IiIixC6DiIiIaEQSBAGnyrX47sdPndZhl0ikyEqa\niRum/BtiwseIVCFdJHpwP3fuHEaNGgWlUonrrrsOr776KhISEsQui4iIiMir2QQbis79iO9+/BQV\ntWcd9kklUkxJvR43TPkZIvm0U7chanCfNm0a3nvvPaSmpqK2thYvv/wyZsyYgZMnTyIkJETM0oiI\niIi8ks1mReGZg9j+46eobih32CeTyjEtfQEW5tyBMHWUSBVSXyTCxcnlbqCjowMJCQl49tln8dRT\nTznsMxgM9u3S0tLhLo2IiIjIo9kEG87XFeF45X60dDY47JNJ5UiKmoyMUdOhUgaJVKF3SkpKsm+r\n1eoBHUv0qTK9+fv7IyMjg8GciIiIaJBYbVacrT2KosoDaDM2O+yTS32QoslBesx18FPwSafuzq2C\ne1dXF4qLizF//vzL9svJyRmmimgo5OXlAeB59AY8l96D59I78Dx6j8E4lyaLEYdOfI/v8z5Hc5vj\nCLuvwh9zJy3G9ZOWQOXHEfah1HvWyECJGtx/85vfYMmSJRg9ejRqamrw8ssvo6OjA8uXLxezLCIi\nIiKPZTR3Yf/xb/FD/ldo6Why2OfvG4h5k5dg9sSb4a/kCLunETW4V1ZWYtmyZaivr0dERASmTZuG\nQ4cOIS4uTsyyiIiIiDxOp7EDe49+g50FW9De1eqwL9BPjfnZt2HW+JugVPiJVCENlKjB/eOPPxbz\nxxMRERF5vPauVuwu+Bq7j36NTmO7wz51QBgWZt+O6Zk3QCFXilQhDRa3muNORERERFentaMZO7Vb\nsPfYVhjNXQ77QoMicUPOzzA1bT585D4iVUiDjcGdiIiIyIMY2hrxr/wvsL/oO5gtJod9EcExWDTl\nZ8hJmQuZjDHP2/CMEhEREXmAqrrz2HtsKw6f2gmr1eKwTxM2Goum/BsmJ82EVCoTqUIaagzuRERE\nRG7KbDHj6JkD2HtsG87rip32x0Yk4sapd2L82OsglUhFqJCGE4M7ERERkZtpMxpwWLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x84e3f98>"
|
||||
"<matplotlib.figure.Figure at 0x943e908>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1332,7 +1363,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -1349,7 +1380,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"execution_count": 16,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1379,7 +1410,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"execution_count": 17,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1388,7 +1419,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x869e198>"
|
||||
"<matplotlib.figure.Figure at 0x9425908>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1408,7 +1439,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"execution_count": 18,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1491,7 +1522,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 18,
|
||||
"execution_count": 19,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1529,7 +1560,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 19,
|
||||
"execution_count": 20,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1545,7 +1576,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xa8f4748>"
|
||||
"<matplotlib.figure.Figure at 0xb2aa240>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1626,7 +1657,7 @@
|
||||
"\n",
|
||||
"The Multivariate Kalman filter make the same assumption but for states and measurements that are vectors, not scalars. Dr. Kalman was able to prove that if these assumptions hold true then the Kalman filter is *optimal* in a least squares sense. Colloquially this means there is no way to derive more information from the noise. In the remainder of the book I will present filters that relax the constraints on linearity and Gaussian noise.\n",
|
||||
"\n",
|
||||
"Before I go on, a few more words about statistical inversion. As Calvetti and Somersalo write in *Introduction to Bayesian Scientific Computing*, \"we adopt the Bayesian point of view: *randomness simply means lack of information*.\"[4] Our state parametize physical phenomena that we could in principle measure or compute: velocity, air drag, and so on. We lack enough information to compute or measure their value, so we opt to consider them as random variables. Strictly speaking they are not random, thus this is a subjective position. \n",
|
||||
"Before I go on, a few more words about statistical inversion. As Calvetti and Somersalo write in *Introduction to Bayesian Scientific Computing*, \"we adopt the Bayesian point of view: *randomness simply means lack of information*.\"[3] Our state parametize physical phenomena that we could in principle measure or compute: velocity, air drag, and so on. We lack enough information to compute or measure their value, so we opt to consider them as random variables. Strictly speaking they are not random, thus this is a subjective position. \n",
|
||||
"\n",
|
||||
"They devote a full chapter to this topic. I can spare a paragraph. Bayesian filters are possible because we ascribe statistical properties to unknown parameters. In the case of the Kalman filter we have closed-form solutions to find an optimal estimate. Other filters, such as the discrete Bayes filter or the particle filter which we cover in a later chapter, model the probability in a more ad-hoc, non-optimal manner. The power of our technique comes from treating lack of information as a random variable, describing that random variable as a probability distribution, and then using Bayes Theorem to solve the statistical inference problem."
|
||||
]
|
||||
@@ -1711,13 +1742,13 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
" * [1] *Matrix Exponential* http://en.wikipedia.org/wiki/Matrix_exponential \n",
|
||||
" * [1] C.B. Molwer and C.F. Van Loan \"Nineteen Dubious Ways to Compute the Exponential of a Matrix, Twenty-Five Years Later,\", *SIAM Review 45, 3-49*. 2003.\n",
|
||||
"\n",
|
||||
" * [2] *LTI System Theory* http://en.wikipedia.org/wiki/LTI_system_theory\n",
|
||||
"\n",
|
||||
" * [2] C.F. van Loan, \"Computing Integrals Involving the Matrix Exponential,\" IEEE *Transactions Automatic Control*, June 1978.\n",
|
||||
" \n",
|
||||
" * [3] C.F. van Loan, \"Computing Integrals Involving the Matrix Exponential,\" IEEE Transactions Automatic Control, June 1978.\n",
|
||||
" \n",
|
||||
" * [4] Calvetti, D and Somersalo E, \"Introduction to Bayesian Scientific Computing: Ten Lectures on Subjective Computing,\", Springer, 2007."
|
||||
" * [3] Calvetti, D and Somersalo E, \"Introduction to Bayesian Scientific Computing: Ten Lectures on Subjective Computing,\", *Springer*, 2007."
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
+83
-81
@@ -210,19 +210,15 @@
|
||||
" margin-top: 0.2em; \n",
|
||||
" }\n",
|
||||
" a:link{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:visited{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:hover{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:focus{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:active{\n",
|
||||
@@ -359,9 +355,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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\n72y3SLNIylUo7gXluCsUi7CRneHksWU6DrbWBLlR5TsKxXZmqbZmKXZ1o/7GF8sP0tpiUQ4y1Wup\nzrUVbbVidVGOu0KxCmQyvsuZeO51olqvijDrxVa6F4Vis7OYrVmJU7pRf+OLJdCnehbacpja57Md\nbLVi9VCOu0KxCEt1plfL+C43YUloJpWRVygUG5WlVlXZqhHnVOUwFYqVoBx3xbZkuZPD/W5OtBTn\nP5VMJp10ZiNuNysUiq3FSnYYQ6GQlI6sZsR5vRcAqXZhteUwxRiTx6cCMYrFUI67Ytux2tuRG7U+\nr9frxePxyG1ZMdalll1b74lPoVBsPtLZi6XI+FaLjSI5SdevA0hZeaapqQn4uoykQpEK5bgrNiWr\n5VSuZelEbSRpJZ9P5/xn0s+L15K3ZbXlyFKVL0t+HxZOLAqFQnEvLGZHNkrQYyUspfKYeD9V46lQ\nKERXVxfwdadVhSIVWes9AIViuYhoytWrV6UBFM7nUhCTg9vtpru7O+E8K0GcTxs5GRgYWDDGxe4p\n+Tjtdql4P/nek7dUtZNDcpfCdNe9evUqLS0thMPhhNe1/72dWc7f1mamqamJ73znO1RUVJCVlcX/\n/J//M+H9//gf/yNZWVkJ/2tsbEw4ZmZmhj/+4z+mtLQUk8nEd77zHbxe7/28DcUmItl2itfu1WlN\ndd61JNWclOn9dPddW1tLbW2tctoVGVERd8WGZikR8ZVsi66mFl3rQIuxCKdX2yUv0znEZxoaGqio\nqEj7vsvlWvQ8gJwU4Ot7zRTJMhqNCY1B0jUL2W5slC33+8HU1BT19fU8//zz/OEf/mHKY86cOcOv\nfvUr4vE4ALm5uQnvv/TSS/zTP/0T77//PsXFxfzoRz/i6aef5urVq+h0ujW/B8XGJJMdX6vf1Hr+\nVpcyb6UqI6nttKpQpEM57op7Zq3kJumcpnSlF5fLvW7LCk2ikKNodYlaR3gp5w6Hw7S2thKJRHji\niScWfCYcDi/YRl3KtnOm/xavpdKdintQE8j24amnnuKpp54C4Pnnn095TF5eHqWlpSnfC4VCvPPO\nO7z77rs8/vjjALz33ntUVVVx/vx5zpw5szYDV2xotsPidzH9ulbCuNh5FIrFUI674p5YL6OcLuln\npaUXU5FKupKOcDhMKBSioqJiSdr05PO6XC5aW1vp7u6mrq5uwf2JKgTCmV6uE76cyLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7b75d68>"
|
||||
"<matplotlib.figure.Figure at 0x7b7d4e0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -386,7 +382,7 @@
|
||||
"$$\\begin{aligned}x&=x+y\\\\\n",
|
||||
"y &= 0.1x^2 + y^2\\end{aligned}$$ \n",
|
||||
"\n",
|
||||
"Using a finite number of randomly sampled points to compute a result is called a *Monte Carlo* (MC) method. The idea is simple. Generate enough points to get a representative sample of the problem, run the points through the system you are modeling, and then compute the results on the transformed points. \n",
|
||||
"Using a finite number of randomly sampled points to compute a result is called a [*Monte Carlo*](https://en.wikipedia.org/wiki/Monte_Carlo_method) (MC) method. The idea is simple. Generate enough points to get a representative sample of the problem, run the points through the system you are modeling, and then compute the results on the transformed points. \n",
|
||||
"\n",
|
||||
"In a nutshell this is what particle filtering does. The Bayesian filter algorithm we have been using throughout the book is applied to thousands of particles, where each particle represents a *possible* state for the system. We extract the estimated state from the thousands of particles using weighted statistics of the particles."
|
||||
]
|
||||
@@ -433,7 +429,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x508e2e8>"
|
||||
"<matplotlib.figure.Figure at 0x7cd35f8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -492,7 +488,7 @@
|
||||
"pts = uniform(-1, 1, (N, 2))\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"A point is inside a circle if its distance from the center of the circle is less than or equal to the radius. We compute the distance with `numpy.linalg.norm`. If you aren't familiar with this, the norm is the magnitude of a vector. Since vectors start at (0, 0) calling norm will compute the point's distance from the origin.\n",
|
||||
"A point is inside a circle if its distance from the center of the circle is less than or equal to the radius. We compute the distance with `numpy.linalg.norm`, which computes the magnitude of a vector. Since vectors start at (0, 0) calling norm will compute the point's distance from the origin.\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"dist = np.linalg.norm(pts, axis=1)\n",
|
||||
@@ -526,7 +522,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8511160>"
|
||||
"<matplotlib.figure.Figure at 0x81ce7f0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -580,7 +576,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x84158d0>"
|
||||
"<matplotlib.figure.Figure at 0x81dba90>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -596,11 +592,11 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The *probability density function* (PDF) is the probability that the random value falls between 2 values. For example, we may want to know the probability of x being between 0 and 2 in the graph above. This is a continuous function, so we need to take the integral to find the area under the curve, as the area is equal to the probability for that range of values to occur. \n",
|
||||
"The probability density function (PDF) gives the probability that the random value falls between 2 values. For example, we may want to know the probability of x being between 0 and 2 in the graph above. This is a continuous function, so we need to take the integral to find the area under the curve, as the area is equal to the probability for that range of values to occur. \n",
|
||||
" \n",
|
||||
"$$P[a \\le X \\le b] = \\int_a^b f_X(x) \\, dx$$\n",
|
||||
"\n",
|
||||
"It is easy to compute this integral for a Gaussian. But real life is not so easy. For example, the plot below shows a possible and realistic probability distribution. There is no way to analytically describe an arbitrary curve, let alone integrate it analytically."
|
||||
"It is easy to compute this integral for a Gaussian. But real life is not so easy. For example, the plot below shows a probability distribution. There is no way to analytically describe an arbitrary curve, let alone integrate it."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -614,7 +610,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x85af240>"
|
||||
"<matplotlib.figure.Figure at 0x85aa9b0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -638,21 +634,21 @@
|
||||
"source": [
|
||||
"## The Particle Filter\n",
|
||||
"\n",
|
||||
"All of this brings us to the particle filter. Consider tracking a robot or a car in an urban environment. For consistency I will use the robot localization problem from the EKF and UKF chapters. In this problem we tracked a robot that had a sensor measures the range and bearing to landmarks. \n",
|
||||
"All of this brings us to the particle filter. Consider tracking a robot or a car in an urban environment. For consistency I will use the robot localization problem from the EKF and UKF chapters. In this problem we tracked a robot that has a sensor which measures the range and bearing to known landmarks. \n",
|
||||
"\n",
|
||||
"Particle filters are a family of algorithms. I'm presenting a specific form of a particle filter that is intuitive to grasp and relates to the problems we have studied in this book. This will leave a few of the steps seeming a bit 'magical' since I haven't offered a full explanation. That will follow later in the chapter.\n",
|
||||
"\n",
|
||||
"Taking insight from the discussion in the previous section we start by creating several thousand *particles*. Each particle has a position that represents a possible belief of where the robot is in the scene, and perhaps a heading and velocity. Suppose that we have no knowledge of the location of the robot. We would want to scatter the particles uniformly over the entire scene. If you think of all of the particles representing a probability distribution, locations where there are more particles represent a higher belief, and locations with fewer particles represents a lower belief. If there was a large clump of particles near a specific location that would imply that we were more certain that the robot is there.\n",
|
||||
"\n",
|
||||
"Each particle needs a weight - ideally the probability that it represents the true position of the robot. This probability is rarely computable, so we only require it be *proportional* to that probability, which is computable. At initialization we have no reason to favor one particle over another, so we would typically assign a weight of $1/N$, for $N$ particles. We did the same thing in the discrete Bayes chapter. When we initialized the filter we assigned a probability of $1/N$ to each hallway position. We use $1/N$ so that the sum of all probabilities equals one.\n",
|
||||
"Each particle needs a weight - ideally the probability that it represents the true position of the robot. This probability is rarely computable, so we only require it be *proportional* to that probability, which is computable. At initialization we have no reason to favor one particle over another, so we assign a weight of $1/N$, for $N$ particles. We use $1/N$ so that the sum of all probabilities equals one.\n",
|
||||
"\n",
|
||||
"The combination of particles and weights forms the *probability distribution* for our problem. Think back to the *Discrete Bayes* chapter. In that chapter we modeled positions in a hallway as discrete and uniformly spaced. This is very similar except the particles are randomly distributed in a continuous space rather than constrained to discrete locations. In this problem the robot can move on a plane of some arbitrary dimension, with the lower right corner at (0,0).\n",
|
||||
"\n",
|
||||
"To track our robot we need to maintain states for x, y, and heading. We will store `N` particles in a `(N, 3)` shaped array. The three columns contain x, y, and heading, in that order. \n",
|
||||
"\n",
|
||||
"If you are passively tracking something (no control input), then you would need to include velocity in the state and use that estimate to make the prediction. When using particle filters I minimize the dimensionality of the state. More dimensions requires exponentially more particles to form a good estimate.\n",
|
||||
"If you are passively tracking something (no control input), then you would need to include velocity in the state and use that estimate to make the prediction. More dimensions requires exponentially more particles to form a good estimate, so we always try to minimize the number of random variables in the state.\n",
|
||||
"\n",
|
||||
"Here is code to create a either a uniform or Gaussian distribution of particles over a given region for this problem:"
|
||||
"This code creates a uniform and Gaussian distribution of particles over a region:"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -699,10 +695,10 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[ 0.772, 0.336, 3.32],\n",
|
||||
" [ 0.333, 0.34, 3.44],\n",
|
||||
" [ 0.6, 0.274, 3.99],\n",
|
||||
" [ 0.0539, 0.0218, 4.01]])"
|
||||
"array([[ 0.772, 0.336, 4.17],\n",
|
||||
" [ 0.333, 0.34, 4.32],\n",
|
||||
" [ 0.6, 0.274, 5.02],\n",
|
||||
" [ 0.0539, 0.0218, 5.03]])"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
@@ -711,7 +707,7 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"create_uniform_particles((0,1), (0,1), (0, 5), 4)"
|
||||
"create_uniform_particles((0,1), (0,1), (0, np.pi*2), 4)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -754,16 +750,22 @@
|
||||
"\n",
|
||||
"Next we get a set of measurements - one for each landmark currently in view. How should these measurements be used to alter our probability distribution as modeled by the particles?\n",
|
||||
"\n",
|
||||
"Think back to the **Discrete Bayes** chapter. In that chapter we modeled positions in a hallway as discrete and uniformly spaced. We assigned a probability to each position. When a new measurement came in we multiplied the current probability of that position by the probability that the measurement matched that location:\n",
|
||||
"Think back to the **Discrete Bayes** chapter. In that chapter we modeled positions in a hallway as discrete and uniformly spaced. We assigned a probability to each position which we called the *prior*. When a new measurement came in we multiplied the current probability of that position (the *prior*) by the *likelihood* that the measurement matched that location:\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def update(map_, belief, z, prob_correct):\n",
|
||||
" scale = prob_correct / (1. - prob_correct)\n",
|
||||
" for i, val in enumerate(map_):\n",
|
||||
" if val == z:\n",
|
||||
" belief[i] *= scale\n",
|
||||
" normalize(belief)\n",
|
||||
"```"
|
||||
"def update(likelihood, prior):\n",
|
||||
" posterior = prior * likelihood\n",
|
||||
" return normalize(posterior)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"which is an implementation of the equation\n",
|
||||
"\n",
|
||||
"$$x = \\| \\mathcal L \\bar x \\|$$\n",
|
||||
"\n",
|
||||
"which is a realization of Bayes theorem:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}P(x \\mid z) &= \\frac{P(z \\mid x)\\, P(x)}{P(z)} \\\\\n",
|
||||
" &= \\frac{\\mathtt{likelihood}\\times \\mathtt{prior}}{\\mathtt{normalization}}\\end{aligned}$$"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -795,7 +797,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"In the literature this part of the algorithm is called *Sequential Importance Sampling*, or SIS. The equation for the weights is called the *importance density*. I will give these theoretical underpinnings in a following section. For now I hope that this makes intuitive sense. If we weight the particles according to how how they match the measurements they are probably a good sample for the probability distribution of the system after incorporating the measurements. Theory proves this is so. Different problems will need to tackle this step in slightly different ways but this is the general idea."
|
||||
"In the literature this part of the algorithm is called *Sequential Importance Sampling*, or SIS. The equation for the weights is called the *importance density*. I will give these theoretical underpinnings in a following section. For now I hope that this makes intuitive sense. If we weight the particles according to how how they match the measurements they are probably a good sample for the probability distribution of the system after incorporating the measurements. Theory proves this is so. The weights are the *likelihood* in Bayes theorem. Different problems will need to tackle this step in slightly different ways but this is the general idea."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -810,7 +812,7 @@
|
||||
"\n",
|
||||
"Here I adopt the notation $x^i$ to indicate the i$^{th}$ particle. A superscript is used because we often need to use subscripts to denote time steps the k$^{th}$ or k+1$^{th}$ particle, yielding the unwieldy $x^i_{k+1}$. \n",
|
||||
"\n",
|
||||
"This computes both the mean and variance of the particles:"
|
||||
"This function computes both the mean and variance of the particles:"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -869,13 +871,13 @@
|
||||
"\n",
|
||||
"The SIS algorithm suffers from the *degeneracy problem*. It starts with uniformly distributed particles with equal weights. There may only be a handful of particles near the robot. As the algorithm runs any particle that does not match the measurements will acquire an extremely low weight. Only the particles which are near the robot will have an appreciable weight. We could have 5,000 particles with only 3 contributing meaningfully to the state estimate! We say the filter has *degenerated*.\n",
|
||||
"\n",
|
||||
"This problem is solved by some form of *resampling* of the particles. Particles with very small weights do not meaningfully describe the probability distribution of the robot. \n",
|
||||
"This problem is usually solved by some form of *resampling* of the particles. Particles with very small weights do not meaningfully describe the probability distribution of the robot. \n",
|
||||
"\n",
|
||||
"The resampling algorithm discards particles with very low probability and replaces them with new particles with higher probability. It does that by duplicating particles with relatively high probability. The duplicates are slightly dispersed by the noise added in the predict step. This results in a set of points in which a large majority of the particles accurately represent the probability distribution.\n",
|
||||
"\n",
|
||||
"There are many resampling algorithms. For now let's look at one of the simplest, *simple random resampling*, also called *multinomial resampling*. It samples from the current particle set $N$ times, making a new set of particles from the sample. The probability of selecting any given particle should be proportional to its weight.\n",
|
||||
"\n",
|
||||
"We accomplish this with NumPy's `cumsum` function. `cumsum` computes the cumulative sum of an array. That is, element one is the sum of elements zero and one, element two is the sum of elements zero and one, etc. Then we generate random numbers in the range of 0.0 to 1.0 and do a binary search to find the weight that most closely matches that number:"
|
||||
"We accomplish this with NumPy's `cumsum` function. `cumsum` computes the cumulative sum of an array. That is, element one is the sum of elements zero and one, element two is the sum of elements zero, one and two, etc. Then we generate random numbers in the range of 0.0 to 1.0 and do a binary search to find the weight that most closely matches that number:"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -904,7 +906,7 @@
|
||||
"source": [
|
||||
"We don't resample at every epoch. For example, if you received no new measurements you have not received any information from which the resample can benefit. We can determine when to resample by using something called the *effective N*, which approximately measures the number of particles which meaningfully contribute to the probability distribution. The equation for this is\n",
|
||||
"\n",
|
||||
"$$\\hat{N}_{eff} = \\frac{1}{\\sum w^2}$$\n",
|
||||
"$$\\hat{N}_\\text{eff} = \\frac{1}{\\sum w^2}$$\n",
|
||||
"\n",
|
||||
"and we can implement this in Python with"
|
||||
]
|
||||
@@ -925,7 +927,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"If $\\hat{N}_{eff}$ falls below some threshold it is time to resample. A useful starting point is $\\frac{1}{2}N$, but this varies by problem. It is also possible for $\\hat{N}_{eff} = N$, which means the particle set has collapsed to one point (each has equal weight). It may not be theoretically pure, but if that happens I create a new distribution of particles in the hopes of generating particles with more diversity. If this happens to you often, you may need to increase the number of particles, or otherwise adjust your filter. We will talk more of this later."
|
||||
"If $\\hat{N}_\\text{eff}$ falls below some threshold it is time to resample. A useful starting point is $N/2$, but this varies by problem. It is also possible for $\\hat{N}_\\text{eff} = N$, which means the particle set has collapsed to one point (each has equal weight). It may not be theoretically pure, but if that happens I create a new distribution of particles in the hopes of generating particles with more diversity. If this happens to you often, you may need to increase the number of particles, or otherwise adjust your filter. We will talk more of this later."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -936,7 +938,7 @@
|
||||
"\n",
|
||||
"There is more to learn, but we know enough to implement a full particle filter. We will implement the *Sampling Importance Resampling filter*, or SIR.\n",
|
||||
"\n",
|
||||
"I need to introduce a more sophisticated resampling method than I gave above. FilterPy provides several resampling methods. I will describe them later. They take an array of weights and returns indexes particles that have been chosen for the resampling. We just need to write a function that performs the resampling from these indexes:"
|
||||
"I need to introduce a more sophisticated resampling method than I gave above. FilterPy provides several resampling methods. I will describe them later. They take an array of weights and returns indexes to the particles that have been chosen for the resampling. We just need to write a function that performs the resampling from these indexes:"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -947,8 +949,6 @@
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from filterpy.monte_carlo import systematic_resample\n",
|
||||
"\n",
|
||||
"def resample_from_index(particles, weights, indexes):\n",
|
||||
" particles[:] = particles[indexes]\n",
|
||||
" weights[:] = weights[indexes]\n",
|
||||
@@ -966,7 +966,8 @@
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -981,7 +982,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x85659b0>"
|
||||
"<matplotlib.figure.Figure at 0x7e60470>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -989,6 +990,7 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from filterpy.monte_carlo import systematic_resample\n",
|
||||
"from numpy.linalg import norm\n",
|
||||
"from numpy.random import randn\n",
|
||||
"import scipy.stats\n",
|
||||
@@ -1084,9 +1086,9 @@
|
||||
"\n",
|
||||
"The next line incorporates the measurement into the filter. This does not alter the particle positions, it only alters the weights. If you recall the weight of the particle is computed as the probability that it matches the Gaussian of the sensor error model. The further the particle from the measured distance the less likely it is to be a good representation.\n",
|
||||
"\n",
|
||||
"The final two lines example the effective particle count ($\\hat{N}_{eff})$. If it falls below $\\frac{1}{2}N$ we perform resampling to try to ensure our particles form a good representation of the actual probability distribution.\n",
|
||||
"The final two lines example the effective particle count ($\\hat{N}_\\text{eff})$. If it falls below $N/2$ we perform resampling to try to ensure our particles form a good representation of the actual probability distribution.\n",
|
||||
"\n",
|
||||
"Now let's look at this with all the particles plotted. Seeing this happen interactively is much more useful, but this format still gives us useful information. I plotted the original random distribution of points in a very pale green and large circles to help distinguish them from the subsequent iterations where the particles are plotted with black pixels. The number of particles makes it hard to see the details, so I limited the number of iterations to 8 so we can zoom in and look more closely."
|
||||
"Now let's look at this with all the particles plotted. Seeing this happen interactively is much more instructive, but this format still gives us useful information. I plotted the original random distribution of points in a very pale green and large circles to help distinguish them from the subsequent iterations where the particles are plotted with black pixels. The number of particles makes it hard to see the details, so I limited the number of iterations to 8 so we can zoom in and look more closely."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1108,7 +1110,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x85c2908>"
|
||||
"<matplotlib.figure.Figure at 0x85cc198>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1129,7 +1131,7 @@
|
||||
"\n",
|
||||
"The shape of the particle cloud is an ellipse. This is not a coincidence. The sensors and robot control are both modeled as Gaussian, so the probability distribution of the system is also a Gaussian. The particle filter is a sampling of the probability distribution, so the cloud should be an ellipse.\n",
|
||||
"\n",
|
||||
"It is important to recognize that the particle filter algorithm *does not require* the sensors or system to be Gaussian or linear. Because we represent the probability distribution with a cloud of particles we can handle any probability distribution and strongly nonlinear problems. There can be discontinuities and hard limits in the probability model. For example "
|
||||
"It is important to recognize that the particle filter algorithm *does not require* the sensors or system to be Gaussian or linear. Because we represent the probability distribution with a cloud of particles we can handle any probability distribution and strongly nonlinear problems. There can be discontinuities and hard limits in the probability model. "
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1141,7 +1143,7 @@
|
||||
"The first few iterations of the filter resulted in many duplicate particles. This happens because the model for the sensors is Gaussian, and we gave it a small standard deviation of $\\sigma=0.1$. This is counterintuitive at first. The Kalman filter performs better when the noise is smaller, yet the particle filter can perform worse.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"We can reason why this is true. If $\\sigma=0.1$, the robot is at (1, 1) and a particle is at (2, 2) the particle is 14 standard deviations away from the robot. This gives it a near zero probability. It contributes nothing to the estimate of the mean, and it is extremely unlikely to survive after the resampling. If $\\sigma=1.4$ then the particle is only $1\\sigma$ away and thus it will contribute to the estimate of the mean. During resampling it is likely to be copied one or more times.\n",
|
||||
"We can reason about why this is true. If $\\sigma=0.1$, the robot is at (1, 1) and a particle is at (2, 2) the particle is 14 standard deviations away from the robot. This gives it a near zero probability. It contributes nothing to the estimate of the mean, and it is extremely unlikely to survive after the resampling. If $\\sigma=1.4$ then the particle is only $1\\sigma$ away and thus it will contribute to the estimate of the mean. During resampling it is likely to be copied one or more times.\n",
|
||||
"\n",
|
||||
"This is *very important* to understand - a very accurate sensor can lead to poor performance of the filter because few of the particles will be a good sample of the probability distribution. There are a few fixes available to us. First, we can artificially increase the sensor noise standard deviation so the particle filter will accept more points as matching the robots probability distribution. This is non-optimal because some of those points will be a poor match. The real problem is that there aren't enough points being generated such that enough are near the robot. Increasing `N` usually fixes this problem. This decision is not cost free as increasing the number of particles significantly increase the computation time. Still, let's look at the result of using 100,000 particles."
|
||||
]
|
||||
@@ -1166,7 +1168,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8b19a58>"
|
||||
"<matplotlib.figure.Figure at 0x85b1cc0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1218,7 +1220,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x9092e48>"
|
||||
"<matplotlib.figure.Figure at 0x8c4f828>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1258,7 +1260,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8b4e2b0>"
|
||||
"<matplotlib.figure.Figure at 0x8c06320>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1287,11 +1289,11 @@
|
||||
"\n",
|
||||
"Our difficulty is that in many problems we don't know the distribution. For example, the tracked object might move very differently than we predicted with our state model. How can we draw a sample from a probability distribution that is unknown? \n",
|
||||
"\n",
|
||||
"There is a theorem from statistics called *importance sampling*[1]. Remarkably it gives us a way to draw samples from a different and known probability distribution and use those to compute the properties of the unknown one. It's a fantastic theorem that brings joy to my heart. \n",
|
||||
"There is a theorem from statistics called [*importance sampling*](https://en.wikipedia.org/wiki/Importance_sampling)[1]. Remarkably, it gives us a way to draw samples from a different and known probability distribution and use those to compute the properties of the unknown one. It's a fantastic theorem that brings joy to my heart. \n",
|
||||
"\n",
|
||||
"The idea is simple, and we already used it. We draw samples from the known probability distribution, but *weight the particles* according to the distribution we are interested in. We can then compute properties such as the mean and variance by computing the weighted mean and weighted variance of the samples.\n",
|
||||
"The idea is simple, and we already used it. We draw samples from the known probability distribution, but *weight the samples* according to the distribution we are interested in. We can then compute properties such as the mean and variance by computing the weighted mean and weighted variance of the samples.\n",
|
||||
"\n",
|
||||
"For the robot localization problem we drew samples from the probability distribution that we computed from our state model prediction step. In other words, we reasoned 'the robot was there, it is perhaps moving at this direction and speed, hence it might be here'. Yet the robot might have done something completely different. It may have fell off a cliff or been hit by a mortar round. In each case the probability distribution is not correct. It seems like we are stymied, but we are not because we can use importance sampling. We drew particles from that likely incorrect probability distribution, then weighted them according to how well the particles match the measurements. That weighting is based on the true probability distribution, so according to the theory the resulting mean, variance, etc, will be correct. Magic!\n",
|
||||
"For the robot localization problem we drew samples from the probability distribution that we computed from our state model prediction step. In other words, we reasoned 'the robot was there, it is perhaps moving at this direction and speed, hence it might be here'. Yet the robot might have done something completely different. It may have fell off a cliff or been hit by a mortar round. In each case the probability distribution is not correct. It seems like we are stymied, but we are not because we can use importance sampling. We drew particles from that likely incorrect probability distribution, then weighted them according to how well the particles match the measurements. That weighting is based on the true probability distribution, so according to the theory the resulting mean, variance, etc, will be correct!\n",
|
||||
"\n",
|
||||
"How can that be true? I'll give you the math; you can safely skip this if you don't plan to go beyond the robot localization problem. However, other particle filter problems require different approaches to importance sampling, and a bit of math helps. Also, the literature and much of the content on the web uses the mathematical formulation in favor of my rather imprecise \"imagine that...\" exposition. If you want to understand the literature you will need to know the following equations.\n",
|
||||
"\n",
|
||||
@@ -1299,15 +1301,15 @@
|
||||
"\n",
|
||||
"The expected value of a function $f(x)$ with probability distribution $\\pi(x)$ is\n",
|
||||
"\n",
|
||||
"$$\\mathbb{E}\\big[f(x)\\big] = \\int f(x)\\pi(x)\\, \\mathsf{d}x$$\n",
|
||||
"$$\\mathbb{E}\\big[f(x)\\big] = \\int f(x)\\pi(x)\\, dx$$\n",
|
||||
"\n",
|
||||
"We don't know $\\pi(x)$ so we cannot compute this integral. We do know an alternative distribution $q(x)$ so we can add it into the integral without changing the value with\n",
|
||||
"\n",
|
||||
"$$\\mathbb{E}\\big[f(x)\\big] = \\int f(x)\\pi(x)\\frac{q(x)}{q(x)}\\, \\mathsf{d}x$$\n",
|
||||
"$$\\mathbb{E}\\big[f(x)\\big] = \\int f(x)\\pi(x)\\frac{q(x)}{q(x)}\\, dx$$\n",
|
||||
"\n",
|
||||
"Now we rearrange and group terms\n",
|
||||
"\n",
|
||||
"$$\\mathbb{E}\\big[f(x)\\big] = \\int f(x)q(x)\\, \\, \\cdot \\, \\frac{\\pi(x)}{q(x)}\\, \\mathsf{d}x$$\n",
|
||||
"$$\\mathbb{E}\\big[f(x)\\big] = \\int f(x)q(x)\\, \\, \\cdot \\, \\frac{\\pi(x)}{q(x)}\\, dx$$\n",
|
||||
"\n",
|
||||
"$q(x)$ is known to us, so we can compute $\\int f(x)q(x)$ using MC integration. That leaves us with $\\pi(x)/q(x)$. That is a ratio, and we define it as a *weight*. This gives us\n",
|
||||
"\n",
|
||||
@@ -1327,8 +1329,8 @@
|
||||
"def update(particles, weights, z, R, landmarks):\n",
|
||||
" weights.fill(1.)\n",
|
||||
" for i, landmark in enumerate(landmarks):\n",
|
||||
" distance = np.linalg.norm(particles[:, 0:2] - landmark, axis=1)\n",
|
||||
" weights *= scipy.stats.norm(distance, R).pdf(z[i])\n",
|
||||
" dist = np.linalg.norm(particles[:, 0:2] - landmark, axis=1)\n",
|
||||
" weights *= scipy.stats.norm(dist, R).pdf(z[i])\n",
|
||||
"\n",
|
||||
" weights += 1.e-300 # avoid round-off to zero\n",
|
||||
" weights /= sum(weights) # normalize\n",
|
||||
@@ -1336,7 +1338,7 @@
|
||||
" \n",
|
||||
"The reason for `self.weights.fill(1.)` might have confused you. In all the Bayesian filters up to this chapter we started with the probability distribution created by the `predict` step, and this appears to discard that information by setting all of the weights to 1. Well, we are discarding the weights, but we do not discard the particles. That is a direct result of applying importance sampling - we draw from the known distribution, but weight by the unknown distribution. In this case our known distribution is the uniform distribution - all are weighted equally.\n",
|
||||
"\n",
|
||||
"Of course if you can compute the posterior probability distribution from the prior you should do so. If you cannot, then importance sampling gives you a way to solve this problem."
|
||||
"Of course if you can compute the posterior probability distribution from the prior you should do so. If you cannot, then importance sampling gives you a way to solve this problem. In practice, computing the posterior is incredibly difficult. The Kalman filter became a spectacular success because it took advantage of the properties of Gaussians to find an analytic solution. Once we relax the conditions required by the Kalman filter (Markov property, Gaussian measurements and process) importance sampling and monte carlo methods make the problem tractable."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1349,7 +1351,7 @@
|
||||
"\n",
|
||||
"Research on the topic continues, but a handful of algorithms work well in practice across a wide variety of situations. We desire an algorithm that has several properties. It should preferentially select particles that have a higher probability. It should select a representative population of the higher probability particles to avoid sample impoverishment. It should include enough lower probability particles to give the filter a chance of detecting strongly nonlinear behavior. \n",
|
||||
"\n",
|
||||
"FilterPy implements several of the popular algorithms. FilterPy doesn't know how your particle filter is implemented, so it doesn't make sense to have the resample algorithm generate the new samples. Instead, the algorithms create a `numpy.array` containing the indexes of the particles that are chosen. Your class or code needs to perform the resampling step. For example, I used this for the robot:"
|
||||
"FilterPy implements several of the popular algorithms. FilterPy doesn't know how your particle filter is implemented, so it cannot generate the new samples. Instead, the algorithms create a `numpy.array` containing the indexes of the particles that are chosen. Your code needs to perform the resampling step. For example, I used this for the robot:"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1393,7 +1395,7 @@
|
||||
"data": {
|
||||
"image/png": "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\nBbfSRXeeBV/hAAAAAElFTkSuQmCC\n",
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7cea518>"
|
||||
"<matplotlib.figure.Figure at 0x8518438>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1410,9 +1412,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"To select a weight we generate a random number uniformly selected between 0 and 1 and use binary search to find its position inside the cumulative sum array. Large weights will be a further distance from its neighbors than low weights, so they will be more likely to be selected. \n",
|
||||
"To select a weight we generate a random number uniformly selected between 0 and 1 and use binary search to find its position inside the cumulative sum array. Large weights occupy more space than low weights, so they will be more likely to be selected. \n",
|
||||
"\n",
|
||||
"This is very easy to code using NumPy's ufunc support. `searchsorted` is NumPy's binary search algorithm. If you provide is with an array of search values it will return an array of answers; one answer for each search value. "
|
||||
"This is very easy to code using NumPy's [ufunc](http://docs.scipy.org/doc/numpy/reference/ufuncs.html) support. Ufuncs apply functions to every element of an array, returning an array of the results. `searchsorted` is NumPy's binary search algorithm. If you provide is with an array of search values it will return an array of answers; one answer for each search value. "
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1447,7 +1449,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x73e9be0>"
|
||||
"<matplotlib.figure.Figure at 0x8518860>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1465,7 +1467,7 @@
|
||||
"source": [
|
||||
"This is an $O(n \\log(n))$ algorithm. That is not terrible, but there are $O(n)$ resampling algorithms with better properties with respect to the uniformity of the samples. I'm showing it because you can understand the other algorithms as variations on this one. There is a faster implementation of this multinomial resampling that uses the inverse of the CDF of the distribution. You can search on the internet if you are interested.\n",
|
||||
"\n",
|
||||
"You may import the function from FilterPy using\n",
|
||||
"Import the function from FilterPy using\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"from filterpy.monte_carlo import multinomal_resample\n",
|
||||
@@ -1478,9 +1480,9 @@
|
||||
"source": [
|
||||
"### Residual Resampling\n",
|
||||
"\n",
|
||||
"Residual resampling both improves the run time of multinomial resampling, and ensures that the sampling is uniform across the population of particles. It's fairly ingenious: the normalized weights are multiplied by *N*, and then the integer value of each weight is used to define how many samples of that particle will be taken. For example, if the weight of a particle is 0.0012 and $N$=3000, the scaled weight is 3.6, so 3 samples will be taken of that particle. This ensures that all higher weight particles are chosen at least once, and has $O(N)$ running time.\n",
|
||||
"Residual resampling both improves the run time of multinomial resampling, and ensures that the sampling is uniform across the population of particles. It's fairly ingenious: the normalized weights are multiplied by *N*, and then the integer value of each weight is used to define how many samples of that particle will be taken. For example, if the weight of a particle is 0.0012 and $N$=3000, the scaled weight is 3.6, so 3 samples will be taken of that particle. This ensures that all higher weight particles are chosen at least once. The running time is $O(N)$, making it faster than multinomial resampling.\n",
|
||||
"\n",
|
||||
"However, this does not make *N* selections. To select the rest, we take the *residual*: the weights minus the integer part, which leaves the fractional part of the number. We then use a simpler sampling scheme such as multinomial, to select the rest of the particles based on the residual. In the example above the scaled weight was 3.6, so the residual will be 0.6 (3.6 - int(3.6)). This residual is very large so the particle will be likely to be sampled again. This is reasonable because the larger the residual the larger the error in the round off, and thus the particle was relatively under sampled in the integer step."
|
||||
"However, this does not generate all *N* selections. To select the rest, we take the *residual*: the weights minus the integer part, which leaves the fractional part of the number. We then use a simpler sampling scheme such as multinomial, to select the rest of the particles based on the residual. In the example above the scaled weight was 3.6, so the residual will be 0.6 (3.6 - int(3.6)). This residual is very large so the particle will be likely to be sampled again. This is reasonable because the larger the residual the larger the error in the round off, and thus the particle was relatively under sampled in the integer step."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1533,7 +1535,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x84ca710>"
|
||||
"<matplotlib.figure.Figure at 0x81b2c88>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1578,7 +1580,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8568048>"
|
||||
"<matplotlib.figure.Figure at 0x8be11d0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1653,7 +1655,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x9032a90>"
|
||||
"<matplotlib.figure.Figure at 0x7f0ae48>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1707,7 +1709,7 @@
|
||||
"Import from FilterPy with\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
" from filterpy.monte_carlo import systematic_resample\n",
|
||||
"from filterpy.monte_carlo import systematic_resample\n",
|
||||
" ```"
|
||||
]
|
||||
},
|
||||
@@ -1725,14 +1727,14 @@
|
||||
"execution_count": 31,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
"scrolled": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZMAAABCCAYAAACSCTtfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEYFJREFUeJzt3XlQE+f/B/D3LjBcahAVREVjqxaPoLWiIviVS8GjCEi1\nKq3HWLzFqnXG1nGo13gUrVaq4+gIaK0VSzzKYVsOUSHSAjZVQCkoHtUCitQq9cDn9we/RJZsIJIE\nKH5eM47wfPZ4dnmyn+zzPJtwjDEGQgghRA98c1eAEELIfx8lE0IIIXqjZEIIIURvlEwIIYTojZIJ\nIYQQvVEyIYQQojdKJq1MeHg4eJ5Henq6zuuUlJSA53nMnj3biDVrGjNnzgTP87hx44Ze2/Hw8ADP\n08vDWLS1U57n4eXl1Uy1IvqgV0srw3EcOI4TlKmSRX0vUrH1/osMdRyt5Xy0VNrOL533/y7T5q4A\naX5du3ZFfn4+JBJJc1dFb5s2bcKqVavQtWvX5q4KaYT8/HxYWVk1dzVII1AyeQ009CEHpqam6NOn\nTxPVxrjs7e1hb2/f3NUgjdRa2uHriLq5DKh2d1JpaSlmz56Nzp07o02bNnBzc8O5c+cAAI8fP8Yn\nn3wCqVQKCwsL9O/fH8eOHdPYXkPjH7r0L0dHR+ONN94Ax3FIS0sDz/Pqf2vXrhXUu+6YiWr8IT09\nHceOHcOwYcNgbW2NDh06YOrUqfjzzz9F93nt2jXMmjULjo6OMDc3R+fOnTFlyhT8/vvvovVT1SU7\nOxt+fn6wsbGBra0tgoODcevWLQBAcXExpk6dCnt7e1hZWcHT0xNKpVJje9rGTKKiohAcHIw333wT\nVlZWkEgkcHd3x8GDB+s9f7qSSqUwMTHB06dPER4ejj59+sDc3BzLli1TL8MYw759++Du7g4bGxtY\nWlpCJpNh06ZNePbsmcY2z549C39/f3Tv3h0WFhawt7eHi4sLVqxYIVjuzp07WLt2Ldzd3eHg4ABz\nc3N07doV06ZNQ15ensZ2Dd1Oa/8NMzIy4O3tDYlEAolEgnHjxiE3N1fn8yjWplWvg5iYGKSmpsLT\n0xPt2rWDRCLBhAkTUFBQILqtwsJCTJo0Cba2tupjS0hIUNc3JiZG53qRhtGdiRE8ePAAbm5u6NCh\nA0JCQnDr1i3ExsbCz88PmZmZmDNnDh49eoSAgAD8/fff+Pbbb/H+++8jIyMDQ4cOVW/HEP3HgwYN\nwtKlS/Hll19CKpVi5syZ6piHh0e966r2HxkZiVOnTsHf3x8eHh64cOECvvvuOyiVSly8eBFmZmbq\ndXJycuDt7Y2HDx9i/PjxkMlkKCoqQlxcHE6dOoWTJ0/Cx8dHYz9ZWVnYvHkzfHx8EBoaigsXLiAu\nLg6XL1/G8ePH4e7uDmdnZ8yYMQN5eXlISEjAmDFjUFxcLOgW0XbOFixYgAEDBmDUqFFwcHDAvXv3\nkJCQgBkzZuDKlStYv359405wrf0CwKRJk5Cbmws/Pz907NgRPXv2BABUV1cjMDAQP/zwA9566y1M\nmzYNFhYWOHPmDD799FOkpKQgKSlJPeiflJSECRMmoF27dvD390e3bt1QUVGBwsJCfPXVV9iyZYt6\n2fT0dGzZsgWenp4IDg5GmzZtUFhYiLi4OJw8eRLnz5/HwIEDNepsqHaqOn6FQoGNGzdizJgxWLx4\nsboOZ86cQXJyMoYPH97oc8txHE6dOoUTJ05g3LhxmD9/PvLy8hAfH49ff/0VeXl5sLW1Va9z5coV\nuLq6orKyEuPHj4ezszOKi4sRFBSEsWPH0riMMTBiMNevX2ccxzGe59nSpUsFsY0bNzKO45itrS17\n77332LNnz9Sxw4cPM47jWFBQkGCd8PBwxvM8O3PmjOj+OI5jnp6eDa6jqlfdZevGZ82aJSifOXMm\n4ziOSSQSdvnyZUFs2rRpjOd5FhsbKyjv168f43meHTx4UFCenJzMeJ5n9vb2rKqqSl0eFRWlPmdy\nuVywjp+fn/qcbd++XRALDQ1lPM+znTt3atSZ53lWUlIiKC8uLtY47mfPnjFvb29mZmbGbt++LYh5\neHgwnuc11tFGKpUynufZwIED2f379zXi69atYxzHsSVLlrAXL14IYnPnzmU8z7Ndu3apy4KCghjP\n80ypVGpsq+72y8rK2D///KOxnFKpZG3atGFjx44VlBu6ndb+G+7evVsQi4uLYxzHsb59+wrKtbVt\nbW2a4zhmZmbGUlNTBbFVq1YxnufZ1q1bBeVeXl6M53kWGRkpKE9KSlLXNTo6mhHDoW4uI7C2tsaG\nDRsEZR988AGAmneDERERMDV9eVM4ZcoUmJmZ4eLFi01aT11wHIewsDD069dPUP7RRx+BMYasrCx1\nWUZGBvLz8zF06FCEhIQIlvfy8kJgYCDKyspw4sQJjf14eHggICBAUDZ9+nQAgK2tLZYuXSqIhYSE\ngDGm8zlT3SHUZmpqioULF6K6uhopKSk6bach69evR/v27QVljDHs3LkT9vb22L59u8a74s2bNwOA\noMtNtYyFhYXGPupuv2PHjrC2ttZYTiaTwcvLC2lpaaiurtaIG7qd9urVC/PmzROUBQYGwtXVFVeu\nXEFmZqboerqaOnWqxt10aGioRju8desWUlNT0bNnT8yfP1+wvK+vr8adMTEM6uYygt69e2vMSHFw\ncAAA2NjYwNHRURDjeR52dnbq8YGW5p133tEoUx1DRUWFuiwnJwcA4OnpKbodHx8fxMXFIScnB1Om\nTBHEBg0apLG86pw5OztrxLp06QIAOp+zmzdvYtOmTUhJScGNGzdQVVWljnEch9u3b+u0nYa4uLho\nlF29ehXl5eXo1asX1q1bpxFnjMHS0hL5+fnqsunTp0Mul2Po0KGYPHkyPD094erqih49eojuNz4+\nHnv27EF2djbKy8vx/PlzdYzjOJSXl2tMTDB0Ox05cqRo+ahRo6BQKJCbmwtXV1fRZRrCcZzO7VCV\n7IYPHy7aneXu7o7k5ORG1YNoR8nECMSm2JqYmGiNATXvkmtfAFoSGxsbjTLVO9ba73grKyvBcRw6\nd+4suh3VherBgwcaMbHzotpHfTGxgeu6rl27BhcXF1RWVmLkyJHw9fWFRCKBiYkJrl+/jujoaDx5\n8qTB7ehCbCbZvXv3AABFRUXqSQ9ial/4AgMDER8fj23btiEmJgb79u0DYwwDBgxAeHg4goKC1Mvu\n2LEDH3/8MWxtbTF69Gh0794dVlZW4DgOcrkcSqVS9PgM3U61zaKzt7cHYwyVlZVaj10XYu1QVd+6\n7bCh+hDDo2TSgqkGWMVevPq+MI1BIpGAMYa7d++Kxu/cuaNerilFRESgoqICUVFR6m4clSNHjiAq\nKsqo+1cd77vvvovjx4/rvJ6fnx/8/Pzw5MkT/PLLL0hMTERkZCQmT56M1NRUjBw5EtXV1fj888/h\n4OCA3Nxc2NnZCbaRkZFh0GOpz19//aW1nOO4Jvu7t2vXrsH6EMOjMZMWTNU3fvPmTY1Y7T7ihoi9\nezOGwYMHAwBSU1NF4z///LPW7gpjKioqAgDBu3mVtLQ0o8/scXJygo2NDbKyshp192lubg53d3ds\n2LABW7duxYsXL9RJqby8HA8ePMCIESM0EsmjR4/UXY9NQTWluK60tDQAwNtvv90k9VB1mSoUCtFn\nrM6ePdsk9XjdUDJpwYYNGwbGGPbv3y+4CJWXl2PlypU6XwTbt28PjuNEk5IhjRgxAn379kVWVha+\n+eYbQSwlJQVyuRydOnXCxIkTjVqPuqRSKYCXFzWV06dPY//+/Ubfv4mJCcLCwnD37l0sWLBAMF6j\ncu/ePfz222/q39PT00WTv+ruTjXWYWdnBysrK2RnZ+PRo0fq5Z4/f44lS5agvLzc0IejVWFhIb7+\n+mtB2ffffw+FQgEnJ6dGj5e8KkdHR3h4eODatWsa9UlKSqLxEiOhbq4WzMXFBZ6enkhLS8OQIUPg\n4+OD+/fvIz4+Hj4+PoKLT32sra3h6uqKzMxM+Pv7Y/DgwTAzM8P//vc/rYOmjRUdHY3Ro0djxowZ\nOHr0KGQyGf744w/ExcXB3NwcMTExojOUjGnBggU4cOAAgoODERwcjC5duuDSpUs4ffo0Jk+ejCNH\njhi9DqtXr8alS5ewf/9+xMfHw9vbG926dUNZWRmKiopw7tw5LFq0CNu2bQMAhIWF4ebNm3B3d1c/\nNKhUKnH69Gl06tQJoaGhAGrGWZYsWYLNmzdDJpNh4sSJePr0KVJTU1FRUaFuP03B19cXy5cvR2Ji\nIpydnXH16lXI5XJYWVnpnbTF7jDqExkZCTc3NyxevBiJiYkYNGgQiouLERcXh4CAAJw4cYI+yNPA\n6GwaWEMPGr5q7Pjx45g3bx7KysoQGRmJzMxMrFy5EgcPHnylhxoPHTqEgIAAKBQKbNiwAWvWrBF0\nRzXmAUmxdYYMGYLs7Gx8+OGHyMnJwRdffIG0tDQEBQVBoVBgzJgxOm1Hn1jdMplMhrS0NPUT0Hv2\n7MHDhw8hl8sxd+5cnbfTkPqWNzExQWxsLA4fPgyZTIbExERs27YNCQkJ+Pfff7F69WosXLhQvfxn\nn30GPz8/FBQU4MCBA9i9ezdKSkqwbNky5OTkCGZarV+/HhEREbCyssLevXvVs8CysrLQvXv3Rn2g\nYmNiw4cPR0pKCqqqqrBr1y78+OOP8PX1xblz53R+YLExfwuxdfr27QuFQoGgoCBkZGRgx44dKCkp\ngVwuh5ubG4CXYyvEMDj2qimfEEJqiY6OxqxZsxAeHo41a9Y0d3UaNH36dBw5cgQFBQXo3bt3c1en\n1aA7E0JIqyQ2qzA5ORlHjx5F//79KZEYGI2ZEEJanerqajg6OsLLywtOTk4wNTXF5Line truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8b04ac8>"
|
||||
"<matplotlib.figure.Figure at 0x7e60e10>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1742,7 +1744,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8b904a8>"
|
||||
"<matplotlib.figure.Figure at 0x8722c50>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1752,7 +1754,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8ae6630>"
|
||||
"<matplotlib.figure.Figure at 0x863cba8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1762,7 +1764,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x866e3c8>"
|
||||
"<matplotlib.figure.Figure at 0x8687ac8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1782,13 +1784,13 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The performance of the multinomial resampling is quite bad. There is a very large weight that was not sampled at all. The largest weight only got one resample, yet the smallest weight was sample was sampled twice. Most tutorials on the net that I have read use multinomial resampling, and I am not sure why. Multinomial rarely used in the literature or for real problems. I recommend not using it unless you have a very good reason to do so.\n",
|
||||
"The performance of the multinomial resampling is quite bad. There is a very large weight that was not sampled at all. The largest weight only got one resample, yet the smallest weight was sample was sampled twice. Most tutorials on the net that I have read use multinomial resampling, and I am not sure why. Multinomial resampling is rarely used in the literature or for real problems. I recommend not using it unless you have a very good reason to do so.\n",
|
||||
"\n",
|
||||
"The residual resampling algorithm does excellently at what it tries to do: ensure all the largest weights are resampled multiple times. It does do well at evenly distributing the samples across the particles - many reasonably large weights are not resampled at all. \n",
|
||||
"The residual resampling algorithm does excellently at what it tries to do: ensure all the largest weights are resampled multiple times. It doesn't evenly distribute the samples across the particles - many reasonably large weights are not resampled at all. \n",
|
||||
"\n",
|
||||
"Both systematic and stratified perform very well. Systematic sampling does an excellent job of ensuring we sample from all parts of the particle space while ensuring larger weights are proportionality resampled more often. Stratified resampling is not quite as uniform as systematic resampling, but it is a bit better at ensuring the higher weights get resampled more.\n",
|
||||
"\n",
|
||||
"Plenty has been written on the theoretical performance of these algorithms, and feel free to read it. In practice I apply particle filters to problems that resist analytic efforts, and so I feel a bit dubious about the validity of a specific analysis to these problems. In practice both the stratified and systematic algorithms perform well and very similarly across a variety of problems. I say try one, and if it works stick with it. If performance of the filter is critical try both, and perhaps see if there is literature published on your specific problem that will give you better guidance. "
|
||||
"Plenty has been written on the theoretical performance of these algorithms, and feel free to read it. In practice I apply particle filters to problems that resist analytic efforts, and so I am a bit dubious about the validity of a specific analysis to these problems. In practice both the stratified and systematic algorithms perform well and similarly across a variety of problems. I say try one, and if it works stick with it. If performance of the filter is critical try both, and perhaps see if there is literature published on your specific problem that will give you better guidance. "
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1809,9 +1811,9 @@
|
||||
"\n",
|
||||
"This power comes with a cost. The most obvious costs are the high computational and memory burdens the filter places on the computer. Less obvious is the fact that they are fickle. You have to be careful to avoid particle degeneracy and divergence. It can be very difficult to prove the correctness of your filter. If you are working with multimodal distributions you have further work to cluster the particles to determine the paths of the multiple objects. This can be very difficult when the objects are close to each other.\n",
|
||||
"\n",
|
||||
"There are many different classes of particle filter; I only described the naive SIS algorithm, and followed that with a SIR algorithm that performs well. There are many more classes, and many examples of filters in each class. It would take a small book to describe them all. \n",
|
||||
"There are many different classes of particle filter; I only described the naive SIS algorithm, and followed that with a SIR algorithm that performs well. There are many classes of filters, and many examples of filters in each class. It would take a small book to describe them all. \n",
|
||||
"\n",
|
||||
"When you read the literature on particle filters you will find that it is strewn with integrals. We perform computations on probability distributions using integrals, so using integrals gives the authors a powerful and compact notation. You must recognize that when you reduce these equations to code you will be representing the distributions with particles, and integrations are replaced with sums over the particles. If you keep in mind the core ideas in this chapter you material shouldn't be too daunting. \n"
|
||||
"When you read the literature on particle filters you will find that it is strewn with integrals. We perform computations on probability distributions using integrals, so using integrals gives the authors a powerful and compact notation. You must recognize that when you reduce these equations to code you will be representing the distributions with particles, and integrations are replaced with sums over the particles. If you keep in mind the core ideas in this chapter the material shouldn't be daunting. "
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
+15
-33
@@ -210,19 +210,15 @@
|
||||
" margin-top: 0.2em; \n",
|
||||
" }\n",
|
||||
" a:link{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:visited{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:hover{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:focus{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:active{\n",
|
||||
@@ -331,7 +327,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x73e9588>"
|
||||
"<matplotlib.figure.Figure at 0x73e8cf8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -380,7 +376,7 @@
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAt4AAADaCAYAAACRmkVgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcU2feNvArCYRsENawCCgi4oZWRR3FlmrdmC7a2sVq\nR9pZ2ved7p137F7aqVPb53HaeZxin047M1U7fdrOPG1dOo5LrUoF24JKBZWlLqCyyZ5AWHLO+wcY\niUFMJOQkcH0/Hz6E+z45+XETzZU79zlHJoqiCCIiIiIiGlByqQsgIiIiIhoKGLyJiIiIiNyAwZuI\niIiIyA0YvImIiIiI3IDBm4iIiIjIDRi8iYiIiIjcgMGbiIiIiMgNHAreWVlZWLx4MaKjoyGXy7Fx\n40a7bYqLi7F06VIEBQVBq9UiOTkZRUVFLi+YiIiIiMgbORS8jUYjkpKSsG7dOmg0Grv+06dPY/bs\n2YiPj8fevXtRWFiI1atXQ6fTubxgIiIiIiJvJHP2ypX+/v7IzMzEypUrrW0rVqyAXC7Hpk2bXF4g\nEREREdFg0O813qIoYuvWrRg3bhzS0tJgMBgwffp0fPrpp66oj4iIiIhoUOh38K6urobRaMRrr72G\nRYsWYffu3bj33nuxYsUKbN++3RU1EhERERF5PZ/+7kAQBADAkiVL8PjjjwMAJk6ciNzcXLz99ttI\nS0uz2b6xsbG/D0lEREREJBm9Xn9N9+v3jHdoaCh8fHwwduxYm/axY8eirKysv7snIiIiIhoU+h28\nfX19MW3aNLtTBxYXF2P48OH93T0RERER0aDg0FITk8mE0tJSiKIIQRBQVlaG/Px8BAcHIyYmBqtW\nrcI999yD2bNnY+7cudizZw8++eQTbN68uc/9Xus0/VCTm5sLAEhOTpa4Eu/A8XIex8w5HC/nccyc\nw/FyHsfMORwv57liubRDM965ubmYPHkypk6dCrPZjIyMDEyZMgUZGRkAgMWLF+PPf/4z1q5di4kT\nJyIzMxObNm3CokWL+l0gEREREdFg4NCMd2pqqvUgyitZuXKlzbm9iYiIiIjokn6v8SYiIiIioqtj\n8CYiIiIicgMGbyIiIiIiN2DwJiIiIiJyAwZvIiIiIiI3YPAmIiIiInIDBm8iIiIiIjdg8CYiIiIi\ncgMGbyIiIiIiN2DwJiIiIiJyAwZvIiIiIiI3YPAmIiIiInIDBm8iIiIiIjdg8CYiIiIij1DffAGt\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x73e9208>"
|
||||
"<matplotlib.figure.Figure at 0x73e8978>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -412,7 +408,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x806d898>"
|
||||
"<matplotlib.figure.Figure at 0x80088d0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -437,7 +433,7 @@
|
||||
"source": [
|
||||
"## An Overview of How Smoothers 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",
|
||||
"The Kalman filter is a *recursive* filter with the Markov property - it's estimate at step `k` is based only on the estimate from step `k-1` and the measurement at step `k`. But this means that the estimate from step `k-1` is based on step `k-2`, and so on back to the first epoch. 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",
|
||||
@@ -466,6 +462,8 @@
|
||||
"\n",
|
||||
"A fixed-point filter operates as a normal Kalman filter, but also produces an estimate for the state at some fixed time $j$. Before the time $k$ reaches $j$ the filter operates as a normal filter. Once $k>j$ the filter estimates $x_k$ and then also updates its estimate for $x_j$ using all of the measurements between $j\\dots k$. This can be useful to estimate initial paramters for a system, or for producing the best estimate for an event that happened at a specific time. For example, you may have a robot that took a photograph at time $j$. You can use a fixed-point smoother to get the best possible pose information for the camera at time $j$ as the robot continues moving.\n",
|
||||
"\n",
|
||||
"## Choice of Filters\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",
|
||||
"\n",
|
||||
"Fixed-lag smoothing only requires you to store a window of data, and processing requirements are modest because only that window is processed for each new measurement. The drawback is that the filter's output always lags the input, and the smoothing is not as pronounced as is possible with fixed-interval smoothing.\n",
|
||||
@@ -473,20 +471,6 @@
|
||||
"Fixed-interval smoothing produces the most smoothed output at the cost of having to be batch processed. Most algorithms use some sort of forwards/backwards algorithm that is only twice as slow as a recursive Kalman filter. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Fixed-Point Smoothing"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"not done"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
@@ -500,9 +484,9 @@
|
||||
"source": [
|
||||
"There are many fixed-lag smoothers available in the literature. I have chosen to implement the smoother invented by Rauch, Tung, and Striebel because of its ease of implementation and efficiency of computation. It is also the smoother I have seen used most often in real applications. This smoother is commonly known as an RTS smoother.\n",
|
||||
"\n",
|
||||
"Derivation of the RTS smoother runs to several pages of densely packed math, and to be honest I have never read it through. I'm certainly not going to inflict it on you. I don't think anyone but thesis writers really need to understand the derivation. Instead I will briefly present the algorithm, equations, and then move directly to implementation and demonstration of the smoother.\n",
|
||||
"Derivation of the RTS smoother runs to several pages of densely packed math. I'm not going to inflict it on you. Instead I will briefly present the algorithm, equations, and then move directly to implementation and demonstration of the smoother.\n",
|
||||
"\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",
|
||||
"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 its 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. 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",
|
||||
@@ -555,7 +539,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8814be0>"
|
||||
"<matplotlib.figure.Figure at 0x8098a90>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -630,7 +614,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x809e8d0>"
|
||||
"<matplotlib.figure.Figure at 0x803d550>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -659,7 +643,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x74156d8>"
|
||||
"<matplotlib.figure.Figure at 0x8025d68>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -698,7 +682,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x80e1908>"
|
||||
"<matplotlib.figure.Figure at 0x8931f98>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -713,9 +697,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The improvement in the velocity, which is an hidden variable, is even more dramatic. \n",
|
||||
"\n",
|
||||
"Since we are plotting velocities let's look at what the the 'raw' velocity is, which we can compute by subtracting subsequent measurements. We see below that the noise swamps the signal, causing the computed values to be essentially worthless. I show this to reiterate the importance of using Kalman filters to compute velocities, accelerations, and even higher order values. I use a Kalman filter even when my measurements are so accurate that I am willing to use them unfiltered if I am also interested in the velocities and/or accelerations. Even a very small error in a measurement gets magnified when computing velocities. "
|
||||
"The improvement in the velocity, which is an hidden variable, is even more dramatic. "
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -739,7 +721,7 @@
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAt4AAACeCAYAAAAFUw0aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAACthJREFUeJzt3UuI1WUfwPHf0be8ZaGGCwujwmC6YzcNuxBJdLNFQRAU\naQvJUBAXaQQzBYKVhrlIo1A0CSQhF10WpmnoQtI2JcOoeEmNsUK85A3U511I533HMR115jdzZj6f\n1Zzb/zye53nOfDn+PVZKKSUAAIAO1auzBwAAAD2B8AYAgATCGwAAEghvAABIILwBACCB8AYAgATC\nGwAAEghvAABIILwBACCB8AYAgATCGwAAEghvAABIILwBACCB8AYAgATCGwAAEghvAABIILwBACCB\n8AYAgATCGwAAEghvAABIILwBACCB8AYAgATCGwAAEghvAABIILwBACCB8AYAgATCGwAAEghvAABI\nILwBACCB8AYAgATCGwAAEghvAABIILwBACCB8AYAgATCGwAAEghvAABIILwBACCB8AYAgATCGwAA\nEghvAABIILwBACCB8AYAgATCGwAAEghvAABIILwBACCB8AYAgATCGwAAEghvAABIILwBACCB8AYA\ngATCGwAAEghvAABIILwBACCB8AYAgATCGwAAEghvAABIILwBACCB8AYAgATCGwAAEghvAABIILwB\nACCB8AYAgATCGwAAEghvAABIILwBACCB8AYAgAT/6ewBENHQ0HDOn4HaYA93XeaGtrBOWvOadIxK\nKaV09iB6ukqlUv3ZdEDtsYe7LnNDW1gnrXlNOoZTTQAAIIHwBgCABMIbAAASOMe7C/j/86gAALoS\nqdh+fOINAAAJhDcAACTwPd5djL/Ogdrja7e6LnNDW1gnrTkNtmP4xBsAABIIbwAASOBUk0Q///xz\nLF26NCqVSuzatSs+/fTT+OSTTzp7WNAt/Nv+OnDgQOzduzfefffduPHGGzt7mD2SuaEjWV+XR5vk\nEt5Jtm3bFosXL46PPvooIiLGjx8fo0aNisWLF8eECRNi0aJFMXbs2E4eJdSm8+2v06dPx0MPPRQj\nR46MqVOndsjz19fXd8hxuwNzQ0dqr/XVU9eJNsknvJPMnTs3Pvjgg+rlI0eOxODBg2PUqFFx/fXX\nx5AhQ2LGjBmdOEKoXefbX3v27Ilp06bFq6++GhER+/bti3nz5sWpU6di1qxZ7fL8DQ0N7XKc7sjc\n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\nMskRrzcgCcQAAAAASUVORK5CYII=\n",
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8a40a90>"
|
||||
"<matplotlib.figure.Figure at 0x8a3ea20>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -788,7 +770,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8aee3c8>"
|
||||
"<matplotlib.figure.Figure at 0x8b113c8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
||||
Reference in new issue
Block a user