Main Content

adsbReceiver

Automatic Dependent Surveillance-Broadcast (ADS-B) receiver

Description

The adsbReceiver System object™ models an Automatic Dependent Surveillance-Broadcast (ADS-B) receiver. You can use this object to receive ADS-B messages generated by the adsbTransponder System object and output tracks.

To generate ADS-B tracks:

  1. Create the adsbReceiver object and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?

Creation

Description

receiver = adsbReceiver creates an ADS-B receiver System object, receiver, with default property values.

example

receiver = adsbReceiver(Name,Value) sets Properties for the transponder using one or more name-value pairs. For example, adsbReceiver('ReceiverIndex',1) creates an ADS-B receiver that has a unique identifier of 1.

Properties

expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Unique identifier of the receiver, specified as a nonnegative integer.

Maximum number of tracks that the ADS-B receiver can maintain, specified as a positive integer.

This property is read-only.

Number of tracks maintained in the ADS-B receiver, specified as a nonnegative integer.

Usage

Description

tracks = receiver(messages,time) updates the receiver with a list of ADS-B messages to the time of reception. Each message can generate at most one track. If the information contained in a message does not constitute a full track state, the receiver does not output tracks based on this message.

[tracks,incomplete] = receiver(messages,time) additionally returns the list of messages from which the receiver cannot derive a full track state.

example

[tracks,incomplete,info] = receiver(messages,time) additionally returns the analysis information for the input messages.

Input Arguments

expand all

ADS-B messages, specified as an array of ADS-B message structures. Each structure contains these fields:

ADS-B Message Structure

Field NameDescriptionDefault Value
ICAOInternational Civil Aviation Organization address, specified as a six-element character vector or a six-character string scalar. six-element empty character vector
TimeThe ADS-B transponder broadcasting time, specified as a scalar. If the transponder is not synchronized with a reliable time source, use NaN as the value of Time so that the reception time will be used in the receiver for the message.NaN
CategoryCategory of the transponder platform, specified as an adsbCategory enumeration object. adsbCategory(0)
CallsignCall sign of the transponder platform, specified as an eight-element character vector or an eight-character string.eight-element empty character vector
LatitudeReported latitude of the broadcasting transponder, specified as a scalar between -90 and 90 in degrees. Use NaN when no information is available.NaN
LongitudeReported longitude of the broadcasting transponder, specified as a scalar between -180 and 180 in degrees. Use NaN when no information is available.NaN
AltitudeReported altitude of the broadcasting transponder, specified as a scalar in meters. It represents the height above the WG84 ellipsoid. Use NaN when no information is available.NaN
VeastReported velocity component in the east direction, specified as a scalar in meters per second. The positive direction for this component is the east direction. Use NaN when no information is available.NaN
VnorthReported velocity component in the north direction, specified as a scalar in meters per second. The positive direction for this component is the north direction. Use NaN when no information is available.NaN
ClimbRateReported climb rate, specified as a scalar in meters per second. The positive direction for this component is the upward direction. Use NaN when no information is available. NaN
HeadingReported heading direction, specified as a scalar between 0 and 360 in degrees. The heading direction angle is north at 0 and is clockwise-positive. Use NaN when no information is available.NaN
NACPosition

Navigation Accuracy Category of position, specified as an integer from 0 to 11. Each integer value defines an Estimated Position Uncertainty (EPU) bound. EPU bound is a 95% accuracy bound for the horizontal position. The bound defines a circle centered on the reported position so that the probability of the actual position lying inside the circle is 0.95. The list shows the relation between the integer and the bound:

  • 0: EPU ≥ 18.52 km (10 NM) or unknown

  • 1: EPU < 18.52 km (10 NM)

  • 2: EPU < 7.408 (4 NM)

  • 3: EPU < 3.704 (2 NM)

  • 4: EPU < 1852 m (1 NM)

  • 5: EPU < 926 m (0.5 NM)

  • 6: EPU < 555.6 m (0.3 NM)

  • 7: EPU < 185.2 m (0.1 NM)

  • 8: EPU < 92.6 m (0.05 NM)

  • 9: EPU < 30 m

  • 10: EPU < 10 m

  • 11: EPU < 3 m

where NM represents nautical miles.

0
GeometricVerticalAccuracy

Geometric Vertical Accuracy (GVA) of altitude, specified as an integer from 0 to 2. Each integer value represents a 95% accuracy bound on the reported altitude. The list shows the relation between the integer and the bound:

  • 0: GVA > 150 m or unknown

  • 1: GVA ≤ 150 m

  • 2: GVA < 45 m

0
NACVelocity

Navigation Accuracy Category of velocity, specified as an integer from 0 to 4. Each integer represents a 95% accuracy bound on the reported Horizontal Velocity Error (HVE). The list shows the relation between the integer and the bound:

  • 0: HVE ≥ 10 m/s or unknown

  • 1: HVE < 10 m/s

  • 2: HVE < 3 m/s

  • 3: HVE < 1 m/s

  • 4: HVE < 0.3 m/s

0

Time of message reception, specified as a nonnegative scalar in seconds.

Output Arguments

expand all

Tracks generated from messages, returned as an array of objectTrack objects.

Incomplete messages, returned as an array of ADS-B message structures. Incomplete messages are the messages that the tracker did not successfully use to generate tracks.

Analysis information, returned as a structure. The structure contains these fields:

Field NameDescription
DiscardedDiscarded message ICAO indices, returned as an array of positive integers. Each integer represents the corresponding array index of a discarded message structure in the messages input.
IcaoToTrackID

Mapping of ICAO addresses to track IDs, returned as a K-element array of structures. Each structure contains two fields:

  • ICAO — ICAO address of the message, returned as a six-element character vector.

  • TrackID — Track ID, returned as a positive integer.

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:

release(obj)

expand all

deleteTrackDelete track managed by adsbReceiver
stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
isLockedDetermine if System object is in use
cloneCreate duplicate System object
resetReset internal states of System object

Examples

collapse all

Create an ADS-B receiver.

receiver = adsbReceiver;

Define an ADS-B message generated from the AAF123 transponder. Assume the transponder is not synchronized from UTC by setting Time to NaN.

airbornePositionMessage = struct('ICAO','AAF123','Time', NaN,...
    'Latitude',70, 'Longitude',30,'Altitude',2000);

Define the time of message receipt.

t0 = 0;

Call the receiver to generate tracks. Since the velocity information is not available in the message, the receiver cannot derive a valid track.

[tracks,incomplete,info] = receiver(airbornePositionMessage,t0)
tracks = 

  1x0 objectTrack array with properties:

    TrackID
    BranchID
    SourceIndex
    UpdateTime
    Age
    State
    StateCovariance
    StateParameters
    ObjectClassID
    TrackLogic
    TrackLogicState
    IsConfirmed
    IsCoasted
    IsSelfReported
    ObjectAttributes
incomplete = struct with fields:
                         ICAO: 'AAF123'
                         Time: 0
                     Category: No_Category_Information
                     Callsign: '        '
                     Latitude: 70
                    Longitude: 30
                     Altitude: 2000
                        Veast: NaN
                       Vnorth: NaN
                    ClimbRate: NaN
                      Heading: NaN
                  NACPosition: 0
    GeometricVerticalAccuracy: 0
                  NACVelocity: 0
                          Age: 1

info = struct with fields:
        Discarded: [1x0 uint32]
    IcaoToTrackID: [1x1 struct]

Create a new ADS-B message from the same transponder, which contains the velocity information. The time of receipt is at 1 second.

airborneVelocityMessage = struct('ICAO','AAF123','Time',NaN, ...
    'Vnorth',250,'Veast',0,'ClimbRate',-1);
t1 = 1;

Add the new message to the receiver. The receiver can now format the combination of the two messages into a track.

[tracks,incomplete,info] = receiver(airborneVelocityMessage,t1)
tracks = 
  objectTrack with properties:

             TrackID: 1
            BranchID: 0
         SourceIndex: 0
          UpdateTime: 1
                 Age: 2
               State: [6x1 double]
     StateCovariance: [6x6 double]
     StateParameters: [1x1 struct]
       ObjectClassID: 0
          TrackLogic: 'History'
     TrackLogicState: 1
         IsConfirmed: 1
           IsCoasted: 0
      IsSelfReported: 1
    ObjectAttributes: [1x1 struct]

incomplete = 

  1x0 empty struct array with fields:

    ICAO
    Time
    Category
    Callsign
    Latitude
    Longitude
    Altitude
    Veast
    Vnorth
    ClimbRate
    Heading
    NACPosition
    GeometricVerticalAccuracy
    NACVelocity
    Age
info = struct with fields:
        Discarded: [1x0 uint32]
    IcaoToTrackID: [1x1 struct]

Extended Capabilities

Introduced in R2021a