from datetime import datetime import numpy as np # Simulate Data from stonesoup.types.groundtruth import GroundTruthPath, GroundTruthState # Figure to plot truth (and future data) from matplotlib import pyplot as plt fig = plt.figure(figsize=(10, 6)) ax = fig.add_subplot(1, 1, 1) ax.set_xlabel("$x$") ax.set_ylabel("$y$") truth = GroundTruthPath() start_time = datetime.now() for n in range(1, 21): x = n y = n varxy = np.array([[0.1, 0], [0, 0.1]]) xy = np.random.multivariate_normal(np.array([x, y]), varxy) truth.append( GroundTruthState(np.array([[xy[0]], [xy[1]]]), timestamp=start_time + timedelta(seconds=n))) #Plot the result ax.plot([state.state_vector[0, 0] for state in truth], [state.state_vector[1, 0] for state in truth], linestyle="--")
# As in previous tutorials, we start with a target moving linearly in the 2D cartesian plane. import numpy as np from scipy.stats import uniform from datetime import datetime from datetime import timedelta from stonesoup.models.transition.linear import CombinedLinearGaussianTransitionModel, \ ConstantVelocity from stonesoup.types.groundtruth import GroundTruthPath, GroundTruthState np.random.seed(1991) start_time = datetime.now() transition_model = CombinedLinearGaussianTransitionModel([ConstantVelocity(0.005), ConstantVelocity(0.005)]) truth = GroundTruthPath([GroundTruthState([0, 1, 0, 1], timestamp=start_time)]) for k in range(1, 21): truth.append(GroundTruthState( transition_model.function(truth[k-1], noise=True, time_interval=timedelta(seconds=1)), timestamp=start_time+timedelta(seconds=k))) # %% # Probability of detection # ^^^^^^^^^^^^^^^^^^^^^^^^ # For the first time we introduce the possibility that, at any time-step, our sensor receives no # detection from the target (i.e. :math:`p_d < 1`). prob_det = 0.9 # %% # Simulate clutter # ^^^^^^^^^^^^^^^^
truth.append( GroundTruthState(transition_model.function( truth[-1], noise=True, time_interval=timedelta(seconds=1)), timestamp=start_time + timedelta(seconds=k))) # Birth for _ in range(np.random.poisson(0.6)): # Birth probability x, y = initial_position = np.random.rand(2) * [ 20, 20 ] # Range [0, 20] for x and y x_vel, y_vel = ( np.random.rand(2)) * 2 - 1 # Range [-1, 1] for x and y velocity state = GroundTruthState([x, x_vel, y, y_vel], timestamp=start_time + timedelta(seconds=k)) # Add to truth set for current and for all timestamps truth = GroundTruthPath([state]) current_truths.add(truth) truths.add(truth) from stonesoup.plotter import Plotter plotter = Plotter() plotter.ax.set_ylim(-5, 25) plotter.plot_ground_truths(truths, [0, 2]) # %% # Generate Detections and Clutter # ------------------------------- # Next, generate detections with clutter just as in the previous tutorials, skipping over the truth # paths that weren't alive at the current time step. from scipy.stats import uniform