diff --git a/07-Kalman-Filter-Math.ipynb b/07-Kalman-Filter-Math.ipynb index 1b67d07..70d300f 100644 --- a/07-Kalman-Filter-Math.ipynb +++ b/07-Kalman-Filter-Math.ipynb @@ -938,162 +938,6 @@ "The takeaway point is that *g* and *h* are specified fully by the variance and covariances of the measurement and predictions at time *n*. In other words, we are picking a point between the measurement and prediction by a scale factor determined by the quality of each of those two inputs. That is all the Kalman filter is. " ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Compare Performance to Univariate Kalman Filter" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's implement a simple 1-D kalman filter using the Kalman filter from this chapter, and compare its output to the kalman filter from the previous chapter by plotting it. We will use a simple model of tracking an object that starts at x=0 and moves by 1 at each step. We will assume the arbitrary value 5 for the measurement noise and .02 for the process noise.\n", - "\n", - "First, let's implement the filter from the *Univariate Filter* chapter." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from __future__ import division\n", - "import numpy as np\n", - "from numpy.random import randn\n", - "from filterpy.kalman import KalmanFilter\n", - "\n", - "# 1-D Kalman filter equations\n", - "def predict(pos, variance, movement, movement_variance):\n", - " return (pos + movement, variance + movement_variance)\n", - "\n", - "\n", - "def update (mu1, var1, mu2, var2):\n", - " mean = (var1*mu2 + var2*mu1) / (var1+var2)\n", - " variance = 1 / (1/var1 + 1/var2)\n", - " return (mean, variance)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, let's implement the same thing using the Kalman filter. I will implement it as a function that returns a KalmanFilter object so that you can run the analysis code several times with the KalmanFilter initialized to the same starting conditions each time." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from filterpy.kalman import KalmanFilter\n", - "\n", - "def mkf_filter(R, Q):\n", - " f = KalmanFilter(dim_x=1, dim_z=1, dim_u=1)\n", - " f.P = 500.\n", - " f.H = np.array([[1.]])\n", - " f.F = np.array([[1.]])\n", - " f.B = np.array([[1.]])\n", - " f.Q = Q\n", - " f.R = R\n", - " \n", - " return f" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, let's compare the two. I will plot the data from the 1-D Kalman filter as a blue line, and the output of the filter from this chapter as red dots. I wrote it as a function so you can easily modify the parameters and regenerate the plots." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n9pucnOyxHvwvf/kLgwcPJiIiAn9/f7p3784//vGPatclJiZy3XXX8fXXX9OvXz/8/f15/vnngZrX\nmNel38TERLZv387y5csxm82YzWaPz1FWVsaMGTNITk7GZrMRFxfHQw895P6B4Hy5dH4EERERERG3\n5557Dh8fH6ZOncqxY8d47rnnuOWWW1i7dq1Hu1OXwEyYMIGnnnqKrKwsYmNj3cc3btzIvn37ePjh\nh93HXnrpJUaPHs348eMxmUx8/PHH3H333VRUVHDvvfd69L93717Gjh3LPffcw913301CQkKN969r\nvy+//DK/+93vsNvt/PGPfwSgRYsWABiGwZgxY1ixYgX33HMPnTt3Zvv27bz66qv8+OOPfPHFF+f6\npW0wBXMRERGRS1BZWRnr1q1zLxUJDQ3lgQce4Mcff6RLly7udqeuMR8/fjxPPvkk77//PlOmTHEf\nX7RoEb6+vvziF79wH9uzZw82m83958mTJ3PNNdcwZ84cj2BuGAb79u1j8eLFXH/99Wcdd136/dnP\nfsYf//hHIiMjmThxosf1Cxcu5IsvvmDZsmVcccUV7uN9+vTh1ltv5csvv2T48OFnHUdjUDAXERER\nqcVnaxfy+XeLGq3/a/uNY2T/CY3W/5ncdtttHuu3Bw8eDEBaWppHMD9V27Zt6d27N4sWLfII5u+9\n9x5XXXUVYWFh7mMnw7PT6aSoqAiXy8XQoUP58ssvKSoqwm63u9vGx8fXKZTXt9+avPfee7Rv357O\nnTtz5MgR9/GUlBRMJhNLly5VMBcRERGRxnP6kpBTl4tA1Yw5QH5+/hn7GT9+PA8//DDp6em0bt2a\nNWvWkJGRwcyZMz3a/ec//+FPf/oTP/zwA5WVlR7jKCgo8AjQbdq0qfPnqE+/Ndm9eze7du0iIiKi\n2jmTycThw4frPBZvUzAXERERucCdnEWu7eXFkpISj+UfABaLpca2ZyuPOG7cOKZOncqiRYvc/7XZ\nbIwZM8bdZtWqVYwZM4aUlBRef/11YmJisFqtfPrpp7z44ou4XC6PPv39/c/6GRvSb01cLhddunTh\n5ZdfrvF8TExMncbSGBTMRURERGoxsv+E87bUpD5at24NwM6dO92/P6myspK9e/cydOhQr9wrLi6O\ngQMHsmjRIh5++GHef/99rr32Wo+Z6n//+98EBASwZMkSrFar+/jXX399TveuT7+11W1v164dGzdu\n5MorrzynsTQGlUsUERERucBdffXVWK1WXnvttWqzxm+99RbHjh1j1KhRDeq7poA7fvx4Nm/ezD/+\n8Q8OHjzI+PHjPc6fnI0/dalJfn4+//znP89pJ9H69BsYGEheXl61PsaNG0dubi6vvfZatXNlZWUc\nP368weM7VwrmIiIiIhe4iIgInnrqKRYvXszgwYOZPXs2r776KpMmTeLOO++kX79+Dd4Bs6alLWPH\njsVisfDQQw8RGBjI6NGjPc7fcMMNlJSUMHz4cP7+978za9YsevfuTatWreq9k+ip7evT7+WXX87W\nrVuZOXMmCxcu5L///S8At956K6NHj2by5MmMHz+ev/71r7zyyitMnjyZ+Ph4Nm3aVK/xeZNXg/n0\n6dPdRdxP/jp9nc706dOJjY0lICCAYcOGsX37dm8OQUREROSS9Pjjj/POO+9gNpt55plneOihh1i7\ndi2PPvooX3/9tUcFlrrOWptMphrbRkZGMnToUIqLixk9enS1NeJDhgxhwYIF5OXl8eCDDzJ//nzu\nv/9+7r///mr9nWksp9+/Pv0+9dRTjB49mhdeeIFbbrmFBx54wN3nhx9+yPPPP8/27duZOnUq06dP\nZ926dUyePJlu3brV6WvTGExGfX9sOYPp06fz3nvvsWzZMvcxi8VCeHg4ALNnz+aZZ55hwYIFtG/f\nnpkzZ7Jq1Sp27drlLvoOUFBQ4P59cHCwt4YnF5kNGzYAVXVHRWqj50TqQs/JpcPhcFR7CVKkPs70\nDJ1rhvX6UhaLxUJkZKT718lQbhgGL730Eo899hhjxoyhS5cuLFiwgKKiIt555x1vD0NERERE5ILi\n9WCemppKbGwsbdq0YcKECaSlpQFVxepzc3MZMWKEu63NZiMlJYXVq1d7exgiIiIiIhcUrwbz/v37\ns2DBAr744gvmzZtHTk4OAwcOJC8vj5ycHACioqI8romMjHSfExERERG5VHm1jvm1117r/n3Xrl0Z\nMGAASUlJLFiwgH79+tV63ZkW/Z9c9ydSGz0jUhd6TqQu9Jxc/Fq3bq015nJOioqK2LZtW43nkpOT\nz6nvRi2XGBAQQJcuXdi7dy+tWrUCIDc316NNbm4u0dHRjTkMEREREZFmr1F3/nQ4HOzYsYMrr7yS\npKQkoqOjWbJkCb1793afX7VqFXPmzKm1D70hL7VRFQWpCz0nUhd6Ti4dDofjfA9BLnB2u73W7xWn\nVmVpCK/OmP/hD39gxYoVpKWl8d133/GLX/yC0tJSd0H7KVOmMHv2bD766CO2bdvGpEmTsNvtTJw4\n0ZvDEBERERG54Hh1xjwrK4sJEyZw5MgRIiIiGDBgAGvXriU+Ph6AqVOnUlpayuTJk8nPz6d///4s\nWbKEwMBAbw5DREREROSC49VgvnDhwrO2mTZtGtOmTfPmbUVERERELniN+vKniIiIiIjUjYK5iIiI\niEgzoGAuIiIiItIMKJiLiIiIiIfp06djNismNjV9xUVEREQucPPnz8dsNrNu3TqP48ePH+eKK67A\narXy4Ycf1qvPM+3MLo1DwVxERETkIlRcXMzIkSNZt24d7777LjfeeGO9rjcMo5FGJrVRMBcRERG5\nyJwM5d999x0LFy6sdyiX80PBXEREROQcVBQX41i3DsdHH+H47DPKUlNxuVznbTwlJSWMGjWKtWvX\nVgvlixcvZvTo0cTHx2Oz2UhMTGTq1KmUlZWdtd/ExESuu+46li1bRp8+fQgICKBbt2588803AHzw\nwQd069YNf39/evfuzaZNmzyu37JlC3fccQdt27bF39+fiIgIJkyYQGZmpke7k8tyVqxYwUMPPURE\nRAQtWrTgxhtv5MiRI174CjVfXt1gSERERORSUrZ7N6ZZs/D7178wnQjjrqgoyubOxXr99Vj8/Jp0\nPMXFxYwaNYo1a9bUOFM+f/58/P39eeCBBwgODmbNmjW8+OKLZGZmnnWjSJPJRGpqKhMnTuTee+/l\ntttu4/nnn+dnP/sZr7zyCtOmTeO+++7DZDIxa9Ysxo4dy549e9wvkX711Vfs3r2bSZMmERMTw969\ne/n73//OunXr2LZtG/7+/h73mzJlCuHh4cyYMYO0tDReeukl7rvvPt59913vftGaEQVzERERkQZw\n5udjfuIJfN9/3+O4OTcX27hxOL74AtuVVzbpS5R33HEH2dnZta4pf/vttz0C8N13301ycjJPPPEE\nzz//PHFxcbX2bRgGe/bsYeXKlQwaNAiATp06cc011/Db3/6WnTt30rp1awBCQkK49957Wbp0KVdd\ndRUAv/nNb3jooYc8+rzhhhsYNGgQH374IbfccovHuZYtW7JkyRL3n10uF6+88gpFRUXY7fZ6fmUu\nDFrKIiIiItIAFdu24XNaKD/JVFmJz9/+RuXx4006pkOHDmGz2UhISKjx/MlQ7nK5KCgo4MiRIwwa\nNAjDMNi8efNZ++/QoYM7lAP07dsXgGHDhrlD+anH09LSqt0bqqrFHD16lOTkZEJCQqotewG46667\nPP48ePBgKisrSU9PP+s4L1QK5iIiIiINYEpL40xz4T6ff05FTk6TjQfg9ddfx9/fn+uuu47t27dX\nO79t2zZGjhyJ3W4nNDSUyMhIhg4dCkBBQcFZ+z898AcHBwMQHx9f4/H8/Hz3sfz8fO69917Cw8MJ\nCgoiIiKCyMhIjh07VuO9T79XaGhotT4vNlrKIiIiItIQVusZTxs2GyaLpYkGU6VDhw588cUXDBs2\njBEjRrBy5UqSkpKAquA9bNgw7HY7s2bNol27dvj7+3PgwAEmTZpUpxdWLbV8ntqOn1py8eabb2b1\n6tX84Q9/oFevXu7lKOPHj6/x3nXp82KjYC4iIiLSEO3bY1itmMrLazxdcddd+NSypKQx9ezZk08+\n+YQRI0YwfPhwVq5cSatWrVi6dClHjx7lww8/5IorrnC3//LLLxt9TPn5+Xz99dfMmDGDJ5980n3c\n4XCQl5fX6Pe/UGgpi4iIiEgD+HbpQvmMGTWec7VsSeX48Vh8zs8c6KBBg/jggw/IzMxkxIgR5OXl\nuWegT52ddrlcvPDCC40+npruDfDiiy9e1DPg9aUZcxEREZEGsPj54br7bkoTErDOnIll1y4MX1+c\nt9xC5W9/i6137/M6vmuvvZa33nqLCRMmcN111/Hee+8RHh7O7bffzu9+9zt8fHz497//TXFxcaOP\nJSgoiKFDh/Lcc89RXl5OQkICq1atYsWKFYSHhyucn6BgLiIiItJAvuHh+EyYgHPIEJyHDoHVik/b\ntlhttiYfS01lGceOHUthYSF33303d955Jx9++CGPP/4406ZNw263c9NNN/HrX/+a7t27V+vr9P7O\ntezjO++8wwMPPMDrr7+O0+lkyJAhfPPNN1x99dV1vldTlp48H0xGM/wR5dQ3c0++1Styug0bNgDQ\np0+f8zwSac70nEhd6Dm5dDgcDmznITTLxeNMz9C5ZlitMRcRERERaQYUzEVEREREmgEFcxERERGR\nZkDBXERERESkGVAwFxERERFpBhotmD/77LOYzWZ+97vfeRyfPn06sbGxBAQEMGzYMLZv395YQxAR\nERERuWA0SjBfu3Yt8+bNo3v37h71JmfPns0LL7zA3/72N9avX09kZCTDhw/n+PHjjTEMEREREZEL\n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\nnRqxXDDfsGGDFixYoCVLlqigoEDZ2dmaPHmyzpw5E+ihIQBqa2s1ZMgQvf322woLC5NhGH7vv/76\n63rzzTf1zjvvaM+ePXK5XJowYYJqamoCNGIEwl//+le98MILys/P1/bt2xUcHKyHH35YFRUVTX2o\nFSQmJuqNN97Q/v379cUXX+j73/++Hn30UR04cEASNQJ/n332md59910NGTLE728PdQJJyszMbLq/\n0u1268svv2x6745qxLSYkSNHmnPnzvVrS09PN1966aUAjQhWERkZaa5bt67p330+nxkbG2vm5uY2\ntV25csXs0aOHuXr16kAMERZRU1NjBgUFmR999JFpmtQKWte7d29zzZo11Aj8XL582ezfv7+5c+dO\nc9y4cea8efNM0+S7BI1eeeUVc9CgQS2+d6c1YqkZ8/r6eu3bt08TJ070a584caJ2794doFHBqk6e\nPKnS0lK/egkNDdWYMWOol26uqqpKPp9PvXr1kkStoDmv16sPPvhAHo9HY8aMoUbgZ+7cuXryySc1\nduxYmTfciked4Lri4mIlJCQoLS1NM2fO1MmTJyXdeY102HaJHaG8vFxer1d9+/b1a3e5XHK73QEa\nFazqek20VC/nzp0LxJBgEfPnz9ewYcOanplAreC6L7/8UllZWbp69arCwsL04YcfKiMjo+kPJjWC\nd999V8XFxXr//fclyW8ZC98lkKSHHnpI69atU2ZmpkpLS7V8+XJlZ2ersLDwjmvEUsEc6CjfXouO\n7mPRokXavXu38vLy2lUH1Er3kpmZqYMHD6qyslIbN27UjBkztGPHjjaPoUa6j2PHjunll19WXl6e\ngoKCJDU+pdxsxwZ21En3MWnSpKafBw0apKysLKWmpmrdunUaNWpUq8e1p0YstZQlOjpaQUFBKi0t\n9WsvLS1VXFxcgEYFq4qNjZWkFuvl+nvoXhYuXKgNGzZo+/btSklJaWqnVnBdSEiI0tLSNGzYMOXm\n5uqhhx7SihUrmv7GUCPdW35+vsrLyzVw4ECFhIQoJCREu3bt0sqVK2W32xUdHS2JOoG/8PBwDRw4\nUMePH7/j7xJLBXO73a4HH3xQW7du9Wvftm2bsrOzAzQqWFVqaqpiY2P96sXj8SgvL4966Ybmz5/f\nFMoHDBjg9x61gtZ4vV75fD5qBJKkxx57TIcOHdKBAwd04MABFRQUaPjw4Zo5c6YKCgqUnp5OnaAZ\nj8ejI0eOKC4u7o6/S4JycnJy7uJYb1nPnj31yiuvKD4+XmFhYVq+fLny8vK0du1aOZ3OQA8Pnay2\ntlaHDx+W2+3W73//ew0ePFhOp1MNDQ1yOp3yer167bXXlJGRIa/Xq0WLFqm0tFRr1qyR3W4P9PDR\nSZ5//nn94Q9/0MaNG9WvXz/V1NSopqZGhmHIbrfLMAxqBXrxxRcVGhoqn8+nM2fO6K233tL777+v\nN954Q/3796dGoNDQUMXExDS9XC6X/vjHPyo5OVk/+clP+C6BJOmXv/xl03dJUVGRXnjhBRUXF2v1\n6tV3nk06ZuOYjrVy5UozJSXFdDgc5vDhw81PPvkk0ENCgOzYscM0DMM0DMO02WxNP8+ZM6epT05O\njhkXF2eGhoaa48aNMwsLCwM4YgTCt+vj+mvp0qV+/aiV7u2ZZ54xk5OTTYfDYbpcLnPChAnm1q1b\n/fpQI/i2G7dLvI466d5mzJhhxsfHm3a73UxISDCfeOIJ88iRI359brdGDNNsxx0NAAAAAO4qS60x\nBwAAALorgjkAAABgAQRzAAAAwAII5gAAAIAFEMwBAAAACyCYAwAAABZAMAcAAAAsgGAOAAAAWADB\nHAAAALCA/wfFGtnyT05SlwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\nPp8vWLBATz31lP74xz9q8+bNio+P13XXXafS0tIgVYzWtnbtWs2YMUMbN27U6tWrZbPZdO211+rU\nqVPefegnSElJ0ZNPPqmtW7fq008/1bhx4zRx4kRlZ2dLoo+gvo8//liLFi3S4MGDff7bQ1+BJPXr\n10/5+fnenx07dng/87uPmC00YsQIc/r06T7b0tPTzZ///OctPTTCQMeOHc0lS5Z433s8HjMxMdF8\n4oknvNvKy8vNTp06mS+88EIwSkQbUFpaalqtVvMf//iHaZr0EzSsW7du5osvvkgfQT1FRUVmnz59\nzMzMTHPs2LHm/fffb5omf56gxuzZs82BAwde8LOW9JEWjUjz+HA014EDB3Ts2DGfPhMZGanRo0fT\nZ9qx06dPy+PxqGvXrpLoJ6jP7XZr+fLlqqio0OjRo+kjqGf69Om69dZbNWbMGJl1bv+ir6BWTk6O\nunfvrt69e2vKlCk6cOCApJb1kRY92ZDHh6O5avvFhfrM0aNHg1ES2oAHH3xQw4YN08iRIyXRT3DO\njh07NHLkSFVWVioqKkpvvPGGLr/8cu9/3OgjkKRFixYpJydHS5culSSfaR38eQJJuvrqq7VkyRL1\n69dPx44d07x58zRq1Cjt3LmzRX0kII8IB/xx/lxqtA8PPfSQNmzYoKysrCb1AfpJ+9KvXz9t375d\nxcXFevPNNzV58mStWbPmom3oI+3LF198occee0xZWVmyWq2SJNM0fUalG0JfaT+++c1vel8PHDhQ\nI0eOVK9evbRkyRJdddVVDbZrrI+0aGoHjw9HcyUmJkrSBftM7WdoP2bOnKkVK1Zo9erVSktL826n\nn6CW3W5X7969NWzYMD3xxBO6+uqrtXDhQu9/Y+gj2LhxowoLCzVgwADZ7XbZ7XatW7dOzz33nBwO\nh2JjYyXRV+ArOjpaAwYM0L59+1r050mLgjSPD0dz9erVS4mJiT59pqKiQllZWfSZdubBBx/0hui+\nffv6fEY/QUPcbrc8Hg99BF633HKLPv/8c2VnZys7O1vbtm1TRkaGpkyZom3btik9PZ2+gnoqKiq0\ne/duJSUltejPE+ucOXPmtKSQzp07a/bs2UpOTlZUVJTmzZunrKwsLV68mMeGt1NlZWXatWuX8vPz\n9dJLL2nQoEFyOp2qrq6W0+mU2+3Wb37zG11++eVyu9166KGHdOzYMb344otyOBzBLh+t4L777tOr\nr76qN998Uz169FBpaalKS0tlGIYcDocMw6CfQLNmzVJkZKQ8Ho8OHz6s3//+91q6dKmefPJJ9enT\nhz4CSTU3hcXFxXl/4uPj9frrr6tnz56aOnUqf55AkvTTn/7U++fJnj17NGPGDOXk5OiFF15oWTa5\nFEuKPPfcc2ZaWpoZERFhZmRkmOvXr78Uh0WIWrNmjWkYhmkYhmmxWLyvp02b5t1nzpw5ZlJSkhkZ\nGWmOHTvW3LlzZxArRms7v2/U/jz++OM++9FP2re77rrL7NmzpxkREWHGx8eb1113nfnBBx/47EMf\nwYXUXf6uFn2lfZs8ebKZnJxsOhwOs3v37ub3vvc9c/fu3T77+NNHeEQ4AAAA4IdL8ohwAAAAoL0h\nSAMAAAB+IEgDAAAAfiBIAwAAAH4gSAMAAAB+IEgDAAAAfiBIAwAAAH4gSAMAAAB+IEgDAAAAfvh/\nXjlj+pIx5RgAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "def plot_kf_compare(x0, p0, R, Q, move):\n", - " # storage for filter output\n", - " x_uni, x_kf = [], []\n", - " p1, p2 = [], []\n", - "\n", - " # initialize the filters\n", - " f = mkf_filter(R, Q)\n", - " f.x[0] = 0.\n", - " f.P[0, 0] = p0\n", - " pos = (x0, p0)\n", - " for i in range(50):\n", - " z = i*move + randn()\n", - " pos = update(pos[0], pos[1], z, R)\n", - " f.update(z)\n", - "\n", - " x_uni.append(pos[0])\n", - " x_kf.append(f.x[0])\n", - "\n", - " p1.append(pos[1])\n", - " p2.append(f.P[0, 0])\n", - "\n", - " u = move + randn()\n", - " pos = predict(pos[0], pos[1], u, Q)\n", - " f.predict(u=u)\n", - "\n", - " plt.scatter(range(len(x_kf)), x_kf, c='r',\n", - " s=80, label='Kalman')\n", - " plt.title('State')\n", - " plt.plot(x_uni, label='Univariate')\n", - " plt.xlim([0, 50])\n", - " plt.legend()\n", - "\n", - " plt.figure()\n", - " plt.plot(p1)\n", - " plt.scatter(range(len(x_kf)), p2, c='r', s=80)\n", - " plt.title('Variance')\n", - " plt.xlim([0, 50])\n", - " plt.show()\n", - " \n", - "plot_kf_compare(x0=0., p0=500., R=5., Q=.2, move=1.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As you can see, both filters produce the same results. Feel free to vary the initial guess, the measurement noise, and the process noise; so long as you make the same changes to both filters the output should be the same. This is a solid demonstration, albeit not a rigorous proof, that both filters in fact implement the same math for the 1-D case. " - ] - }, { "cell_type": "markdown", "metadata": {},