Main Content


Gaussian-sum filter for object tracking


The trackingGSF object represents a Gaussian-sum filter designed for object tracking. You can define the state probability density function by a set of finite Gaussian-sum components. Use this filter for tracking objects that require a multi-model description due to incomplete observability of state through measurements. For example, this filter can be used as a range-parameterized extended Kalman filter when the detection contains only angle measurements.



gsf = trackingGSF returns a Gaussian-sum filter with two constant velocity extended Kalman filters (trackingEKF) with equal initial weight.


gsf = trackingGSF(trackingFilters) specifies the Gaussian components of the filter in trackingFilters. The initial weights of the filters are assumed to be equal.

gsf = trackingGSF(trackingFilters,modelProbabilities) specifies the initial weight of the Gaussian components in modelProbabilities and sets the ModelProbabilities property.

gsf = trackingGSF(___,'MeasurementNoise',measNoise) specifies the measurement noise of the filter. The MeasurementNoise property is set for each Gaussian component.


expand all

This property is read-only.

Weighted estimate of filter state, specified as a real-valued M-element vector. This state is estimated based on the weighted combination of filters in TrackingFilters. Use ModelProbabilities to change the weights.

Example: [200;0.2]

Data Types: single | double

This property is read-only.

State error covariance, specified as a positive-definite real-valued M-by-M matrix, where M is the size of the filter state. The covariance matrix represents the uncertainty in the filter state. This state covariance is estimated based on the weighted combination of filters in TrackingFilters. Use ModelProbabilities to change the weights.

Example: [20 0.1; 0.1 1]

Data Types: single | double

List of filters, specified as a cell array of tracking filters. Specify these filters when creating the object. By default, the filters have equal probability. Specify modelProbabilities if the filters have different probabilities.

If you want a trackingGSF filter with single-precision floating-point variables, specify the first filter using single-precision. For example,

filter1 = trackingEKF('StateTransitionFcn',@constvel,'State',single([1;2;3;4]));
filter2 = trackingEKF('StateTransitionFcn',@constvel,'State',[2;1;3;1]);
filter = trackingGSF({filter1,filter2})


The state of each filter must be the same size and have the same physical meaning.

Data Types: cell

This property is read-only.

Enable wrapping of measurement residuals in the filter, specified as a K-element vector of 0s and 1s, where K is the number of underlying tracking filters specified in the TrackingFilters property. If an underlying filter enables measurement wrapping, then the corresponding element is a logical 1. Otherwise, it is 0.

Weight of each filter, specified as a vector of probabilities from 0 to 1. By default, the weight of each component of the filter is equal.

Data Types: single | double

Measurement noise covariance, specified as a positive scalar or positive-definite real-valued matrix. The matrix is a square with side lengths equal to the number of measurements. A scalar input is extended to a square diagonal matrix.

Specify MeasurementNoise before any call to the correct function. After the first call to correct, you can optionally specify the measurement noise as a scalar. In this case, the measurement noise matrix is a multiple of the R-by-R identity matrix, where R is the number of measurements.

Example: 0.2

Data Types: single | double

Object Functions

predictPredict state and state estimation error covariance of tracking filter
correctCorrect state and state estimation error covariance using tracking filter
correctjpdaCorrect state and state estimation error covariance using tracking filter and JPDA
distanceDistances between current and predicted measurements of tracking filter
likelihoodLikelihood of measurement from tracking filter
tunablePropertiesGet tunable properties of filter
setTunedPropertiesSet properties to tuned values
cloneCreate duplicate tracking filter


collapse all

This example shows how to create and run a trackingGSF filter. Specify three extended Kalman filters (EKFs) as the components of the Gaussian-sum filter. Call the predict and correct functions to track an object and correct the state estimate based on measurements.

Create three EKFs each with a state distributed around [0;0;0;0;0;0] and running on position measurements. Specify them as the input to the trackingGSF filter.

filters = cell(3,1);
filter{1} = trackingEKF(@constvel,@cvmeas,rand(6,1),'MeasurementNoise',eye(3));
filter{2} = trackingEKF(@constvel,@cvmeas,rand(6,1),'MeasurementNoise',eye(3));
filter{3} = trackingEKF(@constvel,@cvmeas,rand(6,1),'MeasurementNoise',eye(3));
gsf = trackingGSF(filter);

Call predict to get the predicted state and covariance of the filter. Use a 0.1 sec time step.

[x_pred, P_pred] = predict(gsf,0.1);

Call correct with a given measurement.

meas = [0.5;0.2;0.3];
[xCorr,pCorr] = correct(gsf,meas);

Compute the distance between the filter and a different measurement.

d = distance(gsf,[0;0;0]);


[1] Alspach, Daniel, and Harold Sorenson. "Nonlinear Bayesian estimation using Gaussian sum approximations." IEEE Transactions on Automatic Control. Vol. 17, No. 4, 1972, pp. 439–448.

[2] Ristic, B., Arulampalam, S. and McCarthy, J., 2002. Target motion analysis using range-only measurements: algorithms, performance and application to ISAR data. Signal Processing, 82(2), pp.273-296.

[3] Peach, N. "Bearings-only tracking using a set of range-parameterised extended Kalman filters." IEE Proceedings-Control Theory and Applications 142, no. 1 (1995): 73-80.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2018b