Beginning of the Kalman Filter 1D chapter.
Just 1 hour in, not a notable check in. Just checkpointing it.
This commit is contained in:
1 parent
81d0888d8c
commit
fdae26c7b8
1 file changed
+251
@@ -0,0 +1,251 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": ""
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
"worksheets": [
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"#Kalman Filters\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Now that we understand the histogram filter and gaussians we are prepared to implement a 1D Kalman filter. We will do this exactly as we did the histogram filter - rather than going into the theory we will just develop the code step by step. \n",
|
||||
"\n",
|
||||
"#Tracking A Dog\n",
|
||||
"\n",
|
||||
"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 accurate, and while it had errors, the errors are small.\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. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import numpy.random as random\n",
|
||||
"import math\n",
|
||||
"\n",
|
||||
"class dog_sensor(object):\n",
|
||||
" \n",
|
||||
" def __init__(self, x0 = 0, vel=1, noise=0.0):\n",
|
||||
" \"\"\" x0 - initial position\n",
|
||||
" vel - velocity (+=right, -=left)\n",
|
||||
" noise - scaling factor for noise, 0== no noise\n",
|
||||
" \"\"\"\n",
|
||||
" self.x = x0\n",
|
||||
" self.velocity = vel\n",
|
||||
" self.noise = math.sqrt(noise)\n",
|
||||
"\n",
|
||||
" def sense(self):\n",
|
||||
" self.x = self.x + self.velocity\n",
|
||||
" return self.x + random.randn() * self.noise\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 106
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The constructor (__init__()) initializes the dog_sensor class with an initial position (x0), velocity (vel), and an noise scaling factor. The *sense()* function has the dog move by the set velocity and returns its new position, with noise added. If you look at the code for *sense()* you will see a call to *numpy.random.randn()*. This returns a number sampled from a normal distribution with a mean of 0.0. Let's look at some example output for that.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"for i in range(20):\n",
|
||||
" print (\"%.4f\" % random.randn()),"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"0.4069 0.2905 -1.7388 1.0792 -0.4538 0.5012 -0.5006 0.0431 0.4978 0.1898 -0.2238 -0.0177 -0.9256 1.1435 0.5238 0.3113 0.2732 0.5035 1.7994 -1.2416\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 107
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"You should see a sequence of numbers near 0, some negative and some positive. Most are probably between -1 and 1, but a few might lie somewhat outside that range. This is what we expect from a normal distribution - values are clustered around the mean, and there are fewer values the further you get from the mean.\n",
|
||||
"\n",
|
||||
"Okay, so lets look at the output of the *dog_sensor* class. We will start by setting the noise to 0 to check that the class does what we think it does"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"dog = dog_sensor (noise = 0.0)\n",
|
||||
"xs = []\n",
|
||||
"for i in range (10):\n",
|
||||
" x = dog.sense()\n",
|
||||
" xs.append(x)\n",
|
||||
" print (\"%.4f\" % x),\n",
|
||||
"plot (xs)\n",
|
||||
"show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x30da390>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 108
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"\n",
|
||||
"Now let's inject some noise in the signal."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"def test_sensor(noise_scale):\n",
|
||||
" dog = dog_sensor (noise = noise_scale)\n",
|
||||
"\n",
|
||||
" xs = []\n",
|
||||
" for i in range (100):\n",
|
||||
" x = dog.sense()\n",
|
||||
" xs.append(x)\n",
|
||||
" p1, = plot (xs, c='b')\n",
|
||||
" p2, = plot ([0,99],[1,100], 'r--')\n",
|
||||
" xlabel('time')\n",
|
||||
" ylabel('pos')\n",
|
||||
" ylim ([0,100])\n",
|
||||
" title('noise = ' + str(noise_scale))\n",
|
||||
" legend ([p1, p2], ['sensor', 'actual'], loc=2)\n",
|
||||
" show()\n",
|
||||
" \n",
|
||||
"test_sensor(4.0)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x37d5dd0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 124
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**note**:*numpy uses a random number generator to generate the normal distribution samples. The numbers I see as I write this are unlikely to be the ones that you see. If you run the cell above multiple times, you should get a slightly different result each time. I could use numpy.random.seed(some_value) to force the results to be the same each time. This would simplify my explanations in some cases, but would ruin the interactive nature of this chapter. To get a real feel for how normal distributions and Kalman filters work you will probably want to run cells several times, observing what changes, and what stays roughly the same.*\n",
|
||||
"\n",
|
||||
"So the output of the sensor should be a wavering blue line drawn over a dotted red line. The dotted red line shows the actual position of the dog, and the blue line is the noise signal produced by the simulated RFID sensor. Please note that the red dotted line was manually plotted - we do not yet have a filter that recovers that information! \n",
|
||||
"\n",
|
||||
"If you are running this in an interactive IPython Notebook, I strongly urge you to run the script several times in a row. You can do this by putting the cursor in the cell containing the Python code and pressing Ctrl+Enter. Each time it runs you should see a different jagged blue line wavering over the top of the dotted red line.\n",
|
||||
"\n",
|
||||
"I also urge you to adjust the noise setting to see the result of various values. However, since you may be reading this in a read only notebook, I will show two extreme examples. The first plot shows the noise set to 100.0, and the second shows noise set to 0.5."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"test_sensor(100.0)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x37c1850>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 123
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"test_sensor(0.5)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x36a4090>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 113
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"You may not have a full understanding of the exact *meaning* of a noise value of 100.0, but as it turns out if you multiply *randn()* with a number $n$, the result is just a normal distribution with $\\sigma = \\sqrt{n}$. So the example with noise = 100 is using the normal distribution $N(0,100)$. If the square root is confusing, recall that normal distributions use $\\sigma^2$. *dog_sensor().__init__* takes the square root of the noise setting so that the noise * randn() call properly computes the normal distribution."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 111
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user