-
-
Save jmbarr/92dc83e28c04026136d4f8706a1159c1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "\n", | |
| "### Comparing PDA methods\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "A notebook designed to introduce a `PDAUpdater` class and work out how it should work. It broadly follows the PDA tutorial (#7). You'll need to be on the _PDAUpdater_ or _PDAUpdater2_ branches." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "#### Two methods\n", | |
| "\n", | |
| "The new `PDAUpdater` class has two methods which are functionally distinct but deliver identical maths. The first is the usual derivation from [1] which calculates innovations and innovation covariances for each potential association. The final state mean and covariance are then given as:\n", | |
| "\n", | |
| "\\begin{align}\\mathbf{x}_{k|k} &= \\mathbf{x}_{k|k-1} + K_k \\mathbf{y}_{k}\\\\\n", | |
| "P_{k|k} &= \\beta_0 P_{k|k-1} + (1 - \\beta_0) P_{k|k} + \\tilde{P}\\end{align}\n", | |
| "\n", | |
| "where $K_k$ and $P_{k|k}$ are the Kalman gain and posterior covariance respectively returned by the single-target Kalman update, $\\beta_0$ is the probability of missed detection. In this instance $\\mathbf{y}_k$ is the _combined_ innovation over $m_k$ detections, each of which has a probability of association, $\\beta_i$:\n", | |
| "\n", | |
| "$$\\mathbf{y}_k = \\Sigma_{i=1}^{m_k} \\beta_i \\mathbf{y}_{k,i}$$.\n", | |
| "\n", | |
| "The posterior covariance is composed of a term to account for the covariance due to missed detection, that due to the true detection, and a term ($\\tilde{P}$) which quantifies the effect of the measurement origin uncertainty\n", | |
| "\n", | |
| "$$\\tilde{P} \\triangleq K_k [ \\Sigma_{i=1}^{m_k} \\beta_i \\mathbf{y}_{k,i} \\mathbf{y}_{k,i}^T - \\mathbf{y}_k \\mathbf{y}_k^T ] K_k^T.$$\n", | |
| "\n", | |
| "The second method is perhaps more intuitive. Each of the weighted hypotheses are updated using an EKF, apart from the missed-detection hypothesis, which is merely predicted forward. These are then subjected to a weighted Gaussian mixture reduction to a single component. Gaussian mixture reduction (to a single component) is defined as:\n", | |
| "\n", | |
| "\\begin{align}\\mathbf{x} &= \\Sigma_{i=0}^M \\beta_i \\mathbf{x}_i\\\\\n", | |
| "P &= \\Sigma^M_{i=0} \\beta_i [P_i + (\\mathbf{x}_i - \\mathbf{x})(\\mathbf{x}_i - \\mathbf{x})^T ]\\end{align}\n", | |
| "\n", | |
| "here over M+1 components, where we're going to define for convenience the unassociated prediction (i.e. the missed detection hypothesis) as $i=0$." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "##### These methods are equivalent\n", | |
| "\n", | |
| "In the familiar notation the mean via Gaussian reduction is, \n", | |
| "\n", | |
| "$$\\mathbf{x}_{k|k} = \\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{x}_{k|k,i}$$ \n", | |
| "\n", | |
| "which if we separate out the prediction is equivalent to\n", | |
| "\n", | |
| "$$ = \\beta_0 \\mathbf{x}_{k|k-1} + \\Sigma^{m_k}_{i=1} \\beta_i \\mathbf{x}_{k|k,i} $$\n", | |
| "\n", | |
| "and by recalling the equation for the posterior mean,\n", | |
| "\n", | |
| "$$ = \\beta_0 \\mathbf{x}_{k|k-1} + \\Sigma^{m_k}_{i=1} \\beta_i (\\mathbf{x}_{k|k-1} + K_k \\mathbf{y}_{k,i}).$$\n", | |
| "\n", | |
| "Collecting terms\n", | |
| "\n", | |
| "$$ = (\\beta_0 + \\Sigma^{m_k}_{i=1} \\beta_i) \\mathbf{x}_{k|k-1} + \\Sigma^{m_k}_{i=1} \\beta_i K_k \\mathbf{y}_{k,i})$$\n", | |
| "\n", | |
| "and since the betas are weights which sum to one and the Kalman gain has no dependence on the measurement,\n", | |
| "\n", | |
| "$$ \\mathbf{x}_{k|k} = \\mathbf{x}_{k|k-1} + K_k \\Sigma^{m_k}_{i=1} \\beta_i \\mathbf{y}_{k,i}\\mathrm{, as \\ above.}$$\n", | |
| "\n", | |
| "The covariance,\n", | |
| "\n", | |
| "\\begin{align}P_{k|k} &= \\Sigma^{m_k}_{i=0} \\beta_i [P_{k|k,i} + (\\mathbf{x}_{k|k,i} - \\mathbf{x}_{k|k})(\\mathbf{x}_{k|k,i} - \\mathbf{x}_{k|k})^T ]\\\\\n", | |
| " &= \\Sigma^{m_k}_{i=0} \\beta_i P_{k|k,i} + \\Sigma^{m_k}_{i=0} \\beta_i (\\mathbf{x}_{k|k,i} - \\mathbf{x}_{k|k})(\\mathbf{x}_{k|k,i} - \\mathbf{x}_{k|k})^T\\end{align}\n", | |
| "\n", | |
| "\n", | |
| "The term, $\\Sigma^{m_k}_{i=0} \\beta_i P_{k|k,i}$ can be split by considering the prediction separately,\n", | |
| "\n", | |
| "\n", | |
| "$$ \\beta_0 P_{k|k-1} + \\Sigma^{m_k}_{i=1} \\beta_i P_{k|k,i}$$\n", | |
| "\n", | |
| "which because the posterior covariance is independent of measurement resolves to,\n", | |
| "\n", | |
| "$$\\beta_0 P_{k|k-1} + (\\Sigma^{m_k}_{i=1} \\beta_i) P_{k|k}$$\n", | |
| "\n", | |
| "and since $\\Sigma^{m_k}_{i=1} \\beta_i = 1 - \\beta_0$,\n", | |
| "\n", | |
| "$$\\beta_0 P_{k|k-1} + (1 - \\beta_0) P_{k|k}.$$\n", | |
| "\n", | |
| "Meanwhile $\\mathbf{x}_{k|k,i} - \\mathbf{x}_{k|k}$ can be written as $\\mathbf{x}_{k|k-1} + K_k \\mathbf{y}_{k,i} - (\\mathbf{x}_{k|k-1} + K_k \\mathbf{y}_k)$, or $K_k (\\mathbf{y}_{k,i} - \\mathbf{y}_k)$. So\n", | |
| "\n", | |
| "\\begin{align}\\Sigma^{m_k}_{i=0} \\beta_i (\\mathbf{x}_{k|k,i} - \\mathbf{x}_{k|k})(\\mathbf{x}_{k|k,i} - \\mathbf{x}_{k|k})^T &= \\Sigma^{m_k}_{i=0} \\beta_i K_k(\\mathbf{y}_{k,i} - \\mathbf{y}_{k})(\\mathbf{y}_{k,i} - \\mathbf{y}_{k})^T K_k^T\\\\\n", | |
| " &= K_k [\\Sigma^{m_k}_{i=0} \\beta_i (\\mathbf{y}_{k,i} - \\mathbf{y}_{k})(\\mathbf{y}_{k,i} - \\mathbf{y}_{k})^T] K_k^T\\\\\n", | |
| " &= K_k [\\Sigma^{m_k}_{i=0} \\beta_i (\\mathbf{y}_{k,i} - \\mathbf{y}_{k})(\\mathbf{y}_{k,i}^T - \\mathbf{y}_{k}^T)] K_k^T\\\\\n", | |
| " &= K_k [\\Sigma^{m_k}_{i=0} \\beta_i (\\mathbf{y}_{k,i}\\mathbf{y}_{k,i}^T - \\mathbf{y}_{k}\\mathbf{y}_{k,i}^T - \\mathbf{y}_{k,i}\\mathbf{y}_{k}^T + \\mathbf{y}_{k}\\mathbf{y}_{k}^T)] K_k^T\\\\\n", | |
| " &= K_k [\\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k,i}\\mathbf{y}_{k,i}^T - \\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k}\\mathbf{y}_{k,i}^T - \\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k,i}\\mathbf{y}_{k}^T + \\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k}\\mathbf{y}_{k}^T] K_k^T\\end{align}\n", | |
| "\n", | |
| "But since $\\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k}\\mathbf{y}_{k,i}^T = \\mathbf{y}_{k} \\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k,i}^T = \\mathbf{y}_{k}\\mathbf{y}_{k}^T$ and $\\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k,i}\\mathbf{y}_{k}^T = (\\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k,i})\\mathbf{y}_{k}^T = \\mathbf{y}_{k}\\mathbf{y}_{k}^T$, this mean that second term becomes, \n", | |
| "\n", | |
| "$$ = K_k [\\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k,i}\\mathbf{y}_{k,i}^T - \\mathbf{y}_{k}\\mathbf{y}_{k}^T - \\mathbf{y}_{k}\\mathbf{y}_{k}^T + \\mathbf{y}_{k}\\mathbf{y}_{k}^T] K_k^T$$\n", | |
| "\n", | |
| "$$ = K_k [\\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k,i}\\mathbf{y}_{k,i}^T - \\mathbf{y}_{k}\\mathbf{y}_{k}^T] K_k^T.$$\n", | |
| "\n", | |
| "Combining the terms:\n", | |
| "\n", | |
| "$$P_{k|k} = \\beta_0 P_{k|k-1} + (1 - \\beta_0) P_{k|k} + K_k [\\Sigma^{m_k}_{i=0} \\beta_i \\mathbf{y}_{k,i}\\mathbf{y}_{k,i}^T - \\mathbf{y}_{k}\\mathbf{y}_{k}^T] K_k^T$$\n", | |
| "\n", | |
| "and because the innovation of the prediction is 0 (i.e. $\\mathbf{y}_{k,0} = 0$), this is equivalent to,\n", | |
| "\n", | |
| "$$P_{k|k} = \\beta_0 P_{k|k-1} + (1 - \\beta_0) P_{k|k} + K_k [\\Sigma^{m_k}_{i=1} \\beta_i \\mathbf{y}_{k,i}\\mathbf{y}_{k,i}^T - \\mathbf{y}_{k}\\mathbf{y}_{k}^T] K_k^T$$\n", | |
| "\n", | |
| "again as previously given.\n", | |
| "\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Testing it out\n", | |
| "\n", | |
| "The following uses tutorial 7 of the Stone Soup tutorials to produce ground truth. A `PDAUpdater` is subsequently imported for which the _PDAUpdater_ branch is required.\n", | |
| "\n", | |
| "#### Ground truth\n", | |
| "\n", | |
| "Ground truth is simulated in the same way as in the tutorial." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "\n", | |
| "from datetime import datetime\n", | |
| "from datetime import timedelta\n", | |
| "\n", | |
| "from stonesoup.models.transition.linear import CombinedLinearGaussianTransitionModel, \\\n", | |
| " ConstantVelocity\n", | |
| "from stonesoup.types.groundtruth import GroundTruthPath, GroundTruthState\n", | |
| "\n", | |
| "np.random.seed(1991)\n", | |
| "\n", | |
| "start_time = datetime.now()\n", | |
| "transition_model = CombinedLinearGaussianTransitionModel([ConstantVelocity(0.005),\n", | |
| " ConstantVelocity(0.005)])\n", | |
| "truth = GroundTruthPath([GroundTruthState([0, 1, 0, 1], timestamp=start_time)])\n", | |
| "for k in range(1, 21):\n", | |
| " truth.append(GroundTruthState(\n", | |
| " transition_model.function(truth[k-1], noise=True, time_interval=timedelta(seconds=1)),\n", | |
| " timestamp=start_time+timedelta(seconds=k)))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Add clutter.\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from scipy.stats import uniform\n", | |
| "\n", | |
| "from stonesoup.types.detection import TrueDetection\n", | |
| "from stonesoup.types.detection import Clutter\n", | |
| "from stonesoup.models.measurement.linear import LinearGaussian\n", | |
| "measurement_model = LinearGaussian(\n", | |
| " ndim_state=4,\n", | |
| " mapping=(0, 2),\n", | |
| " noise_covar=np.array([[0.75, 0],\n", | |
| " [0, 0.75]])\n", | |
| " )\n", | |
| "\n", | |
| "prob_detect = 0.9 # 90% chance of detection.\n", | |
| "\n", | |
| "all_measurements = []\n", | |
| "for state in truth:\n", | |
| " measurement_set = set()\n", | |
| "\n", | |
| " # Generate detection.\n", | |
| " if np.random.rand() <= prob_detect:\n", | |
| " measurement = measurement_model.function(state, noise=True)\n", | |
| " measurement_set.add(TrueDetection(state_vector=measurement,\n", | |
| " groundtruth_path=truth,\n", | |
| " timestamp=state.timestamp,\n", | |
| " measurement_model=measurement_model))\n", | |
| "\n", | |
| " # Generate clutter.\n", | |
| " truth_x = state.state_vector[0]\n", | |
| " truth_y = state.state_vector[2]\n", | |
| " for _ in range(np.random.randint(10)):\n", | |
| " x = uniform.rvs(truth_x - 10, 20)\n", | |
| " y = uniform.rvs(truth_y - 10, 20)\n", | |
| " measurement_set.add(Clutter(np.array([[x], [y]]), timestamp=state.timestamp,\n", | |
| " measurement_model=measurement_model))\n", | |
| "\n", | |
| " all_measurements.append(measurement_set)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Plot the ground truth and measurements with clutter.\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 720x432 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "from stonesoup.plotter import Plotter\n", | |
| "plotter = Plotter()\n", | |
| "plotter.ax.set_ylim(0, 25)\n", | |
| "plotter.plot_ground_truths(truth, [0, 2])\n", | |
| "\n", | |
| "# Plot true detections and clutter.\n", | |
| "plotter.plot_measurements(all_measurements, [0, 2])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Create the predictor and updater\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from stonesoup.predictor.kalman import KalmanPredictor\n", | |
| "predictor = KalmanPredictor(transition_model)\n", | |
| "\n", | |
| "from stonesoup.updater.kalman import ExtendedKalmanUpdater\n", | |
| "updater = ExtendedKalmanUpdater(measurement_model)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Initialise Probabilistic Data Associator\n", | |
| "The `PDAHypothesiser` and `PDA` associator generate track predictions and calculate probabilities for all prediction-detection pairs for a single prediction and multiple detections.\n", | |
| "\n", | |
| "The `PDAHypothesiser` returns a collection of `SingleProbabilityHypothesis` types. The `PDA` associator takes these hypotheses and returns a dictionary of key-value pairings of each track and detection which it is to be associated with." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from stonesoup.hypothesiser.probability import PDAHypothesiser\n", | |
| "hypothesiser = PDAHypothesiser(predictor=predictor,\n", | |
| " updater=updater,\n", | |
| " clutter_spatial_density=0.125,\n", | |
| " prob_detect=prob_detect)\n", | |
| "\n", | |
| "from stonesoup.dataassociator.probability import PDA\n", | |
| "data_associator = PDA(hypothesiser=hypothesiser)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Run the PDA Filter\n", | |
| "\n", | |
| "We now deviate from the tutorial. Whereas previously the probabilistic update step was done in a loop for which the logic was visible, we now do that via the `PDAUpdater` class." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from stonesoup.updater.probability import PDAUpdater\n", | |
| "pdaupdater = PDAUpdater(measurement_model)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Create prior\n", | |
| "from stonesoup.types.state import GaussianState\n", | |
| "prior = GaussianState([[0], [1], [0], [1]], np.diag([1.5, 0.5, 1.5, 0.5]), timestamp=start_time)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from stonesoup.types.track import Track\n", | |
| "track = Track([prior])\n", | |
| "\n", | |
| "for n, measurements in enumerate(all_measurements):\n", | |
| " hypotheses = data_associator.associate({track},\n", | |
| " measurements,\n", | |
| " start_time + timedelta(seconds=n))\n", | |
| " hypotheses = hypotheses[track]\n", | |
| " posterior_state = pdaupdater.update(hypotheses)\n", | |
| " \n", | |
| "\n", | |
| " track.append(posterior_state)\n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Plot the resulting track\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 720x432 with 1 Axes>" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "plotter.plot_tracks(track, [0, 2], uncertainty=True)\n", | |
| "plotter.fig" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#### Use the alternative method\n", | |
| "prior = GaussianState([[0], [1], [0], [1]], np.diag([1.5, 0.5, 1.5, 0.5]), timestamp=start_time)\n", | |
| "track_alt = Track([prior])\n", | |
| "for n, measurements in enumerate(all_measurements):\n", | |
| " hypotheses = data_associator.associate({track_alt},\n", | |
| " measurements,\n", | |
| " start_time + timedelta(seconds=n))\n", | |
| " hypotheses = hypotheses[track_alt]\n", | |
| " posterior_state = pdaupdater.update(hypotheses, gm_method=True)\n", | |
| " \n", | |
| " track_alt.append(posterior_state)\n", | |
| " " | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Now calculate some metrics to test for differences in the tracks\n", | |
| "mean_diff = []\n", | |
| "cov_diff = []\n", | |
| "means = np.zeros(len(track))\n", | |
| "means_alt = np.zeros(len(track_alt))\n", | |
| "covs = []\n", | |
| "covs_alt = []\n", | |
| "for i,(state,state_alt) in enumerate(zip(track,track_alt)):\n", | |
| " means[i] = np.mean(state.mean)\n", | |
| " means_alt[i] = np.mean(state_alt.mean)\n", | |
| " covs.append(state.covar)\n", | |
| " covs_alt.append(state_alt.covar)\n", | |
| " mean_diff.append(np.max(state.mean-state_alt.mean))\n", | |
| " cov_diff.append(np.linalg.norm(state.covar-state_alt.covar))\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([ True, True, True, True, True, True, True, True, True,\n", | |
| " True, True, True, True, True, True, True, True, True,\n", | |
| " True, True, True, True])" | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# The means are close?\n", | |
| "np.isclose(means, means_alt)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[<matplotlib.lines.Line2D at 0x137f7bf10>]" | |
| ] | |
| }, | |
| "execution_count": 14, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# Plot the mean difference and the norm of the covariance difference\n", | |
| "from matplotlib import pyplot as plt\n", | |
| "plt.plot(mean_diff)\n", | |
| "plt.plot(cov_diff)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "#### References\n", | |
| "\n", | |
| "1. Bar-Shalom Y, Daum F, Huang F 2009, The Probabilistic Data Association Filter, IEEE Control Systems Magazine\n" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.10.0" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 1 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment