Main Content

trackingMSCEKF

Extended Kalman filter for object tracking in modified spherical coordinates (MSC)

Description

The trackingMSCEKF object represents an extended Kalman filter (EKF) for object tracking in modified spherical coordinates (MSC) using angle-only measurements from a single observer. Use the filter to predict the future location of an object in the MSC frame or associate multiple object detections with their tracks. You can specify the observer maneuver or acceleration required by the state-transition functions (@constantvelmsc and @constantvelmscjac) by using the ObserverInput property.

The following properties are fixed for the trackingMSCEKF object:

  • StateTransitionFcn - @constvelmsc

  • StateTransitionJacobianFcn - @constvelmscjac

  • MeasurementFcn - @cvmeasmsc

  • MeasurementJacobianFcn - @cvmeasmscjac

  • HasAdditiveProcessNoise - false

  • HasAdditiveMeasurementNoise - true

Creation

Description

mscekf = trackingMSCEKF returns an extended Kalman filter to use the MSC state-transition and measurement functions with object trackers. The default State implies a static target at 1 meter from the observer at zero azimuth and elevation.

mscekf = trackingMSCEKF(Name,Value) specifies the properties of the filter using one or more Name,Value pair arguments. Any unspecified properties take default values.

example

Properties

expand all

Filter state, specified as a real-valued M-element vector.

  • For 2-D tracking, M is equal to four and the four-dimensional state is: [az;azRate;1/r;rDot/r].

    For 3-D tracking, M is equal to six and the six-dimensional state is: [az;azRate;el;elRate;1/r;rDot/r].

az and el are the azimuth and elevation angle in radians. azRate and elRate are the azimuth and elevation angular rate in radians per second. r is the range in meters, and rDot is the range rate in meters per second.

If you want a filter with single-precision floating-point variables, specify State as a single-precision vector variable. For example,

filter = trackingMSCEKF('State',single([10;.2;13;.4]))

Data Types: single | double

State error covariance, specified as an M-by-M matrix where M is the size of the filter state. A scalar input is extended to an M-by-M matrix. The covariance matrix represents the uncertainty in the filter state. M is either 4 for 2-D tracking or 6 for 3-D tracking.

Example: eye(6)

This property is read-only.

State transition function, specified as a function handle. This function calculates the state vector at time step k from the state vector at time step k–1. For the trackingMSCEKF object, the transition function is fixed to @constvelmsc.

Data Types: function_handle

This property is read-only.

The Jacobian of the state transition function, specified as a function handle. This function has the same input arguments as the state transition function. For the trackingMSCEKF object, the transition function Jacobian is fixed to @constvelmsc.

Data Types: function_handle

Process noise covariance, specified as a Q-by-Q matrix. Q is either 2 or 3. The process noise represents uncertainty in the acceleration of the target.

Specify ProcessNoise before any call to the predict function. In later calls to predict, you can optionally specify the process noise as a scalar. In this case, the process noise matrix is a multiple of the Q-by-Q identity matrix.

Example: [1.0 0.05; 0.05 2]

Acceleration or maneuver of the observer, specified as a three-element vector. To specify an acceleration, use an M/2 vector, where M is either 4 for 2-D tracking or 6 for 3-D tracking. To specify a maneuver, give an M-element vector.

Example: [1;2;3]

This property is read-only.

Model additive process noise, specified as false. For the trackingMSCEKF object, this property is fixed to false.

This property is read-only.

Measurement model function, specified as a function handle, @cvmeasmsc. Input to the function is the M-element state vector. The output is the N-element measurement vector. For the trackingMSCEKF object, the measurement model function is fixed to @cvmeasmsc.

Data Types: function_handle

This property is read-only.

Jacobian of the measurement function, specified as a function handle. The function has the same input arguments as the measurement function. For the trackingMSCEKF object, the Jacobian of the measurement function is fixed to @cvmeasmscjac.

Data Types: function_handle

Wrapping of measurement residuals in the filter, specified as a logical 0 (false) or 1 (true). When specified as true, the measurement function specified in the MeasurementFcn property must returns two output arguments:

  • The first argument is the measurement, returned as an M-element real-valued vector.

  • The second argument is the wrapping bounds, returned as an M-by-2 real-valued matrix, where M is the dimension of the measurement. In each row, the first and second elements are the lower and upper bounds for the corresponding measurement variable. You can use −Inf or Inf to represent the variable does not have a lower or upper bound.

If you enable this property, the filter wraps the measurement residuals according to the measurement bounds, which helps prevent the filter from divergence caused by incorrect measurement residual values.

In the cvmeasmsc function, the wrapping bounds are [-180 180] degrees for azimuth angle measurements and [-90 90] degrees for elevation angle measurements. Other measurements are not bounded.

Note

You can specify this property only when constructing the filter.

Measurement noise covariance, specified as a positive scalar or positive-definite real-valued matrix. When specified as a scalar, the matrix is a multiple of the N-by-N identity matrix. N is the size of the measurement vector.

Specify MeasurementNoise before any call to the correct function.

Example: 0.2

This property is read-only.

Model additive process noise, specified as true. For the trackingMSCEKF object, this property is fixed to true.

Enable state smoothing, specified as false or true. Setting this property to true requires the Sensor Fusion and Tracking Toolbox™ license. When specified as true, you can:

  • Use the smooth function, provided in Sensor Fusion and Tracking Toolbox, to smooth state estimates of the previous steps. Internally, the filter stores the results from previous steps to allow backward smoothing.

  • Specify the maximum number of smoothing steps using the MaxNumSmoothingSteps property of the tracking filter.

Maximum number of backward smoothing steps, specified as a positive integer.

Dependencies

To enable this property, set the EnableSmoothing property to true.

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
cloneCreate duplicate tracking filter
residualMeasurement residual and residual noise from tracking filter
initializeInitialize state and covariance of tracking filter
smoothBackward smooth state estimates of tracking filter

Examples

collapse all

This example shows how to make an extended Kalman filter (EKF) for object tracking in modified spherical coordinates (MSC). Create the filter, predict the state, and correct the state estimate using measurement observations.

Create the filter for a 3-D motion model. Specify the state estimates for the MSC frame.

az = 0.1; % in radians
azRate = 0;
r = 1000;
rDot = 10;
el = 0.3; % in radians
elRate = 0;
omega = azRate*cos(el);

mscekf = trackingMSCEKF('State',[az;omega;el;elRate;1/r;rDot/r]);

Predict the filter state using a constant observer acceleration.

mscekf.ObserverInput = [1;2;3];
predict(mscekf); % Default time 1 second.
predict(mscekf,0.1); % Predict using dt = 0.1 second.

Correct the filter state using an angle-only measurement.

meas = [5;18]; % measured azimuth and elevation in degrees
correct(mscekf,meas);

References

[1] Aidala, V. and Hammel, S., 1983. Utilization of modified polar coordinates for bearings-only tracking. IEEE Transactions on Automatic Control, 28(3), pp.283-294.

Version History

Introduced in R2018b