Main Content

Simulate Radar Detections

The fusionRadarSensor object simulates the detection of targets by a radar. You can use the object to model many properties of real radar sensors. For example, you can

  • simulate real detections with added random noise

  • generate false alarms

  • simulate mechanically scanned antennas and electronically scanned phased arrays

  • specify angular, range, and range-rate resolution and limits

The radar sensor is assumed to be mounted on a platform and carried by the platform as it maneuvers. A platform can carry multiple sensors. When you create a sensor, you specify sensor positions and orientations with respect to the body coordinate system of a platform. Each call to fusionRadarSensor creates a sensor. The output of fusionRadarSensor generates the detection that can be used as input to multi-object trackers, such as trackerGNN, or any tracking filters, such as trackingKF.

The radar platform does not maintain any information about the radar sensors that are mounted on it. (The sensor itself contains its position and orientation with respect to the platform on which it is mounted but not which platform). You must create the association between radar sensors and platforms. A way to do this association is to put the platform and its associated sensors into a cell array. When you call a particular sensor, pass in the platform-centric target pose and target profile information. The sensor converts this information to sensor-centric poses. Target poses are outputs of trackingScenario methods.

Create Radar Sensor

You can create a radar sensor using the fusionRadarSensor object. Set the radar properties using name-value pairs and then execute the simulator. For example,

radar1 = fusionRadarSensor( ...
    'SensorIndex',1,...
    'UpdateRate',10, ...           % Hz
    'ReferenceRange', 111.0e3, ...         % m
    'ReferenceRCS', 0.0, ...               % dBsm
    'FieldOfView',[70,10], ...                 % [az;el] deg
    'HasElevation',false, ...
    'HasRangeRate',false, ...
    'AzimuthResolution',1.4, ...           % deg
    'RangeResolution', 135.0)                 % m

Convenience Syntaxes

There are several syntaxes of fusionRadarSensor that make it easier to specify the properties of commonly implemented radar scan modes.

  • sensor = fusionRadarSensor('Rotator') creates a fusionRadarSensor object that mechanically scans 360° in azimuth. Setting HasElevation to true points the radar antenna towards the center of the elevation field of view.

  • sensor = fusionRadarSensor('Sector') creates a fusionRadarSensor object that mechanically scans a 90° azimuth sector. Setting HasElevation to true, points the radar antenna towards the center of the elevation field of view. You can change the ScanMode to 'Electronic' to electronically scan the same azimuth sector. In this case, the antenna is not mechanically tilted in an electronic sector scan. Instead, beams are stacked electronically to process the entire elevation spanned by the scan limits in a single dwell.

  • sensor = fusionRadarSensor('Raster') returns a fusionRadarSensor object that mechanically scans a raster pattern spanning 90° in azimuth and 10° in elevation upwards from the horizon. You can change the ScanMode property to 'Electronic' to perform an electronic raster scan in the same volume.

  • sensor = fusionRadarSensor('No scanning') returns a fusionRadarSensor object that stares along the radar antenna boresight direction. No mechanical or electronic scanning is performed.

You can set other radar properties when you use these syntaxes. For example,

sensor = fusionRadarSensor(1,'Raster','ScanMode','Electronic')

Radar Sensor Parameters

The properties specific to the fusionRadarSensor object are listed here. For more detailed information, type

help fusionRadarSensor
at the command line.

Sensor Location Parameters

SensorIndexA unique identifier for each sensor.
UpdateRate

Rate at which sensor updates are generated, specified as a positive scalar. The reciprocal of this property must be an integer multiple of the simulation time interval. Updates requested between sensor update intervals do not return detections.

MountingLocation

Sensor (x,y,z) defining the offset of the sensor origin from the origin of its platform. The default value positions the sensor origin at the platform origin.

MountingAngles

Yaw, pitch, and roll angles of the sensor mounting frame with respect to the platform frame.

DetectionCoordinates

Specifies the coordinate system for detections reported in the Detections output struct. The coordinate system can be one of:

  • 'Scenario' –- detections are reported in the scenario coordinate frame in rectangular coordinates. This option can only be selected when the sensor HasINS property is set to true.

  • 'Body' –- detections are reported in the body frame of the sensor platform in rectangular coordinates.

  • 'Sensor rectangular' –- detections are reported in the radar sensor coordinate frame in rectangular coordinates aligned with the sensor frame axes.

  • 'Sensor spherical' –- detections are reported in the radar sensor coordinate frame in spherical coordinates based on the sensor frame axes.

Sensitivity Parameters

DetectionProbability

Probability of detecting a target with radar cross section, ReferenceRCS, at the range of ReferenceRange.

FalseAlarmRate

The probability of a false detection within each resolution cell of the radar. Resolution cells are determined from the AzimuthResolution and RangeResolution properties and when enabled the ElevationResolution and RangeRateResolution properties.

ReferenceRange

Range at which a target with radar cross section, ReferenceRCS, is detected with the probability specified in DetectionProbability.

ReferenceRCS

The target radar cross section (RCS) in dB at which the target is detected at the range specified by ReferenceRange with a detection probability specified by DetectionProbability.

Resolution and Bias Parameters

AzimuthResolution

The radar azimuthal resolution defines the minimum separation in azimuth angle at which the radar can distinguish two targets.

ElevationResolution

The radar elevation resolution defines the minimum separation in elevation angle at which the radar can distinguish two targets. This property only applies when the HasElevation property is set to true.

RangeResolution

The radar range resolution defines the minimum separation in range at which the radar can distinguish two targets.

RangeRateResolution

The radar range rate resolution defines the minimum separation in range rate at which the radar can distinguish two targets. This property only applies when the HasRangeRate property is set to true.

AzimuthBiasFraction

This property defines the azimuthal bias component of the radar as a fraction of the radar azimuthal resolution specified by the AzimuthResolution property. This property sets a lower bound on the azimuthal accuracy of the radar.

ElevationBiasFraction

This property defines the elevation bias component of the radar as a fraction of the radar elevation resolution specified by the ElevationResolution property. This property sets a lower bound on the elevation accuracy of the radar. This property only applies when the HasElevation property is set to true.

RangeBiasFraction

This property defines the range bias component of the radar as a fraction of the radar range resolution specified by the RangeResolution property. This property sets a lower bound on the range accuracy of the radar.

RangeRateBiasFraction

This property defines the range rate bias component of the radar as a fraction of the radar range resolution specified by the RangeRateResolution property. This property sets a lower bound on the range rate accuracy of the radar. This property only applies when you set the HasRangeRate property to true.

Enabling Parameters

HasElevation

This property allows the radar sensor to scan in elevation and estimate elevation from target detections.

HasRangeRate

This property allows the radar sensor to estimate range rate.

HasFalseAlarms

This property allows the radar sensor to generate false alarm detection reports.

HasRangeAmbiguities

When true, the radar does not resolve range ambiguities. When a radar sensor cannot resolve range ambiguities, targets at ranges beyond the MaxUnambiguousRange property value are wrapped into the interval [0 MaxUnambiguousRange]. When false, targets are reported at their unwrapped range.

HasRangeRateAmbiguites

When true, the radar does not resolve range rate ambiguities. When a radar sensor cannot resolve range rate ambiguities, targets at range rates above the MaxUnambiguousRadialSpeed property value are wrapped into the interval [0 MaxUnambiguousRadialSpeed]. When false, targets are reported at their unwrapped range rates. This property only applies when the HasRangeRate property is set to true.

HasNoise

Specifies if noise is added to the sensor measurements. Set this property to true to report measurements with noise. Set this property to false to report measurements without noise. The reported measurement noise covariance matrix contained in the output objectDetection struct is always computed regardless of the setting of this property.

HasOcclusionEnable occlusion from extended objects, specified as true or false. Set this property to true to model occlusion from extended objects. Note that both extended objects and point targets can be occluded by extended objects, but a point target cannot occlude another point target or an extended object. Set this property to false to disable occlusion of extended objects.
HasINS

Set this property to true to enable an optional input argument to pass the current estimate of the sensor platform pose to the sensor. This pose information is added to the MeasurementParameters field of the reported detections. Then, the tracking and fusion algorithms can estimate the state of the target detections in scenario coordinates.

Range and Range Rate Parameters

MaxUnambiguousRange

This property specifies the range at which the radar can unambiguously resolve the range of a target. Targets detected at ranges beyond the unambiguous range are wrapped into the range interval [0 MaxUnambiguousRange]. This property only applies to true target detections when you set HasRangeAmbiguities property to true.

This property also defines the maximum range at which false alarms are generated. This property only applies to false target detections when you set HasFalseAlarms property to true.

MaxUnambiguousRadialSpeed

This property specifies the maximum magnitude value of the radial speed at which the radar can unambiguously resolve the range rate of a target. Targets detected at range rates whose magnitude is greater than the maximum unambiguous radial speed are wrapped into the range rate interval [-MaxUnambiguousRadialSpeed MaxUnambiguousRadialSpeed]. This property only applies to true target detections when you set both the HasRangeRate and HasRangeRateAmbiguities properties to true.

This property also defines the range rate interval over which false target detections are generated. This property only applies to false target detections when you set both the HasFalseAlarms and HasRangeRate properties to true.

Detector Input

Each sensor created by fusionRadarSensor accepts as input an array of target structures. This structure serves as the interface between the trackingScenario and the sensors. You create the target struct from target poses and profile information produced by trackingScenario or equivalent software.

The structure contains these fields.

FieldDescription
PlatformID

Unique identifier for the platform, specified as a positive integer. This is a required field with no default value.

ClassID

User-defined integer used to classify the type of target, specified as a nonnegative integer. 0 is reserved for unclassified platform types and is the default value.

Position

Position of target in the platform body frame, specified as a real-valued, 1-by-3 vector. This is a required field with no default value. Units are in meters.

Velocity

Velocity of target in the platform body frame, specified as a real-valued, 1-by-3 vector. Units are in meters per second. The default is [0 0 0].

Acceleration

Acceleration of target in the platform body frame, specified as a 1-by-3 vector. Units are in meters per second-squared. The default is [0 0 0].

Orientation

Orientation of the target with respect to platform body frame, specified as a scalar quaternion or a 3-by-3 rotation matrix. Orientation defines the frame rotation from the platform coordinate system to the target body coordinate system. Units are dimensionless. The default is quaternion(1,0,0,0).

AngularVelocity

Angular velocity of the target in the platform body frame, specified as a real-valued, 1-by-3 vector. The magnitude of the vector defines the angular speed. Units are in degrees per second. The default is [0 0 0].

You can create a target pose structure by merging information from the platform information output from the targetProfiles method of trackingScenario and target pose information output from the targetPoses method on the platform carrying the sensors. You can merge them by extracting for each PlatformID in the target poses array, the profile information in platform profiles array for the same PlatformID.

The platform targetPoses method returns this structure for each target other than the platform.

Target Poses

platformID
ClassID
Position
Velocity
Yaw
Pitch
Roll
AngularVelocity

The platformProfiles method returns this structure for all platforms in the scenario.

Platform Profiles

PlatformID
ClassID
RCSPattern
RCSAzimuthAngles
RCSElevationAngles

Radar Sensor Coordinate Systems

Detections consist of measurements of positions and velocities of targets and their covariance matrices. Detections are constructed with respect to sensor coordinates but can be output in one of several coordinates. Multiple coordinate frames are used to represent the positions and orientations of the various platforms and sensors in a scenario.

In a radar simulation, there is always a top-level global coordinate system which is usually the North-East-Down (NED) Cartesian coordinate system defined by a tangent plane at any point on the surface of the Earth. The trackingScenario object models the motion of platforms in the global coordinate system. When you create a platform, you specify its location and orientation relative to the global frame. These quantities define the body axes of the platform. Each radar sensor is mounted on the body of a platform. When you create a sensor, you specify its location and orientation with respect to the platform body coordinates. These quantities define the sensor axes. The body and radar axes can change over time, however, global axes do not change.

Additional coordinate frames can be required. For example, often tracks are not maintained in NED (or ENU) coordinates, as this coordinate frame changes based on the latitude and longitude where it is defined. For scenarios that cover large areas (over 100 kilometers in each dimension), earth-centered earth-fixed (ECEF) can be a more appropriate global frame to use.

A radar sensor generates measurements in spherical coordinates relative to its sensor frame. However, the locations of the objects in the radar scenario are maintained in a top-level frame. A radar sensor is mounted on a platform and will, by default, only be aware of its position and orientation relative to the platform on which it is mounted. In other words, the radar expects all target objects to be reported relative to the platform body axes. The radar reports the required transformations (position and orientation) to relate the reported detections to the platform body axes. These transformations are used by consumers of the radar detections (e.g. trackers) to maintain tracks in the platform body axes. Maintaining tracks in the platform body axes enables the fusion of measurement or track information across multiple sensors mounted on the same platform.

If the platform is equipped with an inertial navigation system (INS) sensor, then the location and orientation of the platform relative to the top-level frame can be determined. This INS information can be used by the radar to reference all detections to scenario coordinates.

INS

When you specify HasINS as true, you must pass in an INS struct into the step method. This structure consists of the position, velocity, and orientation of the platform in scenario coordinates. These parameters let you express target poses in scenario coordinates by setting the DetectionCoordinates property.

Detections

Radar sensor detections are returned as a cell array of objectDetection objects. A detection contains these properties.

objectDetection Structure

FieldDefinition
TimeMeasurement time
MeasurementMeasurements
MeasurementNoiseMeasurement noise covariance matrix
SensorIndexUnique ID of the sensor
ObjectClassIDObject classification
MeasurementParametersParameters used by initialization functions of any nonlinear Kalman tracking filters
ObjectAttributesAdditional information passed to tracker

Measurement and MeasurementNoise are reported in the coordinate system specified by the DetectionCoordinates property of the fusionRadarSensor object.

Measurement Coordinates

DetectionCoordinatesMeasurement and Measurement Noise Coordinates
'Scenario'

Coordinate Dependence on HasRangeRate

HasRangeRateCoordinates
true[x;y;z;vx;vy;vz]
false[x;y;z]
'Body'
'Sensor rectangular'
'Sensor spherical'

Coordinate Dependence on HasRangeRate and HasElevation

HasRangeRateHasElevationCoordinates
truetrue[az;el;rng;rr]
truefalse[az;rng;rr]
falsetrue[az;el;rng]
falsefalse[az;rng]

The MeasurementParameters field consists of an array of structs describing a sequence of coordinate transformations from a child frame to a parent frame or the inverse transformations (see Frame Rotation). The longest possible sequence of transformations is: Sensor → Platform → Scenario. For example, if the detections are reported in sensor spherical coordinates and HasINS is set to false, then the sequence consists of one transformation from sensor to platform. If HasINS is true, the sequence of transformations consists of two transformations – first to platform coordinates then to scenario coordinates. Trivially, if the detections are reported in platform rectangular coordinates and HasINS is set to false, the transformation consists only of the identity.

Each struct takes the form:

MeasurementParameters

ParameterDefinition
Frame

Enumerated type indicating the frame used to report measurements. When detections are reported using a rectangular coordinate system, Frame is set to 'rectangular'. When detections are reported in spherical coordinates, Frame is set 'spherical' for the first struct.

OriginPosition

Position offset of the origin of frame(k) from the origin of frame(k+1) represented as a 3-by-1 vector.

OriginVelocity

Velocity offset of the origin of frame(k) from the origin of frame(k+1) represented as a 3-by-1 vector.

Orientation

A 3-by-3 real-valued orthonormal frame rotation matrix which rotates the axes of frame(k+1) into alignment with the axes of frame(k).

IsParentToChild

A logical scalar indicating if Orientation performs a frame rotation from the parent coordinate frame to the child coordinate frame. If false, Orientation performs a frame rotation from the child's coordinate frame to the parent's coordinate frame.

HasElevation

A logical scalar indicating if the frame has three-dimensional position. Only set to false for the first struct when detections are reported in spherical coordinates and HasElevation is false, otherwise it is true.

HasVelocity

A logical scalar indicating if the reported detections include velocity measurements. true when HasRangeRate is enabled, otherwise false.

ObjectAttributes

AttributeDefinition
TargetIndex

Identifier of the platform, PlatformID, that generated the detection. For false alarms, this value is negative.

SNR

Detection signal-to-noise ratio in dB.