Main Content

initcaekf

Create constant-acceleration extended Kalman filter from detection report

Since R2018b

Description

example

filter = initcaekf(detection) creates and initializes a constant-acceleration extended Kalman filter from information contained in a detection report. For more information about the extended Kalman filter, see trackingEKF.

The function initializes a constant acceleration state with the same convention as constacc and cameas, [x vx ax y vy ay z vz az].

Examples

collapse all

Create and initialize a 3-D constant-acceleration extended Kalman filter object from an initial detection report.

Create the detection report from an initial 3-D measurement, (-200;30;0) , of the object position. Assume uncorrelated measurement noise.

detection = objectDetection(0,[-200;-30;0],'MeasurementNoise',2.1*eye(3), ...
    'SensorIndex',1,'ObjectClassID',1,'ObjectAttributes',{'Car',2});

Create the new filter from the detection report and display its properties.

filter = initcaekf(detection)
filter = 
  trackingEKF with properties:

                          State: [9x1 double]
                StateCovariance: [9x9 double]

             StateTransitionFcn: @constacc
     StateTransitionJacobianFcn: @constaccjac
                   ProcessNoise: [3x3 double]
        HasAdditiveProcessNoise: 0

                 MeasurementFcn: @cameas
         MeasurementJacobianFcn: @cameasjac
         HasMeasurementWrapping: 1
               MeasurementNoise: [3x3 double]
    HasAdditiveMeasurementNoise: 1

                MaxNumOOSMSteps: 0

                EnableSmoothing: 0

Show the filter state.

filter.State
ans = 9×1

  -200
     0
     0
   -30
     0
     0
     0
     0
     0

Show the state covariance matrix.

filter.StateCovariance
ans = 9×9

    2.1000         0         0         0         0         0         0         0         0
         0  100.0000         0         0         0         0         0         0         0
         0         0  100.0000         0         0         0         0         0         0
         0         0         0    2.1000         0         0         0         0         0
         0         0         0         0  100.0000         0         0         0         0
         0         0         0         0         0  100.0000         0         0         0
         0         0         0         0         0         0    2.1000         0         0
         0         0         0         0         0         0         0  100.0000         0
         0         0         0         0         0         0         0         0  100.0000

Initialize a 3D constant-acceleration extended Kalman filter from an initial detection report made from an initial measurement in spherical coordinates. If you want to use spherical coordinates, then you must supply a measurement parameter structure as part of the detection report with the Frame field set to 'spherical'. Set the azimuth angle of the target to 45, the elevation to 22, the range to 1000 meters, and the range rate to -4.0 m/s.

frame = 'spherical';
sensorpos = [25,-40,-10].';
sensorvel = [0;5;0];
laxes = eye(3);

Create the measurement parameters structure. Set 'HasVelocity' and 'HasElevation' to true. Then, the measurement vector consists of azimuth, elevation, range, and range rate.

measparms = struct('Frame',frame,'OriginPosition',sensorpos, ...
    'OriginVelocity',sensorvel,'Orientation',laxes,'HasVelocity',true, ...
    'HasElevation',true);
meas = [45;22;1000;-4];
measnoise = diag([3.0,2.5,2,1.0].^2);
detection = objectDetection(0,meas,'MeasurementNoise', ...
    measnoise,'MeasurementParameters',measparms)
detection = 
  objectDetection with properties:

                     Time: 0
              Measurement: [4x1 double]
         MeasurementNoise: [4x4 double]
              SensorIndex: 1
            ObjectClassID: 0
    ObjectClassParameters: []
    MeasurementParameters: [1x1 struct]
         ObjectAttributes: {}

filter = initcaekf(detection);

Display the state vector.

disp(filter.State)
  680.6180
   -2.6225
         0
  615.6180
    2.3775
         0
  364.6066
   -1.4984
         0

Input Arguments

collapse all

Detection report, specified as an objectDetection object.

Example: detection = objectDetection(0,[1;4.5;3],'MeasurementNoise', [1.0 0 0; 0 2.0 0; 0 0 1.5])

Output Arguments

collapse all

Extended Kalman filter, returned as a trackingEKF object.

Algorithms

  • The function computes the process noise matrix assuming a one-second time step and an acceleration-rate standard deviation of 1 m/s3.

  • You can use this function as the FilterInitializationFcn property of a trackerGNN or trackerTOMHT object.

Extended Capabilities

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

Version History

Introduced in R2018b