Spelling and book formatting changes.

Ran spell check on the files (not easy, no built in support for
spell checking. Formatted pdf to use a larger font.
This commit is contained in:
Roger Labbe committed 2014-08-30 18:43:36 -07:00
1 parent 110a4f7c6d
commit d6cda0e0b5
12 files changed
+741 -430

No files matched your search

+67 -67
View File
@@ -1,7 +1,7 @@
{
"metadata": {
"name": "",
"signature": "sha256:4543c870ab0c051c4385acc09b0cc240e855d61acec8a6789fb611a90a05eca3"
"signature": "sha256:24de067146358d57b36cdcab824894570734d754a6af4be472de6883fdaf3f22"
},
"nbformat": 3,
"nbformat_minor": 0,
@@ -250,7 +250,7 @@
"output_type": "pyout",
"prompt_number": 1,
"text": [
"<IPython.core.display.HTML at 0x203ad10>"
"<IPython.core.display.HTML at 0x7fc890a2ad50>"
]
}
],
@@ -289,7 +289,7 @@
"source": [
"This first attempt at tracking a robot will closely resemble the 1-D dog tracking problem of previous chapters. This will allow us to 'get our feet wet' with Kalman filtering. So, instead of a sensor that outputs position in a hallway, we now have a sensor that supplies a noisy measurement of position in a 2-D space, such as an open field. That is, at each time $T$ it will provide an $(x,y)$ coordinate pair specifying the measurement of the sensor's position in the field.\n",
"\n",
"Implemention of code to interact with real sensors is beyond the scope of this book, so as before we will program simple simuations in Python to represent the sensors. We will develop several of these sensors as we go, each with more complications, so as I program them I will just append a number to the function name. `pos_sensor1()` is the first sensor we write, and so on.\n",
"Implementation of code to interact with real sensors is beyond the scope of this book, so as before we will program simple simulations in Python to represent the sensors. We will develop several of these sensors as we go, each with more complications, so as I program them I will just append a number to the function name. `pos_sensor1()` is the first sensor we write, and so on.\n",
"\n",
"So let's start with a very simple sensor, one that travels in a straight line. It takes as input the last position, velocity, and how much noise we want, and returns the new position. "
]
@@ -343,9 +343,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x2fb3b50>"
"<matplotlib.figure.Figure at 0x7fc8769721d0>"
]
}
],
@@ -371,7 +371,7 @@
"\n",
"All that matters is that the rest of my derivation uses this same scheme. However, it is typical to use column matrices for state variables, and I prefer it, so that is what we will use. \n",
"\n",
"It might be a good time to pause and address how you identify the unobserved variables. This particular example is somewhat obvious because we already worked through the 1D case in the previous chapters. Would it be so obvious if we were filtering market data, population data from a biology experiement, and so on? Probably not. There is no easy answer to this question. The first thing to ask yourself is what is the interpretation of the first and second derivatives of the data from the sensors. We do that because obtaining the first and second derivatives is mathematically trivial if you are reading from the sensors using a fixed time step. The first derivative is just the difference between two successive readings. In our tracking case the first derivative has an obvious physical interpretation: the difference between two successive positions is velocity. \n",
"It might be a good time to pause and address how you identify the unobserved variables. This particular example is somewhat obvious because we already worked through the 1D case in the previous chapters. Would it be so obvious if we were filtering market data, population data from a biology experiment, and so on? Probably not. There is no easy answer to this question. The first thing to ask yourself is what is the interpretation of the first and second derivatives of the data from the sensors. We do that because obtaining the first and second derivatives is mathematically trivial if you are reading from the sensors using a fixed time step. The first derivative is just the difference between two successive readings. In our tracking case the first derivative has an obvious physical interpretation: the difference between two successive positions is velocity. \n",
"\n",
"Beyond this you can start looking at how you might combine the data from two or more different sensors to produce more information. This opens up the field of *sensor fusion*, and we will be covering examples of this in later sections. For now, recognize that choosing the appropriate state variables is paramount to getting the best possible performance from your filter. "
]
@@ -382,7 +382,7 @@
"source": [
"##### **Step 2:** Design State Transition Function\n",
"\n",
"Our next step is to design the state transistion function. Recall that the state transistion function is implemented as a matrix $\\mathbf{F}$ that we multipy with the previous state of our system to get the next state, like so. \n",
"Our next step is to design the state transition function. Recall that the state transition function is implemented as a matrix $\\mathbf{F}$ that we multipy with the previous state of our system to get the next state, like so. \n",
"\n",
"$$\\mathbf{x}' = \\mathbf{Fx}$$\n",
"\n",
@@ -428,7 +428,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
"prompt_number": 4
},
{
"cell_type": "markdown",
@@ -447,7 +447,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
"prompt_number": 5
},
{
"cell_type": "markdown",
@@ -514,7 +514,7 @@
]
}
],
"prompt_number": 13
"prompt_number": 6
},
{
"cell_type": "markdown",
@@ -544,12 +544,12 @@
"output_type": "stream",
"stream": "stdout",
"text": [
"[[5 0]\n",
" [0 5]]\n"
"[[ 5. 0.]\n",
" [ 0. 5.]]\n"
]
}
],
"prompt_number": 14
"prompt_number": 7
},
{
"cell_type": "markdown",
@@ -616,10 +616,10 @@
"output_type": "stream",
"stream": "stdout",
"text": [
"[[0]\n",
" [0]\n",
" [0]\n",
" [0]]\n",
"[[ 0.]\n",
" [ 0.]\n",
" [ 0.]\n",
" [ 0.]]\n",
"\n",
"[[ 500. 0. 0. 0.]\n",
" [ 0. 500. 0. 0.]\n",
@@ -628,7 +628,7 @@
]
}
],
"prompt_number": 15
"prompt_number": 9
},
{
"cell_type": "heading",
@@ -696,13 +696,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x31e6290>"
"<matplotlib.figure.Figure at 0x7fc8768d9350>"
]
}
],
"prompt_number": 17
"prompt_number": 10
},
{
"cell_type": "markdown",
@@ -777,9 +777,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x3a3e5d0>"
"<matplotlib.figure.Figure at 0x7fc86f6226d0>"
]
},
{
@@ -794,13 +794,13 @@
]
}
],
"prompt_number": 21
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Did you correctly predict what the covariance matrix and plots would look like? Perhaps you were expecting a tilted ellipse, as in the last chapters. If so, recall that in those chapters we were not plotting $x$ against $y$, but $x$ against $\\dot{x}$. $x$ *is correlated* to $\\dot{x}$, but $x$ is not correlated or dependent on $y$. Therefore our ellipses are not tilted. Furthermore, the noise for both $x$ and $y$ are modelled to have the same value, 5, in $\\mathbf{R}$. If we were to set R to, for example,\n",
"Did you correctly predict what the covariance matrix and plots would look like? Perhaps you were expecting a tilted ellipse, as in the last chapters. If so, recall that in those chapters we were not plotting $x$ against $y$, but $x$ against $\\dot{x}$. $x$ *is correlated* to $\\dot{x}$, but $x$ is not correlated or dependent on $y$. Therefore our ellipses are not tilted. Furthermore, the noise for both $x$ and $y$ are modeled to have the same value, 5, in $\\mathbf{R}$. If we were to set R to, for example,\n",
"\n",
"$$\\mathbf{R} = \\begin{bmatrix}10&0\\\\0&5\\end{bmatrix}$$\n",
"\n",
@@ -811,7 +811,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The final P tells us everything we need to know about the correlation beween the state variables. If we look at the diagonal alone we see the variance for each variable. In other words $\\mathbf{P}_{0,0}$ is the variance for x, $\\mathbf{P}_{1,1}$ is the variance for $\\dot{x}$, $\\mathbf{P}_{2,2}$ is the variance for y, and $\\mathbf{P}_{3,3}$ is the variance for $\\dot{y}$. We can extract the diagonal of a matrix using *numpy.diag()*."
"The final P tells us everything we need to know about the correlation between the state variables. If we look at the diagonal alone we see the variance for each variable. In other words $\\mathbf{P}_{0,0}$ is the variance for x, $\\mathbf{P}_{1,1}$ is the variance for $\\dot{x}$, $\\mathbf{P}_{2,2}$ is the variance for y, and $\\mathbf{P}_{3,3}$ is the variance for $\\dot{y}$. We can extract the diagonal of a matrix using *numpy.diag()*."
]
},
{
@@ -831,7 +831,7 @@
]
}
],
"prompt_number": 23
"prompt_number": 12
},
{
"cell_type": "markdown",
@@ -864,11 +864,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x3031ed0>"
"<matplotlib.figure.Figure at 0x7fc876942910>"
]
}
],
"prompt_number": 24
"prompt_number": 13
},
{
"cell_type": "markdown",
@@ -900,7 +900,7 @@
"\\end{aligned}\n",
"$$\n",
"\n",
"where $g$ is the gravational constant, $t$ is time, $v_{x0}$ and $v_{y0}$ are the initial velocities in the x and y plane. If the ball is thrown with an initial velocity of $v$ at angle $\\theta$ above the horizon, we can compute $v_{x0}$ and $v_{y0}$ as\n",
"where $g$ is the gravitional constant, $t$ is time, $v_{x0}$ and $v_{y0}$ are the initial velocities in the x and y plane. If the ball is thrown with an initial velocity of $v$ at angle $\\theta$ above the horizon, we can compute $v_{x0}$ and $v_{y0}$ as\n",
"\n",
"$$\n",
"\\begin{aligned}\n",
@@ -971,7 +971,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 25
"prompt_number": 14
},
{
"cell_type": "markdown",
@@ -1014,19 +1014,19 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x3175550>"
"<matplotlib.figure.Figure at 0x7fc86f622b90>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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\nt27dKkmaM2eOuqvbN1t58MEHlZ2drW9+85uaOnVq6wWEN9xwg5YvX37MhYWHx4/GhYUAcOJCIWnv\nXkvp6VL//m2/xp95Jk233JLzzyNbS5c26oILIq2f//d/z9Qjj2RIkjweW6+/fkhnnRVVU5NUWZmr\ndes8rV/7zjsNKi2N6qWXPJo9O7d1/IEH/Jo9O6j6eumyy/L06afu1u/3/vsNGjbM1muvefTVr+ZI\nspSTY+vll2Pf57D9+6WamjStXu3RFVeEdOGFYbndrZ9WKCR5PBJvXALoCQl1s5W0tDQtWLBAs2bN\n0o033qhFixZJkrxeb4fjSC5HvtKDWcguce3aZenVVz169123/P628UBAWrw4TePH56uyMkfr17f9\nKj+8yhxjye9vX4XOmdOir341oJEjw/rjH30644xYYZueLp17brj16wYOjCg3N1acDxpkKy3tcKFu\na9iwWFGelSWNHNlWoA8dGlF2duzjVas8kmLf2+eztGtX+z83b7yRprlzc/Tb32bo2mtztH59rIKO\nRqUVKzy66qoc3X57prZsSd7bGXDumY384PnyL/li8+bNa/24qqpKVVVVx3zN8cYBAB3bv19asCBL\nL7/slWTrV7/y67rrQpKkTz91af78bNm2JZ/Po5/+NFNPPeWX2y1dfHFIJ58c1uefe1RREdRZZ0Xa\nPe8pp9h6+OEmBYOxIvgwt1u69dYWnXZaVHV1lr761aAGDYoVzqNGRfTSS43asMGt006LaOzY2HOm\np0s//GGzysrCOnjQ0qxZQRUXxx4zfnxILleGolFLBQVRDRkSbTePTZvalp3DYUsHDsQK7o8/dmnW\nrBwFg5befTdNOTnST37SHNf/twAQD91u54gX2jkApCLbltaudWvbNktDh0Z19tmxYvPDD10qL89v\n/bpzzgnrpZcalZUl1da6VF6ep2g0VnhWVQX1xz/65frnou3OnZYaGiwVFdkqKHDmV3wwKH3wgVu7\nd7t02mkRnXlm+yJ65Uq3pk/Pld9v6ayzwnr6aZ9KSmytXu3WpZfmtX7dFVfE/m1Hs21aPQB0naP7\nRAMATlxdnaXPPnMpL8/WGWdEWwvANWvcqqrKVSBgKTs71sNcVhZRfr7duqIsSRddFFZmZuwxw4ZF\n9Zvf+HXnnVkqLo5q0aLm1gJakgYOtDVwoLPrI16vdN55EUmRDj8/dmxENTWHtH+/pSFDoiopic33\nlFMiuvnmFj36aIZyc23Nn99yzGPffdetBx7I0KmnRnXzzQENHRo95msAoKdRRCMu3nqrbWcOmIXs\net6+fZbuvDNTzz+frvR0W4sX+1ReHus//vhjlwKBWEXt91vavNmlsrKIBg2yVV3t16uvpqmgIKqv\nfCXcWninpUnTp4c0YcIh7dz5qc466xSn/mndUlp6bPHbp4+0cGGzvvnNgLKypFNPbf81mzdb+trX\nclt7vUMh6b772to99uyx5HJJhYUJ8SbrF+LcMxv5gSIaAOLE75daWiz162e3azX4/HOXnn8+XZIU\nCFh69NH01iL65JOjsixbtm3J7bY1eHBb0XjGGVGdcUagw+/ldkvFxbY++WSHJDOL6OPJz5fy8zte\nXfb7218suWmTS5FI7P/H6697NHduttLSbP32t36df37Hq+AAEA/Je9kzehWvxs1FdvFx+IK4yZNz\ntWRJmsJtG10oN9dWVlbbyujZZ7cVd2PGxC7a+8//9Osvf2nUOed0rvBLtfxKSqL69rdjLR4ZGbYW\nLAjI7ZZ27LB0443Z2r3bpW3b3Jo7N1sHDrR/7IED0rp1Ln32WWL86Uu17JIN+YGVaACIg1/8IkNv\nvZUmSfqXf8nWG28car2Y7vTTo/rTnxr1+OPpOv30iGbODLY+zuuVxo+PaPx4Vk1PRJ8+0ve/36yZ\nMwPKzJSGD29bsbZt64iPDx/HXrzs32/prrsy9fTT6crPj+rZZ30aM4b/5wC6LjFejsN47JdpLrLr\nHL8/1ncbCrWN2bbatRhEIrH/jnTBBRH95jdNWrAg0Lp1XDykYn59+kijRkV1+ultF2gOGmTr8cd9\n6tcvquLiqB56yN9uZ5JPPnHp6adjLTUNDS498YTXiam3k4rZJRPyA0U0AJygzz936dvfztbEiXl6\n6KF0HToUG7es2OpocXFULpet//iPpmMuiEPPu+SSsN5885BWrDjU7i6NkpSdbcvjaSuqTz65fT51\ndZa2bHGpqalXpgogCbBPNACcoEcf9erOO7Nbj5csOaQJE9qKtd27LbW0WCoujiojw4kZ4njC4did\nEP/f/8vQqFGxbfQOb6tXW+vSDTdka/Nmt26/vUXz5rUoL+9LnhCA0dgnGgB6UTDY/u4e0aMWm2N3\n60uIdQkcxeORLrssrEsu8cntbv+5p57yatOm2J/DX/wiU5Mnh9jZA8CXop0DcUFvmLnI7lLine truncated
"text": [
"<matplotlib.figure.Figure at 0x362cc90>"
"<matplotlib.figure.Figure at 0x7fc86edf0c10>"
]
}
],
"prompt_number": 26
"prompt_number": 15
},
{
"cell_type": "markdown",
@@ -1047,7 +1047,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"We might think to use the same state variables as used for tracking the dog. However, this will not work. Recall that the Kalman filter state transition must be written as $\\mathbf{x}' = \\mathbf{F x}$, which means we must calculate the current state from the previous state. Our assumption is that the ball is travelling in a vacuum, so the velocity in x is a constant, and the acceleration in y is solely due to the gravitational constant $g$. We can discretize the Newtonian equations using the well known Euler method in terms of $\\Delta t$ are:\n",
"We might think to use the same state variables as used for tracking the dog. However, this will not work. Recall that the Kalman filter state transition must be written as $\\mathbf{x}' = \\mathbf{F x}$, which means we must calculate the current state from the previous state. Our assumption is that the ball is traveling in a vacuum, so the velocity in x is a constant, and the acceleration in y is solely due to the gravitational constant $g$. We can discretize the Newtonian equations using the well known Euler method in terms of $\\Delta t$ are:\n",
"\n",
"$$\\begin{aligned}\n",
"x_t &= v_{x(t-1)} {\\Delta t} \\\\\n",
@@ -1164,7 +1164,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 36
"prompt_number": 16
},
{
"cell_type": "markdown",
@@ -1204,11 +1204,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x42b71d0>"
"<matplotlib.figure.Figure at 0x7fc86eddce50>"
]
}
],
"prompt_number": 41
"prompt_number": 17
},
{
"cell_type": "markdown",
@@ -1350,7 +1350,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 75
"prompt_number": 18
},
{
"cell_type": "markdown",
@@ -1398,13 +1398,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x3eea950>"
"<matplotlib.figure.Figure at 0x7fc86f090f50>"
]
}
],
"prompt_number": 74
"prompt_number": 19
},
{
"cell_type": "markdown",
@@ -1425,7 +1425,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"We are now ready to design a practical Kalman filter application. For this problem we assume that we are tracking a ball travelling through the Earth's atmosphere. The path of the ball is influenced by wind, drag, and the rotation of the ball. We will assume that our sensor is a camera; code that we will not implement will perform some type of image processing to detect the position of the ball. This is typically called *blob detection* in computer vision. However, image processing code is not perfect; in any given frame it is possible to either detect no blob or to detect spurious blobs that do not correspond to the ball. Finally, we will not assume that we know the starting position, angle, or rotation of the ball; the tracking code will have to initiate tracking based on the measurements that are provided. The main simplification that we are making here is a 2D world; we assume that the ball is always travelling orthogonal to the plane of the camera's sensor. We have to make that simplification at this point because we have not yet discussed how we might extract 3D information from a camera, which necessarily provides only 2D data. "
"We are now ready to design a practical Kalman filter application. For this problem we assume that we are tracking a ball traveling through the Earth's atmosphere. The path of the ball is influenced by wind, drag, and the rotation of the ball. We will assume that our sensor is a camera; code that we will not implement will perform some type of image processing to detect the position of the ball. This is typically called *blob detection* in computer vision. However, image processing code is not perfect; in any given frame it is possible to either detect no blob or to detect spurious blobs that do not correspond to the ball. Finally, we will not assume that we know the starting position, angle, or rotation of the ball; the tracking code will have to initiate tracking based on the measurements that are provided. The main simplification that we are making here is a 2D world; we assume that the ball is always traveling orthogonal to the plane of the camera's sensor. We have to make that simplification at this point because we have not yet discussed how we might extract 3D information from a camera, which necessarily provides only 2D data. "
]
},
{
@@ -1440,7 +1440,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Our first step is to implement the math for a ball moving through air. There are several treatments available. A robust solution takes into account issues such as ball roughness (which affects drag non-linearly depending on velocity), the Magnus effect (spin causes one side of the ball to have higher velocity relative to the air vs the opposite side, so the coefficient of drag differs on opposite sides), the effect of lift, humidity, air density, and so on. I assume the reader is not interested in the details of ball physics, and so will restrict this treatment to the effect of air drag on a nonspinning baseball. I will use the math developed by Nicholas Giordano and Hisao Nakanishi in *Computational Physics* [1997]. \n",
"Our first step is to implement the math for a ball moving through air. There are several treatments available. A robust solution takes into account issues such as ball roughness (which affects drag non-linearly depending on velocity), the Magnus effect (spin causes one side of the ball to have higher velocity relative to the air vs the opposite side, so the coefficient of drag differs on opposite sides), the effect of lift, humidity, air density, and so on. I assume the reader is not interested in the details of ball physics, and so will restrict this treatment to the effect of air drag on a non-spinning baseball. I will use the math developed by Nicholas Giordano and Hisao Nakanishi in *Computational Physics* [1997]. \n",
"\n",
"**Important**: Before I continue, let me point out that you will not have to understand this next piece of physics to proceed with the Kalman filter. My goal is to create a reasonably accurate behavior of a baseball in the real world, so that we can test how our Kalman filter performs with real-world behavior. In real world applications it is usually impossible to completely model the physics of a real world system, and we make do with a process model that incorporates the large scale behaviors. We then tune the measurement noise and process noise until the filter works well with our data. There is a real risk to this; it is easy to finely tune a Kalman filter so it works perfectly with your test data, but performs badly when presented with slightly different data. This is perhaps the hardest part of designing a Kalman filter, and why it gets referred to with terms such as 'black art'. \n",
"\n",
@@ -1474,11 +1474,11 @@
"\\end{aligned}\n",
"$$\n",
"\n",
"We can incorporate this force (acceleration) into our equations by incorporating $accel * \\Delta t$ into the velocity update equations. We should subtract this compenent because drag will reduce the velocity. The code to do this is quite straightforward, we just need to break out the Force into $x$ and $y$ components. \n",
"We can incorporate this force (acceleration) into our equations by incorporating $accel * \\Delta t$ into the velocity update equations. We should subtract this component because drag will reduce the velocity. The code to do this is quite straightforward, we just need to break out the Force into $x$ and $y$ components. \n",
"\n",
"I will not belabor this issue further because the computational physics is beyond the scope of this book. Recognize that a higher fidelity simulation would require incorporating things like altitude, temperature, ball spin, and several other factors. My intent here is to impart some real-world behavior into our simulation to test how our simpler prediction model used by the Kalman filter reacts to this behavior. Your process model will never exactly model what happens in the world, and a large factor in designing a good Kalman filter is carefully testing how it performs against real world data. \n",
"\n",
"The code below computes the behavior of a baseball in air, at sea level, in the presense of wind. I plot the same initial hit with no wind, and then with a tail wind at 10 mph. Baseball statistics are universally done in US units, and we will follow suit here (http://en.wikipedia.org/wiki/United_States_customary_units). Note that the velocity of 110 mph is a typical exit speed for a baseball for a home run hit."
"The code below computes the behavior of a baseball in air, at sea level, in the presence of wind. I plot the same initial hit with no wind, and then with a tail wind at 10 mph. Baseball statistics are universally done in US units, and we will follow suit here (http://en.wikipedia.org/wiki/United_States_customary_units). Note that the velocity of 110 mph is a typical exit speed for a baseball for a home run hit."
]
},
{
@@ -1541,11 +1541,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x31e2f10>"
"<matplotlib.figure.Figure at 0x7fc8768954d0>"
]
}
],
"prompt_number": 72
"prompt_number": 20
},
{
"cell_type": "markdown",
@@ -1553,7 +1553,7 @@
"source": [
"We can easily see the difference between the trajectory in a vacuum and in the air. I used the same initial velocity and launch angle in the ball in a vacuum section above. We computed that the ball in a vacuum would travel over 240 meters (nearly 800 ft). In the air, the distance is just over 120 meters, or roughly 400 ft. 400ft is a realistic distance for a well hit home run ball, so we can be confident that our simulation is reasonably accurate.\n",
"\n",
"Without further ado we will create a ball simulation that uses the math above to create a more realistic ball trajectory. I will note that the nonlinear behavior of drag means that there is no analytic solution to the ball position at any point in time, so we need to compute the position step-wise. I use Euler's method to propogate the solution; use of a more accurate technique such as Runge-Kutta is left as an exercise for the reader. That modest complication is unnessesary for what we are doing because the accuracy difference between the techniques will be small for the time steps we will be using. "
"Without further ado we will create a ball simulation that uses the math above to create a more realistic ball trajectory. I will note that the nonlinear behavior of drag means that there is no analytic solution to the ball position at any point in time, so we need to compute the position step-wise. I use Euler's method to propagate the solution; use of a more accurate technique such as Runge-Kutta is left as an exercise for the reader. That modest complication is unnecessary for what we are doing because the accuracy difference between the techniques will be small for the time steps we will be using. "
]
},
{
@@ -1615,7 +1615,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 66
"prompt_number": 21
},
{
"cell_type": "markdown",
@@ -1670,13 +1670,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x42b0890>"
"<matplotlib.figure.Figure at 0x7fc86ef61210>"
]
}
],
"prompt_number": 70
"prompt_number": 22
},
{
"cell_type": "markdown",
@@ -1686,7 +1686,7 @@
"\n",
"We can see that neither filter does very well. At first both track the measurements well, but as time continues they both diverge. This happens because the state model for air drag is nonlinear and the Kalman filter assumes that it is linear. If you recall our discussion about nonlinearity in the g-h filter chapter we showed why a g-h filter will always lag behind the acceleration of the system. We see the same thing here - the acceleration is negative, so the Kalman filter consistently overshoots the ball position. There is no way for the filter to catch up so long as the acceleration continues, so the filter will continue to diverge.\n",
"\n",
"What can we do to improve this? The best approach is to perform the filtering with a nonlinear Kalman filter, and we will do this in subequent chapters. However, there is also what I will call an 'engineering' solution to this problem as well. Our Kalman filter assumes that the ball is in a vacuum, and thus that there is no process noise. However, since the ball is in air the atmosphere imparts a force on the ball. We can think of this force as process noise. This is not a particularly rigorous thought; for one thing, this force is anything but Gaussian. Secondly, we can compute this force, so throwing our hands up and saying 'it's random' will not lead to an optimal solution. But let's see what happens if we follow this line of thought.\n",
"What can we do to improve this? The best approach is to perform the filtering with a nonlinear Kalman filter, and we will do this in subsequent chapters. However, there is also what I will call an 'engineering' solution to this problem as well. Our Kalman filter assumes that the ball is in a vacuum, and thus that there is no process noise. However, since the ball is in air the atmosphere imparts a force on the ball. We can think of this force as process noise. This is not a particularly rigorous thought; for one thing, this force is anything but Gaussian. Secondly, we can compute this force, so throwing our hands up and saying 'it's random' will not lead to an optimal solution. But let's see what happens if we follow this line of thought.\n",
"\n",
"The following code implements the same Kalman filter as before, but with a non-zero process noise. I plot two examples, one with `Q=.1`, and one with `Q=0.01`."
]
@@ -1738,21 +1738,21 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsIAAAFyCAYAAAD/MLwxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XeYVOX58PHvmbYzO9t7YTvL0nsXiQVRSVCjPws2YiSR\nn2jUaCyxvCbBGDHNGH1jNFFjDRZeRVFBBWFBkA4LLGXZ3nuZmZ12zvvHyui6BYTZfn+uK9eVOW2e\nuT3L3nvmfu5HOXz4sIYQQgghhBBDjK6vByCEEEIIIURfkERYCCGEEEIMSZIICyGEEEKIIUkSYSGE\nEEIIMSRJIiyEEEIIIYYkSYSFEEIIIcSQZOhuZ319PUuWLMHj8aBpGkuXLmXBggWMGjWKrKwsAKZN\nm8aDDz7YK4MVQgghhBDCX5Tu+gh7PB7cbjcWi4X6+noWLFhAdnY2U6dOZffu3b05TiGEEEIIIfyq\n2yfCBoMBg6HtkKamJkwmU68MSgghhBBCiJ7WbSIMYLPZuOaaaygqKuJPf/oTer0el8vF5ZdfTkBA\nAHfffTdTp07tjbEKIYQQQgjhN92WRnxbXl4eS5cu5b333sPhcBAZGcn+/fu57bbbWLdunTwtFkII\nIYQQA8pJnwifkJGRQUJCAnl5eYwbNw6AcePGERMTQ0lJCenp6e2O3717N1FRUf4drRBCCCGEEN/S\n3NzM6NGjT+vcbhPhyspKTCYT4eHhVFdXk5+fT2JiIq2trZjNZkpKSqisrCQhIaHDuVFRUUyePPm0\nBiU6Wr16NQsXLuzrYQwKEkv/knj6l8TTfySW/iXx9C+Jp//s2rXrtM/tNhEuLy/n4Ycf9r2+//77\nKSws5IEHHsBkMqHX63nssccwm82nPQBxaoqKivp6CIOGxNK/JJ7+JfH0H4mlf0k8/Uvi2T90mwhP\nnDiR1atXd9j+8ccf99iAhBBCCCGE6A3622+//dGeuHBTUxPx8fE9cekhKTQ0VGqu/URi6V8ST/+S\nePqPxNK/JJ7+JfH0n/LyckJDQ0/r3FPuGvF9FRcXS42wEEIIIYToUbt27SIpKem0zj3lrhGib2Vn\nZzNnzpy+HsagILH0L4mnf0k8/Udi6V+9Ec+WlhYaGxtRFKVH36c/aGxsPO2nmEORXq8nJibG7/eG\nJMJCCCGE6HO1tbUAJCQkDIlEuLOOW6JrdrudqqoqYmNj/XpdKY0QQgghRJ8rKyuT5FB0q6t75ExK\nI3RnOighhBBCCCEGIkmEB4js7Oy+HsKgIbH0L4mnf0k8/Udi6V8STzEYSSIshBBCCCGGJEmEBwiZ\n+ew/Ekv/knj6l8TTfySW/tVf41nrqOX1g6/z+NbHWb5lOU/vfJrt5dvRNP9NgfrDH/5AZGQkn376\nKdDW8SEuLo5LLrnEb+8xGERGRlJQUNDXw/hepGuEEEIIIfqt3Npcvij+gvrWevSKnpTQFOanzifM\nHEZpcykv7H0Bg86AXqfHoDNgc9tYnbeawqZCrhhxBYqioGkaxxuOU2YrIywgjFGRozDoTj0FUhSF\njIwM3n//febNm8dHH31EcnLykOhucapO/OHhzz9AeoM8ER4gpDbLfySW/iXx9C+Jp/9ILP2rL+L5\nSf4nvHrwVeocdQB4NS9H647y1I6nKGkqYeXhlZj0JvQ6fbvzAg2B7K3cy7GGYxQ1FvHHr/7Ii/tf\n5POCz1mZu5Intj3Bl6Vffq+xTJo0iZycHLxeL6tXr2bhwoVomoaqqjzxxBNMnDiRkSNHcv/99+Px\neAAoLCzk0ksvJT09nZSUFG666Saampq++XyffML06dNJTk5m2rRpfP755759EyZM4IsvvvC9/u7T\n1mXLlvHAAw9w4403kpyczIQJE2hpaQFg9erVzJ49m/T0dK6++moqKyt95yxcuJARI0bwyCOPMGPG\nDM477zwcDgcA9fX13HLLLYwcOZJJkybxn//8p9373X777SxYsIDk5GRuv/12374rr7ySlJQUAObO\nnUtycjIPPvjgKX3OviaJsBBCCCH6nQpbBZtKNhFkDGr35FWv02PSm/jn3n9S66jt8qlsoDGQj/I+\n4sWcF/GoHoJMQQQYArAaregVPWvy17CzYucpj0dRFGbPns2aNWuorq4mNTUVgL///e98/PHHfPzx\nx+zYsYPDhw/z3HPPAeByuVi8eDE5OTnk5ORQX1/PE0884bvmnXfeya9//WuKiop49913iY+Pb/d+\nJ3vivHLlSq6//noKCwt57bXXMBgM7Ny5kzvuuINnnnmGY8eOMX78eO666y7fOTNmzOAf//gHzz//\nPGvXrsVsNvPVV18BsHTpUkwmE3v37mXVqlU88cQT7Nmzx3fuhg0beP7559myZQvvvfceu3btAuCt\nt96iqKgIgE2bNlFUVMRjjz12Sp+zr0kiPED019qsgUhi6V8ST/+SePqPxNK/ejuenxd+TqAhsNN9\niqJQYaug2dnc5fmKorC7ajcGxdBpQmk1WNlQtOF7fZW/cOFCHnjgAS688ELfttdee417772XuLg4\ngoKCuPnmm/nggw8AyMzM5PLLLycwMJDg4GAuueQSDhw44DtXp9ORn59PU1MTSUlJjBo16pTHAnD2\n2Wczf/58FEVh7NixmM1mXn31VRYtWsSkSZPQ6XQsW7aMtWvX4nK5AEhLSyM1NZWoqChCQ0NJTk6m\npqaGiooKPvvsM5YvX05AQACpqaksXLiQDz/80Pd+F198MYmJiQwbNozRo0eTl5d3SuM808/ZkyQR\nFkIIIUS/0+RsQqd0naYEGgJpdDV2e40Wd0uHsolvq2+tp6617qRj0TQNRVGYMWMGI0eO5NJLL/Xt\nKy0tZenSpaSlpZGWlsayZcuoq2u7ZnV1NTfffDNjxowhLS2NRx55xFc2AfDiiy+yfft2JkyYwPz5\n8zl06NBJx/JtGRkZHbaVlpby8ssv+8YzadIkAgICfOURer0eg8GAXq/3vXa73ZSVlQEwceJE37mv\nv/461dXVvmt/e0lok8mE0+k8pXGe6efsSZIIDxBS6+Y/Ekv/knj6l8TTfySW/tXb8TTqjd0+rQ0y\nBRERENHlfrvHTlxg3Enfx6N6TnrMiQl3AG+//TbDhw/37UtMTOSdd94hPz+f/Px8CgsL2bZtGwC/\n/e1v0ev1bNu2jfz8fB5++GFUVfWdO336dF5//XUOHz5MZmYmv//97337AgICfEnzt+uKv02n65jG\nDRs2jHvuucc3nvz8fEpLS0+68lpiYiJms5njx4/7zisqKuKvf/3rSeNzQlelHN19zr4mibAQQggh\n+p3p8dNxeB1d7rcYLVw3+jrsbnuHfS7VRZw1jlGRo7pNps0GM+Hm8JOOpbNrnNh23XXX8fvf/56K\nigo0TePYsWOsX78eAJvNRlBQEIGBgRQWFvLSSy+1O3/lypW0tLT4EsiQkBDf/oyMDHbubKthfv/9\n9086xhMWLVrEiy++yL59+9A0jerqalatWtXtZwGIjY1l9uzZPProo9hsNtxuN9u2bWtXytFVDL59\njYMHD3Y4prvP2dckER4gpNbNfySW/iXx9C+Jp/9ILP2rt+M5JmoMCdYEXKqrwz67287cYXOZEj+F\nq0ddTaAhEJvbRou7BY/qYWzkWH42/mfMTZ6L3dMxUQZweV2MjhyNSW866Vg6m7h2YtuyZcuYNWsW\nCxYsIDU1lcWLF1NbWwvAvffey549e0hNTeXmm2/m4osv9l1H0zTeeustxo0bR2ZmJpWVle06Lfzq\nV79i5cqVzJs3j8rKyk6ftna2bdq0aSxfvpzbbruN1NRUzj//fPbt29dh3J2d+9xzz1FTU8O0adMY\nMWIEv/vd7/B6vV2+33dfP/TQQ9x7772MGTOG5cuX+7Z39zn7mnL48OEeafhWXFzM5MmTe+LSQggh\n+qkWVwsbizdSaa/EpDMxK2EWaWFp7X5hlreUs6V0Cy6vi9TQVKbGTcWoN/bhqEV/UFZWRkJCQrtt\nbq+bVUdXcbj2MK3eVgDCzeHMTZrL9Pjp7Y5tcjbh8roIDQhtdz99mPchW0q3YDVa0Sk6NE3D7rGT\nGJzIkvFLvlc/YdG3OrtHAHbt2nXS0o+uyH/9ASI7O1uebviJxNK/JJ7+1Z/iqWkau6t2s7VsK3a3\nnQB9AONjxjM7YXanieuO8h2szluNXmlrb6VpGrl1uaSEpPCTcT8B4NWDr3Ks7hiBxkB0io7culw+\nK/yMa0Zdw/Dw4R2ueSb6UywHg76Ip1Fv5KqRV+H0OKltrcWgMxBtie70aWZIQOdft/8w44dMjJnI\nhqINNLuaMelNzEiYwajIUd1OxhNDgyTCQgghOlA1ldcOvsaRuiNYjVagbVLR+sL17Kncw9KJSwkw\nBPiOr7BV8N6x93zHQtvXplajlbKWMt498i4ARY1FBJmCfMdYDBY0TePVA6/yy2m/7DKZEUNbgCGA\nhKCOTwJPVWJwIteNuc6PIxKDhZRGCCGE6CC7JJt1BeuwGCwd9rm9bkZEjuDqkVf7tr164FWKmoq6\nfMJmc9tAA6vpm0RZ1RTcHhNOTwB2l4EYczpjoyeg+/ppn05pS6Z1CiiAooBC22uzUUdWlJVIq5RU\nDBZdfe0txAlSGiGEEKJX7KjY0WkSDG1fVx+pO4LL6/JNNKq2V7dLgjUNnG4zLa3BOD0BVDTbQQvG\noETgcgfg9JhxeUy0pbhtDgIbjpZ8r3HGBpkYE2tlTKyV0bFWUsMt6HXdr8YlhBAnSCI8QEitm/9I\nLP1L4ulfvRFPu9vOkbojeDUvmeGZnZYjNLuaMeq6ftrq9DppdjUTaYkEwOPVUW8Lp8keSpMjjEZ7\nKC6P+SQj0TAZnJgMTgIMTgJNXibEjEVFQ9PakmkNDVUDjbaaZfXr7zAbHB4OV9uobHFR2eLine truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x319e550>"
"<matplotlib.figure.Figure at 0x7fc86ed4dcd0>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x3d70850>"
"<matplotlib.figure.Figure at 0x7fc86efec210>"
]
}
],
"prompt_number": 90
"prompt_number": 23
},
{
"cell_type": "markdown",
@@ -1776,21 +1776,21 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x415b2d0>"
"<matplotlib.figure.Figure at 0x7fc86ed789d0>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x3dccb10>"
"<matplotlib.figure.Figure at 0x7fc87690d610>"
]
}
],
"prompt_number": 91
"prompt_number": 24
},
{
"cell_type": "markdown",
@@ -1798,7 +1798,7 @@
"source": [
"This output is terrible. The filter has no choise but to give more weight to the measurements than the process (prediction step), but when the measurements are noisy the filter output will just track the noise. This inherent limitation of the linear Kalman filter is what lead to the development of nonlinear versions of the filter.\n",
"\n",
"With that said, it is certainly possible to use the process noise to deal with small nonlinearities in your system. This is part of the 'black art' of Kalman filters. Our model of the sensors and of the system are never perfect. Sensors are non-Gaussian and our process model is never perfect. You can mask some of this by setting the measurement errors and process errors higher than their theoretically correct values, but the trade off is a nonoptimal solution. Certainly it is better to be nonoptimal than to have your Kalman filter diverge. However, as we can see in the graphs above, it is easy for the output of the filter to be very bad. It is also very common to run many simulations and tests and to end up with a filter that performs very well under those conditions. Then, when you use the filter on real data the conditions are slightly different and the filter ends up performing terribly. \n",
"With that said, it is certainly possible to use the process noise to deal with small nonlinearities in your system. This is part of the 'black art' of Kalman filters. Our model of the sensors and of the system are never perfect. Sensors are non-Gaussian and our process model is never perfect. You can mask some of this by setting the measurement errors and process errors higher than their theoretically correct values, but the trade off is a non-optimal solution. Certainly it is better to be non-optimal than to have your Kalman filter diverge. However, as we can see in the graphs above, it is easy for the output of the filter to be very bad. It is also very common to run many simulations and tests and to end up with a filter that performs very well under those conditions. Then, when you use the filter on real data the conditions are slightly different and the filter ends up performing terribly. \n",
"\n",
"For now we will set this problem aside, as we are clearly misapplying the Kalman filter in this example. We will revisit this problem in subsequent chapters to see the effect of using various nonlinear techniques. In some domains you will be able to get away with using a linear Kalman filter for a nonlinear problem, but usually you will have to use one or more of the techniques you will learn in the rest of this book."
]
@@ -1815,7 +1815,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"If we are applying a Kalman filter to a thermometer in an oven in a factory then our task is done once the Kalman filter is designed. The data from the thermometer may be noisy, but there is never doubt that the thermometer is reading the temperature of *some other* oven. Contrast this to our current situation, where we are using computer vision to detect ball blobs from a vido camera. For any frame we may detect or may not detect the ball, and we may have one or more spurious blobs - blobs not associated with the ball at all. This can occur because of limitations of the computer vision code, or due to foreign objects in the scene, such as a bird flying through the frame. Also, in the general case we may have no idea where the ball starts from. A ball may be picked up, carried, and thrown from any position, for example. A ball may be launched within view of the camera, or the initial launch might be off screen and the ball merely travels through the scene. There is the possibility of bounces and deflections - the ball can hit the ground and bounce, it can bounce off a wall, a person, or any other object in the scene.\n",
"If we are applying a Kalman filter to a thermometer in an oven in a factory then our task is done once the Kalman filter is designed. The data from the thermometer may be noisy, but there is never doubt that the thermometer is reading the temperature of *some other* oven. Contrast this to our current situation, where we are using computer vision to detect ball blobs from a video camera. For any frame we may detect or may not detect the ball, and we may have one or more spurious blobs - blobs not associated with the ball at all. This can occur because of limitations of the computer vision code, or due to foreign objects in the scene, such as a bird flying through the frame. Also, in the general case we may have no idea where the ball starts from. A ball may be picked up, carried, and thrown from any position, for example. A ball may be launched within view of the camera, or the initial launch might be off screen and the ball merely travels through the scene. There is the possibility of bounces and deflections - the ball can hit the ground and bounce, it can bounce off a wall, a person, or any other object in the scene.\n",
"\n",
"Consider some of the problems that can occur. We could be waiting for a ball to appear, and a blob is detected. We initialize our Kalman filter with that blob, and look at the next frame to detect where the ball is going. Maybe there is no blob in the next frame. Can we conclude that the blob in the previous frame was noise? Or perhaps the blob was valid, but we did not detect the blob in this frame.\n",
"\n",
+38 -38
View File
@@ -1,7 +1,7 @@
{
"metadata": {
"name": "",
"signature": "sha256:4ecdae6210f95e36d3af59848f494f74e2f29cdacd65867ecf2aa7690cd9e1b4"
"signature": "sha256:f65e8525f0597e76c675123aaa3560c37c9571b274ee7611f78fa3538041edc9"
},
"nbformat": 3,
"nbformat_minor": 0,
@@ -41,10 +41,10 @@
" margin-right: auto;\n",
" }\n",
" div.text_cell code {\n",
" background: #FFFFFF;\n",
" background: transparent;\n",
" color: #000000;\n",
" font-weight: 600;\n",
" font-size: 13pt;\n",
" font-size: 11pt;\n",
" font-style: bold;\n",
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
" }\n",
@@ -248,13 +248,13 @@
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"prompt_number": 1,
"text": [
"<IPython.core.display.HTML at 0x27e1e90>"
"<IPython.core.display.HTML at 0x7fc0e923dd50>"
]
}
],
"prompt_number": 3
"prompt_number": 1
},
{
"cell_type": "heading",
@@ -268,7 +268,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The last chapter ended by discussing some of the drawbacks of the Discrete Bayesian filter. For many tracking and filtering problems our desire is to have a filter that is *unimodal* and *continuous*. That is, we want to model our system using floating point math (continuous) and to have only one belief represented (unimodal). For example, we want to say an aircraft is at (12.34381, -95.54321,2389.5) where that is latitude, longitude, and altidue. We do not want our filter to tell us \"it might be at (1,65,78) or at (34,656,98)\" That doesn't match our physical intuition of how the world works, and as we discussed, it is prohibitively expensive to compute.\n",
"The last chapter ended by discussing some of the drawbacks of the Discrete Bayesian filter. For many tracking and filtering problems our desire is to have a filter that is *unimodal* and *continuous*. That is, we want to model our system using floating point math (continuous) and to have only one belief represented (unimodal). For example, we want to say an aircraft is at (12.34381, -95.54321,2389.5) where that is latitude, longitude, and altitude. We do not want our filter to tell us \"it might be at (1,65,78) or at (34,656,98)\" That doesn't match our physical intuition of how the world works, and as we discussed, it is prohibitively expensive to compute.\n",
"\n",
">So we desire a unimodal, continuous way to represent probabilities that models how the real world works, and that is very computationally efficient to calculate. As you might guess from the chapter name, Gaussian distributions provide all of these features.\n",
"\n",
@@ -289,21 +289,21 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x300a290>"
"<matplotlib.figure.Figure at 0x7fc0c7a8cd10>"
]
}
],
"prompt_number": 4
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Probably this is immediately recognizable to you as a 'bell curve'. This curve is ubiquitious because under real world conditions most observations are distributed in such a manner. In fact, this is the bell curve for IQ (Intelligence Quotient). You've probably seen this before, and understand it. It tells us that the average IQ is 100, and that the number of people that have IQs higher or lower than that drops off as they get further away from 100. It's hard to see the exact number, but we can see that very few people have an IQ over 150 or under 50, but a lot have an IQ of 90 or 110. \n",
"Probably this is immediately recognizable to you as a 'bell curve'. This curve is ubiquitous because under real world conditions most observations are distributed in such a manner. In fact, this is the bell curve for IQ (Intelligence Quotient). You've probably seen this before, and understand it. It tells us that the average IQ is 100, and that the number of people that have IQs higher or lower than that drops off as they get further away from 100. It's hard to see the exact number, but we can see that very few people have an IQ over 150 or under 50, but a lot have an IQ of 90 or 110. \n",
"\n",
"This curve is not unique to IQ distributions - a vast amount of natural phenomena exhibits this sort of distribution, including the sensors that we use in filtering problems. As we will see, it also has all the attributes that we are looking for - it represents a unimodal belief or value as a probabilitiy, it is continuous, and it is computationally efficient. We will soon discover that it also other desirable qualities that we do not yet recognize we need.\n",
"This curve is not unique to IQ distributions - a vast amount of natural phenomena exhibits this sort of distribution, including the sensors that we use in filtering problems. As we will see, it also has all the attributes that we are looking for - it represents a unimodal belief or value as a probability, it is continuous, and it is computationally efficient. We will soon discover that it also other desirable qualities that we do not yet recognize we need.\n",
"<p>\n",
"<p>"
]
@@ -323,7 +323,7 @@
"A bit of nomenclature before we continue - this chart depicts the probability of of a *random variable* having any value between ($-\\infty..\\infty)$. For example, for this chart the probability of the variable being 100 is roughly 2.7%, whereas the probability of it being 80 is around 1%.\n",
"> *Random variable* will be precisely defined later. For now just think of it as a variable that can 'freely' and 'randomly' vary. A dog's position in a hallway, air temperature, and a drone's height above the ground are all random variables. The position of the North Pole is not, nor is a sin wave (a sin wave is anything but 'free').\n",
"\n",
"You may object that human IQs cannot be less than zero, let alone $-\\infty$. This is true, but this is a common limitation of mathematical modelling. \"The map is not the territory\" is a common expression, and it is true for Bayesian filtering and statistics. The Gaussian distribution above very closely models the distribution of IQ test results, but being a model it is necessarily imperfect. The difference between model and reality will come up again and again in these filters. \n",
"You may object that human IQs cannot be less than zero, let alone $-\\infty$. This is true, but this is a common limitation of mathematical modeling. \"The map is not the territory\" is a common expression, and it is true for Bayesian filtering and statistics. The Gaussian distribution above very closely models the distribution of IQ test results, but being a model it is necessarily imperfect. The difference between model and reality will come up again and again in these filters. \n",
"\n",
"You will see these distributions called *Gaussian distributions*, *normal distributions*, and *bell curves*. Bell curve is ambiguous because there are other distributions which also look bell shaped but are not Gaussian distributions, so we will not use it further in this book. But *Gaussian* and *normal* both mean the same thing, and are used interchangeably. I will use both throughout this book as different sources will use either term, and so I want you to be used to seeing both. Finally, as in this paragraph, it is typical to shorten the name and just talk about a *Gaussian* or *normal* - these are both typical shortcut names for the *Gaussian distribution*. "
]
@@ -395,19 +395,19 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x302c590>"
"<matplotlib.figure.Figure at 0x7fc0c7a77850>"
]
}
],
"prompt_number": 5
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So what does this curve *mean*? Assume for a moment that we have a themometer, which reads 22$\\,^{\\circ}C$. No thermometer is perfectly accurate, and so we normally expect that thermometer will read $\\pm$ that temperature by some amount each time we read it. Furthermore, a theorem called **Central Limit Theorem** states that if we make many measurements that the measurements will be normally distributed. If that is true, then this chart can be interpreted as a continuous curve depicting our belief that the temperature is any given temperature. In this curve, we assign a probability of the temperature being exactly 22$^{\\circ}C$ is $19.95\\%$. Looking to the right, we assign the probability that the temperature is 24$^{\\circ}C$ is $12.10\\%$. Because of the curve's symmetry, the probability of 20$^{\\circ}$C is also $12.10\\%$.\n",
"So what does this curve *mean*? Assume for a moment that we have a thermometer, which reads 22$\\,^{\\circ}C$. No thermometer is perfectly accurate, and so we normally expect that thermometer will read $\\pm$ that temperature by some amount each time we read it. Furthermore, a theorem called **Central Limit Theorem** states that if we make many measurements that the measurements will be normally distributed. If that is true, then this chart can be interpreted as a continuous curve depicting our belief that the temperature is any given temperature. In this curve, we assign a probability of the temperature being exactly 22$^{\\circ}C$ is $19.95\\%$. Looking to the right, we assign the probability that the temperature is 24$^{\\circ}C$ is $12.10\\%$. Because of the curve's symmetry, the probability of 20$^{\\circ}$C is also $12.10\\%$.\n",
"\n",
"So the mean ($\\mu$) is what it sounds like - the average of all possible probabilities. Because of the symmetric shape of the curve it is also the tallest part of the curve. The thermometer reads $22^{\\circ}C$, so that is what we used for the mean. \n",
"\n",
@@ -421,7 +421,7 @@
"\n",
"###### The Variance\n",
"\n",
"Since this is a probability distribution it is required that the area under the curve always equals one. This should be intuitively clear - the area under the curve represents all possible occurances, which must sum to one.\n",
"Since this is a probability distribution it is required that the area under the curve always equals one. This should be intuitively clear - the area under the curve represents all possible occurences, which must sum to one.\n",
"\n",
"This leads to an important insight. If the variance is small the curve will be narrow. To keep the area equal to 1, the curve must also be tall. On the other hand if the variance is large the curve will be wide, and thus it will also have to be short to make the area equal to 1.\n",
"\n",
@@ -448,13 +448,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x3203850>"
"<matplotlib.figure.Figure at 0x7fc0c7a37f10>"
]
}
],
"prompt_number": 6
"prompt_number": 4
},
{
"cell_type": "markdown",
@@ -490,13 +490,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x35e8c50>"
"<matplotlib.figure.Figure at 0x7fc0c7a37850>"
]
}
],
"prompt_number": 7
"prompt_number": 5
},
{
"cell_type": "markdown",
@@ -504,7 +504,7 @@
"source": [
"<p>\n",
"<p>\n",
"<div style=\"border:1px dotted black;background-color:#DCDCDC#\">**Sidebar**: An equivalent formation for a Gaussian is $\\mathcal{N}(\\mu,1/\\tau)$ where $\\mu$ is the *mean* and $tau$ the *precision*. Here $1/\\tau = \\sigma^2$; it is the reciprocal of the variance. While we do not use this formulation in this book, it underscores that the variance is a measure of how precise our data is. A small variance yields large precision - our measurement is very precise. Conversely, a large variance yields low precision - our belief is spread out across a large area. You should become comfortable with thinking about Gaussians in these equivelant forms. Gaussians reflect our *belief* about a measurement, they express the *precision* of the measurement, and they express how much *variance* there is in the measurements. These are all different ways of stating the same fact.</div>"
"<div style=\"border:1px dotted black;background-color:#DCDCDC#\">**Sidebar**: An equivalent formation for a Gaussian is $\\mathcal{N}(\\mu,1/\\tau)$ where $\\mu$ is the *mean* and $tau$ the *precision*. Here $1/\\tau = \\sigma^2$; it is the reciprocal of the variance. While we do not use this formulation in this book, it underscores that the variance is a measure of how precise our data is. A small variance yields large precision - our measurement is very precise. Conversely, a large variance yields low precision - our belief is spread out across a large area. You should become comfortable with thinking about Gaussians in these equivalent forms. Gaussians reflect our *belief* about a measurement, they express the *precision* of the measurement, and they express how much *variance* there is in the measurements. These are all different ways of stating the same fact.</div>"
]
},
{
@@ -545,21 +545,21 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x3037990>"
"<matplotlib.figure.Figure at 0x7fc0c79846d0>"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"prompt_number": 6,
"text": [
"<function __main__.plt_g>"
]
}
],
"prompt_number": 8
"prompt_number": 6
},
{
"cell_type": "heading",
@@ -573,7 +573,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Recall how our discrete Bayesian filter worked. We had a vector implemented as a numpy array representing our belief at a certain moment in time. When we performed another measurement using the `sense()` function we had to multiply probabilities together, and when we performed the motion step using the `update()` function we had to shift and add probabilities. I've promised you that the Kalman filter uses essentially the same process, and that it uses Gaussians instead of histograms, so you might reasonable expect that we will be multipling, adding, and shifting Gaussians in the Kalman filter.\n",
"Recall how our discrete Bayesian filter worked. We had a vector implemented as a numpy array representing our belief at a certain moment in time. When we performed another measurement using the `sense()` function we had to multiply probabilities together, and when we performed the motion step using the `update()` function we had to shift and add probabilities. I've promised you that the Kalman filter uses essentially the same process, and that it uses Gaussians instead of histograms, so you might reasonable expect that we will be multiplying, adding, and shifting Gaussians in the Kalman filter.\n",
"\n",
"A typical textbook would directly launch into a multipage proof of the behavior of Gaussians under these operations, but I don't see the value in that right now. I think the math will be much more intuitive and clear if we just start developing a Kalman filter using Gaussians. I will provide the equations for multiplying and shifting Gaussians at the appropriate time. You will then be able to develop a physical intuition for what these operations do, rather than be forced to digest a lot of fairly abstract math.\n",
"\n",
@@ -617,7 +617,7 @@
]
}
],
"prompt_number": 9
"prompt_number": 7
},
{
"cell_type": "markdown",
@@ -648,7 +648,7 @@
]
}
],
"prompt_number": 10
"prompt_number": 8
},
{
"cell_type": "markdown",
@@ -672,13 +672,13 @@
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0.65050631 1.46864336 1.32158495 -2.73465823 -0.13679278 -1.33790321\n",
" 5.72887237 3.33521646 2.35884602 -1.37062805 -0.06171522 1.94129846\n",
" 0.5054121 4.00091453 2.946641 ]\n"
"[ 1.33487857 2.32419504 1.07523853 -0.27928953 1.98992013 -0.76257228\n",
" 2.07271785 -1.6604275 -0.96593885 0.0456679 1.8342477 1.64217285\n",
" -3.3709959 3.87590067 1.86209169]\n"
]
}
],
"prompt_number": 11
"prompt_number": 9
},
{
"cell_type": "markdown",
@@ -705,7 +705,7 @@
]
}
],
"prompt_number": 12
"prompt_number": 10
},
{
"cell_type": "markdown",
@@ -735,7 +735,7 @@
]
}
],
"prompt_number": 13
"prompt_number": 11
},
{
"cell_type": "markdown",
+7 -7
View File
@@ -260,9 +260,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"If you've gotten this far I hope that you are thinking that the Kalman filter's fearsome reputation is somewhat undeserved. Sure, I handwaved some equations away, but I hope implemention has been fairly straightforward for you. The underlying concept is quite straightforward - take two measurements, or a measurement and a prediction, and choose the output to be somewhere between the two. If you believe the measurement more your guess will be closer to the measurement, and if you believe the prediction is more accurate your guess will lie closer it it. That's not rocket science (little joke - it is exactly this math that got Apollo to the moon and back!). \n",
"If you've gotten this far I hope that you are thinking that the Kalman filter's fearsome reputation is somewhat undeserved. Sure, I hand waved some equations away, but I hope implementation has been fairly straightforward for you. The underlying concept is quite straightforward - take two measurements, or a measurement and a prediction, and choose the output to be somewhere between the two. If you believe the measurement more your guess will be closer to the measurement, and if you believe the prediction is more accurate your guess will lie closer it it. That's not rocket science (little joke - it is exactly this math that got Apollo to the moon and back!). \n",
"\n",
"Well, to be honest I have been choosing my problems carefully. For any arbitrary problem finding some of the matrices that we need to feed into the Kalman filter equations can be quite difficult. I haven't been *too tricky*, though. Equations like Newton's equations of motion can be trivially computed for Kalman filter applications, and they make up the bulk of the kind of problems that we want to solve. If you are a hobbiest, you can safely pass by this chapter for now, and perhaps forever. Some of the later chapters will assume the material in this chapter, but much of the work will still be acceessible to you. \n",
"Well, to be honest I have been choosing my problems carefully. For any arbitrary problem finding some of the matrices that we need to feed into the Kalman filter equations can be quite difficult. I haven't been *too tricky*, though. Equations like Newton's equations of motion can be trivially computed for Kalman filter applications, and they make up the bulk of the kind of problems that we want to solve. If you are a hobbyist, you can safely pass by this chapter for now, and perhaps forever. Some of the later chapters will assume the material in this chapter, but much of the work will still be accessible to you. \n",
"\n",
"But, I urge everyone to at least read the first section, and to skim the rest. It is not much harder than what you have done - the difficulty comes in finding closed form expressions for specific problems, not understanding the math in this chapter. \n"
]
@@ -272,7 +272,7 @@
"level": 2,
"metadata": {},
"source": [
"Modelling a Linear System that Has Noise"
"Modeling a Linear System that Has Noise"
]
},
{
@@ -281,7 +281,7 @@
"source": [
"We need to start by understanding the underlying equations and assumptions that the Kalman filter uses. We are trying to model real world phenomena, so what do we have to consider?\n",
"\n",
"First, each physical system has a process. For example, a car travelling at a certain velocity goes so far in a fixed amount of time, and it's velocity varies as a function of it's aceleration. We describe that behavior with the well known Newtonian equations we learned in high school.\n",
"First, each physical system has a process. For example, a car traveling at a certain velocity goes so far in a fixed amount of time, and it's velocity varies as a function of it's acceleration. We describe that behavior with the well known Newtonian equations we learned in high school.\n",
"\n",
"\n",
"$$\n",
@@ -336,7 +336,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"I promised that you would not have to understand how to derive Kalman filter equations, and that is true. However, I do think it is worth walking through the equations one by one and becoming familiar with the variables. If this is your first time through the material feel free to skip ahead to the next section. However, you will eventually want to work through this material, so why not now? You will need to have passing familarity with these equations to read material written about the Kalman filter, as they all presuppose that you are familiar with the equations. I will reiterate them here for easy reference.\n",
"I promised that you would not have to understand how to derive Kalman filter equations, and that is true. However, I do think it is worth walking through the equations one by one and becoming familiar with the variables. If this is your first time through the material feel free to skip ahead to the next section. However, you will eventually want to work through this material, so why not now? You will need to have passing familiarity with these equations to read material written about the Kalman filter, as they all presuppose that you are familiar with the equations. I will reiterate them here for easy reference.\n",
"\n",
"\n",
"$$\n",
@@ -387,7 +387,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The blue prediction line is the output of $\\mathbf{Hx}$, and the dot labelled \"measurement\" is $\\mathbf{z}$. Therefore, $\\gamma = \\mathbf{z} - \\mathbf{Hx}$ is how we compute the residual, drawn in red. So $\\gamma$ is the residual.\n",
"The blue prediction line is the output of $\\mathbf{Hx}$, and the dot labeled \"measurement\" is $\\mathbf{z}$. Therefore, $\\gamma = \\mathbf{z} - \\mathbf{Hx}$ is how we compute the residual, drawn in red. So $\\gamma$ is the residual.\n",
"\n",
"The next line is the formidable:\n",
"\n",
@@ -399,7 +399,7 @@
"\n",
"$$(\\mathbf{HPH}^T + \\mathbf{R})^{-1}$$\n",
"\n",
"Taking the inverse is linear algebra's way of doing $\\frac{1}{x}$. So if you accept my admittedly hand wavely explanation it can be seen to be computing:\n",
"Taking the inverse is linear algebra's way of doing $\\frac{1}{x}$. So if you accept my admittedly hand wavey explanation it can be seen to be computing:\n",
"\n",
"$$ \n",
"gain_{measurement\\,space} = \\frac{uncertainty_{prediction}}{uncertainty_{measurement}}\n",
+162 -141
View File
@@ -1,7 +1,7 @@
{
"metadata": {
"name": "",
"signature": "sha256:4414002ad322665b3f542b87dd68548502bce8e0ed0e7850a50229d72015c435"
"signature": "sha256:372f9fab3c373729afc7c41657597b3a0effd62b311982a1c72c927fd5d0206e"
},
"nbformat": 3,
"nbformat_minor": 0,
@@ -248,7 +248,7 @@
"output_type": "pyout",
"prompt_number": 1,
"text": [
"<IPython.core.display.HTML at 0x7f51e1381e10>"
"<IPython.core.display.HTML at 0x7fc174020c90>"
]
}
],
@@ -283,9 +283,9 @@
"source": [
"As in the histogram chapter we will be tracking a dog in a long hallway at work. However, in our latest hackathon someone created an RFID tracker that provides a reasonable accurate position for our dog. Suppose the hallway is 100m long. The sensor returns the distance of the dog from the left end of the hallway. So, 23.4 would mean the dog is 23.4 meters from the left end of the hallway.\n",
"\n",
"Naturally, the sensor is not perfect. A reading of 23.4 could correspond to a real position of 23.7, or 23.0. However, it is very unlikely to correspond to a real position of say 47.6. Testing during the hackathon confirmed this result - the sensor is reasonably accurate, and while it had errors, the errors are small. Futhermore, the errors seemed to be evenly distributed on both sides of the measurement; a true position of 23m would be equally likely to be measured as 22.9 as 23.1.\n",
"Naturally, the sensor is not perfect. A reading of 23.4 could correspond to a real position of 23.7, or 23.0. However, it is very unlikely to correspond to a real position of say 47.6. Testing during the hackathon confirmed this result - the sensor is reasonably accurate, and while it had errors, the errors are small. Furthermore, the errors seemed to be evenly distributed on both sides of the measurement; a true position of 23m would be equally likely to be measured as 22.9 as 23.1.\n",
"\n",
"Implementing and/or robustly modelling an RFID system is beyond the scope of this book, so we will write a very simple model. We will start with a simulation of the dog moving from left to right at a constant speed with some random noise added. "
"Implementing and/or robustly modeling an RFID system is beyond the scope of this book, so we will write a very simple model. We will start with a simulation of the dog moving from left to right at a constant speed with some random noise added. "
]
},
{
@@ -340,10 +340,10 @@
"output_type": "stream",
"stream": "stdout",
"text": [
"-0.5428\t 0.0747\t-0.7513\t-1.0714\t-1.2668\t\n",
"-1.2046\t 1.4604\t 1.9741\t-0.5016\t-1.1248\t\n",
"-0.1609\t 0.0570\t-0.4709\t 0.5378\t 0.0354\t\n",
"-0.1029\t 0.6407\t-0.0439\t-1.1291\t-0.9517\t\n"
" 0.5427\t 0.3376\t-0.2458\t-1.0022\t-0.3602\t\n",
"-0.4171\t 0.8655\t 0.1328\t-1.3316\t-1.4808\t\n",
"-1.0374\t 0.0335\t 0.3618\t-0.0386\t 0.7771\t\n",
" 1.4292\t 1.6454\t-1.0276\t 0.2587\t 0.4679\t\n"
]
}
],
@@ -389,7 +389,7 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAFyCAYAAAAXsAkaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X1snfV5N/CLxHnBJDgBAiRp/QDiHVwaxDZBXMEqCjQp\n7VjXjbKWsjWPBCloFSDa0las07SpTLRsYqSwCBWt1ZA2EAzoC6yUFYdHYlUZMWVU0EQzYSmYxiQh\nITQvfv5gMUmwfS4f38f3fc75fP7K7/jg/Pjm9snPV77n9kG/+MUvhgMAAFrUtLI3AAAAjeTACwBA\nS3PgBQCgpTnwAgDQ0hx4AQBoaQ68AAC0tHEPvF//+tdj6dKlcfHFF4889r3vfS8uvPDCuPDCC+PH\nP/5xwzcIAACTMe6B94ILLog77rhjZP2b3/wmbrnllvinf/qn+Pa3vx1/9Vd/1fANAgDAZIx74F2y\nZEnMmzdvZL127do44YQT4rDDDouFCxfG0UcfHc8//3zDNwkAAPXqmMiTBwcHY8GCBXHPPfdEV1dX\nLFiwIF599dU4+eSTG7U/AACYlAkdePe69NJLIyLi0UcfjYMOOqjQDQEAQJEmdOA98sgjY3BwcGS9\nd+J7oKeffjqOOOKIye8OAADGsXXr1jj11FPHfc6EDrw9PT3xwgsvxKZNm+Ktt96KV155ZdQ6wxFH\nHBFnnnnmxHbbph588MH97oLB6OSUJ6scOeXIKU9WOXLKk9X+du8ZjsfXDcV3n/5VdM3uiE+feXQs\nWTQ3nn766Zr/7bgH3q997Wvx6KOPxuuvvx7nnntu3HTTTXHdddfFJz/5yYiIuPHGG4v5P2hjAwMD\nZW+hKcgpT1Y5csqRU56scuSUJ6u3HXjQvfqc98SSRXMnVKsd98B70003xU033fSux5ctWzbx3QIA\nQFIRB9296nrTGsU5//zzy95CU5BTnqxy5JQjpzxZ5cgpr12zKvKgu9dBv/jFL4YL3GNERLz00ks6\nvAAApI3V0a110P3Zz34W733ve8d9zrg/eILG6+vrK3sLTUFOebLKkVOOnPJklSOnvHbJavee4fjR\ni5vi/977X/HQf70WV5/znvjGR06IMxcfWtjtb1UaAACYco2oLoxFpQEAgClTb3VhLJlKgwkvAAAN\nN5UT3QPp8JasXfo5kyWnPFnlyClHTnmyypFTXqtkNRUd3VpMeAEAKFyZE90D6fACAFCYoju6tejw\nAgAwJao00T2QDm/JWqWf02hyypNVjpxy5JQnqxw55TVLVlXo6NZiwgsAwIRVeaJ7IB1eAADSprqj\nW4sOLwAAhWimie6BdHhL1iz9nLLJKU9WOXLKkVOerHLklFeVrJqho1uLCS8AAO/SzBPdA+nwAgAw\nomod3Vp0eAEASGmlie6BdHhLVpV+TtXJKU9WOXLKkVOerHLklDdVWbVCR7cWE14AgDbUyhPdA+nw\nAgC0kWbr6NaiwwsAQES010T3QDq8JdNlypFTnqxy5JQjpzxZ5cgpr6is2qGjW4sJLwBAC2rnie6B\ndHgBAFpIq3V0a9HhBQBoEya6Y9PhLZkuU46c8mSVI6ccOeXJKkdOedmsdHRrM+EFAGhCJrp5dXd4\nv/nNb8Zjjz0WM2bMiJUrV8b5558/8jEdXgCAxmi3jm4tDevw9vf3x5o1a+KBBx6IzZs3xyWXXBJn\nn312HHLIIXVtFACA8Zno1q+uDu9LL70Up5xySkybNi3mz58fRx11VPT39xe9t7agy5QjpzxZ5cgp\nR055ssqRU97erHR0J6+uCe/xxx8f3/rWt2LHjh2xadOm+OUvfxm//vWvi94bAEDb2jMc8aMXN5no\nFqDuDu+3v/3tuP/+++Ooo46Kjo6O+L3f+7340Ic+FBE6vAAA9dLRnZiG3of3iiuuiCuuuCIiIv7o\nj/4oFi1atN/HV65cGd3d3RER0dXVFT09PdHb2xsR74zora2tra2tra2t317/5Im++PmW6fEf27ui\na3ZHnHfo63Fs5544c/GJldhfVdZ7fz0wMBAREStWrIha6p7wDg0Nxfz58+Opp56Km266Kb7//e+P\nfMyEN6+vr2/kD5KxySlPVjlyypFTnqxy5PRuB050Lz9zYbx/0ZxYs2aNrBIaOuG98cYbY2BgIGbM\nmBE333xzvZ8GAKAtHXjQveac98b7F81RXWiAuie84zHhBQAY3VgTXQfd+jR0wgsAQJ6Jbnnqug8v\nxdm3gM3Y5JQnqxw55cgpT1Y57ZjTgffRveac98Y3PnJCLFk8/p0X2jGrRjHhBQBoABPd6tDhBQAo\nkI7u1NLhBQCYIia61aXDWzL9nBw55ckqR045csqTVU4r5lRvR7eWVsyqLCa8AAB1MNFtHjq8AAAT\noKNbLTq8AAAFMdFtXjq8JdPPyZFTnqxy5JQjpzxZ5TRjTo3q6NbSjFlVlQkvAMAoTHRbhw4vAMA+\ndHSbiw4vAECSiW7r0uEtmX5OjpzyZJUjpxw55ckqp4o5ldXRraWKWTUrE14AoC2Z6LYPHV4AoK3o\n6LYWHV4AgP9lotu+dHhLpp+TI6c8WeXIKUdOebLKKSOnqnZ0a3FNFceEFwBoSSa67KXDCwC0FB3d\n9qLDCwC0DRNdxqLDWzL9nBw55ckqR045csqTVU4jcmrWjm4trqnimPACAE3JRJcsHV4AoKno6LIv\nHV4AoGWY6FIvHd6S6efkyClPVjlyypFTnqxy6smpVTu6tbimimPCCwBUkokuRdHhBQAqRUeXidDh\nBQCahokujVJ3h/e2226L5cuXx/Lly+O2224rck9tRT8nR055ssqRU46c8mSVM1pO7drRrcU1VZy6\nJrwvvfRSPPDAA/HDH/4wdu/eHR/+8IfjkksuicWLFxe9PwCgRZnoMlXqOvDOmTMnOjo6YseOHbFn\nz56YMWNGzJ07t+i9tYXe3t6yt9AU5JQnqxw55cgpT1Y5vb29DrpJrqni1HXgnT9/flx++eVx3nnn\nxZ49e+ILX/hCHHrooUXvDQBoIQ66lKWuA++GDRvinnvuicceeyx27twZn/zkJ+O8886LBQsWjDxn\n5cqV0d3dHRERXV1d0dPTM/Kdyt5OinXvfv2cKuynquv+/v646qqrKrOfKq9XrVrl6y2x3vtYVfZT\n1bXryet5Eeuzz1kaj68bitVPro/hHW/EF5afGe9fNCfWrFkTa9aXv7+qrn39jf363dfXFwMDAxER\nsWLFiqilrtuSfe9734snn3wy/vIv/zIiIq699tr42Mc+Fueee25EuC3ZRPT19Y38QTI2OeXJKkdO\nOXLKk9W7jXZ7sTfWPRMf+ICcMlxTOZnbktV14O3v74+vfOUr8c///M+xZ8+e+NjHPharVq2K4447\nLiIceAGgnbmPLlOpYffh7enpiQ996ENxySWXRETEH/7hH44cdgGA9qSjS1XVfR/eq6++Oh5++OF4\n+OGH47Of/WyRe2or+/ZRGJuc8mSVI6ccOeW1c1YTuY9uO+c0UbIqTl0TXgAAE12aRV0d3lp0eAGg\ndenoUiUN6/ACAO3HRJdmVXeHl2Lo5+TIKU9WOXLKkVNeK2c1kY5uLa2cU9FkVRwTXgBgVCa6tAod\nXgBgPzq6NBMdXgAgzUSXVqXDWzL9nBw55ckqR045cspr5qyK7OjW0sw5TTVZFceEFwDalIku7UKH\nFwDajI4urUSHFwAYYaJLu9LhLZl+To6c8mSVI6ccOeVVOaup7OjWUuWcqkZWxTHhBYAWZaILb9Ph\nBYAWo6NLO9HhBYA2YqILo9PhLZl+To6c8mSVI6ccOeWVmVWVOrq1uKbyZFUcE14AaFImupCjwwsA\nTUZHF96hwwsALcREF+qjw1sy/ZwcOeXJKkdOOXLKa2RWzdTRrcU1lSer4pjwAkBFmehCMXR4AaBi\ndHQhT4cXAJqIiS40hg5vyfRzcuSUJ6scOeXIKW8yWbVSR7cW11SerIpjwgsAJTHRhamhwwsAU0xH\nF4qjwwsAFWKiC+XQ4S2Zfk6OnPJklSOnHDnljZdVO3V0a3FN5cmqOHVNeJ944om45ZZbRtYvvvhi\n/Mu//EucfPLJhW0MAJqdiS5Uw6Q7vIODg/GpT30qfvjDH448psMLQDvT0YWpMyUd3ocffjguuuii\nyX4aAGh6JrpQTZPu8D744IOxbNmyIvbSlvRzcuSUJ6scOeXIKWf3nuFY9fD/09FNcE3lyao4k5rw\nrlu3Lnbs2BEnnXRSUfsBgKax70T3oN/MiGvOM9GFKprUgfehhx4ac7q7cuXK6O7ujoiIrq6u6Onp\nid7e3oh45zsW697o7e2t1H6qvN6rKvup6nrvY1XZj3Vzr/c+VpX9VGV99jlL4/F1Q7H6yfXROX04\nrj7vxFiyaG6sWbMm1qwvf39VX+9Vlf1Udb33sarspyrrvb8eGBiIiIgVK1ZELZN609qFF14Yd9xx\nRxxzzDH7Pe5NawC0on0nuvNmd8SnvRkNSpd501rdHd5nnnkmDjnkkHcddpmYA7/bZXRyypNVjpxy\n5PS2fe+j+/D/dnRvOaCjK6scOeXJqjgd9f6HZ5xxRtx3331F7gUAKuXAia67LkBzmvR9eEej0gBA\nM1NdgOYxJffhBYBWYaILrWnS9+FlcvRzcuSUJ6scOeW0S06Zjm4t7ZLVZMkpT1bFMeEFoG2Z6EJ7\n0OEFoO3o6ELr0OEFgH2Y6EJ70uEtmX5OjpzyZJUjp5xWyamIjm4trZJVo8kpT1bFMeEFoGWZ6AIR\nOrwAtCAdXWgfOrwAtBUTXWA0Orwl08/JkVOerHLklNMsOU1FR7eWZsmqbHLKk1VxTHgBaFomukCG\nDi8ATUdHF9hLhxeAlmKiC9RDh7dk+jk5csqTVY6ccqqSUxU6urVUJauqk1OerIpjwgtAZZLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51c73054d0>"
"<matplotlib.figure.Figure at 0x7fc159fb92d0>"
]
}
],
@@ -399,7 +399,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The constructor initialized the dog at position 0 with a velocity of 1 (move 1.0 to the right). So we would expect to see an output of 1..10, and indeed that is what we see. If you thought the correct answer should have been 0..9 recall that `sense()` returns the dog's position *after* updating his position, so the first postion is 0.0 + 1, or 1.0.\n",
"The constructor initialized the dog at position 0 with a velocity of 1 (move 1.0 to the right). So we would expect to see an output of 1..10, and indeed that is what we see. If you thought the correct answer should have been 0..9 recall that `sense()` returns the dog's position *after* updating his position, so the first position is 0.0 + 1, or 1.0.\n",
"\n",
"Now let's inject some noise in the signal."
]
@@ -432,9 +432,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAtoAAAGPCAYAAABiRXfqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VNXWx/HvzGTSCwRCUUAQUBRQiRRF0IuS0EUvKlEh\ngEGvwpVLRDCCihRRUFS4+CJWUEGKIk2qFBXrJYM0JSIgRQQCkfQ2k3n/iAmEHCAhEyaZ/D7PwyPn\nzDkzK3FxWOysvbcpISHBiYiIiIiIuJTZ3QGIiIiIiHgiFdoiIiIiIuVAhbaIiIiISDlQoS0iIiIi\nUg5UaIuIiIiIlAMV2iIiIiIi5UCFtoiImzVr1owlS5a4OwwREXExFdoiIm72zTff0K1bN3eH4TJv\nvfUWzZo1Y8aMGaW+d9OmTfTo0YOWLVvSs2dPvvrqq3KIUETk0lChLSLiZjVq1MDHx8fdYbjE9u3b\nWb58OTVr1iz1vb/99hv//ve/6dy5M0uXLuW2225j6NCh7N+/vxwiFREpfyq0RURKKS4ujlGjRjFx\n4kTatGlDx44d+fjjj4tcc+zYMYYOHUp4eDjh4eE8/vjjJCYmFrmmZcuWNGvWjGbNmvHZZ58V+5zc\n3FwmTpxIx44due666+jSpQuzZ88u9jnDhw+nbdu2tGvXjscff5xjx465/GsuifT0dOLi4njhhRfw\n9vYu9f0LFy6kXr16xMbGcuWVVzJy5Ejq1KnDwoULyyFaEZHyp0JbROQirFu3jnr16rF48WK6d+/O\nCy+8UKTAHTFiBMeOHePDDz/kgw8+4I8//uDJJ58s8h5ffvklmzdvBsBkMhX7jLlz57J06VKmTJnC\nmjVrGDduHIGBgYWvZ2Rk0L9/f5xOJx999BHz5s0D4LHHHsPpdJbo63juuedo1aqV4a9HHnmkVN+T\niRMn0rlzZ6677rpS3Vdgx44dtG7dusi5Nm3asH379ot6PxERd/NydwAiIpVR06ZNGThwIJBf2M6Z\nM4dffvmF2rVrs2fPHrZs2cLHH39M8+bNARg9ejT9+vVj7969NG7cGIDQ0NDzfsbhw4epVasWN998\nMwB169Yt8vrnn3/OqVOneOWVV7BarUB+4dyxY0d27NhRooJ3+PDhPPzww4avlaadZeXKlezcuZPF\nixeX+J6zJSUl0bp1a7Zv385DDz3E5MmTqV69Ojab7aLfU0TEnVRoi4hchIYNGxb+vlq1agCcOnUK\ngAMHDgD5q4kUKPj9gQMHCgvtC7nzzjtZunQpXbp0oV27drRu3ZquXbsWtmXs2rWLtLQ02rZtW+Q+\nk8nEoUOHSlRoh4aGXrDgv5CjR48yfvx43n333cKCvyz8/f2pV68ewcHBZX4vERF3UqEtIlJKJpMJ\ni8VS7p9z3XXXsXHjRr7//nt+/PFHJkyYwKJFi/jwww8Lr7nyyiuZOXNmsXtLWjw/99xzLF++3PC1\nNm3a8NZbb13wPXbu3ElycjL3339/4bmcnBxmzpzJ8uXLWbNmTYliqVGjBklJSTRp0qRwucPFixdf\n1MRKEZGKQIW2iIiLNWjQAIBffvmF8PDwwt8DXHHFFaV6r8DAQDp37kznzp254YYbeOKJJ0hOTiYk\nJITmzZuzdOlSAgMDqV69+kXF6orWkfbt27Ny5crCY6fTycCBA4mMjGTAgAHFrj98+DC+vr7FCuiW\nLVuyadOmIuf+97//ERERUaI4REQqGhXaIiKl5HQ6DScvFrjqqqu48cYbeeGFFxg3bhxOp5NJkybR\ntm3bwraRjIwM0tPTC+9JSUkhMTERi8VSOBo9e/ZsQkNDC/u8P//8cy677DJCQkIA6NmzJ2+99RaP\nP/44sbGxhIWFsXfvXpYuXcpLL72Er6/vBb8WV7SO+Pv706hRoyLnvLy8qFatGvXr1y92fefOnWnT\npk2RkXmA++67j7lz5/Lqq6/Su3dvFi9ezPHjx+nbt2+Z4hMRcRetOiIiUkrnK7ILTJ06ldq1a9O/\nf3+io6O5/PLLeeWVVwpff/fdd+nYsSMdO3bEZDIxadIkOnbsyL333lt4TWBgILNnz+bee+8lKiqK\nrKws3nzzzcLX/fz8+Oijj6hTpw5Dhw6lZ8+evPTSS4SFhbmkV7o8GX0PGzduzIwZM1i/fj29e/fm\nyy+/ZMaMGUX64UVEKhNTQkJCydaAKoPJkyezbNkyQkNDC3sBV65cybRp04D8NWk7dep03vMiIiIi\nIpXJJSm0t27ditVq5emnn2b58uXk5OTQrVs3Fi1aRHZ2NtHR0axbt+6c50VEREREKptL0qPdqlUr\nDh8+XHi8fft2mjZtWtgXWKdOHXbv3k1aWprh+TOXyBIRERERqQzcMhkyMTGRsLAw5s+fT0hICGFh\nYRw/fpyMjAzD8yq0RURERKSyceuqI1FRUQDF2kPOPF+SSUciIiIiIhWNWwrtWrVqkZiYWHicmJhI\n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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAtoAAAGPCAYAAABiRXfqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VNXWx/HvzKRXWuhNAUUBC9KuL4hgQuhYkKKQqBQR\nRAlNBBVFQECwggWlKSiIogiiFFE0KioZOooKSmhKAEnPJJOZ94+YSMwBEphkksnv8zw+cs6cc2YP\nd93JcmfttU379+93IiIiIiIiLmV29wBERERERDyREm0RERERkWKgRFtEREREpBgo0RYRERERKQZK\ntEVEREREioESbRERERGRYqBEW0TEzRo3bsxHH33k7mGIiIiLKdEWEXGzb775hi5durh7GC4zf/58\nGjduzNy5c4t875dffkm3bt1o1qwZ3bt356uvviqGEYqIlAwl2iIibla5cmV8fX3dPQyX2LVrF2vW\nrKFKlSpFvve3337jwQcfJDw8nNWrV9O+fXtGjBjB77//XgwjFREpfkq0RUSKaMKECYwfP56pU6fS\nsmVL2rVrx7vvvpvvmr/++osRI0bQvHlzmjdvzsiRI0lISMh3TbNmzWjcuDGNGzfmww8/LPA+WVlZ\nTJ06lXbt2nHNNdcQGRnJ4sWLC7zPqFGjaNWqFa1bt2bkyJH89ddfLv/MhZGamsqECROYNm0aPj4+\nRb7/vffeo3bt2sTExHD55Zczbtw4qlevznvvvVcMoxURKX5KtEVELsLGjRupXbs2q1atomvXrkyb\nNi1fgjtmzBj++usv3n77bd566y2OHj3K2LFj8z1jy5YtxMbGAmAymQq8x7Jly1i9ejWzZs1i/fr1\nPPXUUwQFBeW9npaWxsCBA3E6nSxdupR33nkHgAceeACn01moz/HEE09w/fXXG/4zdOjQIv2dTJ06\nlfDwcK655poi3Zdr9+7dtGjRIt+5li1bsmvXrot6noiIu3m5ewAiImVRo0aNuOeee4CcxHbJkiX8\n9NNPVKtWjV9//ZVt27bx7rvv0qRJEwAmTpzIgAEDOHDgAA0aNACgUqVK532PI0eOULVqVf73v/8B\nUKNGjXyvf/LJJ5w5c4bZs2fj7e0N5CTO7dq1Y/fu3YVKeEeNGsWQIUMMXytKOcu6devYs2cPq1at\nKvQ9/3X69GlatGjBrl27uO+++5g5cyYVK1bEarVe9DNFRNxJibaIyEWoX79+3p8rVKgAwJkzZwA4\ndOgQkNNNJFfunw8dOpSXaF9Iz549Wb16NZGRkbRu3ZoWLVrQuXPnvLKMvXv3kpKSQqtWrfLdZzKZ\nOHz4cKES7UqVKl0w4b+QP//8kylTprBgwYK8hP9SBAQEULt2bUJCQi75WSIi7qREW0SkiEwmExaL\npdjf55prruGLL75g69at/PDDDzz99NOsXLmSt99+O++ayy+/nFdffbXAvYVNnp944gnWrFlj+FrL\nli2ZP3/+BZ+xZ88eEhMT6d+/f965zMxMXn31VdasWcP69esLNZbKlStz+vRpGjZsmNfucNWqVRe1\nsFJEpDRQoi0i4mJ169YF4KeffqJ58+Z5fwaoV69ekZ4VFBREeHg44eHhXHfddYwePZrExERCQ0Np\n0qQJq1evJigoiIoVK17UWF1ROnLjjTeybt26vGOn08k999xDp06diI6OLnD9kSNH8PPzK5BAN2vW\njC+//DLfuR9//JGIiIhCjUNEpLRRoi0iUkROp9Nw8WKuK664ghtuuIFp06bx1FNP4XQ6mT59Oq1a\ntcorG0lLSyM1NTXvnqSkJBISErBYLHmz0YsXL6ZSpUp5dd6ffPIJNWvWJDQ0FIDu3bszf/58Ro4c\nSUxMDGFhYRw4cIDVq1czY8YM/Pz8LvhZXFE6EhAQwGWXXZbvnJeXFxUqVKBOnToFrg8PD6dly5b5\nZuYB+vTpw7Jly3juuefo1asXq1at4sSJE/Tt2/eSxici4i7qOiIiUkTnS7JzzZkzh2rVqjFw4ECi\noqKoVasWs2fPznt9wYIFtGvXjnbt2mEymZg+fTrt2rXjzjvvzLsmKCiIxYsXc+edd9KvXz8yMjJ4\n7bXX8l739/dn6dKlVK9enREjRtC9e3dmzJhBWFiYS2qli5PR32GDBg2YO3cun3/+Ob169WLLli3M\nnTs3Xz28iEhZYtq/f3/hekBdgpkzZ/Lxxx9TqVKlvFrAdevW8eKLLwI5PWk7dOhw3vMiIiIiImVJ\niSTa27dvx9vbm0cffZQ1a9aQmZlJly5dWLlyJTabjaioKDZu3HjO8yIiIiIiZU2J1Ghff/31HDly\nJO94165dNGrUKK8usHr16vz888+kpKQYnj+7RZaIiIiISFnglsWQCQkJhIWFsXz5ckJDQwkLC+PE\niROkpaUZnleiLSIiIiJljVu7jvTr1w+gQHnI2ecLs+hIRERERKS0cUuiXbVqVRISEvKOExISqFq1\nKqmpqQXOh4WFFbh/+/bt2sBARERERIpdcnIyV1999UXd65ZEu1mzZvz666+cPn0am83GX3/9RePG\njcnMzDQ8/19VqlTJ2wRCJNeaNWvo0aOHu4chpYziQowoLsSI4sIzDRkSSKNG2YwfnwGAxWrl9KjZ\nvPJ7N2pOvZeoqEzOV0BhtVov+r1LJNF+6qmn2LhxI2fOnKF9+/ZMnjyZMWPG5G3XO3HiRAB8fHwM\nz4sURnx8vLuHIKWQ4kKMKC7EiOLC8+zaZSE21ovnn0/FYrXiN2sWXnv24BUTQ+/Wfbh3mC9ff+3N\nc8+lEhLi+vcvkUR78uTJTJ48ucD5rl27Gp4zOi8iIiIi8tdfJo4eNdO8efYFr33qKX8mjEig2uAo\nvPbsISMmhtQlS8DXl0bAxo3JTJoUwMiRgSxZknrB5xWVtmAXjxEeHu7uIUgppLgQI4oLMaK4KBue\nfNKf1at9eOedFG6+2X7O6776yos//jDTf4g3mbX65iXYZ/P3h+eeSyPV9Tk2oC3YxYNceeWV7h6C\nlEKKCzGiuBAjiovS7/BhMxs2eLNoUSpDhwby3XfGc8ZOZ85s9sSJ6fj4msi67bYCSfbZAgOLZ7we\nN6OdkpJCYmKi2gK6gMVioWrVqmXm7zI2Npa2bdu6exhSyiguxIjiQowoLkpefLyZWrUcWCyFu37e\nPF8GDswkMjKLN95IJTo6kGXLUmjZMhuL1Yrl11/J7NuX1au9cTjgttuyivcDXIBHJdqnTp0CoGbN\nmmUmOSzN0tLSOHHiBNWqVXP3UERERMSDOJ2waJEPEyYEMHFiOqNG2S54z8mTJt57z4dvv00CoH17\nO/PmpTK770+823gyofG7SZ8wgawsmDbNn1mz0jC7uXbDo0pHbDYblStXVpLtIgEBAWRnX3ihQWmh\nWQgxorgQI4oLMaK4KBkZGfDwwwG8+aYfy5enMHeuH0eOXDh3mz/fl169sqhe3QnktOm7dUFvPjTf\nwaw9Pdi6dDuZAwawdKkPtWs76NDh3PXbJcWjEm0RERERKb2OHjXRvXswiYkm1q9PomNHO0OH2pg4\nMeC89yUnw6JFvowcmZF3zufdd7FHRJC5dxuNno/mjruqsHOnhWef9eeJJ9KL+6MUihJt8RixsbHu\nHoKUQooLMaK4ECOKi+L13XdeRESE0L17JosXpxIcnHP+oYcy2LvXwqZN565oXrLEl5tusnP55Y68\nc+nPPott0CDw9eWOO7J4/PF0IiODadPGzvXXl47fyHtUjbaIiIiIlC5OJyxY4Muzz/oxb14q4eH5\nSzr8/GDGjDQeeSSAb75Jws8v//1ZB47w6qtNePfdlPO+T//+mVSq5KRZM/eXjOTSjLZ4DNXWiRHF\nhRhRXIgRxYXrZWfD2LEBLFrky2efJRdIsnNFRNhp0iSbl176N8u2WK0E9uuHb+eeXHNFKtdcc+FZ\n6sjILGrWdLps/JdKibaIiIiIXFB2Nnz4oTcJCYVrOmGzwX33BXLggJlPP03isssc571+2rR0Xn/d\nlxOf7CCwXz+CoqLIvCWCGyvsZcQYV3yCkqdEu4QcOHCALl26UK9ePa6++mpeeuklALKzs5k5cybX\nXXcdjRs3ZsKECdjtOf+1984779CpUydGjBhB3bp16dKlC6dPn8575vr162nVqhV169alZcuWbN68\nOe+1X375ha5du1K/fn06duzItm3b8o1nxIgRPProo0RFRVG3bl2uvfZaUlLO/yuZ0k61dWJEcSFG\nFBdiRHFxbn//baJfvyBmzPCnffsQNmw4f/VxUhL06ROEyQQrVqQQEnLh96hTx8HbrV6g0pAo7BER\nJMbF8X7VYQRU9OH//q/0lIMUhRLtEvLMM89wzTXXcOjQIbZu3Urr1q0BmDdvHuvXr+ezzz5j27Zt\n7N+/n9dffz3vvh07dtCnTx9++eUX7HY7S5cuzXtt1KhRTJw4kfj4eFatWkWNGjUAcDqdDBo0iE6d\nOnHw4EGGDRtGVFQUGRkZ+cb03nvvMWDAAA4dOsSyZcvw8lLJvoiIiOS3a5eFjh2DueKKbGJjk3jz\nzVTGjQtgzJgAw63LT5ww0bNnMA0bOliwIPV8GzIW0PLF27i51n4+qjkMp48vL77ox6hRGZTVzs1K\ntEuIxWLhzz//5Pjx44SEhOQl2suWLWPcuHFUr16doKAgBg0axNq1a/Pua9CgAe3bt8fPz4/27dtz\n4MCBvNfMZjO///47SUlJ1KlTh6uuugqA+Ph4fv31V0aMGIHZbKZPnz54eXkRFxeXb0zt2rWjU6dO\nmEwmmjZtit9/Vx+UMaqtEyOKCzGiuBAjiouCli/34Y47gnjssXSmTUvH2xtuvNHO118nkZYGHTqE\nYLX+u63joUNmunYNpnPnLGbPTiv0jo+5vKtWYOqz2Tz6qD+ffeZNWpqJzp3du7vjpSh3U5Line truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51c73144d0>"
"<matplotlib.figure.Figure at 0x7fc159fcc4d0>"
]
}
],
@@ -466,9 +466,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAtoAAAGPCAYAAABiRXfqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VGXaBvD7zJn0BumFJLRAgAQwUhYV0JXe1M8VBCXo\nWlYFFfTTVde17CKKrrufdZtrW0FXFlfK2rACCgIZSoCQhBAgnRRIJWXK98dxwiQ5M3OmF+7fdXld\nm8mUk/Du5MmT+31eobCw0AAiIiIiInIqlacvgIiIiIjIH7HQJiIiIiJyARbaREREREQuwEKbiIiI\niMgFWGgTEREREbkAC20iIiIiIhdgoU1E5GKZmZn4+OOPPX0ZRETkZiy0iYhc7Pvvv8fs2bM9fRkO\nOX78OO6//35cffXVyMzMxKuvvtrnPrW1tVi+fDkuueQSTJo0CWvXroVer+9xn2+//RZz585FdnY2\n5s2bh+3bt9t8LaWlpcjNzcWYMWMwdepU/P3vf7f76yIiciUW2kRELhYTE4OgoCBPX4ZD2trakJyc\njAceeACxsbGy97n//vtRU1ODdevW4bnnnsO///1vvP76692fP378OFasWIFp06Zh06ZNmDp1KpYv\nX47S0lLF19HZ2Yk77rgDwcHB2LBhAx588EG89NJL+M9//uPw10hE5GwstImIennkkUfw8MMPY/Xq\n1Rg/fjwmT56M999/v8d9ampqsHz5cuTk5CAnJwf33nsvamtre9wnOzsbmZmZyMzMlC0Eu7q6sHr1\nakyePBmjR4/GzJkz8fbbb/d5nZUrV2LChAmYOHEi7r33XtTU1Dj9a7Zm9OjR+PWvf425c+ciMDCw\nz+ePHTsGjUaDxx9/HCNHjsTUqVNxyy23YP369d33+fDDDzFgwACsWrUKgwcPxkMPPYTExER8+OGH\niq9j+/btKC8vx+rVqzFs2DAsWLAACxYswD//+U+nfJ1ERM7EQpuISMa2bdswYMAAfPTRR5gzZw6e\neeaZHgXugw8+iJqaGvzzn//Eu+++i4qKCvzv//5vj+f47rvvsHPnTgCAIAh9XmPdunXYtGkTnn/+\neXz++ed4+umnER4e3v35trY2LF26FAaDAe+991530Xr33XfDYDAo+jqeeOIJXHLJJbL/3XnnnTZ/\nX8zJz8+HWq3G2LFju2+bMGECGhoaUFZW1n2fcePG9Xjc+PHjcejQIZteJy0tDfHx8T1ep7CwEFqt\n1sGvgojIudSevgAiIm+UkZGBW265BYBU2L7zzjsoKChAQkICiouLsW/fPrz//vsYNWoUAOCxxx7D\nzTffjJKSEgwZMgQAEB0dbfE1ysvLER8fj0mTJgEAkpKSenz+v//9L86dO4c//OEPCAgIACAVzpMn\nT0Z+fj5Gjx5t9etYuXIl7rjjDtnPOTPOUl9fj379+gEArr/+eqSlpWHFihUAgIaGBqSmpqKhoQHj\nxo3DoUOH8Mtf/hJr165F//79odFoFL9OQ0MD+vfvj/b2dsyZMwezZ8/GxIkTodPpcO7cObOxFiIi\nT2ChTUQkY+DAgd3/21hAnjt3DgBw6tQpANI0ESPj/z516lR3oW3NggULsGnTJsycORMTJ07EuHHj\nMGvWrO5oxpEjR9DS0oIJEyb0eJwgCCgrK1NUaEdHR1st+J3F2GVPTk5GQkKC2fuFhoZiwIABiIyM\ntPu1VCoVkpOTERsbq7i7T0Tkbiy0iYh6EQQBoii6/HVGjx6Nb775Brt378aePXvw+9//Hhs2bOiR\nNx48eDD+/Oc/93ms0uL5iSeewJYtW2Q/N378ePztb3+z7+J7iYmJQWNjIwDglVdeAQDs3bsXwIVr\njYmJQUNDA4YOHdo97vCjjz6yqQsdHR2NhoYGBAYG4r333gMAfPzxxxBFsfsXIiIib8FCm4jIRmlp\naQCAgoIC5OTkdP9vAEhPT7fpucLDwzFt2jRMmzYNY8eOxQMPPIDGxkZERUVh1KhR2LRpE8LDw9G/\nf3+7rtVd0ZHs7GxotVrs378fl1xyCQDgxx9/RHR0NFJTU7vv8+233/Z43N69ezF9+vQ+z1dbW4uO\njg4MGDCgx+2jR4/GX//6V9TU1HR3zX/88UdkZmZCreaPNCLyLtwMSUTUi7UowrBhw3DppZfimWee\nweHDh5Gfn481a9ZgwoQJ3bGRtrY21NbWdk8iaWpqQm1tLRoaGrqf5+2338bmzZtRUlKCkpIS/Pe/\n/0VycjKioqIAAPPmzUNsbCzuvfde5OXl4fTp0/jmm2+wcuVKtLe3K/pajIWu3H+mGwqt6erqQkFB\nAQoKCtDZ2Yna2loUFBSgqqoKgBSdycnJwerVq3HkyBF89913eOedd7BkyZLu51i4cCEqKirwxz/+\nESUlJXjhhRdw5swZLFq0qM/rPfDAA5g2bVqf26dMmYLU1FT89re/RVFRETZv3owtW7Zg6dKlir8W\nIiJ3EQoLCxluIyIy8eijjwIAnn322e7bMjMz8dxzz+Haa68FAFRXV+N3v/sddu3aBQC4/PLL8cQT\nT3QXr6+88gpee+01AFIUxVi8p6Sk4KuvvgIA/Pvf/8b69etx8uRJiKLYPUJv2LBh3a9bU1ODF154\nATt37kRbWxuSkpIwZcoUPPLII26JtxiVl5d3F76mX891113X/X2qra3FU089hR9++AFBQUG47rrr\n8PDDD/eYuPLtt9/ihRdewKlTpzBw4EA8/PDDmDJlSp/XW7p0Kfbt29f9lwJTpaWlePLJJ3HgwAH0\n69cPS5cuNdu1JyLyJLcU2mvXrsXmzZsRHR3dnRX85JNP8NJLLwGQZtZeddVVFm8nIiIiIvIlbim0\n9+/fj4CAADz66KPYsmULOjs7MXv2bGzYsAEdHR3Izc3Ftm3bzN5ORERERORr3LJz5JJLLkF5eXn3\nx4cOHUJGRkb3TvTExEQcO3YMLS0tsrebjtAiIiIiIvIFHtmiXVtbi7i4OHzwwQeIiopCXFwczpw5\ng7a2NtnbWWgTERERka/x6CykG2+8EQD6xENMb5c7tpiIiIiIyNt5pNCOj4/vHnkFSB3u+Ph4tLa2\n9rk9Li6uz+P379/PY3aJiIiIyOWam5sxcuRIux7rkUI7OzsbxcXFaGhoQEdHB2pqapCZmYnOzk7Z\n23uLjY3tPiSCyGjLli2YP3++py+DvAzXBcnhuiA57lwXO3ao8dxzwfjvf1vM3ufIERF33BGGH35o\ncvj1qqsFXHllJI4da3T4uUw1NQFZWf1w6tQ5uDKE8KtfhWLqVC2WLOm0et8lS8Jw002dmDu3S/bz\nokaD4Oefh3baNDQtvR1paf1QWXkO5iamajQau6/bLYX2008/jW3btuHcuXOYOnUqnnzySTz44INY\nvHgxAOCxxx4DAAQGBsreTqTE6dOnPX0J5IW4LkgO1wXJcee6KC1VYeBAvcX7JCbqUV3tnOq1ulqF\nxETLr2ePyEggIMCA+noBsbGuG2RXVCTizjs7FN03OVmPysq+ZzIaC2z14cNoX7UKHTffjMpKFZKS\n9GaLbEe5pdB+8skn8eSTT/a5fc6cObK3yd1ORERE5C9OnlRh8GDLhW90tAFtbQLOnwdCQhx7vepq\nFRISXFMIDxyox8mTKsTG6lzy/Ho9UFwsIiND2fMnJxt6FtrNzQi7447uArv1nXeAoCAAQHm5Cikp\nzv8FxIhHsJPfkDuumYjrguRwXZAcd66LEydEDBxouXAUBCAhQY+aGsfLtepqwSUdbQBIT9fj1CnX\nlZTl5Sr062dAZKSy+0sdbZO/BISHo3PRIjTm5aHjttu6i2wAqKhQYcAAFtpEVg0fPtzTl0BeiOuC\n5HBdkBx3rouTJ1UYNMh6gZeYaHBKfMRV0REAGDhQh9JSF2UvABQWqjBsmPJueZ/oiCCg67rrehTY\nRq7uaHt0vJ8rtLS0oLGxkWMBnUAURcTHx/vM93Lnzp244oorPH0Z5GW4LkgO1wXJcde6MBiA0lLR\nanQEkHLaVVUqAI7FMqqrVRgzRuvQc5iTnq7H3r2uKykLC0UMH2796xc1GojFxUgZtxgVFcp6yRUV\nKmRnu+b7AvhZoV1fXw8ASE5O9pni0Ju1tbXhzJkzSEhI8PSlEBER+Y36egGiaEC/ftYz00lJelRX\nOx5AqKkRkJjomoz2oEF6/PvfrgtJFBaKuPRS88Ww6SbH8488gqQk6ZcTgwFWJ6GUl6swa5brNnH6\nVXSko6MDMTExLLKdJDQ0FDqdazY2uAK7UySH64LkcF2QHHeti9JSZbERwDh5xBkZbVdGR/Q4edJ1\n0ZGiIhHDh/e9dlGjQdiNNyI8Nxfa6dPRmJeHzptvRmgoEBoqTUKxpqKC0REiIiIiv3HypGh1tJ9R\nUpIBR486J6OdkOCagjI5WY/aWgEdHbIxaIcYDEBRkXxGO/D996GdPr3HFBHTa6qstD4JhZshiRTa\nuXOnpy+BvBDXBcnhuiA57loXJ06oMHiwsr8YO6OjrdVKcZX4eNdEJNRqICVFj7Iy55eVNTUCAgKA\nmJi+137+hRf6TBEx6jPiT0ZTkzQ6MCqK0REiIiIiv3DypPXDaoycUWjX1gqIiTFA7cIcQ3q6HqWl\nzi8ri4pETE4vtflxfUb8yTBOHHFl4piFNvkNZi5JDtcFyeG6IDnuWhcHDqgxYoSyjrYzNkO6MjZi\nNHCgHqdOOTenLWo0yHpkIf5SOA1ob7fpsSkpequTR1ydzwZYaBMRERG5TWmpCmfPChg7VlmhHREh\nxRuam+1/TVduhDQaOFCHkyedU1aabnLc1X8W3vm1BggOtuk5zB3DbsrV+WyAhbbblJSUYPbs2UhP\nT8fIkSPx8ssvAwB0Oh3Wrl2LsWPHIjMzE4888gi0WmmEzfr16zFjxgwsX74caWlpmD17NhLine truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51c7305390>"
"<matplotlib.figure.Figure at 0x7fc159fb9b50>"
]
}
],
@@ -486,9 +486,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51c7276ed0>"
"<matplotlib.figure.Figure at 0x7fc159f8d8d0>"
]
}
],
@@ -531,11 +531,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51c00b6810>"
"<matplotlib.figure.Figure at 0x7fc152f8d890>"
]
}
],
"prompt_number": 9
"prompt_number": 8
},
{
"cell_type": "markdown",
@@ -543,7 +543,7 @@
"source": [
"This corresponds to a fairly inexact belief. While we believe that the dog is at 23, note that roughly 21 to 25 are quite likely as well. Let's assume for the moment our dog is standing still, and we query the sensor again. This time it returns 23.2 as the position. Can we use this additional information to improve our estimate of the dog's position?\n",
"\n",
"Intuition suggests 'yes'. Consider: if we read the sensor 100 times and each time it returned a value between 21 and 25, all centered around 23, we should be very confident that the dog is somewhere very near 23. Of course, a different physical interpertation is possible. Perhaps our dog was randomly wandering back and forth in a way that exactly emulated a normal distribution. But that seems extremely unlikely - I certainly have never seen a dog do that. So the only reasonable assumption is that the dog was mostly standing still at 23.0.\n",
"Intuition suggests 'yes'. Consider: if we read the sensor 100 times and each time it returned a value between 21 and 25, all centered around 23, we should be very confident that the dog is somewhere very near 23. Of course, a different physical interpretation is possible. Perhaps our dog was randomly wandering back and forth in a way that exactly emulated a normal distribution. But that seems extremely unlikely - I certainly have never seen a dog do that. So the only reasonable assumption is that the dog was mostly standing still at 23.0.\n",
"\n",
"Let's look at 100 sensor readings in a plot:"
]
@@ -567,13 +567,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAsIAAAFyCAYAAAD/MLwxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmUHHd57/2trup9m10zI40Wy7a8SF6EAS8COwkE2zHg\n5YbXBkMS4iRvfEngXJOwXEhMLoS8Tk7evIRLcjgJWSC+YJYETOxgwAYsG9vY8iLZlrxJnpFGs/Ys\nvVRV1/b+UV0z3T1V1VXd1dXVPc/nHJ/jVs/01Ez/uuqp7+/7fB/m2LFjGgiCIAiCIAhikxHq9AEQ\nBEEQBEEQRCegQpggCIIgCILYlFAhTBAEQRAEQWxKqBAmCIIgCIIgNiVUCBMEQRAEQRCbEiqECYIg\nCIIgiE2JbSG8tLSEm266Ce9+97vxrne9C/fddx8A4L777sM73vEOvOMd78BDDz3ky4ESBEEQBEEQ\nhJcwdjnCsixDkiTE43EsLS3h2muvxc9+9jNcffXV+OY3vwlRFPGBD3wAP/zhD/08ZoIgCIIgCIJo\nGVtFmOM4xONxAEA+n0ckEsGzzz6Ls846CwMDAxgbG8Po6CiOHj3qy8ESBEEQBEEQhFdwjb6gWCzi\n5ptvxuTkJP7qr/4KCwsLGB4exte//nVks1kMDw9jbm4O55xzjh/HSxAEQRAEQRCe0LBZLplM4t57\n78V3vvMd3HXXXRBFEQBw880345prrgEAMAzT3qMkCIIgCIIgCI9pqAgb7N69G+Pj49i6dSvuv//+\ntX+fn5/H8PDwhq9/+umnMTQ05M1REgRBEARBEIQJ+Xwe5513XlPfa1sIz87OIhKJoL+/H/Pz8zh+\n/Dh27dqFl19+GblcDqIoYnZ21tQWMTQ0hP379zd1UETvcu+99+Kd73xnpw+DCBi0LggzaF0QZtC6\nIOo5dOhQ099rWwifPn0an/70p9cef/zjH8fg4CDuuOMO3HLLLQCAT37yk03/cGLzMTk52elDIAII\nrQvCDFoXhBm0LggvsS2EL7roItx7770b/v3aa6/Ftdde27aDIgiCIAiCILqXT/7XK/jQ5RMYz0Q7\nfSi20GQ5wlfe9ra3dfoQiABC64Iwg9YFYQati+7g1IqIhWK504fRECqECV/Zs2dPpw+BCCC0Lggz\naF0QZtC66A4EWUWxrHb6MBpChTDhKwcPHuz0IRABhNYFYQatC8IMWhfdAS+pKJaVTh9GQ6gQJgiC\nIAiCIDxD1bSKIkyFMEHUcODAgU4fAhFAaF0QZtC6IMygdRF8RFm3RFAhTBAEQRAEQWwqBIkKYYIw\nhbxdhBm0LggzaF0QZtC6CD68oQhLVAgTBEEQBEEQmwi+UgCTIkwQdZC3izCD1gVhBq0LwgxaF8GH\nrBEEQRAEQRDEpoSXVURZBiXKESaIWsjbRZhB64Iwg9YFYQati+AjSCoGkxFShAmCIAiCIIjNBS8r\nGEqEqRAmiHrI20WYQeuCMIPWBWEGrYvgoyvCYUqNIAiCIAiCIDYXvKyiP85BlFUoqtbpw7GFCmHC\nV8jbRZhB64Iwg9YFYQati+AjSCoSYRbxMItSwFVhKoQJgiAIgiAIz+AlBbFwCMlIKPA+YSqECV8h\nbxdhBq0LwgxaF4QZtC6CjyCriHMhJMMsFcIEQRAEQRDE5oGXVMTDLJIRFsWAZwlTIUz4Cnm7CDNo\nXRBm0LogzKB1EXx4Wa1YI0gRJgiCIAiCIDYRgqQgxoWQoEKYIGohbxdhBq0LwgxaF4QZtC6CjyCr\niFcUYUqNIAiCIAiCIDYNvKQizrFkjSCIesjbRZhB64Iwg9YFYQati+CjN8tRfBpBEARBEASxyRBk\nFTGKTyOIjZC3izCD1gVhBq0LwgxaF8FHqAzUoGY5giAIgiAIYtOgqBrKioYoF6IcYYKoh7xdhBm0\nLggzaF0QZtC6CDZCJUM4xDDULEcQBEEQBEFsHgx/MADdI0zxaQSxDnm7CDNoXRBm0LogzKB1EWwE\nSUE8XCmESREmCIIgCIIgNgu8pCLGsQCAZCSEEhXCBLEOebsIM2hdEGbQuiDMoHURbPgqa0Q8zEKQ\nVSiq1uGjsoYKYYIgCIIgCMIThMowDQBgQwxiXAh8gH3CVAgTvkLeLsIMWheEGbQuCDNoXQQbXl73\nCANAIsKiJAU3Qo0KYYIgCIIgCMITBElFLMyuPQ56wxwVwoSvkLeLMIPWBWEGrQvCDFoXwUZvllsv\nL4M+ZpkKYYIgCIIgCMITBFlFvLoQJkWYINYhbxdhBq0LwgxaF4QZtC6CDS/VeoSTkRAVwgRBEARB\nEETvw8vkESYIS8jbRZhB64Iwg9YFYQati2Aj1HuEI8Ees8zZPTk7O4uPfOQjyOfziEQi+OhHP4rL\nL78cX/ziF3H//fcDAK655hp86EMf8uVgCYIgCIIgiOAiyGqdNYJFsRzc+DTbQpjjONx5553Ys2cP\npqencfPNN+Puu+/Gd7/7XfzgBz+Aoii45pprcMMNN2Dr1q1+HTPRxZC3izCD1gVhBq0LwgxaF8Fm\no0eYxXxR6uAR2WNbCA8ODmJwcBAAMD4+DkmSEI/HwXEcBEGAqqoIh8NIp9O+HCxBEARBEAQRXHhJ\nRZxb9wgneiU+7eGHH8b555+PwcFBfOADH8BVV12Fq666Ch/84AeRyWTaeYxED0HeLsIMWheEGbQu\nCDNoXQQbQVYRq1OESwEuhG0VYYP5+Xncdddd+NKXvoSTJ0/i61//Oh588EFIkoRbbrkFV111FYaH\nh9t9rARBEARBEESAMW2W6+ZCWBRFfPjDH8bHPvYxTExM4L777sO+ffuQSqUAAOeddx5eeOEFXHnl\nlRu+9/bbb8f27dsBANlsFvv27Vvz9hh3dPSYHtNjemz8W1COhx7TY3oc3MfGvwXleOhx7ePlQgnP\nP3MIu375CgDAS88/h7nlKAy8+HmHDx/GysoKAGBychK33XYbmoU5duyYZvWkpmm44447cMkll+C9\n730vAODw4cP41Kc+hW9+85tQVRXvfve78Xd/93c444wzar53amoK+/fvb/rACIIgCIIgiO7ipq8+\nh3/8b+eiLx4GAMzkRXz0P1/G127e27afeejQIUxMTDT1vbYe4aeeegoPPPAA7rnnHlx//fW44YYb\nsGXLFrz97W/HDTfcgJtuugnvec97NhTBBGGFcWdHENXQuiDMoHVBmEHrItjo8Wn1AzW6ND7tkksu\nwZEjRzb8+4c+9CHKDiYIgiAIgiDWkFUNiqohwjJr/5YIs+AlBaqmIcQwNt/dGWiyHOEr1R4vgjCg\ndUGYQeuCMIPWRXARJAUxLgSmquBlQwyiXAi8FExVmAphgiAIgiAIomX4uug0g2SAs4SpECZ8hbxd\nhBm0LggzaF0QZtC6CC5C3TANgyBHqFEhTBAEQRAEQbQML6s145UNgjxUgwphwlfI20WYQeuCMIPW\nBWEGrYvgIkiKqTUiEQmhKFEhTBAEQRAd4cuPn8JcodzpwyCInoavmypnQB5hgqhA3i7CDFoXhBle\nrovHJ1cwkxc9ez2ic9D5IrjUZwgbJAKcJUyFMEEQBNHzFMoKRNlykCpBEB7ASyriZoowNcsRhA55\nuwgzaF0QZni1LjRNQ0FUICrBVKQId9D5IrjwkmLZLEeFMEEQBEF0AFHRIKkayjIVwgTRTgTZwiNM\nhTBB6JC3izCD1gVhhlfroiDKAPSCmOh+6HwRXARJRczEI5yMhKgQJgiCIIhOkBf1CzApwgTRXuxy\nhKkQJgiQt4swh9YFYYZX66JQuQCTR7g3oPNFcOElxbxZLsxSjjBBEARBdIICKcIE4QuCrJoO1KDJ\ncgRRgbxdOodOrQZ2m6gT0LogzPBqXeTJI9xT0PkiuAiSihhn5hGmHGHChM8/dAJl2qrblPzrUzN4\nfrbQ6cMgiE1BoawgxJAiTBDthpfII0w4RFE1PPTqEo7Nlzp9KL5C3i4dQVawIsidPozAQOuCMMMz\nj7CooC/OkUe4R6DzRXDhZcU0Pi0RYVGSFGha8HZlqBDuEGJFmXjuNKmCmxFBVrEqBPPumCB6jbyo\nYDARJkWYINqMYKEIcyEGYTYEXgreZ5AK4Q5hFMKHZzZXIUzeLh1BUrFKivAatC4IMzzLES7LGEyE\nySPcI9D5Irjo8WkbPcJAJUs4gMkRVAh3CEFWkY6yODpXhKzSyXmzwcsqVkUqhAnCD0gRJgh/0Jvl\nzEvLZDiYPmEqhDuEIKsYiIcxmo7g5YXN4xMmbxegaRoEScUKWSPWoHVBmOGlR1hXhKkQ7gXofBFc\neEkxjU8DjAi14H0GqRDuEGIla2/faBqHySe8qSgrGjSArBEE4RN5Ua4owrT7RhDtQqrcaIZDjOnz\nQU2OoEK4QwiyiigbwgVjKTy3iXzC5O3S33sAZI2ogtYFYYZ3HmEFg0lShHsFOl8EEz06jQXDUCFM\nOMBQhPeOJvH8bBEK+YRNeWJqBZ9/6ESnD8NTeElBOMSQIkwQPqBpGgqigoF4eK1JmSAI77GaKmeQ\njARzzDIVwh1CkFVEuRD642EMJsJ4Lcd3+pB8wa2369VFHtOrYpuOpjMIsoqhZBirYjAzFTsBef4I\nM7xYF6KigWGAZJSlAUY9Ap0vggkvmWcIG5AiTNQgVgphALhgNEV5whZMr4pY5ntLORUkFekohzDL\noBTATEWC6CUKooxUlEWUDUEkjzBBtA1BNs8QNkhsxkKYD6AEHhQEeT1iZN9YctPkCbv1dp1aFZHj\npZ5STo2TRSbKkT2iAnn+CDO8WBd5UUE6wiHKhUgR7hHofBFMeElFnDPPEAaAZDiE0mYrhBdLUjtf\nvqupKYRHUzgyU4DaQ8WeV0yvipAUraeUU+O9z8RYapgjiDZTKCtIR1lEWIY8wkTX8eXHT+Line truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bfae8ed0>"
"<matplotlib.figure.Figure at 0x7fc159fb9310>"
]
}
],
"prompt_number": 10
"prompt_number": 9
},
{
"cell_type": "markdown",
@@ -582,7 +582,7 @@
"Eyeballing this confirms our intuition - no dog moves like this. However, noisy sensor data certainly looks like this. So let's proceed and try to solve this mathematically. But how?\n",
"\n",
"\n",
"Recall the histogram code for adding a measurement to a pre-existing belief:\n",
"Recall the histogram code for adding a measurement to a preexisting belief:\n",
"\n",
" def update(pos, measure, p_hit, p_miss):\n",
" q = array(pos, dtype=float)\n",
@@ -598,7 +598,7 @@
"\n",
" new_belief = old_belief * measurement * sensor_error\n",
" \n",
"The measurement term might not be obvious, but recall that measurement in this case was always 1 or 0, and so it was left out for convience. \n",
"The measurement term might not be obvious, but recall that measurement in this case was always 1 or 0, and so it was left out for convenience. \n",
" \n",
"If we are implementing this with gaussians, we might expect it to be implemented as:\n",
"\n",
@@ -666,17 +666,17 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bfa2d350>"
"<matplotlib.figure.Figure at 0x7fc1526d0450>"
]
}
],
"prompt_number": 17
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is either amazing or what you would expect, depending on your state of mind. I must admit I vacillate freely between the two! Note that the result of the multiplation is taller and narrow than the original Gaussian but the mean is the same. Does this match your intuition of what the result should have been?\n",
"The result is either amazing or what you would expect, depending on your state of mind. I must admit I vacillate freely between the two! Note that the result of the multiplication is taller and narrow than the original Gaussian but the mean is the same. Does this match your intuition of what the result should have been?\n",
"\n",
"If we think of the Gaussians as two measurements, this makes sense. If I measure twice and get the same value, I should be more confident in my answer than if I just measured once. If I measure twice and get 23 meters each time, I should conclude that the length is close to 23 meters. So the mean should be 23. I am more confident with two measurements than with one, so the variance of the result should be smaller. \n",
"\n",
@@ -714,11 +714,11 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAswAAAFyCAYAAADh+YyCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdclXX7B/DPGewlS/YWN+6Rilq5yZWagpa7MtFyNBwN\n6ynLyp7sydKW/XKmuc0BlblH4sCJgiwB2YKAcNb9+8NHnkxlnsP3HPi8X69edZ/xvS8+nA4XN9e5\nb1lcXJwEIiIiIiJ6KLnoAoiIiIiIjBkbZiIiIiKiCrBhJiIiIiKqABtmIiIiIqIKsGEmIiIiIqoA\nG2YiIiIiogpU2jDv3r0bAwYMwIABA7B///5HPi4/Px8jR47EsGHDMHToUOzevbvaaxARERERGRtZ\nRedhVqlUGDRoEDZt2oSysjKMHz8e0dHRD32sRqOBWq2GlZUV8vPzERYWhiNHjkCj0VR5DSIiIiIi\nY1PhEebY2FgEBwfDyckJHh4ecHd3x5UrVx76WKVSCSsrKwBAYWEhzM3Nq70GEREREZGxUVZ0Z05O\nDlxdXbFhwwY4ODjA1dUVWVlZaN68+UMfX1xcjPDwcKSkpGDp0qWQy+XVXoOIiIiIyJhU2DDfEx4e\nDgCIjo6GTCZ75ONsbGywc+dOJCQkYNq0aejevTskSarWGkRERERExqTChtnV1RXZ2dnl29nZ2XB1\nda100aCgIHh6eiI+Ph6NGzeu0hpnzpyBi4tLdWonIiIiIqq227dvo2XLllV+fIUNc0hICK5du4a8\nvDyUlZUhMzOzfJRi6dKlkMlkmDNnDgAgMzMT5ubmcHR0RHZ2NhITE+Hj4wMbG5tHrvF3Li4u6NCh\nQ3W+VtKjnTt3YsiQIaLLaJCYvVjMXyzmLw6zF4v5i3X69OlqPb7Chtnc3Bxz585FREQEAGDBggXl\n9+Xk5Nz32IyMDLz11lvl2/PmzYOjoyMAPHINMh4pKSmiS2iwmL1YzF8s5i8OsxeL+ZuWSmeYw8LC\nEBYW9sDtH3744X3b7dq1w86dO6u1BhERERGRseOV/ggA0LdvX9ElNFjMXizmLxbzF4fZi8X8TUuF\nFy6pS6mpqZxhJiIiIiKDO336NHx8fKr8+CqdVo7qv8OHDyM0NFR0GQ0SsxeL+YvF/MVh9jUjSRKy\nsrKg1WprtU5BQQEcHBz0VBX9kyRJcHBwgK2trV7WY8NMREREVEVZWVmws7ODtbV1rdbx9PTUU0X0\nMJIklZ+hzdnZudbrcSSDiIiIqIrS09PZ7JqQR32/qjuSwQ/9ERERERFVgA0zAbg7y0ZiMHuxmL9Y\nzF8cZk9UdWyYiYiIiIgqwIaZAICflBaI2YvF/MVi/uIwezJVu3fvRv/+/eHh4YHIyMg62SfPkkFE\nREREJsPBwQEvv/wyDhw4gJKSkjrZJ48wEwDOsonE7MVi/mIxf3GYff2ybt06PPnkk2jVqhUmT56M\niIgItGjRApcuXQIAaLVaLFmyBO3atUPz5s0xb948aDQaAEBycjKGDRuGwMBA+Pn5YdKkSSgsLCxf\ne9++fejSpQt8fX3RuXNn/PHHH+X3tW3bFgcOHCjfdnZ2RlJSUvl2ZGQk5s+fj/Hjx8PX1xdt27ZF\nUVERAGDnzp3o3r07AgMDMWbMGGRmZlbpa+3RowcGDx6MRo0a1Tiv6mLDTERERFQPWFhY4NixY9i7\ndy+mTJmCZ599Flu3bgUALF++HPv27cPevXtx6tQpxMXFYeXKlQAAlUqFCRMm4MKFC7hw4QLy8/Ox\nZMmS8nVnzZqFBQsWICUlBVu2bIGHh0f5fTKZDDKZrMK6Nm7ciGeffRbJyclYu3YtlEolYmJi8Mor\nr2D58uWIj49HmzZtMHv2bAOkoh9smAkAZ9lEYvZiMX+xmL84zL7+CQgIgL29PZycnBAcHAxfX19k\nZ2cDANasWYPXXnsN7u7usLW1xZQpU7Br1y4AQHBwMEaMGAFra2vY2dlh6NChuHjxYvm6crkciYmJ\nKCwshI+PD1q0aFGtunr27In+/ftDJpOhdevWsLS0xJo1axAREYH27dtDLpcjMjISUVFRUKvV+gtE\njzjDTERERKQn/b87o5d1oqa2r/Zz7h3pVSqVkMvlUCgU5WMXaWlpmDZtGuTyu8dKdTod3N3dAQDZ\n2dmYN28ejh8/jpKSEqjVarRr16583VWrVuHzzz/HF198geDgYCxbtqxaTXNQUNADt6WlpeHo0aNY\nt25d+W0WFhbIzMyEt7d3tb92Q2PDTADuzrLxaIMYzF4s5i8W8xeH2RtGTRpdQ5Kkuxd09vb2xvLl\ny9GpU6cHHvPee+9BoVDgxIkTsLW1xcqVK7F9+/by+7t06YJ169ZBpVJh9uzZWLx4MVavXg3gbpN7\nryn/+9zz391r0v/O29sbr776KmbNmlXrr7EucCSDiIiIqJ4bN24cFi9ejJs3b0KSJMTHx2P//v0A\ngOLiYtja2sLa2hrJycn48ccfy58nSRI2btyIoqKi8iPY9vb25fcHBQUhJiYGALBjx44q1xMREYFV\nq1YhNjYWkiQhOzu7fN66MjqdDqWlpdBqtdDpdCgrK4NWq63yvmuCDTMB4CybSMxeLOYvFvMXh9nX\nL//88N297Xu3RUZGolu3bggLC4O/vz8mTJiA3NxcAMDrr7+Os2fPwt/fH1OmTMGgQYPKnydJEjZt\n2oSQkBAEBwcjMzMTCxcuLN/Pa6+9ho0bN6Jv377IzMx86AcAH3Zb586d8f7772PGjBnw9/dHnz59\nEBsbW6WvdcOGDfDy8sKyZcuwceNGeHp6YunSpVUPqwZkcXFxkkH3UEWpqano0KGD6DKIiIiIHik9\nPR2enp6iy6AqetT36/Tp0/Dx8anyOjzCTAB4Pk6RmL1YzF8s5i8OsyeqOjbMREREREQVYMNMADjL\nJhKzF4v5i8X8xWH2RFXHhpmIiIiIqAJsmAkAZ9lEYvZiMX+xmL84zJ6o6tgwExERERFVgA0zAeAs\nm0jMXizmLxbzF4fZE1UdG2YiIiIiogqwYSYAnGUTidmLxfzFYv7iMHuiqmPDTEREREQmQaPR4KWX\nXkLLli3h7++PYcOG4cqVKwbfLxtmAsBZNpGYvVjMXyzmLw6zJ1Ok1WoRGBiI33//HUlJSRg4cCCe\ne+45g++XDTMRERGRiVu3bh2efPJJtGrVCpMnT0ZERARatGiBS5cuAbjbaC5ZsgTt2rVD8+bNMW/e\nPGg0GgBAcnIyhg0bhsDAQPj5+WHSpEkoLCwsX3vfvn3o0qULfH190blzZ/zxxx/l97Vt2xYHDhwo\n33Z2dkZSUlL5dmRkJObPn4/x48fD19cXbdu2RVFREQBg586d6N69OwIDAzFmzBhkZmZW+nVaWFjg\ntddeg4eHBwBg7NixuH79OvLy8moeXhWwYSYAnGUTidmLxfzFYv7iMPv6x8LCAseOHcPevXsxZcoU\nPPvss9i6dSsAYPny5di3bx/27t2LU6dOIS4uDitXrgQAqFQqTJgwARcuXMCFCxeQn5+PJUuWlK87\na9YsLFiwACkpKdiyZUt5swoAMpkMMpmswro2btyIZ599FsnJyVi7di2USiViYmLwyiuvYPny5YiP\nj0ebNm0we/bsan/NJ0+ehIeHB5ycnKr93Opgw0xERERUDwQEBMDe3h5OTk4IDg6Gr68vsrOzAQBr\n1qzBa6+9Bnd3d9ja2mLKlCnYtWsXACA4OBgjRoyAtbU17OzsMHToUFy8eLF8XblcjsTERBQWFsLH\nxwctWrSoVl09e/ZE//79IZPJ0Lp1a1haWmLNmjWIiIhA+/btIZfLERkZiaioKKjV6iqvW1hYiIUL\nF+L999+vVj01oTT4HsgkcJZNHGYvFvMXi/mLw+wN49MFe/WyzquLB1b7OfeO9CqVSsjlcigUivKx\ni7S0NEybNg1y+d1jpTqdDu7u7gCA7OxszJs3D8ePH0dJSQnUajXatWtXvu6qVavw+eef44svvkBw\ncDCWLVtWraY5KCjogdvS0tJw9OhRrFu3rvw2CwsLZGZmwtvbu9I1y8rK8Nxzz+Hpp5/G8OHDq1xL\nTbFhJiIiItKTmjS6hiRJEgDA29sby5cvR6dOnR54zHvvvQeFQoETJ07A1tYWK1euxPbt28vv79Kl\nC9atWweVSoXZs2dj8eLFWL16NYC7Te69pvzvc89/d69J/ztvb2+8+uqrmDVrVrW/Jq1Wi+effx5B\nQUGYP39+tZ9fExzJIACcZROJ2YvF/MVi/uIw+4Zl3LhxWLx4MW7evAlJkhAfH4/9+/cDAIqLi2Fr\nawtra2skJyfjxx9/LH+eJEnYuHEjioqKyo9g29vbl98fFBSEmJgYAMCOHTuqXE9ERARWrVqF2NhY\nSJKE7Ozs8nnrysyePRsymQyffvpplfdXW2yYiYiIiEzcPz98d2/73m2RkZHo1q0bwsLC4O/vjwkT\nJiA3NxcA8Prrr+Ps2bPw9/fHlClTMGjQoPLnSZKETZs2ISQkBMHBwcjMzMTChQvL9/Paa69h48aN\n6Nu3LzIzMx/6AcCH3da5c2e8//77mDFjBvz9/dGnTx/ExsZW+nWmpqZi7dq1+OOPP+Dv7w9fX1/4\n+vri+PHj1QusmmRxcXGSQfdQRampqejQoYPoMoiIiIgeKT09HZ6enqLLoCp61Pfr9OnT8PHxqfI6\nPMJMRERERFQBNswEgLNsIjF7sZi/WMxfHGZPVHVsmImIiIiIKsCGmQDwfJwiMXuxmL9YzF8cZk9U\ndWyYiYiIiIgqwIaZAHCWTSRmLxbzF4v5i8PsiaqODTMRERERUQXYMBMAzrKJxOzFYv5iMX9xmD1R\n1bFhJiIiImqgXn/9dfj6+sLFxQUHDhyo0Rrdu3fH0aNH63SfdY0NMwHgLJtIzF4s5i8W8xLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bfa38c10>"
"<matplotlib.figure.Figure at 0x7fc1526ab190>"
]
}
],
"prompt_number": 18
"prompt_number": 11
},
{
"cell_type": "markdown",
@@ -764,11 +764,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bfa26210>"
"<matplotlib.figure.Figure at 0x7fc15275c2d0>"
]
}
],
"prompt_number": 19
"prompt_number": 12
},
{
"cell_type": "markdown",
@@ -776,7 +776,7 @@
"source": [
"This result bothered me quite a bit when I first learned it. If my first measurement was 10, and the next one was 50, why would I choose 30 as a result? And why would I be *more* confident? Doesn't it make sense that either one of the measurements is wrong, or that I am measuring a moving object? Shouldn't the result be nearer 50? And, shouldn't the variance be larger, not smaller?\n",
"\n",
"Well, no. Recall the g-h filter chapter. In that chapter we agreed that if I weighed myself on two scales, and the first read 160lbs while the second read 170lbs, and both were equally accurate, the best estimate was 165lbs. Futhermore I should be a bit more confident about 165lbs vs 160lbs or 170lbs because I know have two readings, both near this estimate, increasing my confidence that neither is wildly wrong. \n",
"Well, no. Recall the g-h filter chapter. In that chapter we agreed that if I weighed myself on two scales, and the first read 160lbs while the second read 170lbs, and both were equally accurate, the best estimate was 165lbs. Furthermore I should be a bit more confident about 165lbs vs 160lbs or 170lbs because I know have two readings, both near this estimate, increasing my confidence that neither is wildly wrong. \n",
"\n",
"Let's look at the math again to convince ourselves that the physical interpretation of the Gaussian equations makes sense.\n",
"\n",
@@ -839,7 +839,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 20
"prompt_number": 13
},
{
"cell_type": "markdown",
@@ -858,7 +858,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
"prompt_number": 14
},
{
"cell_type": "markdown",
@@ -866,7 +866,7 @@
"source": [
"That is less abstract, which perhaps helps with comprehension, but it is poor coding practice. We are writing a Kalman filter that works for any problem, not just tracking dogs in a hallway, so we don't use variable names with 'dog' in them. Still, the `update_dog()` function should make what we are doing very clear. \n",
"\n",
"Let's look at an example. We will suppose that our current belief for the dog's position is $N(2,5)$. Don't worry about where that number came from. It may appear that we have a chicken and egg problem, in that how do we know the position before we sense it, but we will resolve that shortly. We will create a `DogSensor` object initialized to be at position 0.0, and with no velocity, and modest noise. This corresponds to the dog standing still at the far left side of the hallway. Note that we mistakenly believe the dog is at postion 2.0, not 0.0."
"Let's look at an example. We will suppose that our current belief for the dog's position is $N(2,5)$. Don't worry about where that number came from. It may appear that we have a chicken and egg problem, in that how do we know the position before we sense it, but we will resolve that shortly. We will create a `DogSensor` object initialized to be at position 0.0, and with no velocity, and modest noise. This corresponds to the dog standing still at the far left side of the hallway. Note that we mistakenly believe the dog is at position 2.0, not 0.0."
]
},
{
@@ -887,38 +887,38 @@
"output_type": "stream",
"stream": "stdout",
"text": [
"time: 0 \tposition = 0.217 \tvariance = 2.500\n",
"time: 1 \tposition = 0.002 \tvariance = 1.667\n",
"time: 2 \tposition = 0.136 \tvariance = 1.250\n",
"time: 3 \tposition = 0.234 \tvariance = 1.000\n",
"time: 4 \tposition = 0.008 \tvariance = 0.833\n",
"time: 5 \tposition = -0.104 \tvariance = 0.714\n",
"time: 6 \tposition = -0.028 \tvariance = 0.625\n",
"time: 7 \tposition = 0.017 \tvariance = 0.556\n",
"time: 8 \tposition = 0.084 \tvariance = 0.500\n",
"time: 9 \tposition = -0.021 \tvariance = 0.455\n",
"time: 10 \tposition = 0.038 \tvariance = 0.417\n",
"time: 11 \tposition = 0.082 \tvariance = 0.385\n",
"time: 12 \tposition = 0.056 \tvariance = 0.357\n",
"time: 13 \tposition = 0.145 \tvariance = 0.333\n",
"time: 14 \tposition = 0.088 \tvariance = 0.312\n",
"time: 15 \tposition = 0.098 \tvariance = 0.294\n",
"time: 16 \tposition = 0.058 \tvariance = 0.278\n",
"time: 17 \tposition = 0.023 \tvariance = 0.263\n",
"time: 18 \tposition = -0.026 \tvariance = 0.250\n",
"time: 19 \tposition = -0.086 \tvariance = 0.238\n"
"time: 0 \tposition = 0.323 \tvariance = 2.500\n",
"time: 1 \tposition = 0.536 \tvariance = 1.667\n",
"time: 2 \tposition = 0.524 \tvariance = 1.250\n",
"time: 3 \tposition = 0.068 \tvariance = 1.000\n",
"time: 4 \tposition = 0.165 \tvariance = 0.833\n",
"time: 5 \tposition = 0.316 \tvariance = 0.714\n",
"time: 6 \tposition = 0.292 \tvariance = 0.625\n",
"time: 7 \tposition = 0.223 \tvariance = 0.556\n",
"time: 8 \tposition = 0.235 \tvariance = 0.500\n",
"time: 9 \tposition = 0.226 \tvariance = 0.455\n",
"time: 10 \tposition = 0.302 \tvariance = 0.417\n",
"time: 11 \tposition = 0.413 \tvariance = 0.385\n",
"time: 12 \tposition = 0.400 \tvariance = 0.357\n",
"time: 13 \tposition = 0.443 \tvariance = 0.333\n",
"time: 14 \tposition = 0.348 \tvariance = 0.312\n",
"time: 15 \tposition = 0.327 \tvariance = 0.294\n",
"time: 16 \tposition = 0.254 \tvariance = 0.278\n",
"time: 17 \tposition = 0.289 \tvariance = 0.263\n",
"time: 18 \tposition = 0.254 \tvariance = 0.250\n",
"time: 19 \tposition = 0.191 \tvariance = 0.238\n"
]
}
],
"prompt_number": 21
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Because of the random numbers I do not know the exact values that you see, but the position should have converged very quickly to almost 0 despite the initial error of believing that the position was 2.0. Furthermore, the variance should have quickly converged from the intial value of 5.0 to 0.238.\n",
"Because of the random numbers I do not know the exact values that you see, but the position should have converged very quickly to almost 0 despite the initial error of believing that the position was 2.0. Furthermore, the variance should have quickly converged from the initial value of 5.0 to 0.238.\n",
"\n",
"By now the fact that we converged to a position of 0.0 should not be terribly suprising. All we are doing is computing `new_pos = old_pos * measurement` and the measurement is a normal distribution around 0, so we should get very close to 0 after 20 iterations. But the truly amazing part of this code is how the variance became 0.238 despite every measurement having a variance of 5.0. \n",
"By now the fact that we converged to a position of 0.0 should not be terribly surprising. All we are doing is computing `new_pos = old_pos * measurement` and the measurement is a normal distribution around 0, so we should get very close to 0 after 20 iterations. But the truly amazing part of this code is how the variance became 0.238 despite every measurement having a variance of 5.0. \n",
"\n",
"If we think about the physical interpretation of this is should be clear that this is what should happen. If you sent 20 people into the hall with a tape measure to physically measure the position of the dog you would be very confident in the result after 20 measurements - more confident than after 1 or 2 measurements. So it makes sense that as we make more measurements the variance gets smaller.\n",
"\n",
@@ -937,7 +937,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"That is a beautiful result, but it is not yet a filter. We assumed that the dog was sitting still, an extremely dubious assumption. Certainly it is a useless one - who would need to write a filter to track nonmoving objects? The histogram used a loop of sense and update functions, and we must do the same to accomodate movement.\n",
"That is a beautiful result, but it is not yet a filter. We assumed that the dog was sitting still, an extremely dubious assumption. Certainly it is a useless one - who would need to write a filter to track non-moving objects? The histogram used a loop of sense and update functions, and we must do the same to accommodate movement.\n",
"\n",
"How how do we perform the predict function with gaussians? Recall the histogram method:\n",
"\n",
@@ -977,7 +977,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 23
"prompt_number": 16
},
{
"cell_type": "markdown",
@@ -1027,47 +1027,47 @@
"stream": "stdout",
"text": [
"PREDICT: 1.0000,\t502.0000\n",
"UPDATE: -2.4596,\t9.8047\n",
"UPDATE: 7.0253,\t9.8047\n",
"\n",
"PREDICT: -1.4596,\t11.8047\n",
"UPDATE: -1.9792,\t5.4138\n",
"PREDICT: 8.0253,\t11.8047\n",
"UPDATE: 1.5049,\t5.4138\n",
"\n",
"PREDICT: -0.9792,\t7.4138\n",
"UPDATE: 2.0709,\t4.2574\n",
"PREDICT: 2.5049,\t7.4138\n",
"UPDATE: 3.9463,\t4.2574\n",
"\n",
"PREDICT: 3.0709,\t6.2574\n",
"UPDATE: 4.7485,\t3.8490\n",
"PREDICT: 4.9463,\t6.2574\n",
"UPDATE: 4.9988,\t3.8490\n",
"\n",
"PREDICT: 5.7485,\t5.8490\n",
"UPDATE: 5.0513,\t3.6904\n",
"PREDICT: 5.9988,\t5.8490\n",
"UPDATE: 4.2774,\t3.6904\n",
"\n",
"PREDICT: 6.0513,\t5.6904\n",
"UPDATE: 5.4221,\t3.6267\n",
"PREDICT: 5.2774,\t5.6904\n",
"UPDATE: 6.6767,\t3.6267\n",
"\n",
"PREDICT: 6.4221,\t5.6267\n",
"UPDATE: 5.8406,\t3.6007\n",
"PREDICT: 7.6767,\t5.6267\n",
"UPDATE: 7.3807,\t3.6007\n",
"\n",
"PREDICT: 6.8406,\t5.6007\n",
"UPDATE: 8.7423,\t3.5900\n",
"PREDICT: 8.3807,\t5.6007\n",
"UPDATE: 7.6023,\t3.5900\n",
"\n",
"PREDICT: 9.7423,\t5.5900\n",
"UPDATE: 9.5157,\t3.5856\n",
"PREDICT: 8.6023,\t5.5900\n",
"UPDATE: 9.3074,\t3.5856\n",
"\n",
"PREDICT: 10.5157,\t5.5856\n",
"UPDATE: 10.0623,\t3.5838\n",
"PREDICT: 10.3074,\t5.5856\n",
"UPDATE: 9.8777,\t3.5838\n",
"\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf8b8550>"
"<matplotlib.figure.Figure at 0x7fc1527e9050>"
]
}
],
"prompt_number": 25
"prompt_number": 17
},
{
"cell_type": "markdown",
@@ -1099,7 +1099,7 @@
"\n",
" dog = DogSensor(pos[0], velocity=movement, noise=sensor_error)\n",
"\n",
"It may seem very 'convienent' to set the simulator to the same position as our guess, and it is. Do not fret. In the next example we will see the effect of a wildly inaccurate guess for the dog's initial position.\n",
"It may seem very 'convenient' to set the simulator to the same position as our guess, and it is. Do not fret. In the next example we will see the effect of a wildly inaccurate guess for the dog's initial position.\n",
"\n",
"The next code allocates an array to store the output of the measurements and filtered positions. \n",
"\n",
@@ -1199,9 +1199,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAFyCAYAAAD7xWwMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmcjXX/x/HXWWefsY0tJpLIUtKqKEu3ZWokFEoId7JV\naHFrU6IsuRXuUkoRtxDJkgjFpA0hiV8ko2xjiVnPnOX6/SFzk8synG1m3s/HwyPXcq7re/Tu9Jmv\nz/lelm3bthmIiIiIiBQT1lAPQEREREQkmFQAi4iIiEixogJYRERERIoVFcAiIiIiUqyoABYRERGR\nYkUFsIiIiIgUK+csgDdu3EhKSgrJyckMGDAAgMWLF9OiRQtatGjBypUrAz5IERERERF/sZxtHWCf\nz0erVq14+eWXqV+/PkeOHCEmJoZWrVoxe/ZsXC4XXbp0YdmyZcEcs4iIiIjIBTvrDPDmzZspVaoU\n9evXB6BkyZJs2rSJ6tWrU6pUKSpUqED58uXZunVrUAYrIiIiInKx7Gc7uHfvXuLi4ujZsyeHDh3i\nnnvuoVSpUiQmJjJz5kwSEhJITEzkwIED1KxZM1hjFhERERG5YGctgF0uF+vXr2fhwoXExsbSrl07\n2rdvD0DHjh0BWLZsGRaLJfAjFRERERHxg7MWwImJiVx++eWUL18egDp16pCXl0d6enr+Oenp6SQm\nJp722h9++IEyZcr4ebgiIiIiIqfKyMigVq1a533+WQvgOnXqsGfPHo4ePUpUVBT/93//x0MPPcTc\nuXM5fPgwLpeL/fv3m7Y/lClTJr93WOSEBQsWkJKSEuphSJhRLsSMciFmlAsxs379+gKdf9YCOC4u\njiFDhtC1a1c8Hg8pKSnUqFGDQYMG0alTJwCGDBly4aOVYictLS3UQ5AwpFyIGeVCzCgX4g9nLYAB\nWrZsScuWLU/Zl5ycTHJycsAGJSIiIiISKHoSnATV7bffHuohSBhSLsSMciFmlAvxBxXAElQ1atQI\n9RAkDCkXYka5EDPKhfjDOVsg/M0wDA4cOIDX6w32rSUIbDYbZcuWPePSeKmpqTRs2DDIo5Jwp1yI\nGeVCzCgX4g9BL4APHDhAXFwc0dHRwb61BEF2djYHDhygXLlyoR6KiIiIiKmgt0B4vV4Vv0VYdHT0\nWWf39VO7mFEuxIxyIWaUC/EH9QCLiIiISLGiAliCKjU1NdRDkDCkXIgZ5ULMKBfiDyqARURERKRY\nUQEsBVK6dGl+++23C369erfEjHIhZpQLMaNciD+oAJbzZhjGKf8UERERKYxUAP9lxowZNG3alNq1\na9O9e3c6derElVdeyZYtW/D5fIwcOZJ69epRs2ZNBg8ejMfjAWDXrl3cddddXHbZZVx66aU8+OCD\nHDt2LP+6n332GTfccANJSUlcf/31rFixIv/Y1VdfzZdffpm//ffZ1b59+/Kvf/2LLl26kJSUxNVX\nX01mZiYACxYs4Oabb+ayyy6jQ4cO7N+/P/81KSkpXHHFFTz33HPceOONNG3alJycHACOHDlCr169\nqFmzJtdccw1Tp0495X79+/cnOTmZpKQk+vfvn3/snnvu4dJLLwXg1ltvJSkpiaeffrrAf87q3RIz\nyoWYUS7EjHIh/qAC+CQRERF8/fXXLFmyhB49etC5c2fmzZvHhAkT+Oyzz1iyZAlr165l27ZtTJo0\nCYC8vDy6du3K5s2b2bx5M0eOHGHkyJH513zssccYMmQIaWlpzJ07lwoVKuQfs1gsZ3xgxAmzZs2i\nc+fO7Nq1i+nTp2O321m3bh2PPvooEydOZPv27Vx11VUMGDAg/zU33ngjb775Jm+//TZLly4lMjKS\n7777DoCHH34Yp9PJxo0bmTdvHiNHjmTDhg35r/3iiy94++23WbNmDfPnz2f9+vUAzJ49m7S0NABW\nr15NWloaw4cPv8g/cREREZHgUwF8kqpVqxIfH0+pUqW4/PLLSUpKIj09nenTp/PEE09Qvnx5YmNj\n6dGjBwsXLgSgevXqtG3blujoaOLi4mjdujU//fRT/jWtVis7d+7k2LFjVK5cmSuvvLJAY2rUqBHN\nmzfHYrFQp04dIiMj+eCDD+jUqRPXXHMNVquVvn37snTpUvLy8vLfR5UqVShTpgwJCQkkJSVx8OBB\n9u3bx/Lly3nppZeIiIigSpUqpKSksGjRovz7tWrViksuuYRKlSpRq1YtduzY4Yc/2f9R75aYUS7E\njHIhZpQL8YegPwnuXCJfeYWoUaNO25/z5JPkDh58Xuef6dxzOTEba7fbsdls2O12PB4Pf/zxBw8/\n/DBW6/GfF3w+H+XLlwcgPT2dwYMH880335CdnY3b7aZevXr515wyZQrjxo3j9ddfp3r16rz22msF\nKoKrVat22r4//viDNWvWMGPGjPx9ERER+W0QJ8Zus9nyt91uN3v27AE4ZXxer5e2bdvmbyckJOT/\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf92f790>"
"<matplotlib.figure.Figure at 0x7fc1526e4190>"
]
},
{
@@ -1209,7 +1209,7 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsUAAAF9CAYAAADsuhWdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X1wVYWd//HPuQ+BPEAgeDHBxqptSkTDCmtrEVAQakhA\nt7bqJnYNtLC/3y7qdm36oOkDdWe6an/Dju7Sau2sdnenTgZmmF3ZwgKrOBK3466GCtQmZQuYIEIu\nBiWQ5Obp/v6IuRL48pDr4Z5Dzvs148i5uQ9H5zP44ev3nuM0NzcnBQAAAARYyOsTAAAAALxGKQYA\nAEDgUYoBAAAQeJRiAAAABB6lGAAAAIFHKQYAAEDgUYoBwCfWr1+v0tJSr08DAAKJUgwAZ/CLX/xC\n06dPVyKRGPb4Cy+8oKuvvlrxeNzVz1u8eLFeffVVV98TAHB+KMUAcAYLFixQT0+PXnvttWGPNzQ0\nqKysTLFYzNXPGzNmjCZNmuTqewIAzg+lGADOoLi4WCUlJWpoaEg9lkwm9eqrr2rBggWSpMcee0wV\nFRX6oz/6I82aNUvf/e531dHRMex9XnvtNZWWluq1117T0qVLdd1112n27Nl65ZVXJEm/+tWvVFpa\nmvrrVD09PXr44Ye1cOFClZWV6aabbtLjjz+unp6e1HP+4R/+Qffee6+efvpp3XjjjZo1a5aefPLJ\n097r9ddf17333qsZM2bohhtu0F/91V/p6NGjqZ//7//+r/78z/9cM2bM0Jw5c1RXV6djx459vH+R\nAHARoBQDwFnccsstw0pxU1OT3nvvPd1yyy2SpO7ubn3ve9/Tr371K/3kJz/Rjh079MMf/tB8rx/9\n6Ee64447tGHDBj322GPKycmRJH3hC1/Qq6++qrq6OvN1vb29ysrK0qOPPqrNmzfrscce04YNG7Rm\nzZphz9u9e7eOHTum+vp6rVixQk899ZR27tyZ+vlvf/tbLVu2TFdeeaXq6+v1z//8z5o2bZra29sl\nSYcPH9ZXvvIVFRcXa/369XrmmWf09ttv66GHHkr73x8AXCwiXp8AAPjZggUL9LOf/UyHDh1SYWGh\ntm/fnpogSxpWgD/xiU+ourpaTzzxhPled999t774xS9KGpxCD8nKytKkSZOUl5dnvi43N1ePPPJI\n6njKlClasmSJXn75ZX3jG99IPZ6Xl6dvfetbchxHy5cv11NPPaVdu3Zp+vTpkqRnn31Wn/nMZ/Q3\nf/M3qddMnTo19evnn39esVhMP/jBD1KPfetb31JVVZXa29tVUFBwzn9fAHCxohQDwFmUlZXpkksu\n0fbt23XXXXepoaEhNSWWpK1bt+oXv/iF3n77bZ04cUL9/f3q6+sz3+v6669P+zzWrl2rtWvX6uDB\ng+rq6lJvb6+KioqGPae4uFiO46SOx48fr/fffz91/Lvf/U5z584942e89dZb2rdvn2bMmDHsccdx\n1NLSQikGMKpRigHgLBzH0fz587V9+3YtWbJEO3bs0H333SdJevPNN/Xggw/qwQcf1OzZs5Wbm6sN\nGzbo7//+7833Gj9+fFrnsGnTJj366KOqq6vTddddp7Fjx+rnP//5sLUOSQqHw6e9NplMDvtnOfn4\nVI7jaNasWVq1atVpP5s8eXJa5w4AFwtKMQCcw4IFC/Ttb39br776qnJycvTZz35WkvTGG2/oM5/5\njJYvX5567qFDh4ZNa93w+uuva+7cubrrrrtSj73zzjsj/pzS0lK9/vrrZ/z51VdfrRdeeEGFhYWK\nRqNpny8AXIz4oh0AnMONN96o3t5ePfXUU7rpppsUCg3+1nnVVVdp79692rZtm1pbW/XLX/5Smzdv\nPus01tLe3q54PJ66asWRI0cUj8fV2dmZ+pw33nhD//M//6P9+/drzZo12rFjx4g/Z/ny5dqzZ49+\n8IMfqLm5WXv27NHTTz+tvXv3SpLuuecedXZ26hvf+IZ2796t/fv3a9OmTfrmN785os8BgIsRpRgA\nziErK0uzZ8/WW2+9NWyfeN68efrqV7+q73//+7r99tv12muvaeXKleYE92xT3TvvvFNz587Vo48+\nKsdxNGfOHM2dO1fPPvusJOlP//RPtWDBAt1///268847dejQId17773D3tNxnHNOjqdNm6bnnntO\n+/btU1VVle655x7t2rUrtSt86aWX6vnnn1dfX5+WLVumL37xi/rJT36iK664YiT/ugDgouQ0Nzef\ncdTw+OOP64UXXlBBQYE2bNigw4cP66//+q/V0dGhrKwsffOb39SNN94oSdq4cWPqmpgPPfSQ5s+f\nn5l/AgAAAOBjOmsp3rFjh6LRqB5++GFt2LBB7733no4cOaKpU6fq4MGDqqqq0iuvvKKenh5VVFRo\n3bp1SiQSqqmp0datWzP5zwEAAACk7azrEzNmzNCECRNSx5MmTUpd03LKlCnq7e1Vb2+vdu7cqZKS\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51c7279210>"
"<matplotlib.figure.Figure at 0x7fc152582d90>"
]
},
{
@@ -1220,7 +1220,7 @@
]
}
],
"prompt_number": 26
"prompt_number": 18
},
{
"cell_type": "markdown",
@@ -1233,7 +1233,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"> Before I go on, I want to emphasize that this code fully implements a 1D Kalman filter. If you have tried to read the literatue, you are perhaps surprised, because this looks nothing like the complex, endless pages of math in those books. To be fair, the math gets a bit more complicated in multiple dimensions, but not by much. So long as we worry about *using* the equations rather than *deriving* them we can create Kalman filters without a lot of effort. Moreover, I hope you'll agree that you have a decent intuitive grasp of what is happening. We represent our beliefs with Gaussians, and our beliefs get better over time because more measurement means more data to work with. \"Measure twice, cut once!\""
"> Before I go on, I want to emphasize that this code fully implements a 1D Kalman filter. If you have tried to read the literature, you are perhaps surprised, because this looks nothing like the complex, endless pages of math in those books. To be fair, the math gets a bit more complicated in multiple dimensions, but not by much. So long as we worry about *using* the equations rather than *deriving* them we can create Kalman filters without a lot of effort. Moreover, I hope you'll agree that you have a decent intuitive grasp of what is happening. We represent our beliefs with Gaussians, and our beliefs get better over time because more measurement means more data to work with. \"Measure twice, cut once!\""
]
},
{
@@ -1316,7 +1316,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"#####Excercise:\n",
"#####Exercise:\n",
"Modify the values of `movement_error` and `sensor_error` and note the effect on the filter and on the variance. Which has a larger effect on the value that variance converges to. For example, which results in a smaller variance:\n",
"\n",
" movement_error = 40\n",
@@ -1340,7 +1340,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"So far we have developed our filter based on the dog sensors introduced in the Discrete Bayesian filter chapter. We are used to this problem by now, and may feel ill-equiped to implement a Kalman filter for a different problem. To be honest, there is still quite a bit of information missing from this presentation. The next chapter will fill in the gaps. Still, lets get a feel for it by designing and implementing a Kalman filter for a thermometer. The sensor for the thermometer outputs a voltage that corresponds to the temperature that is being measured. We have read the manufacturer's specifications for the sensor, and it tells us that the sensor exhibits white noise with a standard deviation of 2.13.\n",
"So far we have developed our filter based on the dog sensors introduced in the Discrete Bayesian filter chapter. We are used to this problem by now, and may feel ill-equipped to implement a Kalman filter for a different problem. To be honest, there is still quite a bit of information missing from this presentation. The next chapter will fill in the gaps. Still, lets get a feel for it by designing and implementing a Kalman filter for a thermometer. The sensor for the thermometer outputs a voltage that corresponds to the temperature that is being measured. We have read the manufacturer's specifications for the sensor, and it tells us that the sensor exhibits white noise with a standard deviation of 2.13.\n",
"\n",
"We do not have a real sensor to read, so we will simulate the sensor with the following function. We have hard-coded the voltage to 16.3 - obviously the voltage will differ based on the temperature, but that is not important to our filter design."
]
@@ -1356,7 +1356,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 27
"prompt_number": 19
},
{
"cell_type": "markdown",
@@ -1364,9 +1364,9 @@
"source": [
"We generate white noise with a given variance using the equation `random.randn() * variance`. The specification gives us the standard deviation of the noise, not the variance, but recall that variance is just the square of the standard deviation. Hence we raise 2.13 to the second power.\n",
"\n",
"> **Sidebar**: spec sheets are just what they sound like - specifications. Any individual sensor will exhibit different performance based on normal manufacturing variations. Numbers given are often maximums - the spec is a guarantee that the performace will be at least that good. So, our sensor might have standard deviation of 1.8. If you buy an expensive piece of equipment it often comes with a sheet of paper displaying the test results of your specific item; this is usually very trustworthy. On the other hand, if this is a cheap sensor it is likely it received little to no testing prior to being sold. Manufacturers typically test a small subset of their output to verify that everything falls within the desired performance range. If you have a critical application you will need to read the specification sheet carefully to figure out exactly what they mean by their ranges. Do they guarantee their number is a maximum, or is it, say, the $3\\sigma$ error rate? Is every item tested? Is the variance normal, or some other distribution. Finally, manufacturing is not perfect. Your part might be defective and not match the performance on the sheet.\n",
"> **Sidebar**: spec sheets are just what they sound like - specifications. Any individual sensor will exhibit different performance based on normal manufacturing variations. Numbers given are often maximums - the spec is a guarantee that the performance will be at least that good. So, our sensor might have standard deviation of 1.8. If you buy an expensive piece of equipment it often comes with a sheet of paper displaying the test results of your specific item; this is usually very trustworthy. On the other hand, if this is a cheap sensor it is likely it received little to no testing prior to being sold. Manufacturers typically test a small subset of their output to verify that everything falls within the desired performance range. If you have a critical application you will need to read the specification sheet carefully to figure out exactly what they mean by their ranges. Do they guarantee their number is a maximum, or is it, say, the $3\\sigma$ error rate? Is every item tested? Is the variance normal, or some other distribution. Finally, manufacturing is not perfect. Your part might be defective and not match the performance on the sheet.\n",
"\n",
"> For example, I just randomly looked up a data sheet for an airflow sensor. There is a field *Repeatability*, with the value $\\pm 0.50\\%$. Is this a Gaussian? Is there a bias? For example, perhaps the repeatibility is nearly 0.0% at low temperatures, and always nearly +0.50 at high temperatures. Data sheets for electrical components often contain a section of \"Typical Performance Characteristics\". These are used to capture information that cannot be easily conveyed in a table. For example, I am looking at a chart showing output voltage vs current for a LM555 timer. There are three curves showing the performance at different temperatures. The response is ideally linear, but all three lines are curved. This clarifies that errors in voltage outputs are probably not Gaussian - in this chip's case higher temperatures leads to lower voltage output, and the voltage output is quite nonlinear if the input current is very high. \n",
"> For example, I just randomly looked up a data sheet for an airflow sensor. There is a field *Repeatability*, with the value $\\pm 0.50\\%$. Is this a Gaussian? Is there a bias? For example, perhaps the repeatability is nearly 0.0% at low temperatures, and always nearly +0.50 at high temperatures. Data sheets for electrical components often contain a section of \"Typical Performance Characteristics\". These are used to capture information that cannot be easily conveyed in a table. For example, I am looking at a chart showing output voltage vs current for a LM555 timer. There are three curves showing the performance at different temperatures. The response is ideally linear, but all three lines are curved. This clarifies that errors in voltage outputs are probably not Gaussian - in this chip's case higher temperatures leads to lower voltage output, and the voltage output is quite nonlinear if the input current is very high. \n",
"\n",
"> As you might guess, modeling the performance of your sensors is one of the harder parts of creating good Kalman filter. "
]
@@ -1421,9 +1421,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf95f150>"
"<matplotlib.figure.Figure at 0x7fc1526c4850>"
]
},
{
@@ -1431,7 +1431,7 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAroAAAF9CAYAAADr+MuIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmUXHWd9/HPrbX3Jb2Q7tghCWaFDiSCLAkgJAKyjRsa\n8EF0iOcgi6MyuICI6DCAZ/TgDMr2DOICw+BMBsmDKFFwJKgR6EACIW0kCZ09nXQ6vXdt9/mjllQn\nv6S7k1t1a3m/zsnpulW3bv0SPyd+cvnWvVZ7e7stAAAAoMB43F4AAAAAkAkUXQAAABQkii4AAAAK\nEkUXAAAABYmiCwAAgIJE0QUAAEBBougCQAYtW7ZMs2bNcnsZAFCUKLoAispjjz2muXPnanh4eMTz\nzzzzjGbPnq3Ozk5HP++SSy7Ryy+/7OgxAQBjQ9EFUFQWLVqkUCikVatWjXh+5cqVam1tVUNDg6Of\nFwwGVVdX5+gxAQBjQ9EFUFRaWlo0ffp0rVy5MvWcbdt6+eWXtWjRIknSPffcow996EM6+eSTdeaZ\nZ+q2225Tb2/viOOsWrVKs2bN0qpVq3TNNdfolFNO0YIFC/SHP/xBkvTss89q1qxZqV8HC4VC+vrX\nv67FixertbVV55xzju69916FQqHUPv/2b/+mq6++Wg8++KDOOussnXnmmfrBD35wyLFeffVVXX31\n1Zo3b55OP/10feELX9C+fftSr//tb3/T5z73Oc2bN08LFy7Urbfeqp6enmP7gwSAPEDRBVB0zj//\n/BFFd/369dq7d6/OP/98SdLQ0JC+8Y1v6Nlnn9UPf/hDrV69Wt/61reMx7rrrrv0kY98RMuXL9c9\n99yjsrIySdIHP/hBvfzyy7r11luN7wuHwwoEArr77rv1m9/8Rvfcc4+WL1+u+++/f8R+b775pnp6\nevTkk09q6dKleuCBB7RmzZrU62+99ZY+85nPaOrUqXryySf105/+VHPmzFFXV5ckadeuXfrUpz6l\nlpYWLVu2TA8//LDeffddfe1rXzvqPz8AyBc+txcAANm2aNEiPfTQQ9q5c6cmTpyol156KXWmV9KI\nUvue97xHV155pe677z7jsT7xiU/owx/+sKT42eKkQCCguro6VVRUGN9XXl6uO++8M7Xd3NysSy+9\nVL///e/15S9/OfV8RUWFbrnlFlmWpWuvvVYPPPCA1q5dq7lz50qSHn30Uc2YMUPf/va3U++ZOXNm\n6vETTzyhhoYGffOb30w9d8stt2jJkiXq6urShAkTRv3zAoB8RdEFUHRaW1tVX1+vl156SVdccYVW\nrlyZOpsrSStWrNBjjz2md999V/39/YpGo4pEIsZjnXrqqUe9jqeeekpPPfWUtm/frsHBQYXDYTU1\nNY3Yp6WlRZZlpbarqqrU3d2d2n777bd19tlnH/Yz1q1bp02bNmnevHkjnrcsSx0dHRRdAAWNogug\n6FiWpfPOO08vvfSSLr30Uq1evVo33HCDJOmNN97Ql770JX3pS1/SggULVF5eruXLl+tf//Vfjceq\nqqo6qjU899xzuvvuu3XrrbfqlFNOUUlJiR555JERIxWS5PV6D3mvbdsjfi/p2wezLEtnnnmm7rjj\njkNea2xsPKq1A0C+oOgCKEqLFi3SV77yFb388ssqKyvTaaedJkl67bXXNGPGDF177bWpfXfu3Dni\nrKoTXn31VZ199tm64oorUs9t27Zt3J8za9Ysvfrqq4d9ffbs2XrmmWc0ceJE+f3+o14vAOQjvowG\noCidddZZCofDeuCBB3TOOefI44n/dTht2jRt3LhRL774orZs2aLHH39cv/nNb4541tSkq6tLnZ2d\nqas17NmzR52dnRoYGEh9zmuvvaZXXnlFmzdv1v3336/Vq1eP+3OuvfZabdiwQd/85jfV3t6uDRs2\n6MEHH9TGjRslSVdddZUGBgb05S9/WW+++aY2b96s5557Tv/4j/84rs8BgHxE0QVQlAKBgBYsWKB1\n69aNmM/9wAc+oM9+9rO6/fbbdfnll2vVqlW6/vrrjWdaj3T29eMf/7jOPvts3X333bIsSwsXLtTZ\nZ5+tRx99VJL0yU9+UosWLdKNN96oj3/849q5c6euvvrqEce0LGvUM7xz5szRj3/8Y23atElLlizR\nVVddpbVr16Zmb4877jg98cQTikQi+sxnPqMPf/jD+uEPf6gpU6aM548LAPKS1d7ePurpg9mzZ6e+\nxXvaaafptttuy/jCAAAAgGMxphndkpISPf3005leCwAAAOAYRhcAAABQkMZUdEOhkD760Y/qyiuv\nPOK3ewEAAIBcMaYZ3b1796qurk5r167VjTfeqBUrVigQCGRjfQAAAMBRGdOMbl1dnaT43YQaGxu1\ndetWTZs2TZK0evVq1dfXZ26FAAAAgKTe3l7NmTNnzPuPWnT379+vYDCokpISbd26Vbt27VJzc3Pq\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bfab7850>"
"<matplotlib.figure.Figure at 0x7fc1527a89d0>"
]
},
{
@@ -1439,11 +1439,11 @@
"stream": "stdout",
"text": [
"Variance converges to 0.0907297673624\n",
"Last voltage is 15.3530858787\n"
"Last voltage is 16.2828743816\n"
]
}
],
"prompt_number": 28
"prompt_number": 20
},
{
"cell_type": "markdown",
@@ -1467,7 +1467,8 @@
],
"language": "python",
"metadata": {},
"outputs": []
"outputs": [],
"prompt_number": 21
},
{
"cell_type": "markdown",
@@ -1501,13 +1502,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf93cf90>"
"<matplotlib.figure.Figure at 0x7fc1527e9dd0>"
]
}
],
"prompt_number": 29
"prompt_number": 22
},
{
"cell_type": "markdown",
@@ -1529,7 +1530,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"So how does the Kalman filter do so well? I have glossed over one aspect of the filter as it becomes confusing to address too many points at the same time. We will return to the dog tracking problem. We used two sensors to track the dog - the RFID sensor that detects position, and the inertial tracker that tracked movement. However, we have focussed all of our attention on the position sensor. Let's change focus and see how the filter performs if the intertial tracker is also noisy. This will provide us with an vital insight into the performance of Kalman filters."
"So how does the Kalman filter do so well? I have glossed over one aspect of the filter as it becomes confusing to address too many points at the same time. We will return to the dog tracking problem. We used two sensors to track the dog - the RFID sensor that detects position, and the inertial tracker that tracked movement. However, we have focused all of our attention on the position sensor. Let's change focus and see how the filter performs if the inertial tracker is also noisy. This will provide us with an vital insight into the performance of Kalman filters."
]
},
{
@@ -1570,9 +1571,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf92f190>"
"<matplotlib.figure.Figure at 0x7fc15259eb90>"
]
},
{
@@ -1580,23 +1581,23 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsIAAAF9CAYAAAAOZg7kAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt4VfWd7/HP2ntnZ+dGQi4QQkMF5aYGhWodBbSiRcHL\nQUbbwBwvPdLztFanrdip4ljrzHG8nPY5ttOObecc9XRGh9EZxpGjKExrB8EZWy5qqEJRxCQCIZAL\nIZd9P3/sC3uHn0CStfdeYb9fz8OTrLXX5RfmU+abn9/1W9auXbuiAgAAAPKMK9cDAAAAAHKBQhgA\nAAB5iUIYAAAAeYlCGAAAAHmJQhgAAAB5iUIYAAAAeYlCGAByYM2aNZoxY0auhwEAeY1CGAAkPfPM\nM5o1a5b8fn/a/pdeekkzZ85Ue3u7rfe75pprtHnzZluvCQAYGgphAJB0xRVXKBAI6K233krbv2nT\nJjU0NKimpsbW+xUWFqqqqsrWawIAhoZCGAAk1dfXa+rUqdq0aVNyXzQa1ebNm3XFFVdIkh599FEt\nWrRI5513ni6++GLdf//96unpSbvOW2+9pRkzZuitt97SrbfeqvPPP19z587Vxo0bJUkvv/yyZsyY\nkfwzWCAQ0H333acrr7xSDQ0NuvTSS/XYY48pEAgkj/nrv/5r3XzzzfrZz36mSy65RBdffLF+9KMf\nHXetLVu26Oabb9bs2bN10UUX6U//9E/V2dmZ/PyDDz7QV7/6Vc2ePVvz5s3TqlWrdOTIkZH9RQLA\nKEIhDABxCxYsSCuEd+7cqcOHD2vBggWSpIGBAf35n/+5Xn75Zf30pz/V9u3b9f3vf994rYcfflg3\n3HCD1q5dq0cffVTFxcWSpC9+8YvavHmzVq1aZTwvGAzK6/XqkUce0WuvvaZHH31Ua9eu1U9+8pO0\n43bs2KEjR45o9erVWrFihZ588km9++67yc9///vf67bbbtPkyZO1evVq/fKXv9TZZ5+tjo4OSVJb\nW5v+5E/+RPX19VqzZo1+8Ytf6OOPP9a999477L8/ABhtPLkeAAA4xRVXXKGf//znOnDggGpra/XG\nG28kZ4olpRW9n/nMZ7Rs2TI98cQTxmt96Utf0pIlSyTFZpsTvF6vqqqqVFpaajyvpKREDz30UHK7\nrq5O1157rX7zm9/o7rvvTu4vLS3Vd77zHVmWpdtvv11PPvmkmpqaNGvWLEnSU089pWnTpukv/uIv\nkudMnz49+f1zzz2nmpoafe9730vu+853vqPGxkZ1dHSosrLypH9fADDaUQgDQFxDQ4Oqq6v1xhtv\n6KabbtKmTZuSs8GStGHDBj3zzDP6+OOP1dvbq3A4rFAoZLzWBRdcMOxxPP/883r++ee1b98+9ff3\nKxgMasKECWnH1NfXy7Ks5PaYMWPU1dWV3H7//fc1f/78T73He++9p48++kizZ89O229ZlpqbmymE\nAeQFCmEAiLMsS5dffrneeOMNXXvttdq+fbu+8Y1vSJLeeecdffvb39a3v/1tzZ07VyUlJVq7dq1+\n/OMfG681ZsyYYY1h3bp1euSRR7Rq1Sqdf/758vl8+tu//du0lg1Jcrvdx50bjUbTfpbU7cEsy9LF\nF1+sBx988LjPxo0bN6yxA8BoQyEMACmuuOIK/dmf/Zk2b96s4uJiXXjhhZKkrVu3atq0abr99tuT\nxx44cCBtVtYOW7Zs0fz583XTTTcl933yySdDvs+MGTO0ZcuWT/185syZeumll1RbW6uCgoJhjxcA\nRjMelgOAFJdccomCwaCefPJJXXrppXK5Yv9MTpkyRXv27NHrr7+ulpYWPfvss3rttddOOOtq0tHR\nofb29uRqE4cOHVJ7e7v6+vqS99m6dat+97vfae/evfrJT36i7du3D/k+t99+u3bv3q3vfe972rVr\nl3bv3q2f/exn2rNnjyRp+fLl6uvr0913360dO3Zo7969Wrdune65554h3QcARjMKYQBI4fV6NXfu\nXL333ntp/cFf+MIX9JWvfEUPPPCArr/+er311lu64447jDO1J5q9vfHGGzV//nw98sgjsixL8+bN\n0/z58/XUU09Jkr785S/riiuu0J133qkbb7xRBw4c0M0335x2TcuyTjpDfPbZZ+vpp5/WRx99pMbG\nRi1fvlxNTU3J3t/x48frueeeUygU0m233aYlS5bopz/9qc4444yh/HUBwKhm7dq161OnGTo7O7Vi\nxQqFQiFFo1F97Wtf0+LFi/XKK68k16y89957dfnll2dtwAAAAIAdTlgIh0IhBYNBFRUVqbOzU4sX\nL9bGjRt19dVX64UXXpDf79ctt9yiDRs2ZHPMAAAAwIidsDXC4/GoqKhIktTT0yOv16t33nlHU6dO\nVWVlpSZMmKDa2lrt3LkzK4MFAAAA7HLSVSN6e3vV2Nio5uZm/eAHP9ChQ4dUU1Oj1atXq7y8XDU1\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51c7305510>"
"<matplotlib.figure.Figure at 0x7fc152513250>"
]
}
],
"prompt_number": 30
"prompt_number": 23
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This result is worse than the example where only the measurement sensor was noisy. Instead of being mostly straight, this time the filter's output is distintly jagged. But, it still mostly tracks the dog. What is happening here?\n",
"This result is worse than the example where only the measurement sensor was noisy. Instead of being mostly straight, this time the filter's output is distinctly jagged. But, it still mostly tracks the dog. What is happening here?\n",
"\n",
"This illustrates the effects of *multi-sensor fusion*. Suppose we get a position reading of -28.78 followed by 31.43. From that information alone it is impossible to tell if the dog is standing still during very noisy measurements, or perhaps sprinting from -29 to 31 and being accurately measured. But we have a second source of information, his velocity. Even when the velocity is also noisy, it constrains what our beliefs might be. For example, suppose that with the 31.43 position reading we get a velocity reading of 59. That matches the difference between the two positions quite well, so this will lead us to believe the RFID sensor and the velocity sensor. Now suppose we got a velocity reading of 1.7. This doesn't match our RFID reading very well - it suggests that the dog is standing still or moving slowly.\n",
"\n",
"When sensors measure different aspects of the system and they all agree we have strong evidence that the sensors are accurate. And when they do not agree it is a strong indication that one or more of them are inaccurate. \n",
"\n",
"We will formalize this mathematically in the next chapter; for now trust this intuitive explanation. We use this sort of reasoning every day in our lives. If one person tells us something that seems far fetched we are inclined to doubt them. But if several people independently relay the same information we attach higher credence to the data. If one person disagrees with several other people, we tend to distrust the outlier. If we know the people that might alter our belief. If a friend is inclined to practical jokes and tall tales we may put very little trust in what they say. If one lawyer and three lay people opine on some fact of law, and the lawyer disagees with the three you'll probably lend more credence to what the lawyer says because of her expertise. In the next chapter we will learn how to mathematicall model this sort of reasoning."
"We will formalize this mathematically in the next chapter; for now trust this intuitive explanation. We use this sort of reasoning every day in our lives. If one person tells us something that seems far fetched we are inclined to doubt them. But if several people independently relay the same information we attach higher credence to the data. If one person disagrees with several other people, we tend to distrust the outlier. If we know the people that might alter our belief. If a friend is inclined to practical jokes and tall tales we may put very little trust in what they say. If one lawyer and three lay people opine on some fact of law, and the lawyer disagrees with the three you'll probably lend more credence to what the lawyer says because of her expertise. In the next chapter we will learn how to mathematical model this sort of reasoning."
]
},
{
@@ -1619,7 +1620,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"So I didn't put a lot of noise in the signal, and I also 'correctly guessed' that the dog was at position 0. How does the filter perform in real world conditions? Let's explore and find out. I will start by injecting a lot of noise in the RFID sensor. I will inject an extreme amount of noise - noise that apparently swamps the actual measurement. What does your intution tell about how the filter will perform if the noise is allowed to be anywhere from -300 or 300. In other words, an actual position of 1.0 might be reported as 287.9, or -189.6, or any other number in that range. Think about it before you scroll down."
"So I didn't put a lot of noise in the signal, and I also 'correctly guessed' that the dog was at position 0. How does the filter perform in real world conditions? Let's explore and find out. I will start by injecting a lot of noise in the RFID sensor. I will inject an extreme amount of noise - noise that apparently swamps the actual measurement. What does your intuition tell about how the filter will perform if the noise is allowed to be anywhere from -300 or 300. In other words, an actual position of 1.0 might be reported as 287.9, or -189.6, or any other number in that range. Think about it before you scroll down."
]
},
{
@@ -1656,13 +1657,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf846cd0>"
"<matplotlib.figure.Figure at 0x7fc152776bd0>"
]
}
],
"prompt_number": 31
"prompt_number": 24
},
{
"cell_type": "markdown",
@@ -1721,13 +1722,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf980690>"
"<matplotlib.figure.Figure at 0x7fc159d578d0>"
]
}
],
"prompt_number": 32
"prompt_number": 25
},
{
"cell_type": "markdown",
@@ -1785,13 +1786,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf61cc50>"
"<matplotlib.figure.Figure at 0x7fc159d57a90>"
]
}
],
"prompt_number": 33
"prompt_number": 26
},
{
"cell_type": "markdown",
@@ -1837,13 +1838,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bfa26c90>"
"<matplotlib.figure.Figure at 0x7fc152743690>"
]
}
],
"prompt_number": 34
"prompt_number": 27
},
{
"cell_type": "markdown",
@@ -1888,8 +1889,17 @@
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 35
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 28,
"text": [
"<function __main__.plot_kalman_filter>"
]
}
],
"prompt_number": 28
},
{
"cell_type": "markdown",
@@ -1937,13 +1947,21 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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\nhmbNmmW8fubMGfr160fNmjWpW7cuH3300UXnDxw4kBEjRtCzZ09iYmK4+eabSUpKCswfVkRERERU\nIF/Jtm3b2Lp1KwAHDx7MaLFo3rw58fHxdOzYMVujwU8++STx8fHceeedGa0Y69evz3i9f//+2O12\ndu3axZIlSxg3bhzffffdRddYuHAh3bt359ChQ8ydOxer1RqYP2wBUu+Y+KO8EH+UF+KP8kICqfBX\nVvnAMIxcvZ7V844dO8b69ev5+eefCQkJoUqVKrRp04aVK1dSp06djOPuvvtumjdvDkCtWrVydG8R\nERER8a/QFMglS5YIyHVOnz4TkOsEwt9Hno8cOQJwUTHs9Xpp3779Rcddd911eR9cPlPvmPijvBB/\nlBfij/JCAqnQFMjBVNj+XWYtFna7Ha/X6/c1s/nS7pYKFSoQGhrKL7/8ctm2DX/nioiIiEhgqNIK\ngMxaLK6//vqM/uW/K126NHv37r1oX9myZWnQoAEvvPACycnJuN1uvv76a3744YeAxxxs1Dsm/igv\nxB/lhfijvJBAUoGcRX8f0W3fvj0xMTH85z//4e233yYmJoZBgwZddMyoUaNYvnw5lSpV4vnnn7/o\ntYEDB7Jp0yZuuukm2rZtm7F/2rRpnDp1ivr161O9enXGjBlzySi0pogTERERyTum/fv35+wJsxz6\n7bffqFev3iX7jx49Svny5fMzFMln+jsWERGR/LRz504qVaqU7fM0giwiIiIicgEVyBIU1Dsm/igv\nxB/lhfijvJBAumKBPG7cOO666y7atGmTsW/VqlW0aNGCFi1asHHjxivuFxEREREpLK7Yg/zf//4X\nm83GiBEjWL58OS6Xi5YtW7Jo0SKcTic9e/Zk3bp1me7/O/UgF136OxYREZH8lNMe5CvOg1y3bl0O\nHz6csb17926qVatGyZIlgfSpyfbt20dSUpLf/TVr1sx2UCIiIiIil/B6MR8+jPmXX7D88gumY8dI\nGzUq4LfJdg/yyZMniY6OZv78+axevZro6GhOnDjBqVOn/O7PKsMwcrxkswS/K/39qndM/FFeiD/K\nC/FHeVE02OfOJbJ1a0LffBPL999jREaCzxfw++R4Jb0uXboAXNJGceH+7MzXW6xYMU6fPs0111yT\n05AkiJ0+fZpixYoVdBgiIiJSiLl69sTVs2ee3yfbBXLp0qU5efJkxvbJkycpXbo0ycnJl+Line truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf91e490>"
"<matplotlib.figure.Figure at 0x7fc1527a68d0>"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 29,
"text": [
"<function __main__.plot_kalman_filter>"
]
}
],
"prompt_number": 36
"prompt_number": 29
},
{
"cell_type": "heading",
@@ -1967,7 +1985,7 @@
"\n",
" Z = math.sin(i/3.) * 2\n",
" \n",
"Adust the variance and initial positions to see the effect. What is, for example, the result of a very bad initial guess?"
"Adjust the variance and initial positions to see the effect. What is, for example, the result of a very bad initial guess?"
]
},
{
@@ -1978,7 +1996,8 @@
],
"language": "python",
"metadata": {},
"outputs": []
"outputs": [],
"prompt_number": 30
},
{
"cell_type": "markdown",
@@ -2022,11 +2041,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bfaad390>"
"<matplotlib.figure.Figure at 0x7fc15250cd90>"
]
}
],
"prompt_number": 37
"prompt_number": 31
},
{
"cell_type": "markdown",
@@ -2036,7 +2055,7 @@
"\n",
"Here we set a bad initial guess of 100. We can see that the filter never 'acquires' the signal. Note now the peak of the filter output always lags the peak of the signal by a small amount, and how the filtered signal does not come very close to capturing the high and low peaks of the input signal.\n",
"\n",
"If we recall the g-h filter chapter we can understand what is happening here. The structure of the g-h filter requires that the filter output chooses a value part way between the predition and measurement. A varying signal like this one is always accelerating, whereas our process model assumes constant velocity, so the filter is mathematically guaranteed to always lag the input signal. \n",
"If we recall the g-h filter chapter we can understand what is happening here. The structure of the g-h filter requires that the filter output chooses a value part way between the prediction and measurement. A varying signal like this one is always accelerating, whereas our process model assumes constant velocity, so the filter is mathematically guaranteed to always lag the input signal. \n",
"\n",
"Maybe we just didn't adjust things 'quite right'. After all, the output looks like a sin wave, it is just offset some. Let's test this assumption."
]
@@ -2064,7 +2083,8 @@
],
"language": "python",
"metadata": {},
"outputs": []
"outputs": [],
"prompt_number": 32
},
{
"cell_type": "markdown",
@@ -2104,13 +2124,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAAFyCAYAAAAQ8tcPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4FOX2B/DvlC2plARCSUILAUIHAZGqKEIAaVJEEaQL\nFu7Pq2K/FpSLogiCCgrCVVBUROkgvYuEXkIJIXRIIX3bzPz+2CSmzO7O7s6WJOfzPPe57u7Mzgu8\n2Zx957znMImJiRIIIYQQQgiphFhfD4AQQgghhBBfoWCYEEIIIYRUWhQME0IIIYSQSouCYUIIIYQQ\nUmlRMEwIIYQQQiotCoYJIYQQQkil5XIwfPz4cQwYMADx8fGYPn26mmMihBBCCCHEK3hXThJFEa+8\n8go++ugjtGvXDhkZGWqPixBCCCGEEI9zaWX41KlTqF69Otq1awcAqFatmqqDIoQQQgghxBtcCoZv\n3ryJkJAQTJgwAYMHD8aKFSvUHhchhBBCCCEe51KahNFoREJCAtatW4fg4GAMHToU3bp1Q1RUlNrj\nI4QQQgghxGNcCoZr1KiBmJgY1KpVCwDQokULJCUllQiGjx49ivDwcHVGSQghhBBCiA3Z2dmIi4tz\n6VyXguEWLVrgxo0byMzMREBAAM6fP4/o6OgSx4SHhxflFBNSaO3atRgwYICvh0H8DM0LIofmBZFD\n84LISUhIcPlcl4LhkJAQvP766xgzZgwsFgsGDBiABg0auDwIUnmkpKT4egjED9G8IHJoXhA5NC+I\n2lwKhgGgT58+6NOnj5pjIYQQQgghxKuoAx3xqocfftjXQyB+iOYFkUPzgsiheUHURsEw8aomTZr4\negjED9G8IHJoXhA5NC+I2igYJl61d+9eXw+B+CGaF0QOzQsih+YFURsFw4QQQgghpNJiEhMTJU+8\n8dWrV6m0GiGEEEII8biEhASXm7/RyjAhhBBCCKm0KBgmXkW5XkQOzQsih+YFkUPzgqiNgmFCCCGE\nEFJpUc4wIYQQQggp1yhnmBBCCCGEEBdQMEy8inK9iByaF0QOzQsih+YFURsFw4QQQgghpNKinGFC\nCCGEEFKuUc4wIYQQQgghLqBgmHgV5XoROTQviByaF0QOzQuiNgqGCSGEEEJIpUU5w4QQQgghpFyj\nnGFCCCGEEEJc4NFg+NYtxpNvT8ohyvUicmheEDk0L4gcmhdEbR4Nhk+c4Dz59oQQQgghhLjFw8Ew\n78m3J+VQ165dfT0E4odoXhA5NC+IHJoXRG20MkwIIYQQQiotjwbDx49TMExKolwvIofmBZFD84LI\noXlB1ObRYDgjg0V6Om2iI4QQQggh/smjwXCrVhacPEmrw+QflOtF5NC8IHJoXhA5NC+I2jwcDAuU\nKkEIIYQQQvyWx4NhqihBiqNcLyKH5gWRQ/OCyKF5QdTm8TQJqihBCCGEEEL8FZOYmCh54o2vXr2K\nVq3aoX79qjh79h5CQjxxFUIIIYQQUtklJCQgKirKpXM9ujLM80CzZgJOn6bVYUIIIYQQ4n88GgwD\nhZvoKG+YWFGuF5FD84LIoXlB5NC8IGrzQjBMecOEEEIIIcQ/eTwYbt2ayquRf1B9SCKH5gWRQ/OC\nyKF5QdTm8WC4WTMBly9zMBg8fSVCCCGEEEKc4/FgWKcDGjUScOYMrQ4TyvUi8mheEDk0L4gcmhdE\nbR4PhoHC5hsUDBNCCCGEEP/ilWDYmjdMFSUI5XoReTQviByaF0QOzQuiNi+tDFNFCUIIIYQQ4n+8\nEgy3aCEgMZGD2eyNqxF/RrleRA7NCyKH5gWRQ/OCqM0rwXBQEFC3rojz52l1mBBCCCGE+A+vBMMA\n0Lq1heoNE8r1IrJoXhA5NC+IHJoXRG1eC4apogQhhBBCCPE3XlwZpmCYUK4XkUfzgsiheUHk0Lwg\navNaMNyypYBTp3iIoreuSAghhBBCiH1eC4arVpUQFibi0iWvXZL4Icr1InJoXhA5NC+IHJoXRG1e\njUwpb5gQQgghhPgTrwbD1ImOUK4XkUPzgsiheUHk0LwganMrGM7JyUHXrl2xZMkSRce3bGnByZO0\nMkwIIYQQQvyDW8HwV199hRYtWoBhGEXHW1eGOUiSO1cl5RnlehE5NC+IHJoXRA7NC6I2l4PhpKQk\npKeno0WLFpAURrc1a0oICACuXqVNdIQQQgghxPdcjko//fRTPP/8806f16qVBQkJlCpRWVGuF5FD\n84LIoXlB5NC8IGpzKRjevn076tevj9q1ayteFS704IMWbN2qceWyhBBCCCGEqMql0g4nTpzAli1b\nsG3bNmRkZIBlWdSsWRP9+/cvcdzUqVMRHR0NAKhSpQpatmyJ+Phu+PjjUOzatQ8cJxXl/hR+06PH\n9JgeV77Hhc/5y3joMT2mx/77uPA5fxkPPfbN48L/TklJAQBMmDABrmISExPd2s72xRdfICgoCM88\n80yJ569evYp27drJnvPggyH44IN8dOlicefShBBCCCGEICEhAVFRUS6d65OdbPHxZqxfT6kSlVHx\nb3SEFPL1vNCsWwfN77/7dAykLF/PC+KfaF4QtfHuvsFzzz3n9Dn9+pnwxBPBmDkzHwqrshFCiMdo\n/vwTTEYGLO3bQ4qM9PVwCCGEeJFPVoabNRPBccCpU1RVorIpnvNFSCFfzwv2/HnwBw6AP3TIp+Mg\nJfl6XhD/RPOCqM0nwTDDUKoEIcRPSBK4xERYOncGm5bm69EQQgjxMp91v+jXz4wNGygYrmwo14vI\n8eW8YFJTAUmC0KyZ9b+J36DPCyKH5gVRm8+C4Y4dLbh1i8WVK9SNjhDiO1xiIsQmTSDVqEErw4QQ\nUgn5LBLlOKBPH1odrmz8IderalgYkJ3t62GQYnw5L4QmTZD3/vsQw8JoZdjP+MPnBfE/NC+I2ny6\nLEupEsTrBAGMJIG9etXXIyF+QqpRA8J990GIjYWlQwdfD4cQQoiX+TQY7t7djBMneKSlUX21ysLX\nuV5MTg4AgL1+3afjICX5el4AgBgXB6MLpSKJ5/jDvCD+h+YFUZtPg+GAAKBnTzM2b6bVYeIlBekR\ngo3uiIQQQgipXNxux2yLvXbMxa1apcUff2jw/fe5nhgGIWVJEqjbCyGEEFJxlLt2zMX17m3G7t0a\n5OX5eiSk0qBAmBBCCCEFfB4MV60qoX17C3bsoFSJyoByvYgcX80LzW+/QTdvnk+uTRyjzwsih+YF\nUZvPg2HA2o3O1aoSbGIiVQYghLiEP3LEmjZT+HjrVrApKT4cESGEEG/zi2C4b18TNm/WwGJx/lz9\nl18iYMYM9QdFPILqQxI5vpoX3PnzEJs0KXqs+/57cEeO+GQspCz6vCByaF4QtflFMBwZKSE6WsTB\ng7zT5zLp6dBu3Aj2zBkPjIxUOEYjIAgIevppWgEkYBMTIcTGFj2WwsOpCx0hhFQyfhEMA9YGHOvX\nO58qwaSlwThmDBij0QOjImrzda5XwAcfQLdgAZj0dLDJyT4dC/mHT+ZFTg7Y1FSI9eoVPUVd6PyL\nrz8viH+ieUHU5jfBcHy8CRs2aIqn7ylinDYN+W+8AaFtW88MjFQoTGYmpCpVIEZFUa55JcddvAih\nYUNrb/gCUng4GFoZJoSQSsVvguGmTUWwLHD2rHNDMsfHQwoP99CoiNp8nevFZGZCCg2FGBlJwbAf\n8cW8EOLikLNyZYnnxPBwsLQy7Dd8/XlB/BPNC6I2vwmGGQZ46CELtm+nEmvEc5isLOvKcHQ0BcOV\nnVYLKTKyxFNCXBzM3br5aECEEEJ8wW+CYQB46CEzBcMVnK9zvZisLOvKcFQU2GvXfDoW8g9fz4tC\nYtOmMI0b5+thkAL+Mi+IB+TmIrRzZ5dOpXlB1OZXwXC3bmb8/TfvVjc6JjMTyMlRb1CkYrFYIFWp\nAkuHDsibP9/XoyGEkEqJS04Gl5horfBDiI/5VTAcGgq0bGnB/v3Ol1grFPDWW9AvXqziqIiafJ3r\nlb1rF8TGjYGgIIjR0T4dC/mHr+cF8U80Lyqw/HwAAHv7ttOn0rwgavOrYBhwLm+YO3wYulKBr+HZ\nZ6H7+uuiHzRCCCnD2bI1hBBVCffdB8t994G5edPXQyHEH4Nh5XnD3Jkz4E6eLPGc2KwZLO3bQ/fD\nD54YHnET5XoROd6eF5o1axA4bZpXr0mcR58XFZtp6FBIISFOn0fzgqjN74Lh1q0FpKUxuHaNcXgs\nm54OKSyszPOG6dOhmz8fMJs9MURCSDnHJSZCrFNH9jXNH3+AvXLFyyMiHmcyWf9H/IZx8mSIcXFO\nncPv2oW6O3d6ZkCk0vK7YJhlgZ49laVKMGlpEKtXL/O80KEDxHr1oF292hNDJG6gXC8ix9vzgjt/\nHkKTJrKvaX/5BdyxY14dD5Gn5rwI6dcPwUOHqvZ+xDeYtDS0uHDB18MgFYzfBcOA8lQJJi3NZsON\n/Pfeg9CsmdpDIx6i2bABvKe/7ZvNKF6qRPPrrwh4803PXpP4JS4xEWJsrOxrUlgYdaGrgPgjR8Bk\nZPh6GMRNYkwM2EuXfD0MUsH4ZTD84INm7N7Nw2KxfxyblgZRJk0CAIQ2bSC0auWB0RF32Mr14k6f\nBr9nj0evze/ejeAnn/znieBgcOfOefSaRBmv5gBaLGAvX4YQEyP7MnWh8x9qzguhcWPkUqUhv8Bk\nZoI7dMilc4WGDcFcvAiIovKT8vLAnTrl0vVI5eCXwXCtWhLq1hWRkMDZPc7w3HMQ2rTx0qiIJ4kR\nES6V2HFGYfe5QkJUFHWhq4TYa9es+cKBgbKv08pwBWQygU1Jgdiwoa9HQgBwR48iYOZM5887eBBB\nkybBFBwM9vp1xefpv/oKod27O309Unl4PRjWffkl+AMHHB6npMSapXt3SDVrqjU04gVyOYLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f51bf8b5f50>"
"<matplotlib.figure.Figure at 0x7fc180583f10>"
]
}
],
"prompt_number": 41
"prompt_number": 33
},
{
"cell_type": "markdown",
@@ -2119,7 +2139,7 @@
"###### Discussion\n",
"This is terrible! The output is not at all like a sin wave, except in the grossest way. With linear systems we could add extreme amounts of noise to our signal and still extract a very accurate result, but here even modest noise creates a very bad result.\n",
"\n",
"Very shortly after practioners began implementing Kalman filters they recognized the poor performance of them for nonlinear systems and began devising ways of dealing with it. Much of this book is devoted to this problem and its various solutions."
"Very shortly after practitioners began implementing Kalman filters they recognized the poor performance of them for nonlinear systems and began devising ways of dealing with it. Much of this book is devoted to this problem and its various solutions."
]
},
{
@@ -2134,7 +2154,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"This information in this chapter takes some time to assimulate. To truly understand this you will probably have to work through this chapter several times. I encourage you to change the various constants and observe the results. Convince yourself that Gaussians are a good representation of a unimodal belief of something like the position of a dog in a hallway. Then convince yourself that multiplying Gaussians truly does compute a new belief from your prior belief and the new measurement. Finally, convince yourself that if you are measuring movement, that adding the Gaussians correctly updates your belief. That is all the Kalman filter does. Even now I alternate between complacency and amazement at the results. \n",
"This information in this chapter takes some time to assimilate. To truly understand this you will probably have to work through this chapter several times. I encourage you to change the various constants and observe the results. Convince yourself that Gaussians are a good representation of a unimodal belief of something like the position of a dog in a hallway. Then convince yourself that multiplying Gaussians truly does compute a new belief from your prior belief and the new measurement. Finally, convince yourself that if you are measuring movement, that adding the Gaussians correctly updates your belief. That is all the Kalman filter does. Even now I alternate between complacency and amazement at the results. \n",
"\n",
"If you understand this, you will be able to understand multidimensional Kalman filters and the various extensions that have been make on them. If you do not fully understand this, I strongly suggest rereading this chapter. Try implementing the filter from scratch, just by looking at the equations and reading the text. Change the constants. Maybe try to implement a different tracking problem, like tracking stock prices. Experimentation will build your intuition and understanding of how these marvelous filters work."
]
@@ -2145,14 +2165,15 @@
"input": [],
"language": "python",
"metadata": {},
"outputs": []
"outputs": [],
"prompt_number": 33
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"author notes:\n",
" clean up the code - same stuff duplicated over and over - write a 'clean implemntation' at the end.\n",
"**author notes**:\n",
" clean up the code - same stuff duplicated over and over - write a 'clean implementation' at the end.\n",
" \n",
" "
]
+276
View File
@@ -0,0 +1,276 @@
{
"metadata": {
"name": "",
"signature": "sha256:df77e6367b272d34fe0d1178b053a99c258abca7195ecda99ac5a7e8e192c698"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Least Squares Filters"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#format the book\n",
"%matplotlib inline\n",
"from __future__ import division, print_function\n",
"import matplotlib.pyplot as plt\n",
"import book_format\n",
"book_format.load_style()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<style>\n",
"@import url('http://fonts.googleapis.com/css?family=Source+Code+Pro');\n",
"\n",
" div.cell{\n",
" width: 850px;\n",
" margin-left: 0% !important;\n",
" margin-right: auto;\n",
" }\n",
" div.text_cell code {\n",
" background: transparent;\n",
" color: #000000;\n",
" font-weight: 600;\n",
" font-size: 11pt;\n",
" font-style: bold;\n",
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
" }\n",
" h1 {\n",
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
"\t}\n",
"\t\n",
" div.input_area {\n",
" background: #F6F6F9;\n",
" border: 1px solid #586e75;\n",
" }\n",
"\n",
" .text_cell_render h1 {\n",
" font-weight: 200;\n",
" font-size: 30pt;\n",
" line-height: 100%;\n",
" color:#c76c0c;\n",
" margin-bottom: 0.5em;\n",
" margin-top: 1em;\n",
" display: block;\n",
" white-space: wrap;\n",
" } \n",
" h2 {\n",
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
" }\n",
" .text_cell_render h2 {\n",
" font-weight: 200;\n",
" font-size: 20pt;\n",
" font-style: italic;\n",
" line-height: 100%;\n",
" color:#c76c0c;\n",
" margin-bottom: 0.5em;\n",
" margin-top: 1.5em;\n",
" display: block;\n",
" white-space: nowrap;\n",
" } \n",
" h3 {\n",
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
" }\n",
" .text_cell_render h3 {\n",
" font-weight: 300;\n",
" font-size: 18pt;\n",
" line-height: 100%;\n",
" color:#d77c0c;\n",
" margin-bottom: 0.5em;\n",
" margin-top: 2em;\n",
" display: block;\n",
" white-space: nowrap;\n",
" }\n",
" h4 {\n",
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
" }\n",
" .text_cell_render h4 {\n",
" font-weight: 300;\n",
" font-size: 16pt;\n",
" color:#d77c0c;\n",
" margin-bottom: 0.5em;\n",
" margin-top: 0.5em;\n",
" display: block;\n",
" white-space: nowrap;\n",
" }\n",
" h5 {\n",
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
" }\n",
" .text_cell_render h5 {\n",
" font-weight: 300;\n",
" font-style: normal;\n",
" color: #1d3b84;\n",
" font-size: 16pt;\n",
" margin-bottom: 0em;\n",
" margin-top: 1.5em;\n",
" display: block;\n",
" white-space: nowrap;\n",
" }\n",
" div.text_cell_render{\n",
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
" line-height: 135%;\n",
" font-size: 110%;\n",
" width:750px;\n",
" margin-left:auto;\n",
" margin-right:auto;\n",
" text-align:justify;\n",
" text-justify:inter-word;\n",
" }\n",
" div.output_subarea.output_text.output_pyout {\n",
" overflow-x: auto;\n",
" overflow-y: scroll;\n",
" max-height: 300px;\n",
" }\n",
" div.output_subarea.output_stream.output_stdout.output_text {\n",
" overflow-x: auto;\n",
" overflow-y: scroll;\n",
" max-height: 300px;\n",
" }\n",
" code{\n",
" font-size: 70%;\n",
" }\n",
" .rendered_html code{\n",
" background-color: transparent;\n",
" }\n",
" ul{\n",
" margin: 2em;\n",
" }\n",
" ul li{\n",
" padding-left: 0.5em; \n",
" margin-bottom: 0.5em; \n",
" margin-top: 0.5em; \n",
" }\n",
" ul li li{\n",
" padding-left: 0.2em; \n",
" margin-bottom: 0.2em; \n",
" margin-top: 0.2em; \n",
" }\n",
" ol{\n",
" margin: 2em;\n",
" }\n",
" ol li{\n",
" padding-left: 0.5em; \n",
" margin-bottom: 0.5em; \n",
" margin-top: 0.5em; \n",
" }\n",
" ul li{\n",
" padding-left: 0.5em; \n",
" margin-bottom: 0.5em; \n",
" 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",
" font-weight: bold;\n",
" color:#447adb;\n",
" }\n",
" .rendered_html :link {\n",
" text-decoration: underline; \n",
" }\n",
" .rendered_html :hover {\n",
" text-decoration: none; \n",
" }\n",
" .rendered_html :visited {\n",
" text-decoration: none;\n",
" }\n",
" .rendered_html :focus {\n",
" text-decoration: none;\n",
" }\n",
" .rendered_html :active {\n",
" text-decoration: none;\n",
" }\n",
" .warning{\n",
" color: rgb( 240, 20, 20 )\n",
" } \n",
" hr {\n",
" color: #f3f3f3;\n",
" background-color: #f3f3f3;\n",
" height: 1px;\n",
" }\n",
" blockquote{\n",
" display:block;\n",
" background: #fcfcfc;\n",
" border-left: 5px solid #c76c0c;\n",
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
" width:680px;\n",
" padding: 10px 10px 10px 10px;\n",
" text-align:justify;\n",
" text-justify:inter-word;\n",
" }\n",
" blockquote p {\n",
" margin-bottom: 0;\n",
" line-height: 125%;\n",
" font-size: 100%;\n",
" }\n",
"</style>\n",
"<script>\n",
" MathJax.Hub.Config({\n",
" TeX: {\n",
" extensions: [\"AMSmath.js\"]\n",
" },\n",
" tex2jax: {\n",
" inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n",
" displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ]\n",
" },\n",
" displayAlign: 'center', // Change this to 'center' to center equations.\n",
" \"HTML-CSS\": {\n",
" styles: {'.MathJax_Display': {\"margin\": 4}}\n",
" }\n",
" });\n",
"</script>\n"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 1,
"text": [
"<IPython.core.display.HTML at 0x7fc878ec3d50>"
]
}
],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
}
],
"metadata": {}
}
]
}
+74 -74
View File
@@ -1,7 +1,7 @@
{
"metadata": {
"name": "",
"signature": "sha256:d8ea908d5b59d9a8c4f1a078ade573323053af449dbaae8931bf4ed5b0f2ed5e"
"signature": "sha256:4ee83971412602de6dab7c1f7b6fc956af7e0299b0236d72b70618cdd0155023"
},
"nbformat": 3,
"nbformat_minor": 0,
@@ -248,13 +248,13 @@
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 10,
"prompt_number": 1,
"text": [
"<IPython.core.display.HTML at 0x7f069011ef90>"
"<IPython.core.display.HTML at 0x7f81546a1d50>"
]
}
],
"prompt_number": 10
"prompt_number": 1
},
{
"cell_type": "heading",
@@ -270,7 +270,7 @@
"source": [
"The techniques in the last chapter are very powerful, but they only work in one dimension. The gaussians represent a mean and variance that are scalars - real numbers. They provide no way to represent multidimensional data, such as the position of a dog in a field. You may retort that you could use two Kalman filters for that case, one tracks the x coordinate and the other tracks the y coordinate. That does work in some cases, but put that thought aside, because soon you will see some enormous benefits to implementing the multidimensional case.\n",
"\n",
"In this chapter I am purposefully glossing over many aspects of the mathematics behind Kalman filters. If you are familiar with the topic you will read statements that you disagree with because they contain simplifications that do not necessarily hold in more general cases. If you are not familiar with the topic, expect some paragraphs to be somewhat 'magical' - it will not be clear how I derived a certaina result. I prefer that you develop an intuition for how these filters work through several worked examples. If I started by presenting a rigorous mathematical formulation you would be left scratching your head about what all these terms mean and how you might apply them to your problem. In later chapters I will provide a more rigorous mathematical foundation, and at that time I will have to either correct approximations that I made in this chapter or provide additional information that I did not cover here. "
"In this chapter I am purposefully glossing over many aspects of the mathematics behind Kalman filters. If you are familiar with the topic you will read statements that you disagree with because they contain simplifications that do not necessarily hold in more general cases. If you are not familiar with the topic, expect some paragraphs to be somewhat 'magical' - it will not be clear how I derived a certain result. I prefer that you develop an intuition for how these filters work through several worked examples. If I started by presenting a rigorous mathematical formulation you would be left scratching your head about what all these terms mean and how you might apply them to your problem. In later chapters I will provide a more rigorous mathematical foundation, and at that time I will have to either correct approximations that I made in this chapter or provide additional information that I did not cover here. "
]
},
{
@@ -332,17 +332,17 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, without explanation, here is the full equation for the multivarate normal distribution in $n$ dimensions.\n",
"Now, without explanation, here is the full equation for the multivariate normal distribution in $n$ dimensions.\n",
"\n",
"$$\\mathcal{N}(\\mu,\\,\\Sigma) = (2\\pi)^{-\\frac{n}{2}}|\\Sigma|^{-\\frac{1}{2}}\\, e^{ -\\frac{1}{2}(\\mathbf{x}-\\mu)'\\Sigma^{-1}(\\mathbf{x}-\\mu) }$$\n",
"\n",
"I urge you to not try to remember this function. We will program it in a Python function and then call it when we need to compute a specific value. However, if you look at it briefly you will note that it looks quite similar to the *univarate normal distribution* except it uses matrices instead of scalar values, and the root of $\\pi$ is scaled by $n$. Here is the *univariate* equation for reference:\n",
"I urge you to not try to remember this function. We will program it in a Python function and then call it when we need to compute a specific value. However, if you look at it briefly you will note that it looks quite similar to the *univariate normal distribution* except it uses matrices instead of scalar values, and the root of $\\pi$ is scaled by $n$. Here is the *univariate* equation for reference:\n",
"\n",
"$$ \n",
"f(x, \\mu, \\sigma) = \\frac{1}{\\sigma\\sqrt{2\\pi}} e^{{-\\frac{1}{2}}{(x-\\mu)^2}/\\sigma^2 }\n",
"$$\n",
"\n",
"If you are reasonably well-versed in linear algebra this equation should look quite managable; if not, don't worry! Let's just plot it and see what it looks like."
"If you are reasonably well-versed in linear algebra this equation should look quite manageable; if not, don't worry! Let's just plot it and see what it looks like."
]
},
{
@@ -361,7 +361,7 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f7147d7d310>"
"<matplotlib.figure.Figure at 0x7f8133cc8110>"
]
}
],
@@ -371,7 +371,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Here wwe have plotted a two dimentional multivariate Gaussian with a mean of $\\mu=[\\begin{smallmatrix}2\\\\17\\end{smallmatrix}]$ and a covariance of $\\Sigma=[\\begin{smallmatrix}8&0\\\\0&10\\end{smallmatrix}]$. The three dimensional shape shows the probability of for any value of (x,y) in the z-axis. I have projected just the variance for x and y onto the walls of the chart - you can see that they take on the normal Gaussian bell curve shape. You can also see that, as we might hope, that the curve for x is wider than the curve for y, which is explained by $\\sigma_x^2=10$ and $\\sigma_y^2=4$. Also, the highest point of the curve is centered over (2,17), the means for x and y. I hope this demystifies the equation for you. Any multivariate Gaussian will create this sort of shape. If we think of this as a the Gaussian for our dog's position in a two dimensional field, the z-value at each point of (x,y) indicates the probability of the dog being at that position. So, he has the highest probability of being at (2,17), a modest probability of being at (5,14), and a very low probability of being at (10,10).\n",
"Here we have plotted a two dimensional multivariate Gaussian with a mean of $\\mu=[\\begin{smallmatrix}2\\\\17\\end{smallmatrix}]$ and a covariance of $\\Sigma=[\\begin{smallmatrix}8&0\\\\0&10\\end{smallmatrix}]$. The three dimensional shape shows the probability of for any value of (x,y) in the z-axis. I have projected just the variance for x and y onto the walls of the chart - you can see that they take on the normal Gaussian bell curve shape. You can also see that, as we might hope, that the curve for x is wider than the curve for y, which is explained by $\\sigma_x^2=10$ and $\\sigma_y^2=4$. Also, the highest point of the curve is centered over (2,17), the means for x and y. I hope this demystifies the equation for you. Any multivariate Gaussian will create this sort of shape. If we think of this as a the Gaussian for our dog's position in a two dimensional field, the z-value at each point of (x,y) indicates the probability of the dog being at that position. So, he has the highest probability of being at (2,17), a modest probability of being at (5,14), and a very low probability of being at (10,10).\n",
"\n",
"We will discuss the mathematical description of covariances in the Kalman Filter math chapter. For this chapter we just need to understand the following.\n",
"\n",
@@ -390,7 +390,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"I have programmed the multivarate Gaussian equation and saved it in the file `stats.py` with the function name `multivariate_gaussian`. I am not showing the code here because I have taken advantage of the linear algebra solving apparatus of numpy to efficiently compute a solution - the code does not correspond to the equation in a one to one manner. If you wish to view the code, I urge you to either load it in an editor, or load it into this worksheet by putting `%load -s multivariate_gaussian stats.py` in the next cell and executing it with ctrl-enter. \n",
"I have programmed the multivariate Gaussian equation and saved it in the file `stats.py` with the function name `multivariate_gaussian`. I am not showing the code here because I have taken advantage of the linear algebra solving apparatus of numpy to efficiently compute a solution - the code does not correspond to the equation in a one to one manner. If you wish to view the code, I urge you to either load it in an editor, or load it into this worksheet by putting `%load -s multivariate_gaussian stats.py` in the next cell and executing it with ctrl-enter. \n",
"\n",
"However, please note that the Kalman filter equations incorporate this computation automatically; you will not be using this function very often in this book, so I would not spend a lot of time mastering this function unless it interests you."
]
@@ -399,7 +399,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
">As of version 0.14 scipy.stats has implemented the multivariate normal equation with the function `multivariate_normal()`. It implements a 'frozen' form where you set the mean and covariance once, and then calculate the probability for any number of values for x over any arbitrary number of calls. This is much more efficient then recomputing everything in each call. So, if you have version 0.14 or later you may want to substitute my function for the built in version. Use `scipy.version.version` to get the version number. I deliberately named my function `multivariate_gaussian()` to ensure it is never confused with the built in version. I will say that for a single call, where the frozen variables do not matter, mine consistantly runs faster as measured by the `timeit` function.\n",
">As of version 0.14 scipy.stats has implemented the multivariate normal equation with the function `multivariate_normal()`. It implements a 'frozen' form where you set the mean and covariance once, and then calculate the probability for any number of values for x over any arbitrary number of calls. This is much more efficient then recomputing everything in each call. So, if you have version 0.14 or later you may want to substitute my function for the built in version. Use `scipy.version.version` to get the version number. I deliberately named my function `multivariate_gaussian()` to ensure it is never confused with the built in version. I will say that for a single call, where the frozen variables do not matter, mine consistently runs faster as measured by the `timeit` function.\n",
"\n",
"> The <a href=\"http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html\">tutorial</a>[1] for the `scipy.stats` module explains 'freezing' distributions and other very useful features. As of this date, it includes an example of using the multivariate_normal function, which does work a bit differently from my function."
]
@@ -556,7 +556,7 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f71450e2a50>"
"<matplotlib.figure.Figure at 0x7f813109f9d0>"
]
}
],
@@ -600,7 +600,7 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f7144e55a10>"
"<matplotlib.figure.Figure at 0x7f8130f59810>"
]
}
],
@@ -620,7 +620,7 @@
"\\end{aligned}\n",
"$$ \n",
"\n",
"Let this be our current belief about the position of our dog in a field. In other words, we believe that he is positioned at (2,7) with a variance of $\\sigma^2=2$ for both x and y. The contour plot shows where we believe the dog is located with the '+' in the center of the ellipse. The ellipse shows the boundary for the $1\\sigma^2$ probability - points where the dog is quite likely to be based on our current knowledge. Of course, the dog might be very far from this point, as Gaussians allow the mean to be any value. For example, the dog could be at (3234.76,189989.62), but that has vanishing low probability of being true. Generally speaking displaying the $1\\sigma^2$ to $2\\sigma^2$ contour captures the most likely values for the distribution. An equivelent way of thinking about this is the circle/ellipse shows us the amount of error in our belief. A tiny circle would indicate that we have a very small error, and a very large circle indicates a lot of error in our belief. We will use this throughout the rest of the book to display and evaluate the accuracy of our filters at any point in time. "
"Let this be our current belief about the position of our dog in a field. In other words, we believe that he is positioned at (2,7) with a variance of $\\sigma^2=2$ for both x and y. The contour plot shows where we believe the dog is located with the '+' in the center of the ellipse. The ellipse shows the boundary for the $1\\sigma^2$ probability - points where the dog is quite likely to be based on our current knowledge. Of course, the dog might be very far from this point, as Gaussians allow the mean to be any value. For example, the dog could be at (3234.76,189989.62), but that has vanishing low probability of being true. Generally speaking displaying the $1\\sigma^2$ to $2\\sigma^2$ contour captures the most likely values for the distribution. An equivalent way of thinking about this is the circle/ellipse shows us the amount of error in our belief. A tiny circle would indicate that we have a very small error, and a very large circle indicates a lot of error in our belief. We will use this throughout the rest of the book to display and evaluate the accuracy of our filters at any point in time. "
]
},
{
@@ -688,7 +688,7 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAAF/CAYAAABKRQ+VAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHBpJREFUeJzt3XuMnXWBPvDnzLTTewstWCi2Fkq3sGX4lYpEERdYSUVi\nGy6imLo1alekird4zUaMlz+8IMSYuGtXg6iwSJRgu1kJIhdFDcZWoGhb5Latl7ZTp6U3WqYz8/vD\nZbTS6Tsgc873hc8nIeGdczrnS/N0+nDmOWca69ev7w8AALzAtbX6AAAAUALFGAAAohgDAEASxRgA\nAJIoxgAAkEQxBgCAJMmIVh/gKd3d3dm9e3erjwEAwPNYR0dHpk6detDbiinGu3fvzvz581t9DHia\nlStXZuHCha0+BhyUfFIq2aRUq1evHvQ2UwqosGHDhlYfAQYln5RKNqkjxRgAAKIYQ6Vzzjmn1UeA\nQcknpZJN6kgxhgpz5sxp9RFgUPJJqWSTOlKMocLdd9/d6iPAoOSTUskmdaQYAwBAFGOodMYZZ7T6\nCDAo+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy\n+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRU\nskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkd\nKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYA\nABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDF\nGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZ\nyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy\n+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRU\nskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkdKcYAABDFGCrZyVEy+aRUskkd\n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\nve992blzZzo6OvLBD34wp59++rM7McAL1K9+1Z6LLx6f7u6/fB3u7m7ks58dk6uvHp3rrtuVs8/e\n79ljgGdpSBvjz372s3nf+96X0aNHP6sH+dOf/pStW7dmzpw5+cMf/pBLLrkkP/7xjw+4j40xwOAe\ne6wtCxZMyNatg3+jb9So/tx66450dnrHIIDB/N0b45e+9KW59tprM2XKlDT+6qmIRqORCy+8sPLX\nT5kyJVOmTEmSTJs2LT09Penp6cnIkSOH8vAAL3j33tt+yFKcJPv2NXLrrR3p7PRTSQGejSFtjFet\nWpVjjz02M2fOzLHHHjvwz8yZM5/xA/7kJz/J3LlzlWJqw06OVtu/P7nmmo4h3fdrXxuVzZttKWg9\nXzupoyE9Yzxt2rQcd9xxmTx58tOeMX4murq68vnPfz5f+cpXDnr7smXLMmPGjCTJpEmT0tnZOfAj\nJZ/6A+batWvXL7TrNWvWZ/v2UzMUjz/eyIYNf8xvf/tQMed3/cK8fkop53H9wr1es2ZNHn/88STJ\nhg0bsnTp0gxmSBvjK6+8ctDbhvLiuyTZt29f3vrWt2bZsmUDh/1rNsYAB9fXl7ztbeOyYkX1s8bH\nHdebW2/dkcmTm3AwgBr6uzfGQy2/g+nv78/HPvaxvO51rztoKQZgcG1tyZIl+4ZUjN/73r1KMcCz\nNOT3MT6Ym266aUj3W7VqVW699dbceOONOf/883P++eenq6vr73loaJq//bYgtMI//mNvTjll/yHv\nM3VqX17xikPfB5rF107qaEjPGA/mgQceGNK7Upx66ql54IEH/p6HAnhBO+qo/ixfvjuXXjo2q1c/\n/cXLxxzTm+uv35Xjj/dWbQDP1qDF+I477sjZZ5+dJLntttsOep/e3t7hORUUxPyHUsya1Zfrrtud\ntWvbc/31HXn00fYceWRf/uVf9uWkk3ozfboffUc5fO2kjgYtxjt37hz495/85Cc5+eSTm3IgAAY3\ndWp/pk7dn7PO2p+9e5NRo+In3QE8RwYtxosWLRr49/b29lx00UVPu8+vf/3r4TkVFOTuu+/2zAdF\nGj1aPimXbFJHQ3rx3Rve8IaDfnywt7oAAIC6OeT7GH/5y1/O5Zdf3pSDeB9jAACG26Hex/iQzxhv\n27ZtWA4EAAClqZxSdHd3H/IfeL7zXpyUTD4plWxSR4d8H+Oenp5cffXVh/wEn/70p5/TAwLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f71450394d0>"
"<matplotlib.figure.Figure at 0x7f81312c3390>"
]
}
],
@@ -715,7 +715,7 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAAF/CAYAAABKRQ+VAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH7JJREFUeJzt3XuQ3nV9L/D3XrIJuZBAuAaNCUlIaFiMqJShUbSTQ5GD\nKZdSUTi0tYxgILWlKp4zI4r1j0rx7rSVsVYttuCMHEw6RwfkpilTKCBGJRtuYkBM2LCJud929/xB\nsxLzzWYfzT7Pb/d5vWaYye/ZdZ+PzHsfPvnue39Py+rVq/sDAABNrrXRAwAAQBVYjAEAIBZjAABI\nYjEGAIAkFmMAAEhiMQYAgCRJe6MH2Kunpydbt25t9BgAAIxyHR0dOfbYY/d7vDKL8datW3Paaac1\negwqZvny5Xn729/e6DGoGLmgRC4okQtKHn300eLjqhRU2po1axo9AhUkF5TIBSVyQS0sxgAAEIsx\nFbdo0aJGj0AFyQUlckGJXFALizGVNnfu3EaPQAXJBSVyQYlcUAuLMZW2YsWKRo9ABckFJXJBiVxQ\nC4sxAAAkaVm9enV/o4dIkueee87t2gAAGHaPPvpoXv3qV+/3uBNjAACIxZiK0w2jRC4okQtK5IJa\nWIwBACA6xgAANBkdYwAAGITFmErTDaNELiiRC0rkglpYjAEAIDrGAAA0GR1jAAAYhMWYStMNo0Qu\nKJELSuSCWliMAQAgOsYAADQZHWMAABiExZhK0w2jRC4okQtK5IJaWIwBACA6xgAANBkdYwAAGITF\nmErTDaNELiiRC0rkglpYjAEAIDrGAAA0GR1jAAAYhMWYStMNo0QuKJELSuSCWliMAQAgOsYAADQZ\nHWMAABiExZhK0w2jRC4okQtK5IJaWIwBACA6xgAANBkdYwAAGITFmErTDaNELiiRC0rkglpYjAEA\nIDrGAAA0GR1jAAAYhMWYStMNo0QuKJELSuSCWliMAQAgOsYAADQZHWMAABiExZhK0w2jRC4okQtK\n5IJaWIwBACA6xgAANBkdYwAAGITFmErTDaNELiiRC0rkglpYjAEAIDrGAAA0GR1jAAAYhMWYStMN\no0QuKJELSuSCWliMAQAgOsYAADQZHWMAABiExZhK0w2jRC4okQtK5IJaWIwBACA6xgAANJkDdYzb\nGzALAMCw6dnek66erry47cW0trRm5uSZmT1ldg4bc1ijR6Pi6lql2LJlSxYuXJgvf/nL9XxaRjDd\nMErkghK5oLevNw/8/IEsvn1xzvvmeXn3t9+dP/1/f5q3/NtbcuWdV+aJnicaPSIVV9fF+B//8R9z\nyimnpKWlpZ5PCwA0gQd+/kDO/7/n5/GXHt/n8f7059+f/vdcdMdFebLnyQZNx0hQt8X4mWeeSU9P\nT0455ZT091ei1swIsHDhwkaPQAXJBSVy0dzWbV2Xq797dfb07Tng5/x8y89zy+O3pK+/r46TMZLU\nbTH+1Kc+laVLl9br6QCAJrLqpVV5fvPzB/28L638Up7Z+EwdJmIkqstifM8992TGjBk5/vjjnRZT\nE51BSuSCErlobms2rRnS523fsz0vbntxmKdhpKrLXSlWrlyZO++8M3fffXc2bNiQ1tbWHHPMMTnv\nvPP2+bwlS5Zk+vTpSZLJkyens7Nz4Edje1/wXDfX9V5Vmcd1Na5/9KMfVWoe19W43qsq87iu73XL\nEUP//aVfbvxlckIqNb/r4X99WLFiRdasefkvUFdccUVK6n4f4y984QuZMGFC/uzP/myfx93HGAD4\nTa14fkUW3774oJ83qWNS7rvkvsycMrMOU1FV7mMMAIxY3du6c/2K67PqpVVJkj19e7J++/rs6duT\nD53xoZw/+/zMnjI7T218atCv894F782MyTPqMDEjUd3fEvqaa67Z77QYDuTXf0QKiVxQJhej27+t\n+rfc1nVbVnavzMrulXn8pcfz4rYX07OjJzf8xw05avxR+cL/+EIOaz/wm3jMPXJu3jHvHW4bywHV\nfTEGAKjVvCPnpb21/IPu2VNmJ0lOP/70LL9oed46/a37fHxs29i857XvydfP+7oKBYOqe8f4QHSM\nAYBft37b+nzhB1/Il374pWzbs22/jx8z/pg8eNmDmTxu8sBjW3dvzRM9T6R7W3daW1oz/fDpOXHK\niQdcrGk+OsYAwIhxsIU4STpaO3Lr4lv3WYqTZMKYCXndsa+rx5iMMqoUVJrOICVyQYlcjA7rt63P\nR//jo1nwlQX53COf22cpnn/U/LzxuDcOXH/8TR/PgmMWDPr15IJaODEGABpusBPi+UfNz3W/e13O\nPfHcPLnhydz00E05Y9oZeXfnuxs0LaOVjjEA0DBDXYhbW/yQm0NHxxgAqAwLMVUkbVSabhglckGJ\nXIwMB+sQf+1/fi33v/P+nDfrvEOyFMsFtXBiDAAMOyfEjAQ6xgDAsLEQU0U6xgBA3ViIGYmkkUrT\nDaNELiiRi2qod4f4YOSCWjgxBgB+a06IGQ10jAGA35iFmJFIxxgAOGQsxIxG0kql6YZRIheUyEV9\nVK1DfDByQS2cGAMAB+WEmGagYwwAHJCFmNFIxxgAGDILMc1Imqk03TBK5IISuTg0RlqH+GDkglo4\nMQYAnBBDdIwBoKlZiGlGOsYAwAALMexP2qk03TBK5IISuRia0dYhPhi5oBZOjAGgCTghhoPTMQaA\nUcxCDPvTMQaAJmIhhtr5bqDSdMMokQtK5OJlzdYhPhi5oBZOjAFgFHBCDL89HWMAGMEsxFA7HWMA\nGEUsxHDo+W6h0nTDKJELSpolFzrEtWmWXHBoODEGgBHACTEMPx1jAKgwCzEcejrGADCCWIih/nw3\nUWm6YZTIBSWjJRc6xIfWaMkF9eHEGAAqwAkxNJ6OMQA0kIUY6k/HGAAqxEIM1eO7jUrTDaNELigZ\nKbnQIa6vkZILqsGJMQDUgRNiqD4dYwAYRhZiqB4dYwCoIwsxjDy+G6k03TBK5IKSquRCh7haqpIL\nRgYnxgBwCDghhpFPxxgAfgsWYhh5dIwB4BCyEMPo47uVStMNo0QuKKlXLnSIRxavF9TCiTEADIET\nYhj9dIwBYBAWYhh9dIwBoAYWYmg+vpupNN0wSuSCkkOVCx3i0cXrBbVwYgwAcUIM6BgD0OQsxNB8\ndIwB4BUsxMCv891OpemGUSIXlAw1FzrEzcXrBbVwYgxAU3BCDByMjjEAI1ZPT0u6ulrzwgsvL7Ov\neU1f5s7tzeGH/+pzLMTAr2t4x3jDhg254oorsmfPnvT39+eqq67KueeeW6+nB2AU6etLHnqoLdde\nOz5dXfv+p+z003fnE5/Ylled1J3PP/p5CzEwZHVbjCdNmpRbbrklhx12WDZs2JBzzz0355xzTlpb\nvSBxYCtWrMjChQsbPQYVIxf813+15fzzJ2XXrpb9PvbQQ2Oy+KL2HPW/F+enW1ft8zELcfPxekEt\n6rYYt7e3p7395afbtGlTOjo66vXUAIwiPT3JBz4wvrgU77V52+5sfsVSbCEGhqKuv3y3devWXHLJ\nJVmzZk0++clPOi3moPwtnxK5aG6rV7flxz8+yH++dkxJbv9azr36zlxy2tkW4ibm9YJa1HUxnjBh\nQpYvX56nn346V111Vc4888yMHz++niMAMMKtXTvEBXfl/8qfHnF+Fs3aM7wDAaNGQ27XNmvWrEyb\nNi1PP/10Ojs7Bx5fsmRJpk+fniSZPHlyOjs7B/6mt/c+hK6b63rvY1WZx3U1rv/hH/7B60MTX2/f\nvi3JxAxFS0vj53Xt9cJ146/3/nnNmjVJkiuuuCIldbtd27p169LR0ZEjjjgi3d3dueiii/Ktb30r\nRxxxRBK3a6NsxQq/NMH+5KK5PfpoWxYtmpTkwB3jJOno6M/992/K3Ll99RmMSvJ6QUnDb9f2i1/8\nIh/+8IcHrj/0oQ8NLMVwIF7MKJGL5nbSSb0566w9uf/+MYN+3uWX78yJJ1qKm53XC2pRt8V4wYIF\nWb58eb2eDoBRauLE5OMf35Y//MNJ6ekp941nztyT97xnZ8YMvjsD7MOv6FJpr+wGwV5ywfz5fVm2\nbHPe+c6daWv7VSNw7Nj+XHXVjtx229bMnu20GK8X1KZuJ8YAcCj9zu/05dOf3pZrrtmRtWtbs2nT\nppx88sTMmtWXtrZGTweMRHX75buD8ct3AADUw4F++U6VAgAAYjGm4nTDKJELSuSCErmgFhZjAACI\njjEAAE1GxxgAAAZhMabSdMMokQtK5IISuaAWFmMAAIiOMQAATUbHGAAABmExptJ0wyiRC0rkghK5\noBYWYwAAiI4xAABNRscYAAAGYTGm0nTDKJELSuSCErmgFkNejHfv3p2nnnoqjz32WJJk+/bt2bFj\nx7ANBgAA9dQ+lE967rnn8q//+q+ZMGFCenp6smDBgjzzzDNZuXJl3vnOdw73jDSxhQsXNnoEKkgu\nKJELSuSCWgzpxHjZsmW54IILcs0116S19eX/yZw5c/Lss88O52wAAFA3Q1qMN27cmDlz5uzzWFtb\nW/r6+oZlKNhLN4wSuaBELiiRC2oxpMX42GOPzSOPPLLPY6tWrcrxxx8/LEMBAEC9Dek+xmvXrs1X\nvvKVTJo0KS+++GJOPPHErFu3LpdffnmOO+64QzKI+xgDAFAPB7qP8ZB++e64447LX/3VX6Wrqyub\nNm3K5MmTM3fu3IwdO/aQDwoAAI0w5Nu1tbW1ZebMmens7Mz06dOzffv2bNy4cThnA90wiuSCErmg\nRC6oxZBOjO+4446sXLky48aNG7grxV7vf//7h2UwAACopyEtxl1dXfngBz+YcePGDfc8sA/3n6RE\nLiiRC0rkgloMaTF+/etfn69+9auZOnVqWlpaBh5vaWnJhRdeOGzDAQBAvQypY/zII49k5sLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f7144f24d90>"
"<matplotlib.figure.Figure at 0x7f81310d29d0>"
]
}
],
@@ -742,7 +742,7 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f7144fc46d0>"
"<matplotlib.figure.Figure at 0x7f813124c190>"
]
}
],
@@ -773,7 +773,7 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAswAAAF/CAYAAABdZ59cAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VPW5P/DPOTOTSUIWyAoJWSGAAgLBBTUKKi4gVK1c\nxLZqtVqvy3Wptr+2ti7tvba9rdZarVZ7rdjbQttb9wqKgmBksRIWQYGwZGHJTkhCMts55/fHN2fO\nnJnJGMZJ5ox83q8XLzJMAgd9OHnO832+z1favXu3BiIiIiIiCkuO9wUQEREREVkZE2YiIiIiogiY\nMBMRERERRcCEmYiIiIgoAibMREREREQRMGEmIiIiIorAHu8LiKSjowPHjx+P92UQERER0ZdcUlIS\n8vPzw75n6YT5+PHjqKysjPdlEIX1xhtvYOHChfG+DKIQjE2yMsYnWVVNTc2A77ElgyhKDQ0N8b4E\norAYm2RljE9KREyYiYiIiIgiYMJMFKW5c+fG+xKIwmJskpUxPikRMWEmitLEiRPjfQlEYTE2ycoY\nn5SImDATRam6ujrel0AUFmOTrIzxSYmICTMRERERUQRMmImiVFVVFe9LIAqLsUlWxvikRMSEmYiI\niIgoAibMRFFiHx5ZFWOTrIzxSYmICTMRERERUQRMmImixD48sirGJlkZ45MSERNmIiIiIqIImDAT\nRYl9eGRVjE2yMsYnJSImzEREREREETBhJooS+/DIqhibZGWMT0pETJiJiIiIiCJgwkwUJfbhkVUx\nNsnKGJ+UiJgwExERERFFwISZKErswyOrYmySlTE+KRExYSYiIiIiioAJM1GU2IdHVsXYJCtjfFIi\nYsJMRERERBQBE2aiKLEPj6yKsUlWxvikRMSEmYiIiIgogmFJmH/xi1/g3HPPxcKFC/2/9tZbb+HS\nSy/FpZdeijVr1gzHZRDFFPvwyKoYm2RljE9KRMOSMF9yySX4/e9/73/t8Xjw2GOPYdmyZXjxxRfx\n6KOPDsdlEBERERGdsGFJmGfMmIGRI0f6X2/fvh0VFRXIysrCmDFjMHr0aOzatWs4LoUoZtiHR1bF\n2CQrY3xSIrLH4w9tbW1Fbm4uli9fjszMTOTm5qKlpQWTJk2Kx+UQEREREQ0oLgmzbsmSJQCAVatW\nQZKksJ9z++23o7i4GACQmZmJqVOn+p9O9T4ovubreLx+5plnGI98bcnXgT2iVrgevuZrxidfW/G1\n/nFDQwMA4Oabb8ZApN27d2sDvhtDBw8exG233YY33ngDmzdvxvPPP49nn30WAHDdddfhgQceCKkw\nNzY2orKycjguj+iEVVdX+//xEVkJY5OsjPFJVlVTU4OioqKw79mH+VoAAFOnTkVtbS06OjrgdrvR\n3NzMdgxKOLzhk1UxNsnKGJ+UiIYlYX7kkUewatUqdHZ2Yvbs2XjooYdw33334dprrwUA/PCHPxyO\nyyAiIiIiOmHD1pIRDbZkkJVxWZGsirFJVsb4JKuK1JLBk/6IiIiIiCJgwkwUJVZIyKoYm2RljE9K\nREyYiYiIiIgiYMJMFKXAOY5EVsLYJCtjfFIiYsJMRERERBQBE2aiKLEPj6yKsUlWxvikRMSEmYiI\niIgoAibMRFFiHx5ZFWOTrIzxSYmICTMRERERUQRMmImixD48sirGJlkZ45MSERNmIiIiIqIImDAT\nRYl9eGRVjE2yMsYnJSImzEREREREETBhJooS+/DIqhibZGWMT0pETJiJiIiIiCJgwkwUJfbhkVUx\nNsnKGJ+UiJgwExERERFFwISZKErswyOrYmySlTE+KRExYSYiIiIiioAJM1GU2IdHVsXYJCtjfFIi\nYsJMRERERBQBE2aiKLEPj6yKsUlWxvikRMSEmYiIiIgoAibMRFFiHx5ZFWOTrIzxSYmICTMRERER\nUQRMmImixD48sirGJlkZ45MSERNmIiIiIqIImDATRYl9eGRVjE2yMsYnJSImzEREREREETBhJooS\n+/DIqhibZGWMT0pETJiJiIiIiCJgwkwUJfbhkVUxNsnKGJ+UiJgwExERERFFwISZKErswyOrYmyS\nlTE+KRExYSYiIiIiioAJM1GU2IdHVsXYJCtjfFIiYsJMRERERBQBE2aiKLEPj6yKsUlWxvikRMSE\nmYiIiIgoAibMRFFiHx5ZFWOTrIzxSYmICTMRERERUQRMmImixD48sirGJlkZ45MSERNmIiIiIqII\nmDATRYl9eGRVjE2yMsYnJSImzEREREREETBhJooS+/DIqhibZGWMT0pETJiJiIiIiCJgwkwUJfbh\nkVUxNsnKGJ+UiJgwExERERFFwISZKErswyOrYmySlTE+KRExYSYiIiIiioAJM1GU2IdHVsXYJCtj\nfFIissf7Ap566imsWLECADBv3jzceeedcb4iIiIiIiJDXBPmxsZGvPbaa3j77behKArmzZuHq666\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f7144f74a90>"
"<matplotlib.figure.Figure at 0x7f81311ac950>"
]
}
],
@@ -840,7 +840,7 @@
"output_type": "display_data",
"png": "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\nqlWrNGvWLG3atEl/+9vfXMb67LPP1KBBA3300Ue6++679Ze//EU///xzqecKeDMCMOABr776quLj\n49WwYcNi2x6mTp2q9u3bq06dOmrRooUGDhxYZBfqUurXr6/IyEi1atVKDRo0UGRkpFq2bKmDBw9K\nOtdG8dxzz6lVq1aqXbu22rVrp169ehV5nqpVq+ovf/mL6tatq4ceekhVq1bVnj17yvw5P/vss2re\nvLnzvwkTJjjv8/PzU1hYmEJCQso8bqHQ0FBdc8018vHxce6+hoWFqUqVKpKkU6dO6a233tLEiRPV\nqVMn1alTR3/84x916623FttbfMstt2j06NGqX7++cwf2cuTk5GjZsmXav3+/2rVrV+T+Ll26aPDg\nwapXr55atWqlTp06SZLmzp2rESNGqGfPnrr++uvVrVs39e7dW++9954kKSEhQb/88oueeeYZ1a9f\nXz179lSvXr2K/KBRo0YNXXPNNSXOb+nSpQoMDNQrr7yiW265RQ0aNNB9992n1q1bSzpX/2uuuUaV\nKlVy1uniWjkcDoWFhSk0NLTY5zh58qQ+/vhjjRkzRi1bttTNN9+sadOmKTk52RkSC40fP1433XST\nOnTooDZt2lzW11ppPPnkk2rUqJHatm2rIUOGaNmyZZKkEydOKD4+XqNHj1bTpk3VvHlzjR492uWx\npVk7YWFhztf9wt9+VKpUSZL0888/65NPPtELL7ygVq1aKSIiQqNGjVKtWrX073//u9Sfx7PPPqsd\nO3aobdu2GjZsmP7+97/r6NGjzvsL10KVKlWcLSoX12rx4sVq06aNRo0apbp16yo6OlqjRo0qsi7q\n1aun0aNH64YbbnCeu3z58lLPFfBm9AADHlClShXNnTtXjz32mFasWKE//vGPLvd/9tlneuutt5Sc\nnKxTp04pLy+v2N1Ddwr/oQ0MDFRAQIDztqysLOc5y5cv1/Lly5WWlqYzZ84oJydH1113ncs4ERER\nLjt6ISEh+u2338o0F0kaM2aM7rjjDudxYTC9Wn744QedPXtWEydO1FNPPeW8PScnp9jzo6Ojr+j5\nFixYoDfeeENnz55VYGCgHnnkEf3pT38q1fMcPXpUhw8f1quvvuqyq5iTk6M6depIkpKTk1W9enWX\ncNuoUaMyz3Pv3r2Kiopyfo2Uh9TUVOXl5bm8Qe26665TtWrVnK0WhS7caa9evXq5XfHj5ptvdn7c\nsGFDHTt2TCdPntSBAweUl5fn8loW97qWZu248+2330qSSyuJdK4tIjU1tdTjxMTEaOPGjdq6dau2\nb9+uZcuWaeHChVqyZEmpvx6+/fZbpaSkqHnz5s7b8vPzdfbsWWVkZDh/K9GwYUOXxzVs2LBI/QBT\nEYABD3jkkUcUGxur//3f/9WLL76o1q1bq169epKk3bt36/HHH9fjjz+u9u3bKygoSKtWrdKrr77q\nkecu3CFcs2aNpk+frqefflrNmjVTYGCgFi1aVGRHztfXt8QxyiIsLEwRERGXN2kPmj17turXr+9y\nW+EPCxe60jcQDRw4UEOGDHHuwJXE3fNMmjRJbdu2dbnNz8+z34YdDkep63k1rjji4+P6i8ayfK25\ne20uvq+kz6U0n2Np105pLF26VEFBQS63XXx8KYGBgerSpYu6dOmi8ePH66677tKbb76pGTNmlOrx\nDodDffv21YgRI4rcd/EbVQG7IgADHlD4j+yf//xnbdiwQX/5y1+0dOlS+fr6aseOHbr55pv10EMP\nOc8/dOhQsf8wV6lSxWVHtyy+/PJLxcTEuOw+Hzx40NKXVSvcNXZ3NQh/f/9id8vr16+vgIAApaWl\nOdsMylO1atUuO/CHhYXp2muvVUpKiu69995iz7nhhhv022+/uezQJSUllbl+f/jDH7Ry5UqdPXvW\n7S5wSa9radSpU0c+Pj7au3evbrrpJklSWlqajh8/rrp167p9bFk+n8IfJrKyshQYGChJzjfRXfyD\nRlJSkqKioiRJ+/fvV2hoqKpWrao6derI19dXSUlJatCggfPcC5Vl7fj5+RX7uhW+Qe7w4cPq2LFj\nqT/HS/Hz89P1119f5M2D/v7+RfqtL5zL999/f8mv18I30F54zKXVYBf0AAMe5Ofnp5kzZ2rv3r3O\nX3XXr19fP/74o/7zn/8oNTVV77zzjj799NNid8KaNm2qvXv3asuWLcrIyNCpU6dK/dz169fXjh07\ntH37dv3888+aM2eOvvrqqwq5rFphkCu8dunRo0eVkZGhkydPupxXo0YNXX/99Xr33Xd16NAhl17H\nQjfeeKO2bt2q9PR0ZWdnO//Rr1q1qoYMGaJXXnlF//rXv5SSkqJdu3Zp9uzZWrNmTfl/kmU0YsQI\nLVmyREuWLNFPP/2kxMRELV682PmmsJiYGF1//fXON2ytXr1an3zyicsYp0+fVkZGhjIyMiLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f7144e72b90>"
"<matplotlib.figure.Figure at 0x7f81312c30d0>"
]
}
],
@@ -858,7 +858,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The brilliance of the Kalman filter is taking the insights of the chapter up to this point and finding an optimal mathematical solution. The Kalman filter finds what is called a *least squared fit* to the set of measurements to produce an optimal output. We will not trouble ourselves with the derivation of these equations. It runs to several pages, and offers a lot less insight than the words above, in my opinion. Furthermore, to create a Kalman filter for your application you will not be manipulating these equations, but only specifing a number of parameters that are used by them. It would be going too far to say that you will never need to understand these equations; but to start we can pass them by and I will present the code that implements them. So, first, let's see the equations. \n",
"The brilliance of the Kalman filter is taking the insights of the chapter up to this point and finding an optimal mathematical solution. The Kalman filter finds what is called a *least squared fit* to the set of measurements to produce an optimal output. We will not trouble ourselves with the derivation of these equations. It runs to several pages, and offers a lot less insight than the words above, in my opinion. Furthermore, to create a Kalman filter for your application you will not be manipulating these equations, but only specifying a number of parameters that are used by them. It would be going too far to say that you will never need to understand these equations; but to start we can pass them by and I will present the code that implements them. So, first, let's see the equations. \n",
"> Kalman Filter Predict Step:\n",
"\n",
"> $$\n",
@@ -947,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Before we go any further let's gain some familarity with the equations by programming them in Python. I have written a production quality implementation of the Kalman filter equations in my `filterpy` library, and we will be using that later in the chapter and the remainder of the book. We could just look at that code, but it contains a significant amount of code to ensure that the computations are numerically stable, that you do not pass in bad data, and so on. Let's just try to program this.\n",
"Before we go any further let's gain some familiarity with the equations by programming them in Python. I have written a production quality implementation of the Kalman filter equations in my `filterpy` library, and we will be using that later in the chapter and the remainder of the book. We could just look at that code, but it contains a significant amount of code to ensure that the computations are numerically stable, that you do not pass in bad data, and so on. Let's just try to program this.\n",
"\n",
"The filter equations are *linear algebra* equations, so we will use the Python library that implements linear algebra - `numpy`. In the filter equations a **bold** variable denotes a matrix. Numpy provides two types to implement matrices: `numpy.array` and `numpy.matrix`. You might suspect that the latter is the one we want to use. As it turns out `numpy.matrix` does support linear algebra well, except for one problem - most of the rest of `numpy` uses `numpy.array`, not `numpy.matrix`. You can pass a `numpy.matrix` into a function, and get a `numpy.array` back as a result. Hence, the standard advice is that `numpy.matrix` is deprecated, and you should always use `numpy.array` even when `numpy.matrix` is more convienent. I ignored this advice in a early version of this code and ended up regretting that choice, and so now I use 'numpy.array' only.\n",
"The filter equations are *linear algebra* equations, so we will use the Python library that implements linear algebra - `numpy`. In the filter equations a **bold** variable denotes a matrix. Numpy provides two types to implement matrices: `numpy.array` and `numpy.matrix`. You might suspect that the latter is the one we want to use. As it turns out `numpy.matrix` does support linear algebra well, except for one problem - most of the rest of `numpy` uses `numpy.array`, not `numpy.matrix`. You can pass a `numpy.matrix` into a function, and get a `numpy.array` back as a result. Hence, the standard advice is that `numpy.matrix` is deprecated, and you should always use `numpy.array` even when `numpy.matrix` is more convienient. I ignored this advice in a early version of this code and ended up regretting that choice, and so now I use 'numpy.array' only.\n",
"\n",
"`numpy.array` implements a any-dimensional array. You can construct it with any list like object. The following constructs a 1-D array from a list:"
]
@@ -975,7 +975,7 @@
]
}
],
"prompt_number": 11
"prompt_number": 16
},
{
"cell_type": "markdown",
@@ -1004,7 +1004,7 @@
]
}
],
"prompt_number": 12
"prompt_number": 17
},
{
"cell_type": "markdown",
@@ -1033,13 +1033,13 @@
]
}
],
"prompt_number": 13
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can perform matrix addition with the `+` operator, but matrix multiplication requires the `dot` method or function. The `*` operator performs elementwise multiplication, which is **not** what you want for linear algebra."
"You can perform matrix addition with the `+` operator, but matrix multiplication requires the `dot` method or function. The `*` operator performs element-wise multiplication, which is **not** what you want for linear algebra."
]
},
{
@@ -1074,7 +1074,7 @@
]
}
],
"prompt_number": 18
"prompt_number": 19
},
{
"cell_type": "markdown",
@@ -1106,7 +1106,7 @@
]
}
],
"prompt_number": 19
"prompt_number": 20
},
{
"cell_type": "markdown",
@@ -1141,7 +1141,7 @@
]
}
],
"prompt_number": 24
"prompt_number": 21
},
{
"cell_type": "markdown",
@@ -1294,7 +1294,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 27
"prompt_number": 22
},
{
"cell_type": "markdown",
@@ -1304,7 +1304,7 @@
"\n",
" dog_filter.R = 3\n",
" \n",
"and the class will recognize that $R$ is actually supposed to be a matrix and conver the $3$ into an appropriate matrix (we don't yet know what an 'appropriate' matrix for $R=3$ would be, but we will learn that soon).\n",
"and the class will recognize that $R$ is actually supposed to be a matrix and convert the $3$ into an appropriate matrix (we don't yet know what an 'appropriate' matrix for $R=3$ would be, but we will learn that soon).\n",
"\n",
"You can import the class using the following Python:"
]
@@ -1318,7 +1318,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 25
"prompt_number": 23
},
{
"cell_type": "heading",
@@ -1450,7 +1450,7 @@
"\n",
"which is our equation for computing the new position based on velocity, time, and the previous position.\n",
"\n",
"Now we have to account for the second row. I've let it somewhat unstated up to now, but we are assuming constant velocity for this problem. Naturally this assumption is not true; if our dog moves it must accelerate and deaccelerate. If you cast your mind back to the *g-h Filter* chapter we explored the effect of assuming constant velocity. So long as the acceleration is small compared to $\\Delta t$ the filter will still perform well. \n",
"Now we have to account for the second row. I've let it somewhat unstated up to now, but we are assuming constant velocity for this problem. Naturally this assumption is not true; if our dog moves it must accelerate and decelerate. If you cast your mind back to the *g-h Filter* chapter we explored the effect of assuming constant velocity. So long as the acceleration is small compared to $\\Delta t$ the filter will still perform well. \n",
"\n",
"Therefore we will assume that\n",
"\n",
@@ -1472,7 +1472,7 @@
"\\end{aligned}\n",
"$$\n",
"\n",
"In the vocabulary of Kalman filters we call this *transforming the state matrix*. We take our state matrix, which for us is $(\\begin{smallmatrix}x \\\\ \\dot{x}\\end{smallmatrix})$, and multipy it by a matrix we will call $\\mathbf{F}$ to compute the new state. In this case, $\\mathbf{F}=(\\begin{smallmatrix}1&1\\\\0&1\\end{smallmatrix})$. \n",
"In the vocabulary of Kalman filters we call this *transforming the state matrix*. We take our state matrix, which for us is $(\\begin{smallmatrix}x \\\\ \\dot{x}\\end{smallmatrix})$, and multiply it by a matrix we will call $\\mathbf{F}$ to compute the new state. In this case, $\\mathbf{F}=(\\begin{smallmatrix}1&1\\\\0&1\\end{smallmatrix})$. \n",
"\n",
"\n",
"You will do this for every Kalman filter you ever design. Your state matrix will change depending on how many state random variables you have, and then you will create $\\mathbf{F}$ so that it updates your state based on whatever the physics of your problem dictates. $\\mathbf{F}$ is always a matrix of constants. Each row in $\\mathbf{F}$ is If this is not fully clear, don't worry, we will do this many times in this book."
@@ -1523,7 +1523,7 @@
"\n",
"$$\\textbf{y} := \\mathbf{z} - \\mathbf{H x^-} \\;\\;\\;(3)$$\n",
"\n",
"where $\\textbf{y}$ is the residual, $\\mathbf{x^-}$ is the predicted value for $\\mathbf{x}$, $\\textbf{z}$ is the measurement, and $\\textbf{H}$ is the measurement function. It is just a matrix that we multipy the state into to convert it into a measurement.\n",
"where $\\textbf{y}$ is the residual, $\\mathbf{x^-}$ is the predicted value for $\\mathbf{x}$, $\\textbf{z}$ is the measurement, and $\\textbf{H}$ is the measurement function. It is just a matrix that we multiply the state into to convert it into a measurement.\n",
"\n",
"For our dog tracking problem we have a sensor that measures position, but no sensor that measures velocity. So for a given state $\\mathbf{x}=\\begin{bmatrix}x & \\dot{x}\\end{bmatrix}^T$ we will want to multiply the position $x$ by 1 to get the corresponding measurement of the position, and multiply the velocity $\\dot{x}$ by 0 to get the corresponding measurement of velocity (of which there is none).\n",
"\n",
@@ -1568,7 +1568,7 @@
"\n",
"What is *process noise*? Consider the motion of a thrown ball. In a vacuum and with constant gravitational force it moves in a parabola. However, if you throw the ball on the surface of the earth you will also need to model factors like rotation and air drag. However, even when you have done all of that there is usually things you cannot account for. For example, consider wind. On a windy day the ball's trajectory will differ from the computed trajectory, perhaps by a significant amount. Without wind sensors, we may have no way to model the wind. The Kalman filter models this as *process noise*, and calls it $\\mathbf{Q}$.\n",
"\n",
"Astute readers will realize that we can inspect the ball's path and extract wind as an unobserved state variable, but the point to grasp here is there will always be some unmodelled noise in our process, and the Kalman filter gives us a way to model it.\n",
"Astute readers will realize that we can inspect the ball's path and extract wind as an unobserved state variable, but the point to grasp here is there will always be some unmodeled noise in our process, and the Kalman filter gives us a way to model it.\n",
"\n",
"Designing the process noise matrix can be quite demanding, and we will put it off until the Kalman math chapter. In this chapter we will focus on building an intuitive understanding on how modifying this matrix alters the behavior of the filter. \n",
"\n",
@@ -1588,7 +1588,7 @@
" \n",
"$\\mathbf{P}$ is dimensioned $n\\times n$, so $\\mathbf{Q}$ must have the same dimensions. We are just adding matrices, so hopefully it is clear that each element in $\\mathbf{Q}$ specifies how much uncertainty is added to the system due to the process noise. We have not given the math for this yet, but if you suspect the math is difficult you would be correct. \n",
"\n",
"Fortunately you can get a long way with approximations. The filtered result will not be optimal, but in my opinion the promise of optimal results from Kalman filters is mostly wishful thinking. Consider, for example, tracking a car. In that problem the process noise would include things like potholes, wind gusts, changing drag due to turning, rolling down windows, and many more factors. We cannot realistically model that analytically, and so in practice we work out a simplified model, compute $\\mathbf{Q}$ based on that simplied model, and then add *a bit* to $\\small\\mathbf{Q}$ in hopes of taking the uncalculable factors into account. Then we use a lot of simulations and trial runs to see if the filter behaves well; if it doesn't we adjust $\\small\\mathbf{Q}$ until the filter performs well. In this chapter we will focus on forming an intuitive understanding on how adjusting $\\small\\mathbf{Q}$ affects the output of the filter. In the Kalman Filter Math chapter we will discuss the analytic computation of $\\small\\mathbf{Q}$, and also provide code that will compute it automatically for you.\n",
"Fortunately you can get a long way with approximations. The filtered result will not be optimal, but in my opinion the promise of optimal results from Kalman filters is mostly wishful thinking. Consider, for example, tracking a car. In that problem the process noise would include things like potholes, wind gusts, changing drag due to turning, rolling down windows, and many more factors. We cannot realistically model that analytically, and so in practice we work out a simplified model, compute $\\mathbf{Q}$ based on that simplified model, and then add *a bit* to $\\small\\mathbf{Q}$ in hopes of taking the uncalculable factors into account. Then we use a lot of simulations and trial runs to see if the filter behaves well; if it doesn't we adjust $\\small\\mathbf{Q}$ until the filter performs well. In this chapter we will focus on forming an intuitive understanding on how adjusting $\\small\\mathbf{Q}$ affects the output of the filter. In the Kalman Filter Math chapter we will discuss the analytic computation of $\\small\\mathbf{Q}$, and also provide code that will compute it automatically for you.\n",
"\n",
"For our first example, we will set the diagonal of $\\small\\mathbf{Q}$ to a small value, and the off-diagonal terms to zero. This is typically not a particularly good choice for a real filter, but it is enough for us to begin forming an understanding of the performance of the filter for various values of $\\small\\mathbf{Q}$. \n",
"\n",
@@ -1622,7 +1622,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 31
"prompt_number": 24
},
{
"cell_type": "markdown",
@@ -1647,7 +1647,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 32
"prompt_number": 25
},
{
"cell_type": "markdown",
@@ -1743,7 +1743,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 33
"prompt_number": 26
},
{
"cell_type": "markdown",
@@ -1813,7 +1813,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 34
"prompt_number": 27
},
{
"cell_type": "markdown",
@@ -1834,9 +1834,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f71450a4b10>"
"<matplotlib.figure.Figure at 0x7f8131154ed0>"
]
},
{
@@ -1844,11 +1844,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f7144e80910>"
"<matplotlib.figure.Figure at 0x7f8133cc8110>"
]
}
],
"prompt_number": 20
"prompt_number": 28
},
{
"cell_type": "markdown",
@@ -1919,7 +1919,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 22
"prompt_number": 29
},
{
"cell_type": "markdown",
@@ -1948,7 +1948,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 23
"prompt_number": 30
},
{
"cell_type": "markdown",
@@ -2006,9 +2006,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAAF9CAYAAAAHja6eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd0lHUaxfHvTCa9QSCQ0FVAlKICVoKURSBRBFEw6AqI\nKEixgSvFXukCdlFhUQRBBWQNvUdQKQooIigqBBQSWvpMpuwfCqtSlgyT/DKZ+zlnz/KGKU/uGfXJ\nmzvvWL7//nsPIiIiIiIBzmp6ABERERGRskCLsYiIiIgIWoxFRERERAAtxiIiIiIigBZjERERERFA\ni7GIiIiICKDFWEREREQE0GIsIuJzdrudF198keuuu44mTZrQqlUrHnzwQY4dO/aX27300ku0bdv2\nnJ7riy++oEGDBuzfv/+cHkdERMBmegARkfLmueee47PPPuPJJ5/kggsuYN++fSxcuJCCggJiY2NL\n5Dk9Hn1Wk4jIubLok+9ERHzryiuvZNCgQdxxxx2n/PuXXnqJV1555aSvV69eneXLlwOwe/duxo4d\ny7Zt2zh27Bg1atSgT58+dOvWDfj9THGvXr1O+fgrVqygWrVqABw4cIAXXniBdevWYbFYuOKKK3j0\n0UepWrWqL75VEZFyRYuxiIiPtWvXjvr16zN+/HjCw8NP+vv8/HwKCgp46623WLhwIR999BEAVquV\nihUrArBx40Y2btxIixYtiIuLY926dTz++ONMmTKFpKQkioqKyM7OZvPmzQwePJgPP/yQxMREACpW\nrIjVaiU/P58uXbpw0UUXMXDgQIKCgpg4cSL79u3jo48+wmKxlF4oIiJ+QFUKEREfe+KJJxg6dChX\nX301TZs2JSkpic6dO1OpUiUAIiIiTvzParWe+PqfNW/enObNm5847tatGzNnzmTVqlUkJSURHBxM\npUqViImJASAuLu6kx/n00085evQo48aNIzg4GIDHH3+cli1bsm3bNpo0aVJSEYiI+CUtxiIiPtay\nZUtWr17NunXr2LBhA7NmzeKNN95g+vTpXHjhhWf1GAUFBbz66qusXLmSgwcPUlRUhN1u56KLLjrr\nOb799ltyc3O54oor/vJ1i8XC3r17tRiLiPyNFmMRkRIQFhZG27Ztadu2LUOGDKFr165MnTqVUaNG\nndX9x4wZw/r163nkkUeoU6cOQUFB3Hfffbjd7mLNcf755/Paa6+d9PW4uLhiPY6ISCDQYiwiUsJs\nNhvVq1cnPz//L18PDg7G5XKd8j4bN27kjjvuoE2bNsDvZ5D37dt30hnj4xWJUz1Ow4YNmT9/PlFR\nUSe6yyIicnq6jrGIiI/de++9zJ49mx07drBnzx5mzJjB2rVrad269V9ud95555GZmcn69espKCjA\n4XD85e/S0tLYtWsXO3bs4F//+tcpl99atWoRFBTEp59+Sm5uLna7/cTf3XDDDVSuXJnBgwezadMm\n9uzZw8qVK3nggQcoLCwsse9fRMRf6aoUIiI+9tZbb5GWlsaePXtwuVzUqlWL1NRUevTo8Zfbud1u\nHnvsMVasWMGRI0f+crm23377jUcffZRNmzYRExND7969WbNmDQkJCbzwwgt/eZz33nuPd955hwMH\nDuB2u1m+fPlfLtc2duxY0tPTyc/PJzExkWuvvZZhw4YRFBRUOoGIiPgJrxfjiy666MSbSC6//HJG\njhxJWloakyZNAmDYsGEnfgUoIiIiIlLWed0xDgsLY968eSeOHQ4H48ePZ86cOdjtdnr27KnFWERE\nRET8hs86xlu3bqVevXrExcWRmJhIQkICO3bs8NXDi4iIiIiUKK/PGDscDrp27UpoaChDhgwhKyuL\n+Ph4Zs2aRWxsLPHx8Rw8eJAGDRr4cl4RERERkRLh9WK8Zs0aKlWqxLZt2xg0aBAPPfQQAKmpqQAs\nXbpUHzcqIiIiIn7D68X4+EePNm7cmCpVqlC9enUWLlx44u8zMzOJj48/6X5fffUVlStX9vZpRURE\nRETOSk5ODhdffPFZ396rxfjYsWOEhoYSFhZGRkbGicrErl27OHz4MHa7nQMHDpyyRlG5cmWaNm3q\nzdOKDyxYsIBOnTqZHiMgKXuzlL9Zyt8cZW+W8jdr8+bNxbq9V4vx7t27GT58OCEhIQQFBfHss88S\nFRXFkCFDTlync8SIEd48tJSwPXv2mB4hYCl7s5S/WcrfHGVvlvL3L14txpdddhmLFi066espKSmk\npKSc81AiIiIiIqVNHwkdYNq1a2d6hICl7M1S/mYpf3OUvVnK37+U+kdC7927Vx1jERERESlxmzdv\npmbNmmd9e50xDjDp6emmRwhYyt4s5W+W8jdH2Zul/P2LFmMREREREVSlEBEREZFySlUKEREREREv\naDEOMOo6maPszVL+Zil/c5S9Wcrfv2gxFhERERFBHWMRERERKafUMRYRERER8YIW4wCjrpM5yt4s\n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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f7144ed22d0>"
"<matplotlib.figure.Figure at 0x7f8131414910>"
]
},
{
@@ -2016,11 +2016,11 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAroAAAF9CAYAAADr+MuIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPXd/v/rzExmsk3ClrAjIFvAILjUCsENq5YKVVvX\n1q3S/iyK/VatC4pLW2+32tsFBXGtVqV4a63UKmCtQtCiLCLITghh3xLInsxyfn8MBJMJSyCZT87M\n6/l4+JCTDCcfrszAez655oy1atUqWwAAAECccZleAAAAANASGHQBAAAQlxh0AQAAEJcYdAEAABCX\nGHQBAAAQlxh0AQAAEJcYdAGgBb377rsaMGCA6WUAQEJi0AWQUF599VUNHjxYNTU19T7+/vvvKycn\nRzt37mzWr/ejH/1I8+bNa9ZzAgCODIMugIQycuRI1dbWav78+fU+np+fr9zcXGVlZTXr1/P5fGrf\nvn2znhMAcGQYdAEklO7du6tv377Kz8+v+5ht25o3b55GjhwpSXrkkUf0wx/+UCeeeKJOP/103XPP\nPSorK6t3nvnz52vAgAGaP3++rr32Wg0ZMkTDhw/XnDlzJEkffPCBBgwYUPdfQ7W1tbr77rt17rnn\nKjc3V2eccYYeffRR1dbW1t3mmWee0dVXX60pU6Zo2LBhOv300/XUU09FnWvBggW6+uqrNXToUJ12\n2mm65ZZbVFJSUvf5tWvX6pe//KWGDh2qvLw8TZgwQaWlpccWJAA4AIMugIRzzjnn1Bt0V65cqd27\nd+ucc86RJFVXV+vee+/VBx98oGeffVaLFy/WAw880Oi5HnroIV188cWaMWOGHnnkEaWmpkqSfvCD\nH2jevHmaMGFCo78vEAjI6/Xq4Ycf1syZM/XII49oxowZmjRpUr3bLVu2TKWlpZo2bZrGjh2ryZMn\n65tvvqn7/LfffqvrrrtOvXr10rRp0/Taa69p4MCBKi4uliRt375dP/vZz9S9e3e9++67mjp1qjZs\n2KC77rrrqPMDAKfwmF4AAMTayJEj9fzzz2vbtm3q1KmT5s6dW7fTK6neUNutWzddeeWVevLJJxs9\n12WXXaaLLrpIUmS3eD+v16v27dsrPT290d+XlpamBx98sO64S5cuuvDCC/Xpp5/q1ltvrft4enq6\nfve738myLN1www2aPHmyli5dqsGDB0uSXn75ZfXr10+///3v635P//7963795ptvKisrS/fdd1/d\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f7144e80b90>"
"<matplotlib.figure.Figure at 0x7f81311547d0>"
]
}
],
"prompt_number": 24
"prompt_number": 31
},
{
"cell_type": "markdown",
@@ -2062,7 +2062,7 @@
"\n",
"Here the variables are not bold, denoting that they are just variables. \n",
"\n",
"Our state transition is simple - the next state is the same as this state, so $F=1$. The same holds for the motion transistion, so, $B=1$. Thus we have\n",
"Our state transition is simple - the next state is the same as this state, so $F=1$. The same holds for the motion transition, so, $B=1$. Thus we have\n",
"$$x = x + u$$\n",
"\n",
"which is equivelant to the Gaussian equation from the last chapter\n",
@@ -2161,7 +2161,7 @@
"\\end{aligned}\n",
"$$\n",
"\n",
"So we have proven that the multivariate equations are equivalent to the univariate equations when we only have one state variable. I'll close this section by recognizing one quibble - I handwaved my assertion that $H=1$ and $F=1$. In general we know this is not true. For example, a digital therometer may provide measurement in volts, and we need to convert that to temperature, and we use $H$ to do that conversion. I left that issue out of the last chapter to keep the explanation as simple and streamlined as possible. It is very straightforward to add that generalization to the equations of the last chapter, redo the algebra above, and still have the same results. In practice we do not use the equations in the last chapter to perform Kalman filtering due to the material in the next section which demonstrates how much better the Kalman filter performs when we include unobserved variables. So I prefer to leave the equations from the last chapter in their simplest form so that they economically represent our central ideas without any extra complications."
"So we have proven that the multivariate equations are equivalent to the univariate equations when we only have one state variable. I'll close this section by recognizing one quibble - I hand waved my assertion that $H=1$ and $F=1$. In general we know this is not true. For example, a digital thermometer may provide measurement in volts, and we need to convert that to temperature, and we use $H$ to do that conversion. I left that issue out of the last chapter to keep the explanation as simple and streamlined as possible. It is very straightforward to add that generalization to the equations of the last chapter, redo the algebra above, and still have the same results. In practice we do not use the equations in the last chapter to perform Kalman filtering due to the material in the next section which demonstrates how much better the Kalman filter performs when we include unobserved variables. So I prefer to leave the equations from the last chapter in their simplest form so that they economically represent our central ideas without any extra complications."
]
},
{
@@ -2182,7 +2182,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 25
"prompt_number": 32
},
{
"cell_type": "markdown",
@@ -2251,13 +2251,13 @@
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-26-b2a3166033b0>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 42\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 43\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 44\u001b[1;33m \u001b[0mplot_compare_pos_vel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx0\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0.\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mp0\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m500.\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mR\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m5.\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mQ\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m.2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmove\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1.\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m<ipython-input-26-b2a3166033b0>\u001b[0m in \u001b[0;36mplot_compare_pos_vel\u001b[1;34m(x0, p0, R, Q, move)\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[1;31m# initialize the filters\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[0mf1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmkf_filter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mR\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mQ\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 18\u001b[1;33m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 19\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mP\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mp0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m<ipython-input-33-b2a3166033b0>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 42\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 43\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 44\u001b[1;33m \u001b[0mplot_compare_pos_vel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx0\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0.\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mp0\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m500.\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mR\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m5.\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mQ\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m.2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmove\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1.\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m<ipython-input-33-b2a3166033b0>\u001b[0m in \u001b[0;36mplot_compare_pos_vel\u001b[1;34m(x0, p0, R, Q, move)\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[1;31m# initialize the filters\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[0mf1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmkf_filter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mR\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mQ\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 18\u001b[1;33m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 19\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mP\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mp0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mNameError\u001b[0m: global name 'f' is not defined"
]
}
],
"prompt_number": 26
"prompt_number": 33
},
{
"cell_type": "markdown",
@@ -2267,13 +2267,13 @@
"\n",
"The output of the filter that incorporates velocity into the state produces much better output than the filter that only tracks position - the output is much closer to a straight line. We've already discussed why unobserved variables increase the precision of the filter, so I will not repeat that explanation here. But the last exercise and this one is intended to trigger a train of thought:\n",
"\n",
"1. The equations in this chapter are mathematically equivelent to the equations in the last chapter when we are only tracking one state variable.\n",
"1. The equations in this chapter are mathematically equivalient to the equations in the last chapter when we are only tracking one state variable.\n",
" \n",
"2. Therefore, the simple Bayesian reasoning we used in the last chapter applies to this chapter as well.\n",
"\n",
"3. Therefore, the equations in this chapter might 'look ugly', but they really are just implementing multiplying and addition of Gaussians.\n",
"\n",
"> The above might not seem worth emphasizing, but as we continue in the book the mathematical demands will increase significantly. It is easy to get lost in a thicket of linear algrebra equations when you read a book or paper on optimal estimation. Any time you start getting lost, just go back to the basics of the predict/update cycle based on residuals between measurements and predictions and the meaning of the math will usually be much clearer. The math *looks* daunting, and can sometimes be very hard to solve analytically, but the concepts are quite simple."
"> The above might not seem worth emphasizing, but as we continue in the book the mathematical demands will increase significantly. It is easy to get lost in a thicket of linear algebra equations when you read a book or paper on optimal estimation. Any time you start getting lost, just go back to the basics of the predict/update cycle based on residuals between measurements and predictions and the meaning of the math will usually be much clearer. The math *looks* daunting, and can sometimes be very hard to solve analytically, but the concepts are quite simple."
]
},
{
@@ -2288,9 +2288,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Your results will vary slightly depending on what numbers your random generator creates for the noise componenet of the noise, but the filter in the last section should track the actual position quite well. Typically as the filter starts up the first several predictions are quite bad, and varies a lot. But as the filter builds its state the estimates become much better. \n",
"Your results will vary slightly depending on what numbers your random generator creates for the noise component of the noise, but the filter in the last section should track the actual position quite well. Typically as the filter starts up the first several predictions are quite bad, and varies a lot. But as the filter builds its state the estimates become much better. \n",
"\n",
"Let's start varying our parameters to see the effect of various changes. This is a *very normal* thing to be doing with Kalman filters. It is difficult, and often impossible to exactly model our sensors. An imperfect model means imperfect output from our filter. Engineers spend a lot of time tuning Kalman filters so that they perform well with real world sensors. We will spend time now to learn the effect of these changes. As you learn the effect of each change you will develop an intuition for how to design a Kalman filter. As I wrote earlier, designing a Kalman filter is as much art as science. The science is, roughly, designing the ${\\mathbf{H}}$ and ${\\mathbf{F}}$ matrices - they develop in an obvious manner based on the physics of the system we are modelling. The art comes in modelling the sensors and selecting appropriate values for the rest of our variables.\n",
"Let's start varying our parameters to see the effect of various changes. This is a *very normal* thing to be doing with Kalman filters. It is difficult, and often impossible to exactly model our sensors. An imperfect model means imperfect output from our filter. Engineers spend a lot of time tuning Kalman filters so that they perform well with real world sensors. We will spend time now to learn the effect of these changes. As you learn the effect of each change you will develop an intuition for how to design a Kalman filter. As I wrote earlier, designing a Kalman filter is as much art as science. The science is, roughly, designing the ${\\mathbf{H}}$ and ${\\mathbf{F}}$ matrices - they develop in an obvious manner based on the physics of the system we are modeling. The art comes in modeling the sensors and selecting appropriate values for the rest of our variables.\n",
"\n",
"Let's look at the effects of the noise parameters ${\\mathbf{R}}$ and ${\\mathbf{Q}}$. I will only run the filter for twenty steps to ensure we can see see the difference between the measurements and filter output. I will start by holding ${\\mathbf{R}}$ to 5 and vary ${\\mathbf{Q}}$. "
]
@@ -2317,7 +2317,7 @@
"\n",
"In the Kalman filter ${\\mathbf{R}}$ is the *measurement noise* and ${\\mathbf{Q}}$ is the *process uncertainty*. ${\\mathbf{R}}$ is the same in both plots, so ignore it for the moment. Why does ${\\mathbf{Q}}$ affect the plots this way?\n",
"\n",
"Let's remind ourselves of what the term *process uncertainty* means. Consider the problem of tracking a ball. We can accurately model its behavior in statid air with math, but if there is any wind our model will diverge from reality. \n",
"Let's remind ourselves of what the term *process uncertainty* means. Consider the problem of tracking a ball. We can accurately model its behavior in static air with math, but if there is any wind our model will diverge from reality. \n",
"\n",
"In the first case we set ${\\mathbf{Q}}=10$, which is quite large. In physical terms this is telling the filter \"I don't trust my motion prediction step\". Strictly speaking, we are telling the filter there is a lot of external noise that we are not modeling with $\\small{\\mathbf{F}}$, but the upshot of that is to not trust the motion prediction step. So the filter will be computing velocity ($\\dot{x}$), but then mostly ignoring it because we are telling the filter that the computation is extremely suspect. Therefore the filter has nothing to use but the measurements, and thus it follows the measurements closely. \n",
"\n",
@@ -2350,7 +2350,7 @@
"\\end{bmatrix}\n",
"$$\n",
"\n",
"But again, what does this *mean*? This is a one dimensional problem, where our variables are $x$ and $\\dot{x}$. Assume we are tracking a person walking in 1D, so $x$ is their position, and $\\dot{x}$ is their velocity. We have no state variable for $\\ddot{x}$, so we are assuming aceleration is zero, and thus their velocity is constant. No one walks with constant velocity, even if they are trying to do so. The *process noise* specifies how much variance there is in each state variable due to the changes in velocity that inevitably happen.\n",
"But again, what does this *mean*? This is a one dimensional problem, where our variables are $x$ and $\\dot{x}$. Assume we are tracking a person walking in 1D, so $x$ is their position, and $\\dot{x}$ is their velocity. We have no state variable for $\\ddot{x}$, so we are assuming acelleration is zero, and thus their velocity is constant. No one walks with constant velocity, even if they are trying to do so. The *process noise* specifies how much variance there is in each state variable due to the changes in velocity that inevitably happen.\n",
"\n",
"You will very typically see Q expressed in this form (indeed, this is what the code immediately above does):\n",
"\n",
@@ -2378,13 +2378,13 @@
"\n",
"$$ X_{n+1} = \\Phi X_n + U_n$$\n",
"\n",
"where $\\Phi X_n$ is our state transition, which computes $\\mathbf{x}$ at time $n+1$ using Newtonan equations, and $U_n$ is the white noise associated with the process. For a walking human, based on the equations above we get\n",
"where $\\Phi X_n$ is our state transition, which computes $\\mathbf{x}$ at time $n+1$ using Newtonian equations, and $U_n$ is the white noise associated with the process. For a walking human, based on the equations above we get\n",
"\n",
"$$U_n = \\begin{bmatrix}\\frac{a{\\Delta t}^2}{2} \\\\ \\Delta t\\end{bmatrix}$$\n",
"\n",
"So white noise has the variance $U_n$ and a mean of 0, which we notate as $w \\sim \\mathcal{N}(0,Q)$. \n",
"\n",
"Finding an analytic value for $\\textbf{Q}$ in a simple problem like this is not difficult, but it quickly becomes difficult to impossible as the number of state variables increase. So in this chapter we will use the simplification that only the variance of the last term is important. In the Kalman filter math chapter we will discuss finding an analytic solution ofr $\\textbf{Q}$, and then present C. F. van Loan's extremely useful numerical technique for finding $\\textbf{Q}$, which is what you will typically use in practice. \n",
"Finding an analytic value for $\\textbf{Q}$ in a simple problem like this is not difficult, but it quickly becomes difficult to impossible as the number of state variables increase. So in this chapter we will use the simplification that only the variance of the last term is important. In the Kalman filter math chapter we will discuss finding an analytic solution for $\\textbf{Q}$, and then present C. F. van Loan's extremely useful numerical technique for finding $\\textbf{Q}$, which is what you will typically use in practice. \n",
"\n",
"**author's note: text needs to move to kalman math chapter. leaving here for now **"
]
@@ -2450,7 +2450,7 @@
" \\end{pmatrix}\n",
"$$\n",
"\n",
"(I have subtituted $\\mathbf{P}$ for $\\Sigma$ because of the nomenclature used by the Kalman filter literature).\n",
"(I have substituted $\\mathbf{P}$ for $\\Sigma$ because of the nomenclature used by the Kalman filter literature).\n",
"\n",
"The diagonal contains the variance of each of our state variables. So, if our state variables are\n",
"\n",
@@ -2527,7 +2527,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's get back to concrete terms. Let's start by revisting plotting a track. I will hard code the data and noise to avoid being at the mercy of the random number generator, which might generate data that does not illustrate what I want to talk about. I will start by using the same parameters as a chart above: `R=5`, `Q=.02`, and `P=500`."
"Let's get back to concrete terms. Let's start by revisiting plotting a track. I will hard code the data and noise to avoid being at the mercy of the random number generator, which might generate data that does not illustrate what I want to talk about. I will start by using the same parameters as a chart above: `R=5`, `Q=.02`, and `P=500`."
]
},
{
@@ -2682,7 +2682,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The output on these is a bit messy, but you should be able to see what is happening. In both plots we are drawing the covariance matrix for each point. We start with the covariance $\\mathbf{P}=(\\begin{smallmatrix}50&0\\\\0&50\\end{smallmatrix})$, which signifies a lot of uncertainty about our initial belief. After we receive the first measurement the Kalman filter updates this belief, and so the variance is no longer as large. In the top plot the first ellipse (the one on the far left) should be a slighly squashed ellipse. As the filter continues processing the measurements the covariance ellipse quickly shifts shape until it settles down to being a long, narrow ellipse tilted in the direction of movement.\n",
"The output on these is a bit messy, but you should be able to see what is happening. In both plots we are drawing the covariance matrix for each point. We start with the covariance $\\mathbf{P}=(\\begin{smallmatrix}50&0\\\\0&50\\end{smallmatrix})$, which signifies a lot of uncertainty about our initial belief. After we receive the first measurement the Kalman filter updates this belief, and so the variance is no longer as large. In the top plot the first ellipse (the one on the far left) should be a slightly squashed ellipse. As the filter continues processing the measurements the covariance ellipse quickly shifts shape until it settles down to being a long, narrow ellipse tilted in the direction of movement.\n",
"\n",
"Think about what this means physically. The x-axis of the ellipse denotes our uncertainty in position, and the y-axis our uncertainty in velocity. So, an ellipse that is taller than it is wide signifies that we are more uncertain about the velocity than the position. Conversely, a wide, narrow ellipse shows high uncertainty in position and low uncertainty in velocity. Finally, the amount of tilt shows the amount of correlation between the two variables. \n",
"\n",
@@ -2718,7 +2718,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The $x$ axis is for position, and $y$ is velocity. An ellipse that is vertical, or nearly so, says there is no correlation between position and velocity, and an ellipse that is diagnal says that there is a lot of correlation. Phrased that way, it sounds unlikely - either they are correlated or not. But this is a measure of the *output of the filter*, not a description of the actual, physical world. When $\\mathbf{R}$ is very large we are telling the filter that there is a lot of noise in the measurements. In that case the Kalman gain $\\mathbf{K}$ is set to favor the prediction over the measurement, and the prediction comes from the velocity state variable. So, there is a large correlation between $x$ and $\\dot{x}$. Conversely, if $\\mathbf{R}$ is small, we are telling the filter that the measurement is very trustworthy, and $\\mathbf{K}$ is set to favor the measurement over the prediction. Why would the filter want to use the prediction if the measurement is nearly perfect? If the filter is not using much from the prediction there will be very little correlation reported. \n",
"The $x$ axis is for position, and $y$ is velocity. An ellipse that is vertical, or nearly so, says there is no correlation between position and velocity, and an ellipse that is diagonal says that there is a lot of correlation. Phrased that way, it sounds unlikely - either they are correlated or not. But this is a measure of the *output of the filter*, not a description of the actual, physical world. When $\\mathbf{R}$ is very large we are telling the filter that there is a lot of noise in the measurements. In that case the Kalman gain $\\mathbf{K}$ is set to favor the prediction over the measurement, and the prediction comes from the velocity state variable. So, there is a large correlation between $x$ and $\\dot{x}$. Conversely, if $\\mathbf{R}$ is small, we are telling the filter that the measurement is very trustworthy, and $\\mathbf{K}$ is set to favor the measurement over the prediction. Why would the filter want to use the prediction if the measurement is nearly perfect? If the filter is not using much from the prediction there will be very little correlation reported. \n",
"\n",
"**This is a critical point to understand!**. The Kalman filter is just a mathematical model for a real world system. A report of little correlation *does not mean* there is no correlation in the physical system, just that there was no *linear* correlation in the mathematical model. It's just a report of how much measurement vs prediction was incorporated into the model. \n",
"\n",
@@ -2765,7 +2765,7 @@
"source": [
"** author's note: this code is somewhat old. This section needs to be edited **\n",
"\n",
"The kalman filter code that we are using is implemented in my Python library `filterpy`. If you are interested in the full implmentation of the filter you should look in `filterpy\\kalman\\kalman_filter.py`. In the following I will present a simplified implementation of the same code. The code in the library handles issues that are beyond the scope of this chapter, such as numerical stability and support for the extended Kalman filter, subject of a later chapter. \n",
"The kalman filter code that we are using is implemented in my Python library `filterpy`. If you are interested in the full implementation of the filter you should look in `filterpy\\kalman\\kalman_filter.py`. In the following I will present a simplified implementation of the same code. The code in the library handles issues that are beyond the scope of this chapter, such as numerical stability and support for the extended Kalman filter, subject of a later chapter. \n",
"\n",
"The code is implemented as the class `KalmanFilter`. Some Python programmers are not a fan of object oriented (OO) Python, and eschew classes. I do not intend to enter into that battle other than to say that I have often seen OO abused. Here I use the class to encapsulate the data that is pertinent to the filter so that you do not have to store and pass around a half dozen variables everywhere.\n",
"\n",
@@ -2824,7 +2824,7 @@
" self.x = self.F.dot(self.x) + self.B.dot(self.u)\n",
" self.P = self.F.dot(self.P).dot(self.F.T) + self.Q\n",
"\n",
"I haven't discussed the use of numpy much until now, but this method illustrates the power of that package. We use numpy's `array` class to store our data and perform the linear algebra for our filters. `array` implements matrix multication using the `.dot()` method; if you use `*` you will get element-wise multiplication. As a heavy user of linear algebra this design is somewhat distressing as I use matrix multiplation far more often than element-wise multiplaction. However, this design is due to historical developments in the library and we must live with it. The Python community has recognized this problem, and in Python 3.5 we will have the `@` operator to implement matrix multiplication. \n",
"I haven't discussed the use of numpy much until now, but this method illustrates the power of that package. We use numpy's `array` class to store our data and perform the linear algebra for our filters. `array` implements matrix multiplication using the `.dot()` method; if you use `*` you will get element-wise multiplication. As a heavy user of linear algebra this design is somewhat distressing as I use matrix multiplication far more often than element-wise multiplication. However, this design is due to historical developments in the library and we must live with it. The Python community has recognized this problem, and in Python 3.5 we will have the `@` operator to implement matrix multiplication. \n",
"\n",
"With that in mind, the Python code `self.F.dot(self.x)` implements the math expression $\\mathbf{F x}$.\n",
"\n",
@@ -2891,7 +2891,7 @@
" if Z is None:\n",
" return\n",
" \n",
"This just lets you deal with missing data in a natural way. It is typical to use `None` to indicate the absense of data. If there is no data for an update we skip the update equations. This bit of code means you can write something like:\n",
"This just lets you deal with missing data in a natural way. It is typical to use `None` to indicate the absence of data. If there is no data for an update we skip the update equations. This bit of code means you can write something like:\n",
"\n",
" z = read_sensor() # may return None if no data\n",
" my_kf.update(z)\n",
@@ -2920,7 +2920,7 @@
"\n",
"$$\\mathbf{P} = (\\mathbf{I} - \\mathbf{KH})\\mathbf{P}(\\mathbf{I} - \\mathbf{KRK})^T + \\mathbf{KRK}^T$$.\n",
"\n",
"The reason for this altered equation is that it is more numerically stable than the former equation, at the cost of being a bit more expensive to compute. It is not always possible to find the optimal value for $\\text{K}$, in which case the former equation will not produce good results because it assumes optimality. The longer reformulation used in the code is derived from more general math that does not assume optimality, and hence provides good results for nonoptimal filters (such as when we can not correctly model our measurement error).\n",
"The reason for this altered equation is that it is more numerically stable than the former equation, at the cost of being a bit more expensive to compute. It is not always possible to find the optimal value for $\\text{K}$, in which case the former equation will not produce good results because it assumes optimality. The longer reformulation used in the code is derived from more general math that does not assume optimality, and hence provides good results for non-optimal filters (such as when we can not correctly model our measurement error).\n",
"\n",
"Various texts differ as to whether this form of the equation should always be used, or only used when you know you need it. I choose to expend a bit more processing power to ensure stability; if your hardware is very constrained and you are able to prove that the simpler equation is correct for your problem then you might choose to use it instead. Personally, I find that a risky approach and do not recommend it to non-experts. Brown's *Introduction to Random Signals and Applied Kalman Filtering* [3] discusses this issue in some detail, if you are interested."
]
+8 -8
View File
@@ -264,11 +264,11 @@
"\n",
"Not ready for public consumption. In development.\n",
"\n",
"author's note: The chapter on g-h filters is fairly complete as far as planned content goes. The content for the discrete Bayesian chapter, chapter 2, is also fairly complete. After that I have questions in my mind as to the best way to present the statistics needed to understand the filters. I try to avoid the 'dump a sememster of math into 4 pages' approash of most textbooks, but then again perhaps I put things off a bit too long. In any case, the subsequent chapters are due a strong editting cycle where I decide how to best develop these concepts. Otherwise I am pretty happy with the content for the one dimensional and multidimensional Kalman filter chapters. I know the code works, I am using it in real world projects at work, but there are areas where the content about the covariance matrices is pretty bad. The implementation is fine, the description is poor. Sorry. It will be corrected. \n",
"author's note: The chapter on g-h filters is fairly complete as far as planned content goes. The content for the discrete Bayesian chapter, chapter 2, is also fairly complete. After that I have questions in my mind as to the best way to present the statistics needed to understand the filters. I try to avoid the 'dump a semester of math into 4 pages' approach of most textbooks, but then again perhaps I put things off a bit too long. In any case, the subsequent chapters are due a strong editing cycle where I decide how to best develop these concepts. Otherwise I am pretty happy with the content for the one dimensional and multidimensional Kalman filter chapters. I know the code works, I am using it in real world projects at work, but there are areas where the content about the covariance matrices is pretty bad. The implementation is fine, the description is poor. Sorry. It will be corrected. \n",
"\n",
"Beyond that the chapters are much more in a state of flux. Reader beware. My writing methodology is to just vomit out whatever is in my head, just to get material, and then go back and think through presentation, test code, refine, and so on. Whatever is checked in in these later chapters may be wrong and not ready for your use. \n",
"\n",
"Finally, nothing has been spell checked or proof read yet. I with IPython Notebook had spell check, but it doesn't seem to. \n"
"Finally, nothing has been spell checked or proof read yet. I wish IPython Notebook had spell check, but it doesn't seem to. \n"
]
},
{
@@ -283,21 +283,21 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"This is a book for programmers that have a need or interest in Kalman filtering. The motivation for this book came out of my desire for a gentle introduction to Kalman filtering. I'm a software engineer that spent almost two decades in the avionics field, and so I have always been 'bumping elbows' with the Kalman filter, but never implemented one myself. As I moved into solving tracking problems with computer vision the need became urgent. There are classic textbooks in the field, such as Grewal and Andrew's excellent *Kalman Filtering*. But sitting down and trying to read many of these books is a dismal and trying experience if you do not have the background. Typcially the first few chapters fly through several years of undergraduate math, blithely referring you to textbooks on, for example, It\u014d calculus, and presenting an entire semester's worth of statistics in a few brief paragraphs. These books are good textbooks for an upper undergraduate course, and an invaluable reference to researchers and professionals, but the going is truly difficult for the more casual reader. Symbology is introduced without explanation, different texts use different words and variables names for the same concept, and the books are almost devoid of examples or worked problems. I often found myself able to parse the words and comprehend the mathematics of a defition, but had no idea as to what real world phenomena these words and math were attempting to describe. \"But what does that *mean?*\" was my repeated thought.\n",
"This is a book for programmers that have a need or interest in Kalman filtering. The motivation for this book came out of my desire for a gentle introduction to Kalman filtering. I'm a software engineer that spent almost two decades in the avionics field, and so I have always been 'bumping elbows' with the Kalman filter, but never implemented one myself. They always has a fearsome reputation for difficulty, and I did not have the requisite education. Everyone I met that did implement them had multiple graduate courses on the topic and extensive industrial experience with them. As I moved into solving tracking problems with computer vision the need to implement them myself became urgent. There are classic textbooks in the field, such as Grewal and Andrew's excellent *Kalman Filtering*. But sitting down and trying to read many of these books is a dismal and trying experience if you do not have the background. Typically the first few chapters fly through several years of undergraduate math, blithely referring you to textbooks on, for example, It\u014d calculus, and presenting an entire semester's worth of statistics in a few brief paragraphs. These books are good textbooks for an upper undergraduate course, and an invaluable reference to researchers and professionals, but the going is truly difficult for the more casual reader. Symbology is introduced without explanation, different texts use different words and variables names for the same concept, and the books are almost devoid of examples or worked problems. I often found myself able to parse the words and comprehend the mathematics of a definition, but had no idea as to what real world phenomena these words and math were attempting to describe. \"But what does that *mean?*\" was my repeated thought.\n",
"\n",
"However, as I began to finally understand the Kalman filter I realized the underlying concepts are quite straightforward. A few simple probability rules, some intuition about how we integrate disparate knowledge to explain events in our everyday life and the core concepts of the Kalman filter are accessible. Kalman filters have a reputation for difficulty, but shorn of much of the formal terminology the beauty of the subject and of their math became clear to me, and I fell in love with the topic. \n",
"\n",
"As I began to understand the math and theory more difficulties itself. A book or paper's author makes some statement of fact and presents a graph as proof. Unfortunately, why the statement is true is not clear to me, nor is the method by which you might make that plot obvious. Or maybe I wonder \"is this true if R=0?\" Or the author provides pseudocode - at such a high level that the implementation is not obvious. Some books offer Matlab code, but I do not have a license to that expensive package. Finally, many books end each chapter with many useful exercises. Exercises which you need to understand if you want to implement Kalman filters for yourself, but excercises with no answers. If you are using the book in a classroom, perhaps this is okay, but it is terrible for the independent reader. I loathe that an author witholds information from me, presumably to avoid 'cheating' by the student in the classroom.\n",
"As I began to understand the math and theory more difficulties itself. A book or paper's author makes some statement of fact and presents a graph as proof. Unfortunately, why the statement is true is not clear to me, nor is the method by which you might make that plot obvious. Or maybe I wonder \"is this true if R=0?\" Or the author provides pseudocode - at such a high level that the implementation is not obvious. Some books offer Matlab code, but I do not have a license to that expensive package. Finally, many books end each chapter with many useful exercises. Exercises which you need to understand if you want to implement Kalman filters for yourself, but exercises with no answers. If you are using the book in a classroom, perhaps this is okay, but it is terrible for the independent reader. I loathe that an author withholds information from me, presumably to avoid 'cheating' by the student in the classroom.\n",
"\n",
"None of this necessary, from my point of view. Certainly if you are designing a Kalman filter for a aircraft or missile you must thoroughly master of all of the mathematics and topics in a typical Kalman filter textbook. I just want to track an image on a screen, or write some code for my Arduino project. I want to know how the plots in the book are made, and chose different parameters than the author chose. I want to run simulations. I want to inject more noise in the signal and see how a filter performs. There are thousands of opportunities for using Kalman filters in everyday code, and yet this fairly straightforward topic is the provence of rocket scientists and academics.\n",
"None of this necessary, from my point of view. Certainly if you are designing a Kalman filter for a aircraft or missile you must thoroughly master of all of the mathematics and topics in a typical Kalman filter textbook. I just want to track an image on a screen, or write some code for my Arduino project. I want to know how the plots in the book are made, and chose different parameters than the author chose. I want to run simulations. I want to inject more noise in the signal and see how a filter performs. There are thousands of opportunities for using Kalman filters in everyday code, and yet this fairly straightforward topic is the provenance of rocket scientists and academics.\n",
"\n",
"I wrote this book to address all of those needs. This is not the book for you if you program avionics for Boeing or design radars for Ratheon. Go get a degree at Georgia Tech, UW, or the like, because you'll need it. This book is for the hobbiest, the curious, and the working engineer that needs to filter or smooth data. \n",
"I wrote this book to address all of those needs. This is not the book for you if you program avionics for Boeing or design radars for Ratheon. Go get a degree at Georgia Tech, UW, or the like, because you'll need it. This book is for the hobbyist, the curious, and the working engineer that needs to filter or smooth data. \n",
"\n",
"This book is interactive. While you can read it online as static content, I urge you to use it as intended. It is written using IPython Notebook, which allows me to combine text, python, and python output in one place. Every plot, every piece of data in this book is generated from Python that is available to you right inside the notebook. Want to double the value of a parameter? Click on the Python cell, change the parameter's value, and click 'Run'. A new plot or printed output will appear in the book. \n",
"\n",
"This book has exercises, but it also has the answers. I trust you. If you just need an answer, go ahead and read the answer. If you want to internalize this knowledge, try to implement the exercise before you read the answer. \n",
"\n",
"This book has supporting libraries for computing statistics, plotting various things related to filters, and for the various filters that we cover. This does require a strong caveat; most of the code is written for didactic purposes. It is rare that I chose the most efficient solution (which often obscures the intent of the code), and in the first parts of the book I did not concern myself with numerical stability. This is important to understand - Kalman filters in aircraft are carefully designed and implemented to be numerically stable; the naive implemention is not stable in many cases. If you are serious about Kalman filters this book will not be the last book you need. My intention is to introduce you to the concepts and mathematics, and to get you to the point where the textbooks are approachable.\n",
"This book has supporting libraries for computing statistics, plotting various things related to filters, and for the various filters that we cover. This does require a strong caveat; most of the code is written for didactic purposes. It is rare that I chose the most efficient solution (which often obscures the intent of the code), and in the first parts of the book I did not concern myself with numerical stability. This is important to understand - Kalman filters in aircraft are carefully designed and implemented to be numerically stable; the naive implementation is not stable in many cases. If you are serious about Kalman filters this book will not be the last book you need. My intention is to introduce you to the concepts and mathematics, and to get you to the point where the textbooks are approachable.\n",
"\n",
"Finally, this book is free. The cost for the books required to learn Kalman filtering is somewhat prohibitive even for a Silicon Valley engineer like myself; I cannot believe the are within the reach of someone in a depressed economy, or a financially struggling student. I have gained so much from free software like Python, and free books like those from Allen B. Downey [here](http://www.greenteapress.com/). It's time to repay that. So, the book is free, it is hosted on free servers, and it uses only free and open software such as IPython and mathjax to create the book. "
]
@@ -342,7 +342,7 @@
"source": [
"If you want to run the notebook on your computer, which is what I recommend, then you will have to have IPython installed. I do not cover how to do that in this book; requirements change based on what other python installations you may have, whether you use a third party package like Anaconda Python, what operating system you are using, and so on. \n",
"\n",
"To use all features you will have to have Ipython 2.0 installed, which is released and stable as of April 2014. Most of the book does not require that, but I do make use of the interactive plotting widgets introduced in this release. A few cells will not run if you have an older version installed.\n",
"To use all features you will have to have IPython 2.0 installed, which is released and stable as of April 2014. Most of the book does not require that, but I do make use of the interactive plotting widgets introduced in this release. A few cells will not run if you have an older version installed.\n",
"\n",
"You will need Python 2.7 or later installed. Almost all of my work is done in Python 2.7, but I periodically test on 3.3. I do not promise any specific check in will work in 3.X, however. I do use Python's \"from __future__ import ...\" statement to help with compatibility. For example, all prints need to use parenthesis. If you try to add, say, \"print 3.14\" into the book your script will fail; you must write \"print (3.4)\" as in Python 3.X.\n",
"\n",
+8 -8
View File
@@ -263,9 +263,9 @@
"In the previous chapter we developed the Extended Kalman Filter to allow us to use the Kalman filter with nonlinear problems. It is by far the most commonly used Kalman filter. However, it requires that you be able to analytically derive the Jacobian blah blah limp prose.\n",
"\n",
"\n",
"However, for many problems finding the Jacobian is either very difficult or impossible. Futhermore, being an approximation, the EKF can diverge. For all these reasons there is a need for a different way to approximate the Gaussian being passed through a nonlinear transfer function. In the last chapter I showed you this plot:\n",
"However, for many problems finding the Jacobian is either very difficult or impossible. Furthermore, being an approximation, the EKF can diverge. For all these reasons there is a need for a different way to approximate the Gaussian being passed through a nonlinear transfer function. In the last chapter I showed you this plot:\n",
"\n",
"**author's note - need to add calcuation of mean/var to the output.**"
"**author's note - need to add calculation of mean/var to the output.**"
]
},
{
@@ -301,9 +301,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"I generated this by taking 500,000 samples from the input, passing it through the nonlinear tranform, and building a histogram of the result. From that histogram we can then compute a mean and a variance that we compared to the output of the EKF.\n",
"I generated this by taking 500,000 samples from the input, passing it through the nonlinear transform, and building a histogram of the result. From that histogram we can then compute a mean and a variance that we compared to the output of the EKF.\n",
"\n",
"It has perhaps occured to you that this sampling process constitutes a solution to our problem. This is called a 'monte carlo' approach, and it used by some Kalman filter designs, such as the *Ensemble filter*. Sampling requires no specialized knowledge programming, and does not require a closed form solution. No matter how nonlinear or poorly behaved the tranfer function is, as long as we sample with enough points we will build an accurate output distribution.\n",
"It has perhaps occurred to you that this sampling process constitutes a solution to our problem. This is called a 'monte carlo' approach, and it used by some Kalman filter designs, such as the *Ensemble filter*. Sampling requires no specialized knowledge programming, and does not require a closed form solution. No matter how nonlinear or poorly behaved the transfer function is, as long as we sample with enough points we will build an accurate output distribution.\n",
"\n",
"\"Enough points\" is the rub. The graph above was created with 500,000 points, and the output is still not smooth. You wouldn't need to use that many points to get a reasonable estimate of the mean and variance, but it will require many points. What's worse, this is only for 1 dimension. In general, the number of points required increases by the power of the number of dimensions. If you need $50$ points for 1 dimension, you need $50^2$ for two dimensions, $50^3$ for three dimensions, and so on. So while this approach does work, it is very computationally expensive. The Unscented Kalman filter uses a somewhat similar technique but reduces the amount of computation needed by a drastic amount. \n",
"\n",
@@ -350,7 +350,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"So what would be fewest number of sampled points that we can use, and what kinds of constraints does this problem formulation put on the points? We will assume that we have no special knowledge about the nonlinear tranform as we want to find a generalized algorithm. For reasons that come clear in the next section, we will call these points *sigma points*.\n",
"So what would be fewest number of sampled points that we can use, and what kinds of constraints does this problem formulation put on the points? We will assume that we have no special knowledge about the nonlinear transform as we want to find a generalized algorithm. For reasons that come clear in the next section, we will call these points *sigma points*.\n",
"\n",
"Let's consider the simplest possible case, and see if it offers any insight. The simplest possible system is *identity* - the transformation does not alter the input. It should be clear that if our algorithm does not work for the identity transformation then the filter will never converge. In other words, if the input is 1 (for a one dimensional system), the output must also be 1. If the output was different, such as 1.1, then when we fed 1.1 into the transform at the next time step, we'd get out yet another number, maybe 1.23. The filter would run away (diverge). \n",
"\n",
@@ -446,7 +446,7 @@
"source": [
"So our desire is to have an algorithm for selecting sigma points based on some criteria. Maybe we know something about our nonlinear problem, and we know we want our sigma points to be very close together, or very far apart. Or through experimentation we decide that a certain choice of basis vectors from our hyperellipse are the best axis to choose our sigma points from. But we want this to be an algorithm - we don't want to have to hard code in a specific selection algorithm for each different problem. So we are going to want to be able to set some parameters to tell the algorithm how to automatically select the points and weights for us. That may seem a bit abstract, so let's just launch into it, and try to develop an intuitive understanding as we go.\n",
"\n",
"Assume a n-dimensional state variable $\\mathbf{x}$ with mean $\\mu$ and covariance $\\Sigma$. We want to choose $2n+1$ sigma points to approximate the gaussian distribution of $\\mathbf{x}$.\n",
"Assume a n-dimensional state variable $\\mathbf{x}$ with mean $\\mu$ and covariance $\\Sigma$. We want to choose $2n+1$ sigma points to approximate the Gaussian distribution of $\\mathbf{x}$.\n",
"\n",
"Our first sigma point is always going to be the mean of our input. We will call this $\\mathcal{X}_0$. So,\n",
"\n",
@@ -506,7 +506,7 @@
"$$\n",
" \n",
"\n",
"In other words, we geneate sigma points from an existing state variable from its mean and covariance matrix. We pass those sigma points through the nonlinear function that we are trying to filter. Then we use equations (2) and (3) to regenerate an approximation for the mean and covariance of the output."
"In other words, we generate sigma points from an existing state variable from its mean and covariance matrix. We pass those sigma points through the nonlinear function that we are trying to filter. Then we use equations (2) and (3) to regenerate an approximation for the mean and covariance of the output."
]
},
{
@@ -558,7 +558,7 @@
"\\end{aligned}\n",
"$$\n",
"\n",
"These two lines of code implenent these equations with the `np.full()` method, which creates and fills an array with the same value. Then the value for the mean($W_0$) is computed and overwrites the filled in value. We make $W$ a $(2n+1)\\times1$ dimension array simply because linear algebra with numpy proceeds much more smoothly when all arrays are 2 dimensional, so the one dimensional array `[1,2,3]` is better espressed in numpy as `[[1,2,3]]`.\n",
"These two lines of code implenent these equations with the `np.full()` method, which creates and fills an array with the same value. Then the value for the mean($W_0$) is computed and overwrites the filled in value. We make $W$ a $(2n+1)\\times1$ dimension array simply because linear algebra with numpy proceeds much more smoothly when all arrays are 2 dimensional, so the one dimensional array `[1,2,3]` is better expressed in numpy as `[[1,2,3]]`.\n",
"\n",
" W = np.full((2*n+1,1), .5 / (n+kappa))\n",
" W[0] = kappa / (n+kappa)\n",
-1
View File
@@ -10,7 +10,6 @@
((* block tableofcontents *))\tableofcontents((* endblock tableofcontents *))
((* endblock predoc *))
((* block title *))
\title{Kalman and Bayesian Filters in Python}
\author{Roger R Labbe Jr}
+78 -85
View File
@@ -1,7 +1,7 @@
{
"metadata": {
"name": "",
"signature": "sha256:27be18a05f9ddd413e35c6546c1fe1a04d7a71d7b75ed099b55d423aa20b0e31"
"signature": "sha256:fa72b967f25a704cc124b844dfac255ea10010e1efeba510c441f83968d39fb1"
},
"nbformat": 3,
"nbformat_minor": 0,
@@ -44,7 +44,7 @@
" background: transparent;\n",
" color: #000000;\n",
" font-weight: 600;\n",
" font-size: 13pt;\n",
" font-size: 11pt;\n",
" font-style: bold;\n",
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
" }\n",
@@ -250,7 +250,7 @@
"output_type": "pyout",
"prompt_number": 1,
"text": [
"<IPython.core.display.HTML at 0x7f170541ce10>"
"<IPython.core.display.HTML at 0x7f1c305f5d50>"
]
}
],
@@ -268,11 +268,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Imagine that we live in a world without scales - the devices you stand on to weigh yourself. One day at work a coworker comes running up to you and announces her invention to you. After she explains, you eagerly stand on it and announce the results: \"172 lbs\". You are estatic - for the first time in your life you know what you weigh. More importantly, dollar signs dance in your eyes as you imagine selling this device to weight loss clinics across the world! This is fantastic!\n",
"Imagine that we live in a world without scales - the devices you stand on to weigh yourself. One day at work a coworker comes running up to you and announces her invention of a 'scale' to you. After she explains, you eagerly stand on it and announce the results: \"172 lbs\". You are ecstatic - for the first time in your life you know what you weigh. More importantly, dollar signs dance in your eyes as you imagine selling this device to weight loss clinics across the world! This is fantastic!\n",
"\n",
"Another coworker hears the commotion and comes over to find out what has you so excited. You explain the invention and once again step onto the scale, and proudly proclaim the result: \"161 lbs.\" And then you hesitate, confused.\n",
"\n",
"\"What? It read 172 lbs just a few seconds ago\" you complain to your coworker. \n",
"\"It read 172 lbs just a few seconds ago\" you complain to your coworker. \n",
"\n",
"\"I never said it was accurate,\" she replies.\n",
"\n",
@@ -297,15 +297,15 @@
"\n",
"The first two choices are plausible, but we have no reason to favor one scale over the other. Why would we choose to believe A more than B? We have no reason for such a belief. The third and fourth choices are irrational. The scales are admittedly not very accurate, but there is no reason at all to choose a number outside of the range of what they measure. The final choice is the only reasonable one. If both scales are inaccurate, and as likely to give a result above my actual weight as below it, more often than not probably the answer is somewhere between A and B. \n",
"\n",
"In mathematics this concept is formalized as *expected value*, and we will cover it in depth later. For now ask youself what would be the 'usual' thing to happen if we made one million separate readings. Some of the times both scales will read too low, sometimes that will both read too high, and the rest of the time they will straddle the actual weight. If they straddle the actual weight then certainly we should choose a number between A and B. If they don't straddle then we don't know if they are both too high or low, but by choosing a number between A and B we at least mitigate the effect of the worst measurement. For example, suppose our actual weight is 180 lbs. 160 lbs is a big error. But if we choose a weight between 160 lbs and 170 lbs our estimate will be better than 160 lbs. The same argument holds if both scales returned a value greater than the actual weight.\n",
"In mathematics this concept is formalized as *expected value*, and we will cover it in depth later. For now ask yourself what would be the 'usual' thing to happen if we made one million separate readings. Some of the times both scales will read too low, sometimes that will both read too high, and the rest of the time they will straddle the actual weight. If they straddle the actual weight then certainly we should choose a number between A and B. If they don't straddle then we don't know if they are both too high or low, but by choosing a number between A and B we at least mitigate the effect of the worst measurement. For example, suppose our actual weight is 180 lbs. 160 lbs is a big error. But if we choose a weight between 160 lbs and 170 lbs our estimate will be better than 160 lbs. The same argument holds if both scales returned a value greater than the actual weight.\n",
"\n",
"We will deal with this more formally later, but for now I hope it is clear that our best estimate is just the average of A and B. $\\frac{160+170}{2} = 165$.\n",
"\n",
"Let's play 'what if' some more. What if we are now told that A is three times more accurate than B? Consider the 5 options we listed above. It still makes no sense to choose a number outside the range of A and B, so we will not consider those. It perhaps seems more compelling to choose A as our estimate - after all, we know it is more accurate, why not just use it instead of B? Can B possibly improve our knowledge over A alone?\n",
"\n",
"The answer, perhaps counterintuitively, is yes, it can. Consider this case. We know scale A is accurate to 1 lb. In other words, if we weight 170 lbs, it could report 169, 170, or 171 lbs. We know that scale B is accurate to 9 lbs. We do a reading, and A=160, and B=170. What should we estimate our weight to be?\n",
"The answer, perhaps counter intuitively, is yes, it can. Consider this case. We know scale A is accurate to 1 lb. In other words, if we weight 170 lbs, it could report 169, 170, or 171 lbs. We know that scale B is accurate to 9 lbs. We do a reading, and A=160, and B=170. What should we estimate our weight to be?\n",
"\n",
"Well, if we say 160 lbs we would be wrong, because B can only be 9 pounds off, and 170 lbs - 160 lbs is 10 lbs. 160 is not a possible measurement for B. In fact, the only number that satifies all of the constraints is 161 lbs. That is 1 lb within the reading of A, and 9 lbs within the reading of B. \n",
"Well, if we say 160 lbs we would be wrong, because B can only be 9 pounds off, and 170 lbs - 160 lbs is 10 lbs. 160 is not a possible measurement for B. In fact, the only number that satisfies all of the constraints is 161 lbs. That is 1 lb within the reading of A, and 9 lbs within the reading of B. \n",
"\n",
"This is an important result. With two relatively inaccurate sensors we were able to deduce an extremely accurate result. Now sure, that was a specially constructed case, but it generalizes. What if A is accurate to 3 lbs, B is accurate to 11 lbs, and we get the measurements of A=160 lbs and B=170 lbs? The result can only be from 159 lbs to 163 lbs, which is better than the range of 157 lbs to 163 lbs that is the range of values that A alone allows.\n",
"\n",
@@ -345,11 +345,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16faf62ad0>"
"<matplotlib.figure.Figure at 0x7f1c15536fd0>"
]
}
],
"prompt_number": 117
"prompt_number": 2
},
{
"cell_type": "markdown",
@@ -380,11 +380,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb0bbdd0>"
"<matplotlib.figure.Figure at 0x7f1c154bebd0>"
]
}
],
"prompt_number": 119
"prompt_number": 3
},
{
"cell_type": "markdown",
@@ -415,11 +415,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fade6b90>"
"<matplotlib.figure.Figure at 0x7f1c154e8590>"
]
}
],
"prompt_number": 120
"prompt_number": 4
},
{
"cell_type": "markdown",
@@ -429,7 +429,7 @@
"\n",
"\"But is it impossible?\" pipes up a coworker.\n",
"\n",
"Let's try something crazy. Let's assume that somehow I know I am gaining about one lb a day. It doesn't matter how I know that right now, just assume I know it somehow. Maybe I am eating a 6000 calorie a day diet, which would result in such a weight gain. Or maybe there is another way to estimate the weight gain. Let's just see if we can make use of such information if it was available.\n",
"Let's try something crazy. Let's just assume that I know I am gaining about one lb a day. It doesn't matter how I know that right now, just assume I know it somehow. Maybe I am eating a 6000 calorie a day diet, which would result in such a weight gain. Or maybe there is another way to estimate the weight gain. Let's just see if we can make use of such information if it was available.\n",
"\n",
"The first measurement was 158. We have no way of knowing any different, so let's just accept that as our estimate. If our weight today is 158, what will it be tomorrow? Well, we think we are gaining weight at 1 lb/day, so our prediction is 159, like so:"
]
@@ -438,6 +438,9 @@
"cell_type": "code",
"collapsed": false,
"input": [
"# a lot of the plotting code is not particularly useful to read, so for each chapter\n",
"# I have placed the uninteresting code in a file named xxx_internal. I import this\n",
"# file and call whatever function I need.\n",
"import gh_internal\n",
"gh_internal.plot_estimate_chart_1()"
],
@@ -447,9 +450,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb15c190>"
"<matplotlib.figure.Figure at 0x7f1c154b2290>"
]
}
],
@@ -474,9 +477,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFyCAYAAADoEiz4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VPW9//H3ZJnsZCOAQYIgCkiQTS5WQLQqZQt7EVCB\n9hcrcMFyy72oSBvjo9SilaIiatUWl1KgSpWgXgE3CN5qNYogV0TQG1KhEiAQsswkmfn9ETNMyDrJ\nTL6Zmdfz8fCRnDNnznznzSCffPM532M5ePCgUwAAAAAkSSGmBwAAAAC0JxTIAAAAgBsKZAAAAMAN\nBTIAAADghgIZAAAAcEOBDAAAALgJa+zBVatWaevWrUpKSlJOTo4kae/evVqxYoWqqqp0+eWXa82a\nNZKkvn37qnfv3pKkoUOH6t577/Xx0AEAAADva7RAHj16tMaPH6977rlHkuRwOLRs2TI98MADGjx4\nsE6dOuU6NjIyUq+88opvRwsAAAD4WKMtFoMGDVJCQoJre//+/UpKStLgwYMlSUlJSb4dHQAAANDG\nPOpBPnbsmOLi4pSZmakpU6Zow4YNrsfsdrumTp2qWbNm6aOPPvL6QAEAAIC20GiLxYVsNpvy8vK0\nbds2xcbGatq0aRo5cqS6deumXbt2KTk5Wfv27dOiRYu0Y8cOWa1WX40bAAAA8AmPCuSUlBT16tVL\nXbp0kSSlp6fryJEj6tatm5KTkyVJ/fv3V6dOnVRQUKCePXvWev4nn3yijh07emnoAAAAQP2Ki4t1\nxRVXtOi5HhXI6enp+vbbb3XmzBlFRUXpyy+/VFpams6cOaOIiAhFRkaqoKBA//rXv5Samlrn+R07\ndnT1L6Pt5eTkKCMjw/Qwghb5m0P2ZpG/WeRvDtmblZeX1+LnNlogZ2dna8eOHSoqKtKoUaOUlZWl\n5cuXa+7cuaqsrFRGRoZ69OihvLw8LV++XFarVaGhoVq5cqUiIyNbPCj4Rn5+vukhBDXyN4fszSJ/\ns8jfHLL3X40WyFlZWcrKyqqzf8yYMbW2Bw8erP/+7//27sgAAAAAA7iTXhC58cYbTQ8hqJG/OWRv\nFvmbRf7mkL3/shw8eNDZVi929OhRepABAADgc3l5eerWrVuLnssMchDJzc01PYSgRv7mkL1Z5G8W\n+ZtD9v6LAhkAAAAtUl4uDRjQQStXtnxxhttui9GkSbFeHFXr0WIBAAAQoPLzQ7Rhg1UTJlQoPb3K\n6+dfvTpSjz0Wob17z6hDh5ad4/PPQzVqVJyef75E48ZVeG1stFgAAACgjvz8ED30UKT27w/1+rnL\nyqTHHovQzJn2FhfHktSvX5WGD6/Ugw+2nyWCKZCDCL1QZpG/OWRvFvmbRf7mtKfsnT7oF3jpJavO\nnrXo5pvtrT7XjBl27dsXqo8/9n4h3xIUyAAAoEnJyQn6xS+ide21cerePUHr1kVo3boIde+eoGHD\nOujzz88XNhUV0po1Ebr66g5KTU1Q797xuvPOaJ06Zal1znPnpJUrI3XjjXHq1SteqakJuvrqDlq9\nOlKVlXXHcPKkRf/1X1EaMKD6vH36xGv69Fi9/37t2zrk5oYpOTlBf/mLtdb+DRusSk5OqHO8VN1H\nO3FirPLzQ3TbbTHq0SNeaWkJGjMmTqdPnx93c95bTVY///m1TWblSV417+vFF636zW8i1a9fvLp3\nT9DNN8fq2LHaxw4Y0EHJyQmu3t5Fi6KVnJzg+s8bXn3Vqo4dnRo4sPWtGzfeWOE6Z3vg0a2m4d9G\njBhheghBjfzNIXuzyN8sb+a/dWu47r67XBs3WnX//VFKT69SVlapfvvbKN1/f5Q2bTonp1OaOzdG\n27eH68c/tmv+/EodPx6iZ56JUF5eqN56q1gREdXn+/bbED35ZKQmTrRr9mybQkOlDz4I029+E6kj\nR0K0dm1prdf/6U9j9NFHYbrjjnJdeqlDhYUWvf9+uP7nf8J0zTV1K2qLpc6uBlksUmmpRRkZsRo4\nsEr33luu0lJp585wlZRIiYny6L1VZ1WljRurGsxK8uycNR57LFIXXeTQ0qVlOnw4VE8/HaF582L1\n5pvFrmMeeKBMpaXSwYOhWr06UvPm2fWDH3ivv7eqSvrwwzANH+6dc3bu7FS3bg7t2dM+StP2MQoA\nANDuTZhQocxMmxISHLrjjhjNn1+u6dMrtG9fmLZvD5ckvfxyuN58M1zZ2WVatMjmeu4NN1RozJg4\nbdxo1dy51b+Sv/hihz7/vKhW/+rcuXZZLNLmzVbdf3+ZkpKqewPOnq2eQf3Zz2z61a/KXcf//Oc2\nVXnh2jOnU/rkk1AtX16upUvPn//OO21yONSs97Zpk1Vz5tibnZWnedWIjHTqb3875/oBoKjIoo0b\nrTp+3KIuXarzqrnYLTfXqdWrpaFDKzV9uvcK5IKCEJWUSJdc4mjwmHPnpIULY/Tee+FasaJMt99u\n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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAtoAAAGECAYAAAAIgocpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VPW9//H3ZJnsZAdkUzCyKJFNLlZA9BYtW0CWKlIF\nvBer8EOlpRcVrRGu1qKVKipq0RY3BIprKJbFWjF41UoUASuyaJOwVAIJkG0mmZnfHyFDQjIwk2Tm\nO0Nez8fDR3Jmzpzznbex/eTkcz5j2bVrl0sAAAAAWlSY6QUAAAAA5yIKbQAAAMAPKLQBAAAAP6DQ\nBgAAAPyAQhsAAADwAwptAAAAwA8iAnGSRYsW6d1331VKSopycnIkSdu2bdP9998vh8Oh7t2764kn\nnpAk9erVSz169JAkDRw4UPfdd18glggAAAC0qIAU2tdee61Gjx6te++9V5LkdDo1b948PfLII+rf\nv7+OHj3q3jc6Olpvv/12IJYFAAAA+E1AWkf69eunpKQk9/aOHTuUkpKi/v37S5JSUlICsQwAAAAg\nYIz0aB88eFAJCQmaMWOGxo8frxUrVrifs9vtmjBhgm688UZ9/vnnJpYHAAAANFtAWkdOZ7PZlJeX\np7Vr1yo+Pl4TJ07U0KFD1blzZ23evFmpqanavn27Zs+erY0bN8pqtZpYJgAAANBkRgrt9PR0ZWRk\nqH379pKk3r17a9++fercubNSU1MlSZmZmWrbtq0KCwvVrVu3eq//4osvlJaWFvB1AwAAoHU5ceKE\nLr744ia91kih3bt3bx04cEDHjh1TTEyMvv32W3Xp0kXHjh1TVFSUoqOjVVhYqH//+9/q0KFDg9en\npaW5+7sReDk5OcrKyjK9jFaL/M0he7PI3yzyN4fszcrLy2vyawNSaC9YsEAbN25USUmJhg0bpuzs\nbM2fP1/Tpk1TdXW1srKy1LVrV+Xl5Wn+/PmyWq0KDw/Xww8/rOjo6EAsET7Iz883vYRWjfzNIXuz\nyN8s8jeH7ENXQArt7OxsZWdnN3h8xIgR9bb79++vv/71r4FYEgAAAOBXfDIkfDZ8+HDTS2jVyN8c\nsjeL/M0if3PIPnRZdu3a5TK9CF8VFBTQow0AAAC/y8vLU+fOnZv0Wq5ow2e5ubmml9Cqkb85ZG8W\n+ZtF/uaQfeii0AYAAIBRlZVSnz5t9PDDTR+CcfPNcRo3Lr4FV9V8tI4AAADgjPLzw7RihVVjxlSp\nd29Hix9/8eJoPfVUlLZtO6Y2bZp2jJ07wzVsWIJefrlMo0ZVtdjaaB0BAACA3+Tnh+mxx6K1Y0d4\nix+7okJ66qkoTZ5sb3KRLUmXXOLQ4MHVevTR4BkNTaENn9ErZhb5m0P2ZpG/WeRvTjBl7/JDH8Sa\nNVYdP27RDTfYm32s66+3a/v2cG3d2vK/EDQFhTYAAAiY1NQk/fKXsbryygSdf36Sli6N0tKlUTr/\n/CQNGtRGO3eeKpCqqqQnnojS5Ze3UYcOSerRI1F33hmro0ct9Y5ZWio9/HC0hg9PUEZGojp0SNLl\nl7fR4sXRqq5uuIYjRyz6n/+JUZ8+Ncft2TNRkybF6+OP63+8SG5uhFJTk/T669Z6j69YYVVqalKD\n/aWaPuOxY+OVnx+mm2+OU9euierSJUkjRiSouPjUur15b7VZ3XXXlWfNype8at/Xq69a9ZvfROuS\nSxJ1/vlJuuGGeB08WH/fPn3aKDU1yd37PHt2rFJTk9z/tIR33rEqLc2lvn2b35IyfHiV+5jBwMhH\nsCO0DRkyxPQSWjXyN4fszSJ/s1oy/3ffjdQ991Rq5UqrFi6MUe/eDmVnl+u3v43RwoUxWrWqVC6X\nNG1anDZsiNRPf2rX7bdX69ChML3wQpTy8sL1/vsnFBVVc7wDB8L03HPRGjvWrilTbAoPlz79NEK/\n+U209u0L09NPl9c7/3/9V5w+/zxCt91WqQsvdKqoyKKPP47U//1fhK64omFlbrE0eMgji0UqL7co\nKyteffs6dN99lSovlzZtilRZmZScLJ/eW01WDq1c6fCYleTbMWs99VS0zjvPqblzK7R3b7iWLYvS\n9OnxWr/+hHufRx6pUHm5tGtXuBYvjtb06Xb96Ect1//scEiffRahwYNb5pjt2rnUubNTW7YER4kb\nHKsAAACtxpgxVZoxw6akJKduuy1Ot99eqUmTqrR9e4Q2bIiUJL3xRqTWr4/UggUVmj3b5n7tj39c\npREjErRypVXTptW0GnTq5NTOnSX1+nunTbPLYpFWr7Zq4cIKpaTU9DwcP15zRffnP7fpgQcq3fvf\ndZdNjha4x8/lkr74Ilzz51dq7txTx7/zTpucTnn13latsmrqVLvXWfmaV63oaJfeeqvU/YtESYlF\nK1dadeiQRe3b1+RVe1Nhbq5LixdLAwdWa9Kkliu0CwvDVFYmXXCB0+M+paXSrFlx+vDDSN1/f4Vu\nvdWmlSut6tnT0ehV8K5dnfrss+AocWkdgc+CqVesNSJ/c8jeLPI3qyXzT0+vKapSU10nt10nt53u\nNoc337QqIkK67jq7jhyxuP/p1s2puDgpN/dUkRkbK3eRbbdLxcU1+/bs6ZDDIX3//alyJypKslql\nL76IUElJ/UvV4S3U1hsXJ82eXdng8bCTyzj7eztVJKanO5Wbm3vGrLw75qm8ao0bV1Xvan2/fjVF\na0FB4MrDoqKaBSQne27+fvLJaA0aVK1nninTwYMW3XprnIqLLR5bTZKTXaqslMrK/LJknwRHuQ8A\nAFqNyMjGv0ZE1PQZS9LeveGqrpb69Els9Bi1BVqtF1+M0osvRmn37jD3leNaNtupfaOipIULK3T/\n/THq0SNRl17q0IAB1RozpkpDhjTS0N0EF1zgaNCmUdfZ3tvhw6cK3TNlZa9zgdrXvCSpXbv6QcXG\n1hS7VVU+9Mo0U22hf6abLP/f/7MpKalmh06dnPrb36SZM20e9689li8tP/5CoQ2f0SdpFvmbQ/Zm\nkb9ZJvJPTXXphRcavyxZW3hJ0tKlUfr1r2N05ZXVuuOOSrVr51REhLRhQ6SefTaqQRF36602jR5t\n16ZNkfr00witWWPVsmVRys6u0J13ei7gap2txeRMV2d9fW9STfbe/EHBl2NKLXcFvznS0mrWVfdG\n0dPVrv1vf4vQt9+G65e/bPjXgrpKSiyKian5S4dpFNoAACDodOvm0KZNkbrssuqzFkyrVlnVpYtT\nb75ZWu8q5kcfeS5zOnRwaepUu6ZOtau0VLrmmjZ65pnoeoV2ZGRNgVde/15KHTzYvNYKX96byWPW\n5a+rwx07OhUfL3333Zmr/jfeiJTDYdHtt5/9F6E9e8LVs2fLf6hOU9CjDZ/RJ2kW+ZtD9maRv1mB\nyr/26vOECVVyOqXHH2/44SM2m/TDD6cqv4iIhldnjx2zaMWKqAYFYkVFw8I5Pr6mF7rqtHv8Onas\naa3YuvVUwV5dLb31VvNGx/ny3iTvsvf1mL6Kj6/5F3PoUMtW3OHh0qBB1crL81xor1hhVWxszYxs\nqeZnZOHCxj+U5tAhiw4csGjw4JZpA2ourmgDAICgM2mSXW+/Haknnog++dHa1QoLqxkz9957kcrO\nrtDkyTWF19ixdi1cGKObborTNddUqagoTK++alVqqlOHDtUv4PbsCdeYMQkaO9auXr0cio11afPm\nSG3ZUjOJpK5OnWpmO69ebVVsrEsXXOBUTo5V4eHN+9QWX96byWPW1auXQ0lJLv3hD9FKSXGpQ4ea\nX0KGD29+QXvddXa9/36stm4N14AB9a9E5+RE6r33ItW5s1MHD1qUkCD9+c9WTZ/e+JXt9esj3ccM\nBhTa8Bl9kmaRvzlkbxb5m+Wv/E+/4ly7bbFIL79cpuefj9KqVVY99FCMIiNd6trVqSlTbLryylOX\nn++4wyan06JXX7Xqgw8i1amTUz//uU1paS7NmlW/j6JTp5rXf/RRhPtDTbp2deiRRyo0Y0bD4u2l\nl0o1Z06cVq+OUps2Lt1yi03t2jl1112N92d402Lhy3uTTvVoe8qqKcf0tE5Pj1ut0vLlZVqwIEb3\n3BMrm61m36KikrO/4bOYMMGuBx6I0erVVg0YUOF+/IcfLNqzJ1yvvFKmf/0rTDfdFKejR8P04IMV\n7rGDp/vzn63q08fhnqBimmXXrl1++DBN/yooKFD//v1NLwMAAAAt4Mkno7R4cYy2bTvW6I2b3vjq\nq3BdfXWCXn21TCNHttys77y8PHXu3LlJr6VHGz6jT9Is8jeH7M0if7PI35zWkP3tt9uUnOzU00+f\nYS7iWTz2WLSGDq1u0SK7uWgdAQAAgFFRUdKXXx5v1jFeeSUIPqHmNLSOAAAAAB7QOgIAAAAEGQpt\n+Kw19IoFM/I3h+zNIn+zyN8csg9dFNoAAABB6uhRKTr6fJUFX/sxvECPNgAAQBBxuaSvvw7Thx9G\n6o9/jFJpqUXnn+/QrFk29e9frc6dQ650C2nN6dFm6ggAAECQcLmkDz6I0E03xauy8tSnx/zwQ5hu\nuSVS3btX65VXynTRRU6Dq4S3aB2Bz+gVM4v8zSF7s8jfLPIPjK++CtfPfla/yK7r228jdOutcfrh\nBy8+ghLGUWgDAAAEAadTevvtSNlsZy6iv/oqQv/8Z3iAVoXmoEcbAAAgCBQUWPSjHyWqvPzsV6un\nTavU739fEYBVgTnaAAAAIc5ms3hVZEtSfj4lXCjg3xJ8Rp+eWeRvDtmbRf5mkb//RUe7FB/vXaNB\n167cDBkKKLQBAACCQMeOLt1+e6VX+44bV+Xn1aAl0KMNAAAQJLZvD9eIEQmqqPDcQjJwYJVee61M\naWkhV8KFpKDv0V60aJEGDx6srKws92Pbtm1TVlaWRo0apTlz5tTbv7S0VEOGDNEf//jHQCLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f170541c910>"
"<matplotlib.figure.Figure at 0x7f1c154e7d50>"
]
}
],
@@ -509,9 +512,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb2efd50>"
"<matplotlib.figure.Figure at 0x7f1c15536990>"
]
}
],
@@ -579,11 +582,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb2715d0>"
"<matplotlib.figure.Figure at 0x7f1c15180f10>"
]
}
],
"prompt_number": 116
"prompt_number": 8
},
{
"cell_type": "markdown",
@@ -608,18 +611,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fadb2890>"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[159.2, 161.2, 160.84, 160.464, 161.1184, 162.51104, 165.346624, 166.1679744, 166.26078464, 168.156470784, 169.3738824704, 170.66432948224]\n"
"<matplotlib.figure.Figure at 0x7f1c154b2490>"
]
}
],
"prompt_number": 113
"prompt_number": 9
},
{
"cell_type": "markdown",
@@ -687,11 +683,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb0f9990>"
"<matplotlib.figure.Figure at 0x7f1c15490750>"
]
}
],
"prompt_number": 115
"prompt_number": 10
},
{
"cell_type": "markdown",
@@ -725,7 +721,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"This filter is the basis for a huge number of filters, including the Kalman filter. In other words, the Kalman filter is a form of the g-h filter. So is the Least Squares filter, which you may have heard of, and so is the Benedict-Bordner filter, which you probably have not. Each filter has a different way of assigning values to *g* and *h*, but otherwise the algorithms are identical. For example, the $\\alpha$-$\\beta$ filter just assigns a constant to *g* and *h*, constained to a certain range of values. Other filters will vary *g* and *h* dynamically, and filters like the Kalman filter will vary them based on the number of dimensions in the problem.\n",
"This filter is the basis for a huge number of filters, including the Kalman filter. In other words, the Kalman filter is a form of the g-h filter. So is the Least Squares filter, which you may have heard of, and so is the Benedict-Bordner filter, which you probably have not. Each filter has a different way of assigning values to *g* and *h*, but otherwise the algorithms are identical. For example, the $\\alpha$-$\\beta$ filter just assigns a constant to *g* and *h*, constrained to a certain range of values. Other filters will vary *g* and *h* dynamically, and filters like the Kalman filter will vary them based on the number of dimensions in the problem.\n",
"\n",
"\n",
"**Let me repeat the key insights as they are so important**. If you do not understand these you will not understand the rest of the book. If you do understand them, then the rest of the book will unfold naturally for you as mathematically elaborations to various 'what if' questions we will ask about *g* and *h*.\n",
@@ -752,20 +748,20 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAq0AAAH8CAYAAAD7ZpZkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8VGW+P/DPmclMGkkgBQIpBIKQQIJIL9JLKEsVuYgV\njahXivoTr7roApZFsbuXveKuoiAL67qEovQSelEJvSehJSG9Z2aSmef3BzfnMswkpMzkTPm8X695\nyTznzDnfGeGZ7zznOd9HEkIIEBERERE5MJXSARARERER3QuTViIiIiJyeExaiYiIiMjhKZq0rlix\nAiqVCsnJyTY97lNPPQWVqvFvbc2aNVCpVPKjXbt2NoiOiIiIiOqr1sxuz549Zknb3Q9bkCQJkiTV\nuk9SUhIWLVpk02PWRf/+/bFq1SqsXLkSMTExNjkmEREREdWfVFv1gOzsbOzYsQMAsHHjRqxduxZ/\n/OMfERsbCwCYMWNGo05uMplQVVUFjUZTa0L41FNP4fvvv4fJZKrTcY1GI4xGI7RabaPiu9OQIUNw\n7do1pKam2uyYRERERFQ3HrVtbNmypZyYXrt2DWvXrsXIkSMxaNAgm5xcpVLVObGszyinWq2GWq1u\naFhERERE5GBsco2/em7q5s2bMXv2bISEhCAoKAgzZsxAcXGxxf7BwcFm0wyszWm9c2rC999/DyGE\n2Wtmzpxptv/p06frPH1hzZo1GD9+PCIjI+Hl5YXQ0FA8+uijHEUlIiIiclC1jrTW1yuvvILOnTvj\n3XffxZEjR7BixQoAwOrVq832++qrr6DX67F3714sX77c6ihq586dsWrVKnn/ffv2yc8BIDo62mz/\nyMhIs/33799fY5xffPEFPDw88OKLL6JVq1ZIT0/HX//6V+zYsQNnz55FUFBQg94/EREREdmHTZPW\n++67Dz/99BMA4LnnnkNaWhqSkpJgMpnMRj4feughAIDBYMDy5cutHuvOqQnbtm3Dvn37ap1D6+/v\nb7F/TX788UeEhYWZtQ0ZMgTDhg3D999/j5dffrkO75aIiIiImopNS15Nnz7d7HnPnj2h0+mQnZ1t\ny9M0WnXCKoRAUVERcnNzcd999wEALl++rGRoRERERGSFTZPW1q1bmz339fUFcHtE1ZEcP34cY8eO\nhZ+fH1q0aIGWLVsiIiICAKDT6RSOjoiIiIjuZtPpAc5wx/61a9cwaNAgBAQE4E9/+hNiY2Ph4+OD\nqqoqjB49GrVUACMiIiIihdg0abUXWy0WAADr1q1DWVkZNmzYgKFDh8rt95oWoNVqUVVVZZMYiIiI\niKh+FF3Gta78/PwghEBWVladX1NTkls9Gnz3qPCnn35a6/EiIyORlZWFoqKiOsdARERERLZR60hr\ndnY2tm3bBgBISUkBcPvO/GvXrgEAHnvssXqf8NChQ7hy5Yr857uPOWDAALRr187sNQMHDsRf/vIX\nJCYm4umnn4aPjw/Cw8MRFxcn75OUlITS0lIAQGpqKoQQ+OGHH+TL/VOmTIGPjw/Gjh2L119/HU8+\n+SRmz54NT09PbNmyBVevXq21tuuMGTPwzTffYNq0aZg+fTo0Gg2GDh1qUYWAiIiIiOxA1GL37t1C\nkiT5oVKpzP5c7dtvvxUqlUokJyebvX7hwoVCpVKJq1evym1PPfVUrcf87rvvrMby1ltviYiICKFW\nq4UkSWLmzJlm26OiosyOc/dx74xh79694sEHHxR+fn4iKChIPProoyIzM1N4eHhYHPdOX331lejQ\noYN8/PXr19f28RERERGRjUhC8M4jIiIiInJsTjGnlYiIiIjcG5NWIiIiInJ4TFqJiIiIyOExaSUi\nIiIih8eklYiIiIgcHpNWIiIiInJ4TFqJiIiIyOExaSUiIiIih+fUSeuKFSugUqmwd+9eq9vT09Oh\nUqmwaNEim57XXsd1BDqdDlFRUViwYIHdzzV58mQMGzbM7uchIiIi51evpPXq1atITExEREQEvLy8\nEBkZiUceeQRnz561V3w2IUlSrdvT09OxcOFCnDhxwqbHdUaffPIJioqKMH/+fLufa9GiRUhOTsb6\n9evtfi4iIiJybh513TElJQXDhg2DEALPP/88OnXqhJs3b2LNmjXYsWMHOnfubM84GyQqKgo6nQ5q\ntbrW/dLT07F48WK0b98e999/v82O62wqKiqwdOlSPPnkkwgICLD7+bp27YrBgwdj0aJFmDhxot3P\nR0RERM6rTkmr0WjEjBkzUFlZiaNHjyI2Nlbe9uabb+LmzZt2C7CxtFptnfcVQtjluM5i9erVKCoq\nwuOPP95k53z88cfxzDPP4OjRo+jdu3eTnZeIiIicS52mB2zduhXnz5/H008/bZawArcvkYeHh8vP\ni4qKMHfuXERERMDT0xNRUVF49dVXUV5ebva6PXv2QKVS4ZtvvsHbb7+NsLAwBAQEYNy4ccjIyLCI\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb151290>"
"<matplotlib.figure.Figure at 0x7f1c151736d0>"
]
}
],
"prompt_number": 10
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I'll begin to introduce the nomenclature and variable names used in the literature. Measurement is typically denoted $z$, and that is what we will use in this book (some literature uses $y$). Subscript $k$ indicates the time step, so $\\mathbf{z_k}$ is the data for this time step. A bold font denotes a vector. So far we have only consided having one sensor, and hence one sensor measurement, but in general we may have *n* sensors and *n* measurements. $\\mathbf{x}$ denotes our data, and is bold to denote that it is a vector. For example, for our scale example, it represents both the initial weight and inital weight gain rate, like so:\n",
"I'll begin to introduce the nomenclature and variable names used in the literature. Measurement is typically denoted $z$, and that is what we will use in this book (some literature uses $y$). Subscript $k$ indicates the time step, so $\\mathbf{z_k}$ is the data for this time step. A bold font denotes a vector. So far we have only considered having one sensor, and hence one sensor measurement, but in general we may have *n* sensors and *n* measurements. $\\mathbf{x}$ denotes our data, and is bold to denote that it is a vector. For example, for our scale example, it represents both the initial weight and initial weight gain rate, like so:\n",
"$$\\mathbf{x} = \\begin{bmatrix}x \\\\ \\dot{x}\\end{bmatrix}$$\n",
"\n",
"Finally, a hat '$\\hat{}$' indicates an *estimate*. So the output of the predict step time $k$ at is the *estimate* of our state $\\mathbf{\\hat{x}_k}$, and again this is a vector of all the state variables. So for our scale example it containes the estimate of both the weight and the gain rate.\n",
"Finally, a hat '$\\hat{}$' indicates an *estimate*. So the output of the predict step time $k$ at is the *estimate* of our state $\\mathbf{\\hat{x}_k}$, and again this is a vector of all the state variables. So for our scale example it contains the estimate of both the weight and the gain rate.\n",
"\n",
"So, the algorithm is simple. The state is initialized with $\\mathbf{x_0}$. We then enter a loop, predicting the state for time $k$ from the values from time $k-1$. We then get the measurement $z_k$ and choose some intermediate point between the measurements and prediction, creating the estimate $\\mathbf{\\hat{x}_k}$."
]
@@ -863,13 +859,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb12d450>"
"<matplotlib.figure.Figure at 0x7f1c15173510>"
]
}
],
"prompt_number": 11
"prompt_number": 12
},
{
"cell_type": "heading",
@@ -914,7 +910,7 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
"prompt_number": 13
},
{
"cell_type": "heading",
@@ -928,6 +924,7 @@
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy.random as random\n",
"def gen_data (x0, dx, count, noise_factor):\n",
" return [x0 + dx*i + random.randn()*noise_factor for i in range (count)]\n",
"\n",
@@ -941,13 +938,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAFyCAYAAAD8h7IZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XvcjHX+x/HXnOee+1TEllq7aSWnyqYIZdtCbBTVOhUl\nHZwiKkmSiqLDKkmKSDlLQuJGSTe1nSiHtLUd/KQc45577rnneP3+uGPT7XAfZu6Z65738/HwaK+Z\na6752Lfh4+sz38vy1VdfGYiIiIiIpABrogsQEREREakoan5FREREJGWo+RURERGRlKHmV0RERERS\nhppfEREREUkZan5FREREJGUct/n95ZdfuPbaa7n66qvp0KEDy5YtA2DZsmW0adOGNm3a8O6771ZI\noSIiIiIi5WU53j6/4XCYUChEWloav/zyC+3atWPt2rVceeWVzJ8/n0AgQI8ePVi5cmVF1iwiIiIi\nUibHXfm12+2kpaUB4PV6cTqdfP7559SuXZsqVapw2mmnceqpp7Jt27YKKVZEREREpDzsJzrB5/PR\npUsXtm/fzpNPPsnevXupVq0ac+bMITs7m2rVqrF7927OOeeciqhXRERERKTMTviFt/T0dJYsWcLC\nhQsZN24cgUAAgC5dutC2bVsALBZLfKsUEREREYmBE678HnLWWWdRo0YNTj/9dN5+++3Dj+/Zs4dq\n1aoVO3/Dhg2ccsopsalSREREROQovF4v9erVK/H5x21+d+3ahdPp5OSTT2bPnj189913nHnmmXz9\n9dfs37+fQCDArl27jjrycMopp/DXv/619D8DSbglS5bQvn37RJchZaT8zE35mZeyMzflZ16fffZZ\nqc4/bvP7008/MWLEiMPH9913H1WrVmXIkCF07doVgPvvv78MZUoy2759e6JLkHJQfuam/MxL2Zmb\n8ksdx21+zz//fJYsWVLs8Xbt2tGuXbu4FSUiIiIiEg+6w5sUc8UVVyS6BCkH5Wduys+8lJ25Kb/U\noeZXiqlTp06iS5ByUH7mpvzMS9mZm/JLHWp+pZjc3NxElyDloPzMTfmZl7IzN+UXX/v2WTCOeU/h\niqXmV0RERETiYssWGwMGeGjcOItvvkmOttPy1VdfxaUP/7//+z9tdSYiIiKSopYscXDffR569QrQ\ns2eAU06Jz9LvZ599xh//+McSn1/im1yIiIiIiJRU69Yh2rQ5iNOZ6EqOlBzrz5JUNPdkbsrP3JSf\n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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb2d9cd0>"
"<matplotlib.figure.Figure at 0x7f1c154e84d0>"
]
}
],
"prompt_number": 13
"prompt_number": 15
},
{
"cell_type": "heading",
@@ -972,8 +969,7 @@
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
"outputs": []
},
{
"cell_type": "heading",
@@ -997,13 +993,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb2c1590>"
"<matplotlib.figure.Figure at 0x7f1c15433610>"
]
}
],
"prompt_number": 15
"prompt_number": 16
},
{
"cell_type": "markdown",
@@ -1035,8 +1031,7 @@
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 16
"outputs": []
},
{
"cell_type": "heading",
@@ -1060,9 +1055,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb0f6710>"
"<matplotlib.figure.Figure at 0x7f1c1551d9d0>"
]
}
],
@@ -1072,9 +1067,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"This doesn't look so wonderful to me. We can see that perhaps the filtered signal varies less than the noisey signal, but it is far from the straight line. If we were to plot just the filtered result no one would guess that the signal with no noise starts at 5 and increments by 2 at each time step. And while in locations the filter does seem to reduce the noise, in other places it seems to overshoot and undershoot.\n",
"This doesn't look so wonderful to me. We can see that perhaps the filtered signal varies less than the noisy signal, but it is far from the straight line. If we were to plot just the filtered result no one would guess that the signal with no noise starts at 5 and increments by 2 at each time step. And while in locations the filter does seem to reduce the noise, in other places it seems to overshoot and undershoot.\n",
"\n",
"At this point we don't know enough to really judge this. We added **a lot** of noise; maybe this is as good as filtering can get. However, the existance of the multitude of chapters beyond this one should suggest that we can do much better than this suggests."
"At this point we don't know enough to really judge this. We added **a lot** of noise; maybe this is as good as filtering can get. However, the existence of the multitude of chapters beyond this one should suggest that we can do much better than this suggests."
]
},
{
@@ -1082,7 +1077,7 @@
"level": 2,
"metadata": {},
"source": [
"Excercise: The Effect of Acceleration"
"Exercise: The Effect of Acceleration"
]
},
{
@@ -1100,8 +1095,7 @@
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
"outputs": []
},
{
"cell_type": "heading",
@@ -1136,11 +1130,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb293790>"
"<matplotlib.figure.Figure at 0x7f1c152ace90>"
]
}
],
"prompt_number": 19
"prompt_number": 18
},
{
"cell_type": "markdown",
@@ -1177,8 +1171,7 @@
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 20
"outputs": []
},
{
"cell_type": "heading",
@@ -1209,29 +1202,29 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAs4AAAF9CAYAAAAUWu5qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlgVOW5P/DvWWayJ5CFBJKwJ0T2BEHcUFRkK4rVVqgV\nqhe9txRFi/Yqyq+tS627ttWqtb22WKvSCsrqCkJYhbAJIRuBEIIkyJJ9Zs7y+2OSYZKcmcxMZjKT\n5Pv5p50zZ3lDn2aevPO8zysUFBToICIiIiIit8RgD4CIiIiIqCtg4kxERERE5AEmzkREREREHmDi\nTERERETkASbOREREREQeYOJMREREROQBJs5ERERERB5g4kxE1A2VlpZi3rx5GDNmDK655hr85S9/\n8foeX3zxBRYsWIDLLrsMWVlZ2LVrVwBGSkTUdTBxJiLqZqxWK+655x6Eh4djxYoVWLJkCV599VWs\nXLnSq/vU1tZi7NixeOihhwAAgiAEYrhERF0GE2ciIj+xWq1YtmwZcnJycPXVV2PlypXIysryOmHt\nqM2bN6O8vBxPPfUUMjMzcdNNN+Gmm27C8uXLvbrP7NmzsWjRIlx++eUBGikRUdciB3sARETdxRtv\nvIEvvvgCr776Kvr06YOnnnoKgOcztRUVFZg5c6bL999++22MGzeu3fscPHgQ/fv3R58+fRzHJkyY\ngI8//hiKokCW+aufiMgX/O1JROQn//rXv3DXXXfh6quvBgAsWbIEc+bM8fj65ORkfPLJJy7fd06E\n3Tl79ix69+6NxsZGzJgxA9OnT8dll10GVVVx/vx5JCYmejwmIiK6iIkzEZEfVFdX49y5cxg2bJjj\nWEZGhlf3kCQJ6enpfhuTKIro168fEhMToeu63+5LRNRTMXEmIgoR/irViI+Px9mzZ2E2m/Huu+8C\nAFatWgVJktCrVy+/jZeIqKdh4kxE5AexsbGIj49Hfn4+rrnmGgBAYWGhV/fwV6nG6NGj8eabb+L0\n6dNITk4GAOzcuRNZWVlt6ptrampw4cIF9OnTB2az2avxEhH1NEyciYj8ZO7cufj73/+O4cOHIzk5\nGa+88opX1/urVGPSpElIT0/HsmXL8NBDD+HIkSNYvXq1Y7Gis3feeQevvfYali9fjvHjx7d478KF\nC6ioqEBlZSUA4NixY4iOjka/fv0QFxfX4XESEXU1TJyJiPzkv//7v1FZWYnFixcjJiYGS5Yswc6d\nOzt9JtdkMuGtt97Cr3/9a9x2223o1asXFi9ejNmzZ7c5VxAEl10/vvzySyxdutRx3rJlyyAIAp55\n5hnDexERdXdCQUGBTytG9u/fj8cffxyqqmLYsGF4+eWXsW7dOrz66qsAgEceeQSTJ08GAJfHiYi6\nsxMnTmDKlCn48MMPMXr06GAPh4iIOsinxFnTNEyfPh3PPPMMcnJycO7cOURFRWH69OlYsWIFLBYL\n5s2bh88//xxWq9XwOBFRd1NaWopt27Zh4sSJ0DQNL730Ek6cOIFPPvkEosj9poiIujqfSjW+/fZb\nxMfHIycnBwDQu3dv7N69GxkZGYiPjwcApKSk4MiRI6itrTU8npWV5acfgYgoNIiiiJUrV+KFF16A\n2WxGdnY2/vznPzNpJiLqJnxKnE+dOoWYmBgsWLAA33//PX70ox8hPj4eSUlJeP/99xEXF4ekpCRU\nVlaivr7e8DgTZyLqbgYMGIB///vfwR4GEREFiE+Js8ViQV5eHtasWYPo6GjceuutuO222wDAsUtW\n63IM5+Oebj9LRERERBQqfEqck5KSMHToUKSkpAAARo4cCavViqqqKsc5VVVV6NOnD+rq6tocT0pK\nanPPvXv3chtYIiIiIgq4mpoaDB8+3OvrfEqcR44ciYqKCly4cAEREREoLCzEvffei48++ghnz56F\nxWLB6dOnkZWVBavViqKiojbHW0tMTHTUTBM1W716NWbNmhXsYVCIYVyQEcYFGWFckJG8vDyfrvMp\ncY6JicHSpUsxf/58KIqCWbNmYdiwYViyZAnmzp0LAI7en2az2fA4kSfKysqCPQQKQYwLMsK4ICOM\nC/InnzdAmTZtGqZNm9bi2IwZMzBjxow257o6TkRERETUVbBHEoW0G264IdhDoBDEuCAjjAsywrgg\nf2LiTCFt2LBhwR4ChSDGBRlhXJARxgX5ExNnCmm5ubnBHgKFIMYFGWFckBHGBfkTE2ciIiIiIg8I\nBQUFerAHAQAnTpxgOzoiIiIiCri8vDykp6d7fR1nnImIiIiIPMDEmUIaa9PICOOCjDAuyAjjgvyJ\niTMRERERkQdY40xEREREPQprnImIiIiIAoiJM4U01qaREcYFGWFckBHGBfkTE2ciIiIiIg+wxpmI\niIiIehTWOBMRERERBRATZwpprE0jI4wLMsK4ICOMC/InJs5ERERERB5gjTMRERER9SiscSYiIiIi\nCiAmzhTSWJtGRhgXZIRxQUYYF6FDPHYMpv/8J9jD6BAmzkREREQUcPKmTQh/5ZVgD6NDmDhTSLvq\nqquCPQQKQYwLMsK4ICOMi9AhnjwJ6cgRoL4+2EPxGRNnIiIiIgo4saICgqpCOnAg2EPxGRNnCmms\nTSMjjAsywrggI4yL0CGWl0MdMgTy3r3BHorPmDgTERERUcCJJ0/COmsWJCbORIHB2jQywrggI4wL\nMsK4CBG6DrGiAraZMznjTERERETkivD999AjI6GOHQvx9GkIFy4Ee0g+YeJMIY21aWSEcUFGGBdk\nhHERGsTycmipqYAkQRk1qsuWazBxJiIiIqKAEk+etCfOANTs7C5brsHEmUIaa9PICOOCjDAuyAjj\nIjQ4J85KdjZnnImIiIiIjIjl5dDS0gAAak4O5Ly8II/IN0ycKaSxNo2MMC7ICOOCjDAuQoPzjLM2\ncCDQ0ADh9OngDsoHTJyJiIiIKKDEkyehNyXOEASoY8d2yTpnJs4U0libRkYYF2SEcUFGGBehwXnG\nGQCUnBxIXbBcg4kzEREREQWOokCorITWt6/jUFftrMHEmUIaa9PICOOCjDAuyAjjIviE776DnpgI\nmEyOY47OGroexJF5j4kzERERUTcnb9sGWCxBebZ48iS0fv1aHNP79gXCwiCWlQVlTL5i4kwhjbVp\nZIRxQUYYFz2TdOgQpG++cfk+48Iu8uc/h7xlS1Ce3bq+uZmSnd3l6pyZOBMREVGXFfb66wj/85+D\nPYzQ1tAAsbwc0uHDQXm8cw9nZ12xzpmJM4U01qaREcYFGWFc9EC6DtOmTZAOHHB5CuMCkI4ehaDr\nkA4dCsrzxYoK1zPOPSVxvuSSSzB79mzMnj0bTz/9NABg3bp1mDp1KqZOnYqNGzc6znV1nIiIiMhX\nYkEBIIoQT58GqquDPZyQJRYXQ01LC96Ms4tSDTU7G/L+/YCqBmFUvpF9vTA8PByrVq1yvLZarXjx\nxRexYsUKWCwWzJs3D5MnT3Z5nMgTrE0jI4wLMsK46HlMX38N2+TJkAoKIB84AMUgBhgXgFRcDNuM\nGQj7xz8AqxUwmz26TiwogFhVZfjv6g1XibPeuze0pCSIRUXQsrI69IzO4rdSjQMHDiAjIwPx8fHo\n27cvUlJScOTIEZfHiYiIiDpC3rQJtmuvhTJ2LKT9+4M9nJAlFhdDHTECWno6xOJij68L+9e/EPbG\nGx1/vosaZ6Dr1Tn7nDhbrVb88Ic/xNy5c7F7926cOXMGSUlJeP/997F+/XokJSWhsrLS5XEiT7A2\njYwwLsgI46KHsdlg2rYNyqRJUEePdlnnzLgApKIiqBkZUEeMgOxFnbO0dy+koqKOPbyxEUJNDfSk\nJMO3u1qds8+J8+bNm/HRRx9h6dKlWLJkCSxNvQHnzJmD6dOntznf+bggCL4+loiIiAjy7t1QBw2C\nnpgIdcwYyPv2BXtIoUnXIZaUQBs6FOqIEZ4vENQ0yPv2QTx+3F7e4SOxogJaSgogGqecak4O5C7U\nks7nGueEhAQAwKhRo9CnTx+kpqZi/fr1jverqqrQp08f1NXVoaqqqsXxJBd/dSxcuBD9+/cHAMTF\nxWHUqFGO2qTmvxj5mq/5mq+bj4XKePiar/m681/fsHkzlGuvRW5uLgRFwczycqC2FrlNCTR/X9hf\n71q7FpNVFXpCAtQRI1D34ovY5cG/x6TkZGi9e6PBZsO+//wHY+fO9en5h9avx7DoaMdMbev3t9TV\n4cZDhxy114H692j+72VNG64sWLAAvhAKCgq83uvwwoULCAsLQ3h4OMrLy3HHHXdg7dq1uPnmmx2L\nAOfPn4/PPvsMVqsV06dPb3O8tRMnTiAnJ8enH4KIiIh6lpgbb0TD0qVQrr3W/vqGG1D/1FNQJ04M\n7sBCjLx9OyL+3/9DzeefQywrQ8z06bjgwayz+cMPYVq/HrBYYJ07F7ZZs3x6vvlf/4L89deod1Mr\nHXvllah77TWoY8f69Axf5OXlIT093evrZF8edvToUTz66KMwm82QJAlPPfUUoqOjsWTJEsxt+otk\n6dKlAACz2Wx4nMgTzrMERM0YF2SEcdGDVFdDOnIEilOSrI4eDXn//jaJc0+PC7GpvhkAtPR0CLW1\nEM6ehR4f7/Y6KS8PSnY2xLNnIRUWwubr81101HDWXOfcmYmzr3xKnLOzs7Fhw4Y2x2fMmIEZM2Z4\nfJyIiIjIW6YtW6BceikQHu44powZA3nXriCOKjRJTfXNAABBgDp8OKTDh9ttMSfv24eGmTOhl5V1\naKtu8eRJKKNGuT1Hyc5B3ca9qP/h3YiL87oQolNx50AKaT15loBcY1yQEcZFz9Hchs6ZOmaMYUu6\nnh4XYnEx1ObEGYDiyQJBRYF06BCUMWOgZmZCKiz0/fnl5dDbmXH+uGICzmzYj8sui8Xy5WLine truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb0b4dd0>"
"<matplotlib.figure.Figure at 0x7f1c15400850>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb2d9b10>"
"<matplotlib.figure.Figure at 0x7f1c15392150>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAs4AAAF9CAYAAAAUWu5qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlgVNXZP/DvvXdmsi8kmWzsJKwSIAmrgCyCQBBBFl/R\nClgRkWK10t9bi7bWvm5tRaVVwaUu1bqAirILooBRwmKAEJawJJCEhMxkIXtmvb8/YgIhdyYzk0lm\nCN/PP3XOPfeeE306eTg89xwhKytLBhERERER2SV6egJERERERNcDJs5ERERERA5g4kxERERE5AAm\nzkREREREDmDiTERERETkACbOREREREQOYOJMREREROQAJs5ERB1QTk4OFixYgMGDB2PcuHF4++23\nnX7GiRMncP/992P48OEYOnQoHn30Uej1+jaYLRHR9YGJMxFRB2M0GvHggw/C19cX69evx4oVK7B6\n9Wps2LDB4WdUVlbiwQcfRHh4OD777DO89957KCwsxCOPPNKGMyci8m5MnImI3MRoNOJPf/oTkpKS\nMHbsWGzYsAH9+vVzKmF1h7179yI/Px/PPvss+vTpgzvuuAN33HEHPvzwQ4efkZ6ejpKSEqxcuRI9\ne/ZEQkICnnjiCRw5cgQnTpxow9kTEXkvlacnQETUUaxduxbffvstVq9ejcjISDz77LMAAEEQHLq/\noKAA06dPt3n9nXfeQXJycovPOXbsGLp164bIyMjGtuHDh+Prr7+G2WyGStXyV7/ZbAYAaDSaxjYf\nHx8AwPHjxzFgwIAWn0FE1NEwcSYicpNPPvkE999/P8aOHQsAWLFiBe6++26H74+KisLGjRttXr86\nEbantLQUnTp1Ql1dHVJSUjBt2jSMGDECFosFly9fRkRERIvPGDx4MPz8/LB27Vo8+uijqKmpweuv\nvw5JklBWVubwz0RE1JEwcSYicoOKigqUlZWhb9++jW29e/d26hmSJKFr165um5MoioiNjUVERARk\nWXbq3oiICPzjH//AX//6V7z77ruQJAkPPfQQ0tLSHF5BJyLqaJg4ExF5CXeVaoSFhaG0tBQajQYf\nffQRAOCrr76CJEkIDQ11eD6TJk3CpEmTUFpaCj8/P9TV1eG1115DdHS0w88gIupImDgTEblBcHAw\nwsLCcPLkSYwbNw4AcPr0aaee4a5SjUGDBuHNN99EUVERoqKiAAD79+9Hv379mtU3V1ZWory8HJGR\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16faffe490>"
"<matplotlib.figure.Figure at 0x7f1c15225650>"
]
}
],
"prompt_number": 21
"prompt_number": 19
},
{
"cell_type": "markdown",
@@ -1266,7 +1259,7 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb2aca50>"
"<matplotlib.figure.Figure at 0x7f1c15394710>"
]
},
{
@@ -1274,7 +1267,7 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb0f9590>"
"<matplotlib.figure.Figure at 0x7f1c1529ce90>"
]
},
{
@@ -1282,11 +1275,11 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb01fa50>"
"<matplotlib.figure.Figure at 0x7f1c1525aad0>"
]
}
],
"prompt_number": 22
"prompt_number": 20
},
{
"cell_type": "markdown",
@@ -1317,7 +1310,7 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAF9CAYAAAAN0QDMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X18zfX/x/HnOTtn1xvmIomFhK9MKF25TF9qmItUFFHo\n67L4qq9CGl2QSr8SRaSWXES5aGmKdLUuRFRK5BtiruViZ9fbOef3h6+V9jE7Z+dq2+N+u+2Wzzmf\n89lr8+x47b3XeR/Tzp07nQIAAAAqALO/CwAAAAB8heYXAAAAFQbNLwAAACoMml8AAABUGDS/AAAA\nqDBofgEAAFBh0PwCQBlz9913a9asWf4uAwDKJJpfAGXenj17NGDAAF155ZVq37695s2b5/I1hg8f\nro4dO6pZs2Zq3769Jk+erPT09HPO+eGHH9S7d281a9ZMnTp10sqVK8+5f/ny5erTp49atWqla665\nRgMHDtTWrVtL9bUFugt9T0ri2LFjGjlypFq0aKHrr79e06dPl8PhKLx/48aNaty48Tkf//jHP5SX\nl2d4vccee0yNGzd2qxYA5Z/F3wUAQGnk5eXpvvvuU/369bV8+XLt2LFDEyZMULVq1dSrV68SX+fq\nq6/W8OHDVb16dR08eFCTJ0/W+PHjNXv2bEnSiRMnNGTIEP3zn//UM888oy+++EITJkxQrVq1dO21\n10qSNm/erF69eqlFixayWCx6+eWXNWjQIK1atUqXXnqpV75+fyrJ96QkRo8erby8PC1atEjHjh3T\nQw89pIiICI0aNeqc87766is5nX++L1NwcHCRa61fv1579+6VJJlMJve+MADlGiu/ANySl5enSZMm\nqWXLlmrbtq1Wrlzpl9W2zz//XGlpaXryySfVsGFDde/eXd27d9fChQtdus7gwYPVrFkzXXzxxbrq\nqqt0++2365tvvim8Pzk5WQ6HQ48//rguu+wy3XPPPbrmmmu0aNGiwnOmT5+uvn37qlGjRrrsssuU\nmJio7OxsffHFFx77es/KysrSQw89pBYtWuimm27S+vXrPf45LqQk35ML2bFjh7Zs2aJHH31UTZo0\nUfv27XXPPfdo8eLFRc6NiYlR1apVCz/+7siRI5o6daqmTp1aqq8LQPlG8wvALXPmzNH69ev14osv\nav78+VqxYoWkkq+2HTx4UC1atDjvx3fffVei62zbtk2xsbGqUaNG4W3XXHONdu7cqYKCAte/MEmH\nDh1SSkqKrr766nM+T7NmzWS1Wgtva9WqlX788cfzXuf06dOSpOjoaLfqKM7y5cvVtm1brV69Wlde\neaUmTpyo3NzcEj128+bNxX7vDx8+XKLruPM9MbqGxWJR8+bNC2+75pprdOLECe3fv/+cczt16qS2\nbdtqyJAh2rZt2zn3OZ1OPfzwwxo6dKhq165d4s8PoOJh7AGAW5YsWaJ7771Xbdu2lSQ9+OCD6tu3\nb4kff9FFF+m999477/1/bWaLc+LECVWpUkU5OTnq0qWL4uPjde2118put+vUqVOqVq1aiWuaPXu2\n5s2bp5ycHLVp00YvvPBCkc9z+PBh9ezZU/fff79iYmL0xx9/nPd6zz77rOrWratbbrmlxDWUVJs2\nbdSjRw9JZ1atP/jgA+3bt0+XX375BR8bFxdX7Pe+evXqJarBne/J3/3xxx+qXLmyJKl3796KjY0t\nHHc4ceKE6tSpoxo1auipp57SFVdcoczMTL355pvq16+fVq1apfr160uS5s2bp6CgIPXp06fEnxtA\nxUTzC8Bl6enpOnnypBo1alR4W0marr8KCgpSnTp1PFaT2WxWrVq1VK1atXPmQl3Rv39/de3aVbt3\n79Zzzz2np556Sk8++aSkP1e0rVarLrnkElWuXLlwZdfIzJkztWnTJi1atMhwNrW06tatW/jnSpUq\nSVKx9fxVSEiIR773rn5Pzufs31etWrV00UUXFbm/Xr16qlevXuFxixYt1KVLFy1atEiTJk3S9u3b\n9frrrxeO3Jy9nrs5AFC+0fwC8IuDBw+qa9eu571//vz5uuqqqy54nZiYGJ04cULBwcF66623JEmr\nVq1SUFBQ4YpiSVWqVEmVKlVS3bp1FR0drf79+2vo0KGqU6eOYmJidOzYMVWtWlXvvvuuJGnWrFmG\nK8uvvvqqFi1apKSkpMKVSU8LCgoqcltJm73NmzfrvvvuO+/9KSkpqlmz5gWv48r35HyqVq1a2DC/\n9NJLkqRNmzYVXt+I2WxWo0aNdODAAUnSt99+q9OnT6tz587nnDdp0iS99957ev3110tcD4Dyj+YX\ngMuio6MVExOjX375Re3bt5ck/frrry5dw1NjD82aNdPcuXN15MiRwlXDs1tjWSznPsXZbDadPn1a\nNWrUuOBq7NlVzbPbacXFxemFF15QXl5e4WO//fZbxcXFnfO4efPm6fXXX1dSUpIaN25coq/B1zw1\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb2c1a10>"
"<matplotlib.figure.Figure at 0x7f1c15178210>"
]
},
{
@@ -1325,11 +1318,11 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAF9CAYAAAAN0QDMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4k2XWx/Ff0r1NWMpWtgoVhEHKpuKGgDogBQoisiiI\nI+CwqIOCooDYQRREARU7IygyIKAsylaxvOKgo7ggiAKCIApYyiJradK9Sd4/OnSsfVrakiZp+/1c\nkwvuPPeTnJQzj6d3Tu6YDhw44BIAAABQBZi9HQAAAADgKRS/AAAAqDIofgEAAFBlUPwCAACgyqD4\nBQAAQJVB8QsAAIAqg+IXACqg++67T/Hx8d4OAwAqHIpfAJXC4cOHNWzYMLVt21ZdunTRm2++WerH\nuO+++9SyZcsCt7lz5xrO/fXXX9W+fXvddttthY59/vnnGjBggNq2bavrr79eTzzxRKljqUh27dql\n/v37q02bNurWrZvWrl1bqvNTU1M1bdo0de/eXW3bttWtt96qZ599VqmpqQXmffrpp+rVq5eio6PV\nu3dvffbZZwWOP/XUU4X+/SZMmHDZrw9A5eLv7QAA4HJlZ2frwQcfVFRUlFavXq39+/dr8uTJql27\ntvr161eqxxo+fLhGjBiRPw4JCSk0JycnR48//rhat26t48ePFzi2fft2jRkzRiNGjNCMGTMUEBCg\nX375pWwvrAI4d+6cRo4cqT//+c968cUX9fnnn2vy5Mlq0KCBrr/++hI9xpkzZ3T27FlNnjxZV155\npZKTkzV58mT9+uuveuuttyRJP//8sx5++GGNGDFCffv21fvvv6+HHnpIGzZsUNOmTSVJJpNJPXv2\n1JQpU/IfOygoyP0vGkCFxsovgDLLzs7W1KlT1aFDB91yyy1au3atWrZsWeqVv8v12WefKTk5Wc89\n95yuuuoq9enTR3369NHSpUtL/VihoaGqVatW/i00NLTQnHnz5qlNmza6/vrr5XIV/JLM+Ph4de/e\nXY899piaN2+uJk2a6Pbbby/zaytOenq6Hn/8cbVv31633367Pv7443J5nuIkJCTI6XTq2Wef1ZVX\nXqm//OUv6tixo5YvX17ix4iKitK8efPUtWtXNW7cWDfeeKPuv/9+ffnll7Lb7ZKkVatWqVGjRnrs\nsccUFRWlJ554QhEREVq1alX+47hcLgUFBRX497NYLG5/zQAqNopfAGU2f/58ffzxx3r11Ve1cOFC\nrVmzRlLeClxJHD9+XO3bty/y9u2335bocfbs2aPIyEjVrVs3/76OHTvqwIEDys3NLdVrWrFiha6/\n/nrFxsbqtddeU3Z2doHjX3/9tT766CM98cQThQrfnJwc7dy5Uy1bttTw4cN10003afDgwfrqq69K\nFUNJrV69WrfccovWr1+vtm3basqUKcrKyirRuTt27Cj2Z3/y5MkSPc6ePXvUpk0bBQQE5N933XXX\naffu3WV6TRelpqYqODhYgYGB+c9z7bXXFpjzx+cxmUz65JNPdOONNyomJkbPPfdcfvEMABfR9gCg\nzN5991098MADuuWWWyRJEyZM0ODBg0t8fr169bRhw4Yij/++mC3OuXPnVLNmTWVmZqpnz56KiYnR\n9ddfL4fDoZSUFNWuXbtEj9OnTx81btxYtWrV0u7du/XSSy/p2LFjeuGFFyRJKSkpmjRpkmbPnq3g\n4OBC558/f145OTl666239Le//U0TJ07U2rVr9de//lUffvihGjduXKI4SqpTp07q27evJGnEiBH6\n8MMPlZSUpObNm1/y3Ojo6GJ/9nXq1ClRDBd/9idPntSdd96pRx55ROHh4Tp79mzJXoSBEydOaNmy\nZXrggQfyi99z587p2muv1e7duzV8+HDNmjVLNWvW1M6dO/PP69y5s2JiYlS/fn39/PPPmj17tn76\n6Se9/fbbZY4FQOVD8QugTFJTU3X+/Hm1aNEi/76SFF2/5+fn59aC0Gw2q0GDBqpdu3ahVdmSGDBg\nQP7fmzdvLn9/fz355JN66qmnVKNGDT3zzDPq3r27rrnmGsPzLz7nTTfdpCFDhkjK+xDWhx9+qI0b\nN2r06NFleFVFa9KkSf7fq1evLkm6cOFCic4NCgpyy8/+4ip/QECAGjZsqBo1apQ4BiOpqakaPXq0\nrr32Wj3yyCOFjoeGhqpRo0aqVq1aoWMxMTH5f2/evLnq1KmjoUOH6ocfflDr1q3LHBOAyoXiF4DX\nHD9+XL169Sry+MKFC4ssNH8vPDxc586dU2BgoJYtWyZJWrdunfz8/FSjRo0yx3f11VdLkpKTk1Wj\nRg199dVXyszM1LvvvitJcjgccjgcatOmjRYuXKi2bdvKZDIVKEpNJpMaNmyoU6dOlTmOovj5+RW6\nr6RF/44dO/Tggw8WeTwxMVERERGXfJzw8HCdPn1atWrV0vvvvy8pr++5pKvtv2ez2TR8+HDVq1dP\nr776aoH2mVq1auncuXNq1qyZ1q1bJ0las2ZNsc9z8d/v2LFjFL8A8lH8AiiTatWqKTw8XD/++KO6\ndOkiSfrpp59K9Rjuanto06aNFixYoN9++0316tWTJG3btk0tW7aUv3/By5zNZtOFCxdUt27d/LfU\ni/Lzzz9Lkho1aiRJev/99+VwOPKPL1u2TJs3b9aSJUtUv359BQUF6corr9TRo0fz57hcLp04ccJw\nSzRvclfbQ3R0tF555RVlZ2fn/zy/+eYbRUdHF5p7/vx5paWlqX79+oUKd7vdrhEjRqhWrVqKj48v\n0EN88Xk+/fTTAvdt375d3bp1KzK2P/77AYBE8QvgMtxzzz1asmSJWrVqpXr16umVV14p1fnuanvo\n3LmzGjdurKlTp+rxxx/X/v37lZCQoOeee67Q3MWLF+sf//iHli5dquuuuy7//qSkJK1Zs0a33Xab\nwsPDtX//fs2aNUt9+/bNXz2OjIws8Fg1atSQv79//lZbkjRo0CC9+OKL6tSpk9q3b69169YpJSWl\nwFvyF10siLds2XLZP4PSclfbQ2xsrOLj4xUXF6cRI0Zo69at2r59u5YsWVJo7qxZs7Ru3Tpt2bJF\nDRo0yL/fbrdr+PDh8vf319///nelpKTkH6tVq5bMZrMGDhyo5cuXa+7cuerbt6/WrFmjU6dOadCg\nQZLydr54+eWX1aNHD9WrV09JSUmaOXOmrrvuuvwVYACQKH4BXIZRo0bp1KlTGjdunKxWqyZMmKBt\n27ZdckXV3QICAvTGG28oLi5Od999t2rUqKFx48bpzjvvLDTXZDIZ7kYRGBiobdu26Z133lFGRobq\n16+vvn37asyYMUU+r9Fj3XfffUpNTdXLL7+sCxcuqFmzZpo/f75hoZmenl6gReJylXSXDXeqWbOm\n3nzzTU2fPl39+vVTRESEZs6cqY4dOxrGZxTj3r17tXv3bplMJt16660F5v/73/9WgwYNdOWVVyo+\nPl4vvfSSFi1apCZNmig+Pj7/5+fn56eDBw9qw4YNSktLU926ddW1a1c9+uij5fbaAVRMpgMHDhTZ\nIDZr1ixt2LBB4eHhSkhIkJTXy5WYmCgp78MFDz/8sGciBeDzjh49qm7dumnVqlVq06aNt8PxaQcP\nHlRsbKzmz5+vrl27ejscAKgyit3nt3v37lqwYEH++OjRo1q/fr0SEhK0bt06rVu3TseOHSv3IAH4\npsOHD2v58uX65ZdfdPDgQc2YMUPNmjXjw0Ul8PXXX6t9+/YUvgDgYcUWv+3bty/wSWmLxSJ/f39l\nZmYqKytLAQEBslqt5R4kAN9kNpu1du1a3X333Ro6dKhcLpdef/11mc18f86l3Hffffm7RgAAPKdU\nPb81a9bUsGHD1LVrVzmdTj355JOGey0CqBquuOIKvffee94OAwCAEitV8ZucnKwVK1Zoy5YtysnJ\n0T333KOuXbuWeEscAAAAwJtKVfzu3r1b0dHRslgskqRWrVpp3759+Xt8XvTdd9+VaYNzAAAAoDRs\nNptatWpV4vmlKn4bNWqkPXv2KDs7W06nU3v37jXc7aF27drq0KFDaR4aVUBCQoJiY2O9HQZ8DHkB\nI+QFjJAXMLJz585SzS+2+J02bZo2b96slJQUdenSRXFxcerWrZv69esnSRo4cKCioqLKHi2qlKSk\nJG+HAB9EXsAIeQEj5AXcodjiNy4uTnFxcQXuu+2229jbFwAAABUS+xHBY/785z97OwT4IPICRsgL\nGCEv4A4Uv/CYFi1aeDsE+CDyAkbICxghL+AOFL/wmK1bt3o7BPgg8gJGyAsYIS/gDhS/AAAAqDJM\nBw4ccLn7QY8ePcpWZwAAACh3O3fuVOPGjUs8n5VfAAAAVBkUv/AYerVghLyAEfICRsgLuAPFLwAA\nAKoMen4BAABQYdHzCwAAABSB4hceQ68WjJAXMEJewAh5AXeg+AUAAECVQc8vAAAAKix6fgEAAIAi\nUPzCY+jVghHyAkbICxghL+AOFL8AAACoMuj5BQAAQIVFzy8AAABQBIpfeAy9WjBCXsAIeQEj5AXc\ngeIXAAAAVQY9vwAAAKiw6PkFAAAAikDxC4+hVwtGyAsYIS9ghLyAO1D8AgAAoMqg5xcAAAAVFj2/\nAAAAQBEofuEx9GrBCHkBI+QFjJAXcAeKXwAAAFQZ9PwCAACgwiptz69/OcYCAECV5nRKJ0+alJRk\n1rFjeW+2duzoUOPGzkJzXS7JZPJ0hEDVQ/ELj9m6das6derk7TDgY8gLGKkoeeFwSDk5UnBw4WNx\ncSF6440g1azpUuPGTjVqlFfw1quXZVj8jh4dqo0bAxUW5pLF4sr/88knM9WlS26h+Z984q/jx80F\n5losUmSkQ9Wquf2l+oSKkhfwbRS/AACUwI4dfvrkkwAlJZl19Gje7dgxs6ZPz9CDD2YVmvLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb2e40d0>"
"<matplotlib.figure.Figure at 0x7f1c15400990>"
]
}
],
"prompt_number": 23
"prompt_number": 21
},
{
"cell_type": "heading",
@@ -1343,7 +1336,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's leave g unchanged and investigate the effect of modifying h. We know that h affects how much of we favor the measurement of $\\dot{x}$ vs our predictiton. But what does this *mean*? If our signal is changing a lot (quickly relative to the time step of our filter), then a large $h$ will cause us to react to those transient changes rapidly. A smaller $h$ will cause us to react more slowly.\n",
"Now let's leave g unchanged and investigate the effect of modifying h. We know that h affects how much of we favor the measurement of $\\dot{x}$ vs our prediction. But what does this *mean*? If our signal is changing a lot (quickly relative to the time step of our filter), then a large $h$ will cause us to react to those transient changes rapidly. A smaller $h$ will cause us to react more slowly.\n",
"\n",
"We will look at three examples. We have a noiseless measurement that slowly goes from 0 to 1 in 50 steps. Our first filter uses a nearly correct initial value for $\\dot{x}$ and a small $h$. You can see from the output that the filter output is very close to the signal. The second filter uses the very incorrect guess of $\\dot{x}=2$. Here we see the filter 'ringing' until it settles down and finds the signal. The third filter uses the same conditions but it now sets $h=0.5$. If you look at the amplitude of the ringing you can see that it is much smaller than in the second chart, but the frequency is greater. It also settles down a bit quicker than the second filter, though not by much."
]
@@ -1373,7 +1366,7 @@
"output_type": "display_data",
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb113c90>"
"<matplotlib.figure.Figure at 0x7f1c151f5b90>"
]
},
{
@@ -1381,7 +1374,7 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAF9CAYAAAAKk97ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4lGX69vFzSmZSSUihSgzVAEaKYEGQVZRdUMDFdRV7\nwVVE17ayWMG6Ylu7or66CqiLawGsoC4qKq6KCOoPVFRCUUwjvcxknvePkJBJnmAymT7fz3FwwDMz\nmbmCl+HKnXPu27J582ZDAAAAQIywhroAAAAAIJgYgAEAABBTGIABAAAQUxiAAQAAEFMYgAEAABBT\nGIABAAAQUxiAAUSk3NxcvfLKK6EuwydHH320Xn755VCXAQAxiwEYAPZYuHChTjjhBI0cOVKHH364\nZs2apS1btgTktSwWS0Cet6NWr16t4447Tnl5eTr++OP1/vvvd/g5fvzxR5155pkaNmyYxo8fr8cf\nf9zr/pdeekm5ublev8aOHeuvTwEAOswe6gIAIFysW7dOZ599tvLy8uRyuXT77bfrrLPO0muvvabU\n1NRQl+d333//vS6++GKdd955mjZtml588UXNnj1by5cvV9++fdv1HHV1dTr//PPVr18/vfDCC9q0\naZOuueYaZWZm6o9//GPT43r06KEXX3yx6dpqZf0FQOjwFQhA2KutrdW1116rkSNHauzYsXrhhRe8\n7v/yyy81bNgwrVu3rum2119/XSNHjtTWrVvb/TqNK8D9+/dXbm6u/v73v6uwsNDref2loKBA559/\nvoYPH67jjjtOX3zxhd9f47csXbpU++23ny6//HL169dPV111lXr06KGlS5e2+znef/99bd++Xbfc\ncosGDRqkqVOnaurUqVq0aJHX46xWqzIyMpp+de3a1d+fDgC0GyvAAMLeww8/rPfee08PP/yw0tLS\nNH/+fK/7hw0bpksuuUR/+9vftGzZMpWXl2v+/PmaP3++9t9/f+3cuVPHHXdcm8//xBNP6OCDD251\ne2lpqSSpS5cufv18JGnRokW68cYbdfXVV2vevHm69tpr9frrr7frY5cvX6558+a1eX97h+mNGzdq\n1KhRXreNHj1aGzZsaNfHNz5Hdna2unXr1nTbIYccomXLlsntdstub/hnprCwUL/73e9ksViUl5en\nK664Qjk5Oe1+HQDwJwZgAGHv+eef18yZM3XYYYdJkubMmaNTTz3V6zEzZ87U2rVrdd1116moqEgT\nJkzQ1KlTJUndu3fX8uXL23z+5sNbI5fLpXvvvVejR482HY47a+rUqTrqqKMkSWeccYb++te/qqqq\nSomJib/5sRMmTNCIESM6XUNxcbFGjRqlDRs26Nxzz9WCBQvUtWvXDq14FxcXq2vXrqqpqdHkyZM1\nadIkHXrooaqvr9fu3buVmZmp/v376x//+IcGDhyooqIiPfLII5oxY4Zee+01paend/rzAICOYgAG\nENZKS0tVWlqqQYMGNd12wAEHmD72jjvu0KRJk5SSkuL1RiybzaY+ffq0+zUNw9ANN9yg4uJiPffc\nc74Xvw/NVz8b88WlpaXtGoCTkpKUlJTkt1oSExO13377dWql22q1qlevXsrMzJRhGF73DRs2TMOG\nDWu6Puigg3TUUUfplVde0bnnnuvzawKArxiAAYS1juyWsHnzZtXU1Kiurk5bt25Vbm6uJHUoAmEY\nhubNm6dPP/1UixYtUkZGRuc+gTY0RgOaazk4tmVfEQiLxdLuFdyMjAwVFxdrwIABTVvKvfTSS8rM\nzGzXx0tSenq6iouL5XA4tHjxYknSK6+8IpvNprS0NNOPSUpK0v77768dO3a0+3UAwJ8YgAGEtS5d\nuqhr167avHmzxo8fL6lh0G2pqKhIV111lS6//HL9+uuvuvzyy/Xiiy8qMTGxQxGIm266SR9//LEW\nLVqknj17+v8T8gN/RSDy8vK0evVqr9s+/fRTHXvssa0eW1BQoNraWu23335etx900EFauHChdu3a\npe7du0uSPvnkE+Xm5poO+VLDmxrz8/M1efLkTn8OAOALBmAAYe+UU07RM888o7y8PHXt2lV33nmn\n1/2GYWjOnDnKzc3V2WefLZfLpbVr1+rGG2/UggUL2h2BmD9/vt5++2098sgjstvtKigokNQwhDud\nTq/H5ubmavTo0a12OwgGf0Ug/vznP2vJkiW65557NG3aNL300kv69ddfdfLJJ7d67BVXXKFPP/1U\nmzZt8rr9yCOPVJ8+fXT99dfrb3/7mzZt2qQVK1bolltuaXrMfffdp+HDh6tv374qKyvTwoULZbVa\nNW3atE5/DgDgCwZgAGFv1qxZKigo0OzZs5WYmKhLL71U69evb7r/scce06ZNm5pWeePi4nT33Xdr\n+vTpOuyww7z2o92X559/XhaLRSeddJLX7bfffrtOOOGEpuvKykpJ5m+e81UoDsbo37+/HnzwQd15\n55168sknlZOTowcffLDN3RnMaoyLi9Njjz2mefPm6U9/+pPS0tJ06aWXev19VVRU6Prrr1dJSYlS\nUlI0fPhwLV68mDfAAQgZy+bNm9sXOjMxePDgpjejjB49Wtdee63fCgOAcLV69WrNmjVLy5Yt83pz\nHgAgMnRqBTg+Pr7pjRMAECvWrl2ryZMnM/wCQIQiAgEAHTR37txQlwAA6IROHYVcV1en6dOna8aM\nGfrss8/8VRMAAAAQMJ3KABcVFSkjI0MbN27UxRdfrFWrVsnhcPizPgAAAMCvOhWBaNwgPi8vT926\nddP27dvVr18/SQ1n0XdkM3UAAADAF+Xl5RoyZEi7H+/zAFxaWiqn06n4+Hht375du3btUq9evZru\nz8zM1MiRI319ekSpFStWaMqUKaEuA2GGvoAZ+gJm6AuYae8JmI18HoB/+OEHXX311XI4HLLZbLr1\n1lsVHx/v69MhRuTn54e6BIQh+gJm6AuYoS/gDz4PwCNGjNCbb77pz1oAAACAgOvULhBARx1zzDGh\nLgFhiL6AGfoCZugL+AMDMIKq8eRAoDn6AmboC5ihL+APDMAIqjVr1oS6BIQh+gJm6AuYoS/gDwzA\nAAAAiCmdOghjX7Zt28Y2aAAAAAi4devWqU+fPu1+PCvAAAAAiCkMwAgqslswQ1/ADH0BM/QF/IEB\nGAAAADGFDDAAAAAiGhlgAAAAYB8YgBFUZLdghr6AGfoCZugL+AMDMAAAAGIKGWAAAABENDLAAAAA\nwD4wACOoyG7BDH0BM/QFzNAX8AcGYAAAAMQUMsAAAACIaGSAAQAAgH1gAEZQkd2CGfoCZugLmKEv\n4A8MwAAAAIgpZIABAAAQ0cgAAwAAAPvAAIygIrsFM/QFzNAXMENfwB8YgAEAABBTyAADAAAgopEB\nBgAAAPaBARhBRXYLZugLmKEvYIa+gD8wAAMAACCmkAEGAABARCMDDAAAAOwDAzCCiuwWzNAXMENf\nwAx9AX9gAAYAAEBMIQMMAACAiEYGGAAAANgHBuBOqK2VjICsn0cvslswQ1/ADH0BM/QF/IEB+DcY\nhvTssw5VVbW+76GH4pWbm6ozzkjS/fc79cknNtXWBr9GAAAAtB8Z4H2oqpIuvTRJ331n1XPPVahn\nz9Z/Vdu3W/TJJ3Z9+qldn3xi13ff2fTQQ5WaNs0VgooBAABiT0czwPYA1hLRfvrJqjPOSFJeXr3e\neKNcCQnmj9tvP0P77efSiSc2DLwVFcQiAAAAwhkRCBPvvmvX73+fojPOqNNDD1W1OfyaSU6WUlJa\n315TI9XX+6/GSEV2C2boC5ihL2CGvoA/sAJs4t134/TUU5UaM8btt+e86654/fyzVQ88UCUr33YA\nAACEDBngIKmslP7852QdcIBHd99dJYsl1BUBAABEB/YBDlNJSdLzz1foq69suvrqBHLCAAAAIRLz\nA3BNTfBeKyVFeuGFCn3yiV3z58fmEEx2C2boC5ihL2CGvoA/xOwA7PFId9wRr9NOSw7q66amGnrx\nxQq53ZLbfxFjAAAAtFNMZoArK6ULLkhSUZFVTz1VoR49YnApFgAAIEqwD3A7PPJIvAxDWrasXA5H\nqKsBAABAMMVcBKK8XFq40Kn586sZfkOA7BbM0BcwQ1/ADH0Bf+jUAFxRUaGxY8fqySef9Fc9Abd+\nvV3HHefSwIGeUJfipbJSevPNuFCXAQAAEPU6FYF49NFHdeCBB8oSQZvajhvn1rhx4ffus8JCq668\nMlElJdWaMaMu1OUEzNixY0NdAsIQfQEz9AXM0BfwB58H4B9++EHFxcU68MADZcTifl5+tv/+Hr38\ncrlOOCFFDoehE090hbokAACAqORzBOKee+7RJZdc4s9aYt6gQR795z/luvbaRK1YEZ1xCLJbMENf\nwAx9ATP0BfzBpwH43XffVU5Ojnr27Mnqr58NGeLR0qUVuvzyRP3wQ8y9RxEAACDgfIpAbNiwQStX\nrtQ777yjkpISWa1WdevWTccff7zX4y666CJlZ2dLklJTU5WXl9eU3Wn8Di4Y1x6P9OGHa2SxBOf1\nOnt90EH1mjv3I23dWqp+/caEvB6uuQ70deNt4VIP11xzHb7XjbeFSz1ch+a68c/5+fmSpJkzZ6oj\nOn0QxoMPPqikpCSdc845XreH00EYjz3m1K5dFl1/fRDPPQYAAEBQdPQgjKj/GXtNjXTfffGaMoU3\nlYWD5t+5AY3oC5ihL2CGvoA/2Dv7BBdffLE/6giYJUucystza/jw+lCXAgAAgDDQ6QhEW8IhAlFb\nK40alaqnnqrQqFEMwAAAANGICEQzzz3n0AEH1Ef88Ltjh0WnnZYktzvUlQAAAES+qB6AHQ5p7tzq\nUJfRab16GaqstOiJJ5yhLqXTyG7BDH0BM/QFzNAX8IdOZ4DD2amnRseRwhaLdOedVZo0KULine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb05a310>"
"<matplotlib.figure.Figure at 0x7f1c1529c7d0>"
]
},
{
@@ -1389,11 +1382,11 @@
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAF9CAYAAAAKk97ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VGXe//HPTCaTCoFkEnqkV+lSRBQVREEBxZ8F1xUL\nqxRxLauiWLA+i66uri4ruo+uqMgDa0FWVlEUBRUsCCIIKgihk0Z6mcmc3x8hISEnIeVkSub9uq5c\ncqacuRO+hu/c8zn3bduxY4chAAAAIETY/T0AAAAAwJdogAEAABBSaIABAAAQUmiAAQAAEFJogAEA\nABBSaIABAAAQUmiAATQJPXv21LvvvuvvYdTLueeeq3feecffwwCAkEEDDADVWLhwoS6++GINGjRI\np59+umbMmKGdO3c2ymvZbLZGOW9drVmzRhdeeKH69u2riy66SJ9//nmdz9GzZ88qX+vWrWuE0QJA\n/dAAA0A1Nm7cqGuvvVbLli3TK6+8ooKCAk2dOlVZWVn+Hlqj+PXXX3XzzTdrzJgxWr58uUaNGqVZ\ns2bpt99+q/O5nn/+eX3xxRflX8OGDWuEEQNA/dAAAwg6RUVFmjt3rgYNGqSRI0dq2bJlle7fvHmz\n+vfvr40bN5bftnLlSg0aNEh79uyp9euUzQB36dJFPXv21N133620tLRK57VKamqq/vCHP2jAgAG6\n8MIL9f3331v+GiezdOlStW/fXrfddps6d+6sO++8U61bt9bSpUvrfK7mzZsrISGh/Cs8PLwRRgwA\n9ePw9wAAoK4WLFigzz77TAsWLFCLFi00b968Svf3799fs2fP1p/+9CctX75cOTk5mjdvnubNm6dT\nTjlFBw4c0IUXXljt+f/5z39q8ODBVW4vm/lt3ry5pd+PJL322mt66KGHdM899+jBBx/U3LlztXLl\nylo997333tODDz5Y7f21baa3bNmi0047rdJtQ4YM0Q8//FCr51d09913q6CgQMnJyfr973+vCRMm\n1PkcANBYaIABBJ0lS5Zo2rRpGj58uCTprrvu0lVXXVXpMdOmTdP69et13333KT09XaNHj9bEiRMl\nSa1atdJ7771X7fmTkpKq3OZ2u/XMM89oyJAhps1xQ02cOFHnnHOOJOn3v/+9brnlFuXn5ys6Ovqk\nzx09erQGDhzY4DFkZGTotNNO0w8//KDrr79e8+fPV8uWLes843377bdr2LBhcjqdWr16te6++265\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16fb088e90>"
"<matplotlib.figure.Figure at 0x7f1c152a2490>"
]
}
],
"prompt_number": 24
"prompt_number": 22
},
{
"cell_type": "heading",
@@ -1412,12 +1405,12 @@
"Well, it depends. We will eventually learn that the Kalman filter is optimal from a least squared fit perspective. However, `polyfit()` fits a polynomial to the data, not an arbitrary curve, by minimizing the value of this formula:\n",
"$$E = \\sum_{j=0}^k |p(x_j) - y_j|^2$$\n",
"\n",
"I assumed that my weight gain was constant at 1 lb/day, and so when I tried to fit a polynomial of $n=1$, which is a line, the result very closely matched the actual weight gain. But, of course, no one consistantly only gains or loses weight. We flucuate. Using 'polyfit()' for a longer series of data would yield poor results. In contrast, the g-h filter reacts to changes in the rate - the $h$ term controls how quickly the filter reacts to these changes. If we gain weight, hold steady for awhile, then lose weight, the filter will track that change automatically. 'polyfit()' would not be able to do that unless the gain and loss could be well represented by a polynomial.\n",
"I assumed that my weight gain was constant at 1 lb/day, and so when I tried to fit a polynomial of $n=1$, which is a line, the result very closely matched the actual weight gain. But, of course, no one consistently only gains or loses weight. We fluctuate. Using 'polyfit()' for a longer series of data would yield poor results. In contrast, the g-h filter reacts to changes in the rate - the $h$ term controls how quickly the filter reacts to these changes. If we gain weight, hold steady for awhile, then lose weight, the filter will track that change automatically. 'polyfit()' would not be able to do that unless the gain and loss could be well represented by a polynomial.\n",
"\n",
"Another advantage of this form of filter, even if the data fits a *n*-degree polynomial, is that it is *recursive*. That is, we can compute the estimate for this time period knowing nothing more than the estimate and rate from the last time period. In contrast, if you dig into the implementation for `polyfit()` you will see that it needs all of the data before it can produce an answer. Therefore algorithms like `polyfit()` are not well suited for real-time data filtering. In the 60's when the Kalman filter was developed computers were very slow and had extremely limited memory. They were utterly unable to store, for example, thousands of readings from an aircraft's inertial navigation system, nor could they process all of that data in the short period of time needed to provide accurate and up-to-date navigation information. \n",
"\n",
"\n",
"Up until the mid 20th century various forms of Least Squares Estimation was used for this type of filtering. For example, for NASA's Apollo program had a ground network for tracking the Command and Service Model (CSM) and the Lunar Module (LM). They took measurements over many minutes, batched the data together, and slowly computed an answer. In 1960 Stanley Schmidt at NASA Ames recognized the utility of Rudolf Kalman's seminal paper and invited him to Ames. Schmidt applied Kalman's work to the onboard navigation sytems on the CSM and LM, and called it the \"Kalman filter\".[1] Soon after, the world moved to this faster, recursive filter.\n",
"Up until the mid 20th century various forms of Least Squares Estimation was used for this type of filtering. For example, for NASA's Apollo program had a ground network for tracking the Command and Service Model (CSM) and the Lunar Module (LM). They took measurements over many minutes, batched the data together, and slowly computed an answer. In 1960 Stanley Schmidt at NASA Ames recognized the utility of Rudolf Kalman's seminal paper and invited him to Ames. Schmidt applied Kalman's work to the onboard navigation systems on the CSM and LM, and called it the \"Kalman filter\".[1] Soon after, the world moved to this faster, recursive filter.\n",
"\n",
"The Kalman filter only needs to store the last estimate and a few related parameters, and requires only a relatively small number of computations to generate the next estimate. Today we have so much memory and processing power that this advantage is somewhat less important, but at the time the Kalman filter was a major breakthrough not just because of the mathematical properties, but because it could (barely) run on the hardware of the day. \n",
"\n",
+1 -1
View File
@@ -30,6 +30,6 @@ def merge_notebooks(filenames):
if __name__ == '__main__':
#merge_notebooks(sys.argv[1:])
merge_notebooks(['Preface.ipynb', 'Signals_and_Noise.ipynb','g-h_filter.ipynb', 'discrete_bayes.ipynb', 'Gaussians.ipynb', 'Kalman_Filters.ipynb', 'Multidimensional_Kalman_Filters.ipynb', 'Kalman_Filter_Math.ipynb', 'Extended_Kalman_Filters.ipynb', 'Unscented_Kalman_Filter.ipynb', 'Designing_Nonlinear_Kalman_Filters.ipynb'])
merge_notebooks(['Preface.ipynb', 'Signals_and_Noise.ipynb','g-h_filter.ipynb', 'discrete_bayes.ipynb', 'Least_Squares_Filters.ipynb', 'Gaussians.ipynb', 'Kalman_Filters.ipynb', 'Multidimensional_Kalman_Filters.ipynb', 'Kalman_Filter_Math.ipynb', 'Extended_Kalman_Filters.ipynb', 'Unscented_Kalman_Filter.ipynb', 'Designing_Nonlinear_Kalman_Filters.ipynb', 'Appendix_Symbols_and_Notations.ipynb'])
# merge_notebooks(['Preface.ipynb', 'Signals_and_Noise.ipynb' g-h_filter.ipynb discrete_bayes.ipynb Gaussians.ipynb Kalman_Filters.ipynb Multidimensional_Kalman_Filters.ipynb Kalman_Filter_Math.ipynb Designing_Kalman_Filters.ipynb Extended_Kalman_Filters.ipynb Unscented_Kalman_Filter.ipynb'])
+22
View File
@@ -0,0 +1,22 @@
% Default to the notebook output style
((* if not cell_style is defined *))
((* set cell_style = 'style_ipython.tplx' *))
((* endif *))
% Inherit from the specified cell style.
((* extends cell_style *))
%===============================================================================
% Latex Book
%===============================================================================
((* block predoc *))
((( super() )))
((* block tableofcontents *))\tableofcontents((* endblock tableofcontents *))
((* endblock predoc *))
((* block docclass *))
\documentclass[12pt]{report}
((* endblock docclass *))