Major rewrites due to discrete bayes changes.

I've derived the x + Ky form for the univariate kalman filter.
I completely reordered material, cutting about 10 pages (pdf)
of material. I made the connection between the bayesian form
and orthogonal form more explicit.

Probably there are a lot of grammatical errors, but I wanted to get
these checked in.

I also altered the css - mainly the font.
This commit is contained in:
Roger Labbe committed 2016-01-18 18:16:20 -08:00
1 parent 5240944dd4
commit 856775e906
7 files changed
+878 -1052

No files matched your search

+120 -54
View File
@@ -26,24 +26,63 @@
"text/html": [
"<style>\n",
"@import url('http://fonts.googleapis.com/css?family=Source+Code+Pro');\n",
"@import url('http://fonts.googleapis.com/css?family=Vollkorn');\n",
"@import url('http://fonts.googleapis.com/css?family=Arimo');\n",
"@import url('http://fonts.googleapis.com/css?family=Fira+sans');\n",
"@import url('http://fonts.googleapis.com/css?family=Lora');\n",
"\n",
"//@import url('http://fonts.googleapis.com/css?family=Open+Sans');\n",
"//@import url('http://fonts.googleapis.com/css?family=Vollkorn');\n",
"//@import url('http://fonts.googleapis.com/css?family=Karla');\n",
"//@import url('http://fonts.googleapis.com/css?family=Poppins');\n",
"//@import url('http://fonts.googleapis.com/css?family=Arimo');\n",
"//@import url('http://fonts.googleapis.com/css?family=Roboto');\n",
"//@import url('http://fonts.googleapis.com/css?family=Lato');\n",
"//@import url('http://fonts.googleapis.com/css?family=Domine');\n",
"//@import url('http://fonts.googleapis.com/css?family=Chivo');\n",
"//@import url('http://fonts.googleapis.com/css?family=Cardo');\n",
"//@import url('http://fonts.googleapis.com/css?family=Arvo');\n",
"//@import url('http://fonts.googleapis.com/css?family=Crimson+Text');\n",
"//@import url('http://fonts.googleapis.com/css?family=Ubuntu');\n",
"//@import url('http://fonts.googleapis.com/css?family=Fontin');\n",
"//@import url('http://fonts.googleapis.com/css?family=Raleway');\n",
"//@import url('http://fonts.googleapis.com/css?family=Merriweather');\n",
"\n",
"\n",
".CodeMirror pre {\n",
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
"}\n",
" div.cell{\n",
" width: 900px;\n",
" width: 800px;\n",
" margin-left: 0% !important;\n",
" margin-right: auto;\n",
" }\n",
" div.text_cell_render{\n",
" font-family: 'Lora';\n",
" //font-family: 'Open Sans';\n",
" //font-family: 'Karla',verdana,arial,sans-serif;\n",
" //font-family: 'Roboto',verdana,arial,sans-serif;\n",
" //font-family: 'Lato',verdana,arial,sans-serif;\n",
" //font-family: 'Domine',verdana,arial,sans-serif;\n",
" //font-family: 'Chivo',verdana,arial,sans-serif;\n",
" //font-family: 'Cardo',verdana,arial,sans-serif;\n",
" //font-family: 'Arvo',verdana,arial,sans-serif;\n",
" //font-family: 'Poppins',verdana,arial,sans-serif; \n",
" //font-family: 'Ubuntu',verdana,arial,sans-serif;\n",
" //font-family: 'Fontin',verdana,arial,sans-serif;\n",
" //font-family: 'Raleway',verdana,arial,sans-serif;\n",
" //font-family: 'Merriweather',verdana,arial,sans-serif;\n",
" //font-family: 'Crimson Text', verdana,arial,sans-serif;\n",
" //font-family: verdana,arial,sans-serif;\n",
" //font-family: arial,sans-serif;\n",
" line-height: 125%;\n",
" font-size: 130%;\n",
" text-align: justify;\n",
" text-justify:inter-word;\n",
" }\n",
" div.text_cell code {\n",
" background: transparent;\n",
" color: #000000;\n",
" font-weight: 600;\n",
" font-weight: 400;\n",
" font-size: 12pt;\n",
" font-style: bold;\n",
" //font-style: bold;\n",
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
" }\n",
" h1 {\n",
@@ -122,13 +161,6 @@
" display: block;\n",
" white-space: nowrap;\n",
" }\n",
" div.text_cell_render{\n",
" /*font-family: 'Vollkorn', verdana,arial,sans-serif;*/\n",
" line-height: 150%;\n",
" font-size: 130%;\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",
@@ -327,8 +359,6 @@
"source": [
"import numpy as np\n",
"belief = np.array([1/10]*10)\n",
"np.set_printoptions(precision=3, linewidth=70,\n",
" formatter={'float':lambda x:' {:.3}'.format(x)})\n",
"print(belief)"
]
},
@@ -378,7 +408,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x72e4630>"
"<matplotlib.figure.Figure at 0x72bf208>"
]
},
"metadata": {},
@@ -405,6 +435,9 @@
"\n",
"A few words about the *mode* of a distribution. Given a set of numbers, such as {1, 2, 2, 2, 3, 3, 4}, the *mode* is the number that occurs most often. For this set the mode is 2. A set can contain more than one mode. The set {1, 2, 2, 2, 3, 3, 4, 4, 4} contains the modes 2 and 4, because both occur three times. We say the former set is *unimodal*, and the latter is *multimodal*.\n",
"\n",
"Another term used for this distribution is a *histogram*. Histograms graphically depict the distribution of a set of numbers. The bar chart above is a histogram.\n",
"\n",
"\n",
"I hand coded the `belief` array in the code above. How would we implement this in code? We represent doors with 1, and walls as 0, so we will multiply the hallway variable by the percentage, like so;"
]
},
@@ -509,7 +542,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x74adac8>"
"<matplotlib.figure.Figure at 0x76b1fd0>"
]
},
"metadata": {},
@@ -630,7 +663,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7f92438>"
"<matplotlib.figure.Figure at 0x7f71eb8>"
]
},
"metadata": {},
@@ -769,7 +802,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x84a7278>"
"<matplotlib.figure.Figure at 0x84a92b0>"
]
},
"metadata": {},
@@ -817,14 +850,33 @@
"\n",
"We model the system behavior with the *process model*. Here, our process model is that the dog moves one or more positions at each time step. This is not a particularly accurate model of how dog's behave. The error in the model is called the *system error* or *process error*. \n",
"\n",
"The prediction is our new *prior*. Time has moved forward and we made a prediction without benefit of knowing the measurements. "
"The prediction is our new *prior*. Time has moved forward and we made a prediction without benefit of knowing the measurements. \n",
"\n",
"Lets work an example. The current position of the dog is 17 m. Our epoch is 2 seconds long, and the dog is traveling at 15 m/s. Where do we predict he will be in two seconds? \n",
"\n",
"Clearly,\n",
"\n",
"$$ \\begin{aligned}\n",
"\\bar x &= 17 + (15*2) \\\\\n",
"&= 47\n",
"\\end{aligned}$$\n",
"\n",
"I use bars over variables to indicate that they are predictions, or priors. We can write the equation for the process model like this:\n",
"\n",
"$$ \\bar x_{k+1} = x_k + f_x(\\bullet)$$\n",
"\n",
"$x_k$ is the current position or state. If the dog is at 17 m then $x_k = 17$.\n",
"\n",
"$f_x(\\bullet)$ is the state propagation function for x. It describes how much the $x_k$ changes over one time step. For our example it performs the computation $15 \\cdot 2$ so we would define it as \n",
"\n",
"$$f_x(v_x, t) = v_x t$$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adding Noise to the Prediction\n",
"## Adding Uncertainty to the Prediction\n",
"\n",
"We want to solve real world problems, and we have already stated that all sensors have noise. Therefore the code above is incorrect since it assumes we have perfect measurements for the movement. What if the sensor reported that our dog moved one space, but he actually moved two spaces, or zero? Once again this may initially sound like an insurmountable problem, but let's model it and see what happens. We will create a simple noise model for the sensor. Later we will handle more complicated error models.\n",
"\n",
@@ -844,7 +896,7 @@
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACrCAYAAACzOIB9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X9cVXWex/H3vfwQSGV0EVDxB7hkNpQpOCbYSA3ams2M\nTcloPUrD1qHalHDb1NUmM9MmJzYsmMeMpqXrijO220yJxhimSM2KSqmL5pg/prjcpjRQ8wfCd//w\n4c0rKBc554L6ej4ePqLv/Z7z+Z6bvflwOPcchzHGCAAAAIBlnK29AAAAAOBqQ5MNAAAAWIwmGwAA\nALAYTTYAAABgMZpsAAAAwGI02QAAAIDFaLLRphw8eFBOp1N33HGHbTVSU1PldHr/1f/ggw/kdDr1\n3HPPtXj/Z86c0ezZs9W3b1+FhobK6XTqzTffbPF+AQCX1rt3b8XFxbX2MgBJUmBrLwDwN4fDIYfD\n4fN4cy1YsECzZ89WYmKipk6dquDgYN1yyy0t3i8A4NKsynHACjTZgKTBgweroqJCERERLd7Xu+++\nK4fDoTVr1qhLly4WrA4A4Iv333+/tZcAeNBkA5JCQkJ0/fXXW7KvyspKSaLBBgA/i42Nbe0lAB5c\nk402q7KyUg888IAiIyMVFhamQYMGadWqVY3OLS4u1k9+8hNFRkaqXbt26t27tx5//HG53W6fal3q\nmuyamho988wzuummm3TdddepY8eOuu222/SHP/zBa97DDz8sp9OpAwcOSJKcTqecTifXBwJAI87/\nDI4veX8upzMyMvTpp59qzJgxioyMVEBAgD755BNJF78mu7a2Vi+99JIGDBjgyfEhQ4ZoyZIlja7t\nXHbX1NQoKytLvXv3VlBQkHJzc61/I3DV4kw22qQjR44oJSVFnTt31sSJE3XkyBGtWrVKY8eOlcvl\n0pQpUzxzX3zxRU2fPl3/8A//oFGjRik6OlqffPKJ8vPz9ac//UkfffSRunXrdlnrqKysVGpqqvbt\n26fbbrtNI0aM0PHjx/Xuu+8qPT1dzz77rJ555hlJ0j333KPY2Fjl5OSopqZGs2fPljFG3/ve9yx5\nTwDgatScvJekvXv3avDgwbrxxhv10EMPqaamRmFhYZLU6PXYZ86c0T/90z+puLhYffv21WOPPabT\np0/rrbfe0sSJE7V582YtWrSowXanTp3SHXfcoerqat11110KCwtTTEyMPW8Crk4GaEMOHDhgHA6H\ncTqdZty4cV6vffbZZ+Z73/ueCQkJMYcOHTLGGPPBBx8Yp9NpUlJSTE1Njdf85cuXG4fDYe677z6v\n8dTUVON0Or3GNmzYYBwOh5k9e7bX+I9+9CMTEBBgCgoKvMaPHj1qBg4caAICAswnn3zi9Vrv3r0b\n7B8A4K25eX8up51Op5k1a1aj++zdu7eJjY31Gps/f75xOBxm5MiRpra21jNeU1NjEhISjNPpNKtX\nr/ba5lydO++805w4ccKKw8U1iMtF0CYFBARo3rx5XmOxsbGeMxDLly+XJL3yyiuSpN/85jfq0KGD\n1/wHHnhAAwYM0Ntvv63jx483ew07d+7U+++/r9GjRys9Pd3rtfbt2+vZZ59VfX29/vM//7PZ+wYA\nnOVr3p8TFRWlWbNm+bz/RYsWyeFw6OWXX1Zg4He/wO/QoYPmzZsnY4x+97vfNbrtggULFBIS0oyj\nAb7D5SJok3r27KlevXo1GB82bJjmzZun7du3S5JKS0sVGBio1atXa/Xq1Q3mnzp1SnV1dfr00081\nYMCAZq1h8+bNkuS59ONCX375pSSpoqKiWfsFAHzH17w/p3///goKCvJp38eOHdO+ffsUHR2tG264\nocHrP/rRjyRJ27Zta/BaSEiIEhISfKoDNIYmG21SVFTUJcerq6slSV9//bXq6uou+RAZh8OhY8eO\nNXsNX3/9tSRp/fr1Wr9+/UX3fTlnyQEAZ/ma9+dER0f7vO9z215sm9DQUIWHh+ubb75p8FpkZKTP\ndYDG0GSjTbrYXUHOjYeHh3v+WVtb22hAttS5Gr/+9a+VlZVl+f4BAL7n/TnNedjMuW2rqqoaff3E\niROqrq5u9BkJPNQGLcU12WiTDh06pEOHDjUY37BhgyRp4MCBkqQhQ4bo6NGj2rFjh+VrGDJkiCRp\n06ZNlu8bAHCWr3l/Odq3b69//Md/lNvt1u7duxu8fu63lElJSZddA7gYmmy0SXV1dXr66adljPGM\n7du3T/n5+QoODtb9998vScrOzpYxRpMmTdIXX3zRYD+nTp3yXFvdXAMHDtSwYcP09ttvN3p7J+ns\nraT+9re/Xdb+AQC+5/3lmjhxoowxmjp1qs6cOeMZr6mp0YwZM+RwOPTII4+0qAbQGC4XQZt08803\n6y9/+YuSkpI0YsQIff311/r973+vmpoa5eTkqGfPnpKk1NRULViwQE8//bTi4+N11113KS4uTidO\nnNChQ4e0ceNGxcbGNvqhFl+sWLFCaWlp+sUvfqGFCxfq1ltvVefOnfXFF19o165dKi8v13//93+r\nR48eVh4+AFwzfM37y5Wdna21a9dq7dq1uummm3T33XertrZWq1evVmVlpcaPH6+f/exnFh0N8B2f\nzmRv2rRJP/3pTxUTEyOn06k333yzyW127typ1NRUhYWFqUePHpozZ06LF4trg8PhUOfOnVVSUqIb\nb7xRr7/+upYvX674+HitXLlSkydP9pqfnZ2tzZs365577tH//u//Kjc3VytXrtSBAwf04IMPNvqE\nrsautXM4HA3Gu3btqrKyMs2fP18hISFauXKlXnnlFZWUlKhLly5auHChhg0b5tP+gbaIfEdr69Sp\nk89531hOX+jC14OCgvTee+9p/vz5ateunfLy8rR48WLFxMRo0aJFev31133aD9BcDnP+72cuorCw\nUJs3b9bAgQP10EMPKS8vTw899NBF5x89elTXX3+9UlNT9cwzz6iiokITJkzQ7Nmz9eSTT1p6AACA\ny0e+o7UcPHhQsbGxSk1N1fvvv9/aywEs59PlIiNHjtTIkSMlSePHj29y/vLly3XixAm98cYbCg4O\nVr9+/VRRUaGXX36ZEAaANoR8BwB72PLBx48++ki33XabgoODPWN33nmnKisrdfDgQTtKAgD8gHwH\nAN/Y8sHHqqqqBh8Ei4qKkjFGVVVVXk92uvAm8wBwNbvwnr9XGvIdVqmpqZHD4VBdXR1/V3DFayzb\nubsIAADwu549e+rw4cOtvQzANrZcLhIdHd3gCU5ut1sOh6NZj0MFALQt5DsA+MaWM9lDhgzRtGnT\ndPr0ac91e++99566devm9avEC/n6a9SysjJJrfOEptasbXX9koNH9MTGr1q8n0tZ+MMIDe3VqcX7\nuZred2pfGfWtrH01/SqcfL/6ard2/Wu1dmvXv1ZrW1m/qWz36Uz28ePH9fHHH6u8vFz19fU6dOiQ\nPv74Y8+T7qZPn660tDTP/Pvvv19hYWGaMGGCdu3apbfeeksvvviipk6d2oJDAQBYjXwHAHv41GSX\nlZVpwIABSkxM1MmTJ/XLX/5SAwcO1C9/+UtJZz8Is3//fs/8jh07qqioSJWVlRo0aJCeeOIJPfXU\nU8rKyrLnKAAAl4V8BwB7+HS5yLBhw1RfX3/R15csWdJg7Pvf/742bNhw2QsDANiPfAcAe9jywUcA\nAADgWkaTDQAAAFiMJhsAAACwGE02AAAAYDGabAAAAMBiNNkAAACAxWiyAQAAAIvRZAMAAAAWo8kG\nAAAALEaTDQAAAFiMJhsAAACwGE02AAAAYDGabAAAAMBiPjfZeXl5iouLU2hoqJKSklRSUnLJ+evW\nrVNycrI6duyoLl26aPTo0dq7d2+LFwwAsBb5DgDW86nJLigoUFZWlmbOnKny8nIlJydr5MiR+vzz\nzxudf+DAAY0ePVrDhg1TeXm51q9fr5MnT2rUqFGWLh4A0DLkOwDYw6cmOycnRxkZGcrIyFDfvn2V\nm5urrl27Kj8/v9H5W7du1ZkzZ/TCCy8oLi5ON998s6ZNm6Z9+/bp8OHDlh4AAODyke8AYI8mm+za\n2lpt3bpVw4cP9xofMWKESktLG91m0KBBCgoK0qJFi1RfX6+jR49q6dKl+sEPfqDOnTtbs3IAQIuQ\n7wBgH4cxxlxqgsvlUvfu3bVx40YNHTrUMz5nzhytWLFCFRUVjW5XUlKiMWPG6KuvvlJ9fb0GDhyo\nwsJCRUREeM2rrq72fM01ff7195BIzdh+ytYaLwxopy4nv7S1BtDWxcfHe74ODw9vxZV4I98B4PI1\nle2BdhR1u92aOHGixo8fr3Hjxuno0aN65plnNGbMGBUXF9tREgDgB+Q72roz13XWkTpb2huPTgFn\nFHicy6NwaU3+LYyIiFBAQIDcbrfXuNvtVnR0dKPbvPbaa2rfvr3mz5/vGVu2bJl69Oih0tJSJScn\nN7pdUlKST4suKytr1nwrtWZtq+uXHDwiyd4z2R06dFBSQs8W7+dqet+pfWXUt7L2+Wd02xLyndpt\nob7VtUsOHtGMjV9Zsq+LWfjDCN3aL67F+7ma3vcrpbaV9ZvK9iavyQ4KClJiYqKKioq8xouKipSS\nktLoNt9++60CAgK8CznPlqqvr2+qJADAD8h3ALCPT3cXyc7O1tKlS7V48WLt3r1bU6ZMkcvlUmZm\npiRp+vTpSktL88wfNWqUtm3bpjlz5uivf/2rtm3bpocfflg9e/ZUYmKiPUcCAGg28h0A7OHTRUvp\n6ek6fPiw5s6dK5fLpYSEBBUWFiomJkaSVFVVpf3793vm33777VqxYoV+9atf6aWXXlJYWJhuvfVW\nrV27VqGhofYcCQCg2ch3ALCHz58MyMzM9JzZuNCSJUsajKWnpys9Pf3yVwYA8AvyHLine truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x85255c0>"
"<matplotlib.figure.Figure at 0x84859e8>"
]
},
"metadata": {},
@@ -886,7 +938,7 @@
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACrCAYAAACzOIB9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X9cVXWex/H3vfwQSGV0EFDxB7hktpQpOCZYUoO2ZDNj\nM8lYPUrD1qHalHDb1NUmM0ebcXIHE3rMaFq6jjhju+2UaKziD7R2RaPURWvMH1NcmDEN0Ez58d0/\nfHgTQbnAOfeivJ6PB4/sy/ec9/cAfvh47rnnOIwxRgAAAAAs4/T1AgAAAIDrDU02AAAAYDGabAAA\nAMBiNNkAAACAxWiyAQAAAIvRZAMAAAAWo8lGu3Ls2DE5nU7dfffdtmUkJyfL6Wz4o79t2zY5nU69\n+OKLbd5/bW2t5s6dq4EDByo4OFhOp1Nvvvlmm/cLALi6/v37KyYmxtfLACRJ/r5eAOBtDodDDofD\n4/GWWrRokebOnav4+HhNnz5dgYGBuu2229q8XwDA1VlVxwEr0GQDkoYPH67S0lKFhYW1eV/vvvuu\nHA6HNmzYoB49eliwOgCAJ7Zs2eLrJQBuNNmApKCgIN14442W7KusrEySaLABwMuio6N9vQTAjWuy\n0W6VlZXp4YcfVnh4uEJCQjRs2DCtW7euybmFhYX64Q9/qPDwcHXq1En9+/fXU089pYqKCo+yrnZN\ndlVVlZ5//nndcsstuuGGG9S1a1fdcccd+uMf/9hg3mOPPSan06mjR49KkpxOp5xOJ9cHAkATLn0P\njif1/mKdTk9P1yeffKLx48crPDxcfn5++vjjjyVd+Zrsmpoa/epXv9KQIUPcdXzEiBFasWJFk2u7\nWLurqqqUmZmp/v37KyAgQNnZ2dZ/IXDd4kw22qVTp04pKSlJ3bt31+TJk3Xq1CmtW7dOEyZMkMvl\n0rRp09xzX375Zc2cOVPf/e53NXbsWEVGRurjjz9Wbm6u/vSnP+mDDz5Qr169WrWOsrIyJScn6/Dh\nw7rjjjs0ZswYnTlzRu+++67S0tL0wgsv6Pnnn5ck3X///YqOjtbixYtVVVWluXPnyhij73znO5Z8\nTQDgetSSei9Jn376qYYPH66bb75Zjz76qKqqqhQSEiJJTV6PXVtbq3/4h39QYWGhBg4cqCeffFLn\nz5/XW2+9pcmTJ2vnzp1atmxZo+3OnTunu+++W5WVlbr33nsVEhKiqKgoe74IuD4ZoB05evSocTgc\n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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x8425630>"
"<matplotlib.figure.Figure at 0x84771d0>"
]
},
"metadata": {},
@@ -926,7 +978,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x86246d8>"
"<matplotlib.figure.Figure at 0x8626390>"
]
},
"metadata": {},
@@ -1023,7 +1075,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x8676828>"
"<matplotlib.figure.Figure at 0x86772b0>"
]
},
"metadata": {},
@@ -1058,7 +1110,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x87c1cf8>"
"<matplotlib.figure.Figure at 0x867def0>"
]
},
"metadata": {},
@@ -1074,7 +1126,19 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The position was correctly shifted by 3 positions and we give more weight to the likelihood of an overshoot, so this looks correct."
"The position was correctly shifted by 3 positions and we give more weight to the likelihood of an overshoot, so this looks correct.\n",
"\n",
"Make sure you understand what we are doing. We are making a prediction of where the dog is moving, and convolving the probabilities to get the prior.\n",
"\n",
"If we weren't using probabilities we would use this equation that I gave earlier:\n",
"\n",
"$$ \\bar x_{k+1} = x_k + f_{\\mathbf x}(\\bullet)$$\n",
"\n",
"The prior, our prediction of where the dog will be, is the amount the dog moved plus his current position. The dog was at 10, he moved 5 meters, so he is now at 15 m. It couldn't be simpler. But we are using probabilities to model this, so our equation is:\n",
"\n",
"$$ \\bar{ \\mathbf x}_{k+1} = \\mathbf x_k \\ast f_{\\mathbf x}(\\bullet)$$\n",
"\n",
"We are *convolving* the current probabilistic position estimate with a probabilistic estimate of how much we think the dog moved. It's the same concept, but the math is slightly different. $\\mathbf x$ is bold to denote that it is an array of numbers. "
]
},
{
@@ -1104,7 +1168,7 @@
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACrCAYAAACzOIB9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X1clHW+//H3DKDcqKgRN4J3uKb5wMiATHF30dSOZWcr\n865OSugWx1Yj261kdU+lputWbJjQo7XI8uGmu3Zqy9QdDVOizsHbox1SM29O68BmGoaZIn5/f/Rj\ncgRlwGtmxHk9H495JN/5XvP+XmN8+HjNxXXZjDFGAAAAACxj9/cCAAAAgCsNTTYAAABgMZpsAAAA\nwGI02QAAAIDFaLIBAAAAi9FkAwAAABajyUbA6datmxITE/29DABAC5CZmSm73a5Dhw75eyloYWiy\nEXBsNptsNpu/lwEAaKInn3xSdrtdr7/+us8y+ZmB5qLJRsD54IMPtG7dOn8vAwDQRP5oeOfPn6/y\n8nLFx8f7NBctX7C/FwD4Wvfu3f29BABAM/jjJtUxMTGKiYnxeS5aPo5k47J28OBB2e12DRkyRIcP\nH9a9996r6OhohYeHKy0tTStWrHCb/+GHH8putysrK0t79uzR6NGjFR0draCgIP3P//yPpAufk11T\nU6M//OEP6tevnyIiItSuXTsNGDBARUVFDa7NbrcrMTFRx48fV05Ojrp166aQkBDl5+db/0YAgJ80\ntQ7XWbx4sQYMGKB27dopIiJCN9xwg55//nmdOXOm3tydO3fqnnvuUWJiosLCwnT11VcrOTlZDz30\nkL799ltJ0uDBg/X0009L+vE8abvdrqCgILfzpY0xWrx4sQYNGqT27dsrLCxMffv21fz581VTU1Mv\nu7FafrFzst966y0NHjzYldOnTx/9x3/8h06cOFFvbkZGhux2uw4cOKAXXnhBffv2VVhYmO666y4P\n/hbQEnEkGy3CsWPHlJ6ero4dO2rSpEk6duyYVqxYoXHjxsnpdOrhhx92m7937171799fffr00YQJ\nE3T8+HGFh4dLUoMfNZ45c0b/8i//ouLiYvXq1UtTpkzR6dOn9dZbb2nSpEn66KOPtHjx4nrbnTp1\nSkOGDFFVVZVuvfVWhYeHKyEhwTtvAgD4UVPq8IQJE7R06VIlJCQoKytLISEhevfdd/XrX/9aDodD\nq1atkt3+w3G+nTt3qn///rLb7Ro5cqR69Oih6upq7d+/X0uWLNGjjz6qtm3b6v7775ckbdy4UXfc\ncYeuv/56ST/U9Pbt20uSamtrdeedd+q9995Tr169dM899yg0NFQffvihcnNz9cEHH2jNmjWu7DoX\nq+UXOkXld7/7nebMmaOrrrpK48ePV/v27eVwODR79my9++672rRpkyIiIlzz615n6tSpKi0t1W23\n3aaRI0eqbdu2Fv4t4bJigMvYgQMHjM1mM3a73YwfP97tuS+++MK0b9/ehIaGmkOHDhljjNmwYYNr\n/qxZsxp8zW7dupnu3bu7jc2fP9/YbDYzYsQIU1NT4xo/fvy4SUpKMna73axcudJtm7qcW265xZw8\nedKK3QWAy05T6/Cbb75pbDab6devn6murnbNrampMTfffLOx2+3mueeec40/+uijxm63m7/97W/1\nsqurq83p06ddXz/55JPGbrebJUuWNLjW2bNnG5vNZqZNm2bOnj3r9tyDDz5o7Ha7efHFF93GG6vl\nmZmZxm63m4MHD7rGPvnkE2Oz2UyXLl1MRUWF2/yJEycau91upk6d6jaekZFhbDabSUhIcL1XuLJx\nughahKCgIM2bN89trHv37q4jzkuXLnV7LiYmRrNmzfL49RcvXiybzabnn39ewcE/fsDTtm1bzZs3\nT8YY/elPf2pw22effVahoaFN2BsAaHk8rcN19XTevHluR3KDg4OVl5d3wXraUB2NiIhQSEiIR+sz\nxig/P18xMTHKy8urd/T597//vSTpjTfeaHD7ptTyun3Mzc2td772ggULFBoaqtdee021tbVuz9ls\nNj3++OPq3LmzRzlo2ThdBC1Cly5d1LVr13rjP//5zzVv3jxt27bNbTw5OdnjwlxdXa19+/YpNjZW\nvXv3rvf8zTffLEnaunVrvedCQ0OVlJTkUQ4AtGSe1uG6/2ZkZNSb27dvX0VHR2vPnj367rvvFB4e\nrrFjx+qFF17QL37xC40aNUo333yzBgwYoF69ejVpfXv27NGRI0f0k5/8RLNnz673vDFGYWFhKi8v\nr/dcU2t53T4OHjy43nPR0dHq27evysrKtGfPHl177bVuz6elpXmcg5aNJhstwoV+s7tuvKqqym08\nNjbW49eu2/ZC24SFhSkyMlLffPNNveeio6M9zgGAlszTOlxVVaXIyEi1bt26wflxcXH66quvVFVV\n5frlyY8++kjPPPOM3n77bS1btkzGGHXr1k2PP/64HnzwQY/W9/XXX0uS9u3b5/oFyYY0dH51U2t5\n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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x8855f60>"
"<matplotlib.figure.Figure at 0x8859710>"
]
},
"metadata": {},
@@ -1139,7 +1203,7 @@
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAACrCAYAAACzOIB9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt0VOW9xvFnJhdyAQIYcyHhFopBVjBiEimEtgEJHhRP\nVeSmNWCgmoMFI7YqKfSogFCqpgZJXBaNKIsKLVarCHRAEBA9J1wPeCIgcjmWSSqCwShCCO/5g5WR\nIYFMwp6ZXL6ftbIg77x7nncnmd/8smdnj80YYwQAAADAMnZ/LwAAAABoaWiyAQAAAIvRZAMAAAAW\no8kGAAAALEaTDQAAAFiMJhsAAACwGE02YJEJEybIbrfryJEj/l4KALRK3bt3V0JCgr+XAUiiyUYL\n9cQTT8hut+u1117zWabNZpPNZvNZHgDAHXUYTQlNNlokfxTaefPmqbS0VHFxcT7NBQCc9/7772vt\n2rX+XgYgSQr09wIAb/DHG5lGR0crOjra57kAgPN69Ojh7yUALhzJhmUOHz4su92uIUOG6OjRo7rn\nnnsUFRWlsLAwpaWlafny5XVut2jRIg0YMEDt27dXeHi4brjhBj333HM6e/Zsrbm7d+/W3XffrYSE\nBIWGhurqq69WcnKyHnzwQX3zzTeSpMGDB+upp56S9MN50na7XQEBAW7nSxtjtGjRIg0aNEgdOnRQ\naGio+vbtq3nz5qmqqqpWtt1uV0JCgk6ePKnc3Fx1795dQUFBKigocMuq65zsN998U4MHD3bl9OnT\nR//5n/+pb7/9ttbcjIwM2e12HTp0SM8//7z69u2r0NBQ3XnnnR58FwCgeWjoc8YHH3wgu92u7Oxs\n7du3T6NGjVJUVJQCAgL0P//zP5IufU52VVWV/vCHP6hfv34KDw9X+/btNWDAABUXF9e5tvrqPeAJ\njmTDcidOnFB6ero6deqkiRMn6sSJE1q+fLnGjh0rp9Ophx56yDU3KytLS5YsUXx8vLKzsxUUFKR3\n3nlHv/71r+VwOLRy5UrZ7ed/F9y9e7f69+8vu92uESNGqGfPnqqsrNTBgwe1ePFiPfLII2rXrp3u\nu+8+SdLGjRt1++236/rrr5d0/hSSDh06SJKqq6t1xx136N1331ViYqLuvvtuhYSE6IMPPlBeXp7e\nf/99rV692pVd4/Tp0xoyZIgqKip0yy23KCwsTPHx8a77r+sUld/97neaPXu2rrrqKo0bN04dOnSQ\nw+HQrFmz9M4772jTpk0KDw93za+5nylTpmjLli269dZbNWLECLVr187C7xIANA0Nec6QpP3796t/\n//7q06ePsrKydPLkSYWFhUlSnTX47Nmz+rd/+zetX79eiYmJmjx5ss6cOaM333xTEydO1IcffqhF\nixbV2u5y9R7wiAEscujQIWOz2Yzdbjfjxo1zu+3zzz83HTp0MCEhIebIkSPGGGPeeOMNY7PZTL9+\n/UxlZaVrblVVlbnpppuM3W43zz77rGv8kUceMXa73fz973+vlV1ZWWnOnDnj+vyJJ54wdrvdLF68\nuM61zpo1y9hsNjN16lRz7tw5t9seeOABY7fbzQsvvOA2XrNvN998szl16lSt+5wwYYKx2+3m8OHD\nrrGPP/7Y2Gw207VrV1NWVuY2f/z48cZut5spU6a4jWdkZBibzWbi4+NdXysAaGka+pyxYcMG1/yZ\nM2fWeZ/du3c3PXr0cBubN2+esdlsZvjw4aaqqso1fvLkSZOUlGTsdrtZsWKF2zb11XvAE5wuAssF\nBARo7ty5bmM9evRwHT1YsmSJpPOnidhsNs2dO9ftSG5gYKDy8/NljNGf/vSnWvcfEhJSayw8PFxB\nQUEerc8Yo4KCAkVHRys/P7/WkY/f//73kqTXX3+9zu2feeaZOtdQl5p9zMvLq3W+9vz58xUSEqJX\nX31V1dXVbrfZbDY99thj6tKli0c5ANBcefqcUSM6OlozZ870+P5r6vBzzz2nwMAfXsBv166d5s6d\ne8nnGqlh9R64GKeLwHJdu3ZVt27dao3/7Gc/09y5c7Vjxw5Jcv2bkZFRa27fvn0VFRWlffv26bvv\nvlNYWJjGjBmj559/Xj//+c81cuRI3XTTTRowYIASExMbtL59+/bp2LFj+tGPfqRZs2bVut0Yo9DQ\nUJWWlta6LSQkRElJSR5n1ezj4MGDa90WFRWlvn37qqSkRPv27dO1117rdntaWprHOQDQXHn6nFEj\nOTnZ44MqlZWVOnDggGJiYtS7d+9at990002SpO3bt9e6raH1HrgYTTYsd6krbNSMV1RUuP6NiIhQ\nmzZt6pwfGxurL7/8UhUVFa4/hPnwww/19NNP66233tLSpUtljFH37t312GOP6YEHHvBofV999ZUk\n6cCBA64/kKxLXef2RUVFeZRRo2ZfY2Ji6rw9NjZWkvT111/Xuu1S2wBAS+Lpc0aNhtTG+mpwaGio\nIiIi6qzBDa33wMU4XQSWKy8vv+x4RESE69+KigqdPn26zvlOp9NtviTdeOONeuutt3TixAl9/PHH\nmj17tr7//ntNnjy51kuKl1Jzf7fddpuqq6sv+VHX1U0aeu3tmqyysjKP97GxWQDQHHn6nFGjIbWx\nvhp86tQp1wGfi1GDcaVosmG5I0eO1HkZuw0bNkiSbrjhBrd/a8YvtGfPHv3rX/9SYmKi66/GLxQY\nGKi0tDTl5eVp8eLFMsbob3/7m+v2gIAASap1rrMk9e7dWx06dNB///d/19lIW6lmH9evX1/rti+/\n/FJ79uxReHh4g095AYCWwtPnjMZo27atfvSjH6m8vFyffvpprdvXrVsnSUpNTW10BnApNNmwXHV1\ntR577DG3N4Q5cOCAioqKFBwcrLvvvluSNHHiRBljlJeX53a96LNnz2ratGmy2WyaNGmSa/yjjz7S\n999/Xyuv5mjwhX88edVVV8kYU2fhDggI0EMPPaSysjJNnjxZp06dqjXnq6++0q5duxqx9+6ys7Nl\njNHTTz9d62jNo48+qu+++04TJkxw/VIAAK2Np88ZjVXzXPPII4+4HVg5efKk8vLyaj3XAFbhnGxY\n7rrrrtN//dd/KTU1VcOGDdNXX32lv/zlLzp58qTy8/PVtWtXSdKYMWP0zjvv6M9//rP69OmjO+64\nw3Wd7P3792vo0KHKzc113e/8+fO1bt06/eQnP1GPHj3Uvn177du3T++++67Cw8PdrqU6ZMgQ2e12\n/fGPf9SxY8dc5+NNnTpV7dq104wZM7Rnzx69/PLLWrlypW666SbFx8fryy+/1IEDB7R582b96le/\n0nPPPXdFX4sf//jHmj59uubNm6ekpCSNGjVKERERcjgc2r59u5KTk/X0009fUQYANGeePmc01rRp\n07R69WqtXr1affv21YgRI1RVVaUVK1bo6NGjGj9+PG/2Be/w9Fp/CxcuND169DAhISEmJSXFbNq0\n6ZJza659eeGH3W43a9asafS1BtH01XzfBw8ebP75z3+aX/ziFyYqKsqEhoaatLQ0s3z58jq3e+ml\nl0z//v1N27ZtTVhYmLn++uvNs88+63Y9U2OMcTgcZuLEiSYpKcl07NjRhIeHm2uuucY88MADZu/e\nvbXu94033jCpqakmPDzc2O32Wtewrplz8803m8jISNOmTRvTuXNnM2DAAPPkk0+azz77zG2uzWYz\nCQkJl9z/CRMmmICAgFoZxhjz17/+1WRkZJiIiAgTEhJirr32WvO73/3O7frgNTIyMi55P4A3UN/h\nDw19ztiwYYOx2+0mOzv7kvfZvXv3Ouv0mTNnzPz5801ycrIJCwszbdu2NT/+8Y/NK6+8Uuf91Ffv\nAU/YjLng9ZlLWLZsme699169+OKLSk9P18KFC1VcXKzS0tI63/3o8OHDSkhI0Jo1a3Tddde5xjt1\n6uR2jUq0LIcPH1aPHj2UkZGh999/39/LAeAB6jv8hecMtHQenZOdn5+v7OxsZWdnKzExUQUFBYqN\njVVRUdEltzHGqFOnToqKinJ9UIABoGmhvgOAd9TbZFdVVWnbtm3KzMx0Gx82bJi2bNly2W3vvPNO\nRUdHa9CgQVqxYsWVrRQAYCnqOwB4T72HHo4dO6bq6upaF4uPjo52XfrmYm3bttWzzz6r9PR0BQYG\n6u2339aYMWP02muv1for4YsvMo/m6+TJk7LZbKqurub7ClxCXdfj9RfqO/yJ5wy0JHXVdq+8vnfV\nVVfp4Ycfdn1+ww036KuvvtL8+fOv+FI8aLq6du2q48eP+3sZALyI+g6r8JyBlq7e00UiIyMVEBBQ\n6xq/5eXlDXpr0xtvvFH79+9v+AoBAF5BfQcA76n3SHZQUJBSUlLkcDg0cuRI17jD4dCoUaM8Dtqx\nY4diY2MvO8fTl1G3bt0qyT/v0OTPbH/nt9Zsf+e31mx/51uZ3VRfCqe+k90U8ltrtr/zW2u2lfn1\n1XaPTheZNm2asrKylJaWpvT0dBUVFcnpdConJ0eSNH36dJWUlGjt2rWSpNdee01BQUHq16+f7Ha7\n/v73v6uoqEjz58+/op0BAFiL+g4A3uFRkz169GgdP35cc+bMkdPpVFJSklatWuW6hmpZWZkOHjzo\nts3s2bN15MgRBQQE6JprrlFxcbHGjRtn/R4AABqN+g4A3uHxHz7m5OS4jmxcrLi42O3zrKwsZWVl\nXdnKAAA+QX0HAOt59GY0AAAAADxHkw0AAABYjCYbAAAAsBhNNgAAAGAxmmwAAADAYjTZAAAAgMVo\nsgEAAACL0WQDAAAAFqPJBgAAACxGkw0AAABYjCYbAAAAsBhNNgAAAGAxmmwAAADAYh432YWFhUpI\nSFBoaKhSU1O1efNmj7bbv3+/2rVrp/bt2zd6kQAA76G+A4D1PGqyly1bptzcXM2YMLine truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x88dca90>"
"<matplotlib.figure.Figure at 0x8882048>"
]
},
"metadata": {},
@@ -1170,7 +1234,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a8d0>"
"<matplotlib.figure.Figure at 0x7751a90>"
]
},
"metadata": {},
@@ -1201,7 +1265,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x788f278>"
"<matplotlib.figure.Figure at 0x7f8b860>"
]
},
"metadata": {},
@@ -1233,7 +1297,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x88b1ba8>"
"<matplotlib.figure.Figure at 0x84922b0>"
]
},
"metadata": {},
@@ -1267,7 +1331,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x8886ef0>"
"<matplotlib.figure.Figure at 0x84d3160>"
]
},
"metadata": {},
@@ -1285,6 +1349,13 @@
"source": [
"This filter is a form of the g-h filter. Here we are using the percentages for the errors to implicitly compute the $g$ and $h$ parameters. We could express the discrete Bayes algorithm as a g-h filter, but that would obscure the logic of this filter.\n",
"\n",
"The filter equations are:\n",
"\n",
"$$\\begin{aligned} \\bar {\\mathbf x} &= \\mathbf x \\ast f_{\\mathbf x}(\\bullet)\\, \\, &\\text{Predict Step} \\\\\n",
"\\mathbf x &= L \\cdot \\bar{\\mathbf x}\\, \\, &\\text{Update Step}\\end{aligned}$$\n",
"\n",
"$L$ is the usual way to write the Likelihood function, so I use that.\n",
"\n",
"We can express this in pseudocode.\n",
"\n",
"**Initialization**\n",
@@ -1320,13 +1391,8 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## The Effect of Bad Sensor Data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The Effect of Bad Sensor Data\n",
"\n",
"You may be suspicious of the results above because I always passed correct sensor data into the functions. However, we are claiming that this code implements a *filter* - it should filter out bad sensor measurements. Does it do that?\n",
"\n",
"To make this easy to program and visualize I will change the layout of the hallway to mostly alternating doors and hallways, and run the algorithm on 5 correct measurements:"
@@ -1334,7 +1400,7 @@
},
{
"cell_type": "code",
"execution_count": 31,
"execution_count": 26,
"metadata": {
"collapsed": false
},
@@ -1343,7 +1409,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x74614e0>"
"<matplotlib.figure.Figure at 0x875cba8>"
]
},
"metadata": {},
@@ -1372,7 +1438,7 @@
},
{
"cell_type": "code",
"execution_count": 32,
"execution_count": 27,
"metadata": {
"collapsed": false
},
@@ -1381,7 +1447,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x84367b8>"
"<matplotlib.figure.Figure at 0x87546a0>"
]
},
"metadata": {},
@@ -1403,7 +1469,7 @@
},
{
"cell_type": "code",
"execution_count": 30,
"execution_count": 28,
"metadata": {
"collapsed": false
},
@@ -1412,7 +1478,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x8427a58>"
"<matplotlib.figure.Figure at 0x84929e8>"
]
},
"metadata": {},
@@ -1488,7 +1554,7 @@
},
{
"cell_type": "code",
"execution_count": 35,
"execution_count": 29,
"metadata": {
"collapsed": false
},
@@ -1539,7 +1605,7 @@
},
{
"cell_type": "code",
"execution_count": 36,
"execution_count": 30,
"metadata": {
"collapsed": false
},
@@ -1591,7 +1657,7 @@
},
{
"cell_type": "code",
"execution_count": 37,
"execution_count": 31,
"metadata": {
"collapsed": false,
"scrolled": false
@@ -1618,7 +1684,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x749de80>"
"<matplotlib.figure.Figure at 0x847e390>"
]
},
"metadata": {},
@@ -1643,7 +1709,7 @@
},
{
"cell_type": "code",
"execution_count": 39,
"execution_count": 32,
"metadata": {
"collapsed": false
},
@@ -1669,7 +1735,7 @@
"data": {
"image/png": "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\nLpdLcXFxba6pra3V9u3b9eSTT0r6psl2u93q1q2bysvL9atf/arNdZea8o506SeizrhWsKAmvqiJ\nL2rii5r4oibeqIcvauKLmvgKhpq0tLRc9vV2m+yIiAilpaXJbrfrrrvu8ozb7XZNmzatzTXNzc1e\nf//HP/6h5cuXa/fu3erfv78/uQEAAICg1W6TLUmFhYWaOXOm0tPTlZmZqYqKCjkcDuXn50uSioqK\ntHv3bv373/+WJA0fPtxr/e7duxUaGqphw4aZHB8AAKBjfHTitBxnL3T4dU537ydJqvvk8w6/1iXx\nPcKVHNOr067XFfnVZOfk5OjkyZMqKSmRw+FQSkqKampqlJCQIElyOp06cuRIhwYFAADoTI6zFzRv\n24lOvOLXnXalVf8Xo+SYTrtcl+RXky1J+fn5njvX31VZWXnZtbNmzdKsWbOuLBkAAAAQpDrkdBEA\nAACgK6PJBgAAAExGkw0AAACYjCYbAAAAMBlNNgAAAGAymmwAAADAZDTZAAAAgMn8PicbAAD8cPF0\nQ8BcNNkAAICnGwImY7sIAAAAYDKabAAAAMBkNNkAAACAyWiyAQAAAJP53WSXl5crKSlJkZGRstls\nqqur+965W7du1dSpU9W/f3/16NFDqampqqysNCUwAAAAEOj8arKrq6tVUFCgJUuWqKmpSRkZGZo0\naZKOHTvW5vz6+nrdeOONevXVV7Vv3z7NnTtXc+bM0caNG00NDwAAAAQiv47wKy0tVV5envLy8iRJ\nZWVleuutt1RRUaGSkhKf+UVFRV5/z8/PV21trV599VVNnz7dhNgAAABA4Gr3TnZra6saGxuVnZ3t\nNT5hwgTV19f7faFTp06pT58+V54QAAAACDLt3sk+ceKELl68qNjYWK/x2NhYvfPOO35d5M0339S7\n777bblPe0NDg179nhs68VrCgJr6oiS9q4oua+KIm3oKhHpeexPhDdPr0aTU0fHTl66iJ5QL5szNk\nyJDLvt7hp4vs2LFD9913n1atWqW0tLSOvhwAAABguXbvZMfExCgsLEwul8tr3OVyKS4u7rJr6+rq\nNHnyZC1btkxz5sxpN4zNZmt3zrW69BNRZ1wrWFATX9TEFzXxRU18URNvwVSPuk8+V2c+6rwz9erV\nS7aU6694HTWxTjB8dlpaWi77ert3siMiIpSWlia73e41brfblZmZ+b3rtm3bpjvuuLine truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x86686d8>"
"<matplotlib.figure.Figure at 0x847e7b8>"
]
},
"metadata": {},
@@ -1693,7 +1759,7 @@
},
{
"cell_type": "code",
"execution_count": 40,
"execution_count": 33,
"metadata": {
"collapsed": false,
"scrolled": false
@@ -1703,7 +1769,7 @@
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x995d240>"
"<matplotlib.figure.Figure at 0x8851ef0>"
]
},
"metadata": {},
File diff suppressed because it is too large. Load diff
+6 -6
View File
@@ -11,7 +11,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Multivariate Gaussians - Modeling Uncertainty in Multiple Dimensions"
"# Multivariate Gaussians\n",
"\n",
"Modeling Uncertainty in Multiple Dimensions"
]
},
{
@@ -285,9 +287,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The techniques in the last chapter are very powerful, but they only work with one variable or dimension. 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 from the last chapter. One would track the x coordinate and the other the y coordinate. That does work, but suppose we want to track position, velocity, acceleration, and attitude. These values are related to each other, and as we learned in the g-h chapter we should never throw away information. Through one key insight we will achieve markedly better filter performance than was possible with the equations from the last chapter.\n",
"\n",
"In this chapter I will introduce you to multivariate Gaussians - Gaussians for more than one variable, and the key insight I mention above. Then, in the next chapter we will use the math from this chapter to write a complete filter in just a few lines of code. "
"The techniques in the last chapter are very powerful, but they only work with one variable or dimension. 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, one for x coordinate and the other for the y coordinate. That does work, but suppose we want to track position, velocity, acceleration, and attitude. In the last chapter we were forced to assume the dog was traveling at 1 m/s. Position and velocity are related to each other, and as we learned in the g-h chapter we should never throw away information. In this chapter we learn how to describe this relation probabilistically. Through this one key insight we will achieve markedly better filter performance than was possible with the equations from the last chapter."
]
},
{
@@ -303,13 +303,13 @@
"source": [
"In the last two chapters we used Gaussians for a scalar (one dimensional) variable, expressed as $\\mathcal{N}(\\mu, \\sigma^2)$. A more formal term for this is *univariate normal*, where univariate means 'one variable'. The probability distribution of the Gaussian is known as the *univariate normal distribution*.\n",
"\n",
"What might a *multivariate normal distribution* be? *Multivariate* means multiple variables. Our goal is to be able to represent a normal distribution across multiple dimensions. I don't necessarily mean spatial dimensions - it could be position, velocity, and acceleration. Consider a two dimensional case. Let's say we believe that $x = 2$ and $y = 17$. This might be the *x* and *y* coordinates for the position of our dog, it might be the position and velocity of our dog on the x-axis, or the temperature and wind speed at our weather station. It doesn't really matter. We can see that for $N$ dimensions, we need $N$ means, which we will arrange in a column matrix (vector) like so:\n",
"What might a *multivariate normal distribution* be? *Multivariate* means multiple variables. Our goal is to be able to represent a normal distribution across multiple dimensions. I don't necessarily mean spatial dimensions - it could be position, velocity, and acceleration. Consider a two dimensional case. This might be the *x* and *y* coordinates of a robot, it might be the position and velocity of a dog on the x-axis, or milk production and feed rate at a dairy. It doesn't really matter. We can see that for $N$ dimensions, we need $N$ means, which we will arrange in a column matrix (vector) like so:\n",
"\n",
"$$\n",
"\\mu = \\begin{bmatrix}\\mu_1\\\\\\mu_2\\\\ \\vdots \\\\\\mu_n\\end{bmatrix}\n",
"$$\n",
"\n",
"Therefore for this example we would have\n",
"Let's say we believe that $x = 2$ and $y = 17$. We would have\n",
"\n",
"$$\n",
"\\mu = \\begin{bmatrix}2\\\\17\\end{bmatrix} \n",
+46 -12
View File
@@ -11,12 +11,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Multivariate Kalman Filters - Working with Multiple State Variables"
"# Multivariate Kalman Filters\n",
"\n",
"Working with Multiple State Variables"
]
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 3,
"metadata": {
"collapsed": false
},
@@ -26,18 +28,57 @@
"text/html": [
"<style>\n",
"@import url('http://fonts.googleapis.com/css?family=Source+Code+Pro');\n",
"@import url('http://fonts.googleapis.com/css?family=Open+Sans');\n",
"@import url('http://fonts.googleapis.com/css?family=Vollkorn');\n",
"@import url('http://fonts.googleapis.com/css?family=Karla');\n",
"@import url('http://fonts.googleapis.com/css?family=Poppins');\n",
"@import url('http://fonts.googleapis.com/css?family=Arimo');\n",
"@import url('http://fonts.googleapis.com/css?family=Fira+sans');\n",
"@import url('http://fonts.googleapis.com/css?family=Roboto');\n",
"@import url('http://fonts.googleapis.com/css?family=Lato');\n",
"@import url('http://fonts.googleapis.com/css?family=Domine');\n",
"@import url('http://fonts.googleapis.com/css?family=Chivo');\n",
"@import url('http://fonts.googleapis.com/css?family=Cardo');\n",
"@import url('http://fonts.googleapis.com/css?family=Arvo');\n",
"@import url('http://fonts.googleapis.com/css?family=Crimson+Text');\n",
"@import url('http://fonts.googleapis.com/css?family=Ubuntu');\n",
"@import url('http://fonts.googleapis.com/css?family=Fontin');\n",
"@import url('http://fonts.googleapis.com/css?family=Lora');\n",
"@import url('http://fonts.googleapis.com/css?family=Raleway');\n",
"@import url('http://fonts.googleapis.com/css?family=Merriweather');\n",
"\n",
"\n",
".CodeMirror pre {\n",
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
"}\n",
" div.cell{\n",
" width: 900px;\n",
" width: 800px;\n",
" margin-left: 0% !important;\n",
" margin-right: auto;\n",
" }\n",
" div.text_cell_render{\n",
" //font-family: 'Open Sans';\n",
" //font-family: 'Karla', verdana,arial,sans-serif;\n",
" //font-family: 'Roboto', verdana,arial,sans-serif;\n",
" //font-family: 'Lato', verdana,arial,sans-serif;\n",
" //font-family: 'Domine', verdana,arial,sans-serif;\n",
" //font-family: 'Chivo', verdana,arial,sans-serif;\n",
" //font-family: 'Cardo', verdana,arial,sans-serif;\n",
" //font-family: 'Arvo', verdana,arial,sans-serif;\n",
" //font-family: 'Ubuntu';\n",
" //font-family: 'Fontin';\n",
" font-family: 'Lora';\n",
" //font-family: 'Raleway';\n",
" //font-family: 'Merriweather';\n",
" //font-family: 'Crimson Text', verdana,arial,sans-serif;\n",
" //font-family: verdana,arial,sans-serif;\n",
" //font-family: arial,sans-serif;\n",
" line-height: 130%;\n",
" font-size: 130%;\n",
" //font-weight: 800;\n",
" text-align: justify;\n",
" text-justify:inter-word;\n",
" //font-family: 'Poppins', verdana,arial,sans-serif; \n",
" }\n",
" div.text_cell code {\n",
" background: transparent;\n",
" color: #000000;\n",
@@ -122,13 +163,6 @@
" display: block;\n",
" white-space: nowrap;\n",
" }\n",
" div.text_cell_render{\n",
" /*font-family: 'Vollkorn', verdana,arial,sans-serif;*/\n",
" line-height: 150%;\n",
" font-size: 130%;\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",
@@ -261,7 +295,7 @@
"<IPython.core.display.HTML object>"
]
},
"execution_count": 1,
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
+4 -3
View File
@@ -41,10 +41,10 @@ def test_filterpy_version():
import filterpy
from distutils.version import LooseVersion
v = filterpy.__version__
min_version = "0.1.1"
if LooseVersion(v) < LooseVersion(min_version):
if LooseVersion(v) < LooseVersion(min_version):
raise Exception("Minimum FilterPy version supported is {}.\n"
"Please install a more recent version.\n"
" ex: pip install filterpy --upgrade".format(
@@ -133,7 +133,8 @@ def load_style(directory = '.', name='code/custom.css'):
style.pop("axes.color_cycle", None)
plt.rcParams.update(style)
reset_axis ()
np.set_printoptions(suppress=True)
np.set_printoptions(suppress=True,precision=3, linewidth=70,
formatter={'float':lambda x:' {:.3}'.format(x)})
styles = open(os.path.join(directory, name), 'r').read()
return HTML(styles)
+45 -13
View File
@@ -1,23 +1,62 @@
<style>
@import url('http://fonts.googleapis.com/css?family=Source+Code+Pro');
@import url('http://fonts.googleapis.com/css?family=Vollkorn');
@import url('http://fonts.googleapis.com/css?family=Arimo');
@import url('http://fonts.googleapis.com/css?family=Fira+sans');
@import url('http://fonts.googleapis.com/css?family=Lora');
//@import url('http://fonts.googleapis.com/css?family=Open+Sans');
//@import url('http://fonts.googleapis.com/css?family=Vollkorn');
//@import url('http://fonts.googleapis.com/css?family=Karla');
//@import url('http://fonts.googleapis.com/css?family=Poppins');
//@import url('http://fonts.googleapis.com/css?family=Arimo');
//@import url('http://fonts.googleapis.com/css?family=Roboto');
//@import url('http://fonts.googleapis.com/css?family=Lato');
//@import url('http://fonts.googleapis.com/css?family=Domine');
//@import url('http://fonts.googleapis.com/css?family=Chivo');
//@import url('http://fonts.googleapis.com/css?family=Cardo');
//@import url('http://fonts.googleapis.com/css?family=Arvo');
//@import url('http://fonts.googleapis.com/css?family=Crimson+Text');
//@import url('http://fonts.googleapis.com/css?family=Ubuntu');
//@import url('http://fonts.googleapis.com/css?family=Fontin');
//@import url('http://fonts.googleapis.com/css?family=Raleway');
//@import url('http://fonts.googleapis.com/css?family=Merriweather');
.CodeMirror pre {
font-family: 'Source Code Pro', Consolas, monocco, monospace;
}
div.cell{
width: 900px;
width: 800px;
margin-left: 0% !important;
margin-right: auto;
}
div.text_cell_render{
font-family: 'Lora';
//font-family: 'Open Sans';
//font-family: 'Karla',verdana,arial,sans-serif;
//font-family: 'Roboto',verdana,arial,sans-serif;
//font-family: 'Lato',verdana,arial,sans-serif;
//font-family: 'Domine',verdana,arial,sans-serif;
//font-family: 'Chivo',verdana,arial,sans-serif;
//font-family: 'Cardo',verdana,arial,sans-serif;
//font-family: 'Arvo',verdana,arial,sans-serif;
//font-family: 'Poppins',verdana,arial,sans-serif;
//font-family: 'Ubuntu',verdana,arial,sans-serif;
//font-family: 'Fontin',verdana,arial,sans-serif;
//font-family: 'Raleway',verdana,arial,sans-serif;
//font-family: 'Merriweather',verdana,arial,sans-serif;
//font-family: 'Crimson Text', verdana,arial,sans-serif;
//font-family: verdana,arial,sans-serif;
//font-family: arial,sans-serif;
line-height: 125%;
font-size: 130%;
text-align: justify;
text-justify:inter-word;
}
div.text_cell code {
background: transparent;
color: #000000;
font-weight: 600;
font-weight: 400;
font-size: 12pt;
font-style: bold;
//font-style: bold;
font-family: 'Source Code Pro', Consolas, monocco, monospace;
}
h1 {
@@ -96,13 +135,6 @@
display: block;
white-space: nowrap;
}
div.text_cell_render{
/*font-family: 'Vollkorn', verdana,arial,sans-serif;*/
line-height: 150%;
font-size: 130%;
text-align: justify;
text-justify:inter-word;
}
div.output_subarea.output_text.output_pyout {
overflow-x: auto;
overflow-y: scroll;
+49 -1
View File
@@ -17,7 +17,12 @@ from __future__ import (absolute_import, division, print_function,
unicode_literals)
import book_plots as bp
import filterpy.stats as stats
from math import sqrt
import matplotlib.pyplot as plt
import numpy as np
from numpy.random import randn, seed
def plot_dog_track(xs, dog, measurement_var, process_var):
N = len(xs)
@@ -42,4 +47,47 @@ def print_variance(positions):
print('Variance:')
for i in range(0, len(positions), 5):
print('\t{:.4f} {:.4f} {:.4f} {:.4f} {:.4f}'.format(
*[v[1] for v in positions[i:i+5]]))
*[v[1] for v in positions[i:i+5]]))
def gaussian_vs_histogram():
seed(15)
xs = np.arange(0, 20, 0.1)
ys = np.array([stats.gaussian(x-10, 0, 2) for x in xs])
bar_ys = abs(ys + randn(len(xs)) * stats.gaussian(xs-10, 0, 10)/2)
plt.gca().bar(xs[::5]-.25, bar_ys[::5], width=0.5, color='g')
plt.plot(xs, ys, lw=3, color='k')
plt.xlim(5, 15)
class DogSimulation(object):
def __init__(self, x0=0, velocity=1,
measurement_var=0.0,
process_var=0.0):
""" x0 : initial position
velocity: (+=right, -=left)
measurement_var: variance in measurement m^2
process_var: variance in process (m/s)^2
"""
self.x = x0
self.velocity = velocity
self.meas_std = sqrt(measurement_var)
self.process_std = sqrt(process_var)
def move(self, dt=1.0):
"""Compute new position of the dog in dt seconds."""
dx = self.velocity + randn()*self.process_std
self.x += dx * dt
def sense_position(self):
""" Returns measurement of new position in meters."""
measurement = self.x + randn()*self.meas_std
return measurement
def move_and_sense(self):
""" Move dog, and return measurement of new position in meters"""
self.move()
return self.sense_position()