The 1090 Megahertz Riddle (second edition)

A Guide to Decoding Mode S and ADS-B Signals
By: Junzi Sun (junzis.com)

Mode S enhanced surveillance

Mode S Enhanced Surveillance (EHS) provides a set of advanced functionalities for the Mode S transponders. Three different types of reports are included in EHS. They are designed to report vertical intent, turning performance, and airspeeds. This chapter explains structures and decoding processes of these reports.

Selected vertical intention (BDS 4,0)

The selected vertical intention message is designed for air traffic control to obtain an aircraft’s current vertical intentions. For example, an aircraft controller can use this information to check whether an aircraft is complying with an altitude command. Table 1.1 shows the structure of the message.

Selected intention (BDS 4,0), MB field
FIELD MSG MB BITS
Status (for MCP/FCU selected altitude) 33 1 1
MCP/FCU selected altitude 34–45 2–13 12
  Range: [0, 65520] ft
  LSB: 16 ft
Status (for FMS selected altitude) 46 14 1
FMS selected altitude 47–58 15–26 12
  Range: [0, 65520] ft
  LSB: 16 ft
Status (for barometric press setting) 59 27 1
Barometric pressure setting 60–71 28–39 12
  Note: actual value minus 800 mb
  Range: [0, 410] mb
  LSB: 0.1 mb
Reserved (all zeros) 72–79 40–47 8
Status of MCP/FCU mode 80 48 1
VNAV mode 81 49 1
Alt hold mode 82 50 1
Approach mode 83 51 1
Reserved (all zeros) 84–85 52–53 2
Status of target altitude source 86 54 1
Target altitude source 87–88 55–56 2

Two different types of selected altitude fields are included in the message. Values in the MCP/FCU selected altitude field are from the mode control panel or flight control unit. These are often inputs from the pilot. Values in FMS selected altitude field are derived from the flight management system controlling the vertical profile, which often does not come from manual input. In practice, FMS selected altitude values are often empty or unusable. When it is presented, the value is mostly the same as MCP/FCU selected altitude.

The barometric pressure setting value is the actual pressure in millibars (mb) subtracted by a constant of 800. If the actual value is below 800 mb (or above 1209 mb), the corresponding status bit (MB:27) is set to 0.

The last two bits in the MB field show the source of the target altitude. They have the following meaning:

  00: Unknown source
  01: Aircraft altitude
  10: FCU/MCP selected altitude
  11: FMS selected altitude

Figure 1.1 illustrates an example of how to decode a BDS 4,0 message.

Try it out Using pyModeS, we can decode information of BDS 4,0 messages as:

import pyModeS as pms

msg = "A8001EBCAEE57730A80106DE1344"

pms.commb.selalt40fms(msg)
# 24000, FMS selected altitude (ft)

pms.commb.selalt40mcp(msg)
# 24000, MCP selected altitude (ft)

pms.commb.p40baro(msg)
# 1013.2, pressure (mb)

Track and turn report (BDS 5,0)

The track and turn report is designed to provide parameters to describe aircraft turns. In this type of message, roll angle, track angle, and track rate are provided. It also includes the ground speed and true airspeed (TAS) of the aircraft.

Table 1.2 shows the structure of the message.

Track and turn report (BDS 5,0), MB field
FIELD MSG MB BITS
Status (for roll angle) 33 1 1
Sign 34 2 1
Roll angle 35–43 3–11 9
  Range: [-90, +90] degrees
  LSB: 45/256 degrees
Status (for track angle) 44 12 1
Sign 45 13 1
True track angle 46–55 14–23 10
  Range: [-180, 180] degrees
  LSB: 90/512 degrees
Status (for ground speed) 56 24 1
Ground speed 57–66 25–34 10
  Range: [0, 2046] kt
  LSB: 2 kt
Status (for track angle rate) 67 35 1
Sign 68 36 1
Track angle rate 69–77 37–45 9
  Range: [-16, 16] degrees/second
  LSB: 8/256 degrees/second
Status (for true airspeed) 78 46 1
True airspeed 79–88 47–56 10
  Range: [0, 2046] kt
  LSB: 2 kt

In this message, three signed values are shown, which are roll angle, track angle, and track angle rate. Two’s complement coding (see section [sec:two_complement]) should be used to calculate these values.

The following Figure 1.2 shows an example of decoding a BDS 5,0 message.

Try it out Using pyModeS, we can decode information of BDS 5,0 messages as:

import pyModeS as pms

msg = "A80006ACF9363D3BBF9CE98F1E1D"

pms.commb.roll50(msg)   # -9.7, roll angle (deg)
pms.commb.trk50(msg)    # 140.273, track angle (deg)
pms.commb.rtrk50(msg)   # -0.406, track angle rate (deg/s)
pms.commb.gs50(msg)     # 476, ground speed (kt)
pms.commb.tas50(msg)    # 466, TAS (kt)

Heading and speed report (BDS 6,0)

The heading and speed report is designed to downlink various airspeed and vertical rate to air traffic controllers. In this message, indicated airspeed (IAS), Mach number, barometric altitude rate, inertial vertical velocity, and the magnetic heading of the aircraft are provided. Table 1.3 shows the structure of the message.

Heading and speed report (BDS 6,0), MB field
FIELD MSG MB BITS
Status (for magnetic heading) 33 1 1
Sign 34 2 1
Magnetic heading 35–44 3–12 10
Range: [-180, +180] degrees
LSB: 90/512 degrees
Status (for indicated airspeed) 45 13 1
Indicated airspeed 46–55 14–23 10
Range: [0, 1023] kt
LSB: 1 kt
Status (for Mach number) 56 24 1
Mach number 57–66 25–34 10
Range: [0, 4.092]
LSB: 0.004
Status (for barometric altitude rate) 67 35 1
Sign 68 36 1
Barometric altitude rate 69–77 37–45 9
Range: [-16384, +16352] ft/min
LSB: 32 ft/min
Status (for inertial vertical velocity) 78 46 1
Sign 79 47 1
Inertial vertical velocity 80–88 48–56 9
Range: [-16384, +16352] ft/min
LSB: 32 ft/min

In this message, there are a few signed values, such as heading and two vertical rates. Two’s complement coding (see section [sec:two_complement]) should be used to calculate these values.

The magnetic heading is the aircraft’s heading with respect to the magnetic North, which can be different from the true north (for example, used for the track angle from ADS-B and BDS 5,0). Often, an aircraft obtains the magnetic heading by adding its true North heading with the magnetic declination from a world magnetic model, such as [Chulliat et al. 2015]. It is worth noting that the true North heading is not necessarily the same as the track angle due to the influence of wind.

In the heading and speed report, two different kinds of vertical rates are reported. Barometric altitude rates are only derived from barometer measurements. Since the source data from air data system is not filtered, significant noise is contained in these values. In contrast, inertial vertical velocities are values provided by navigational equipment from different sources including the flight management computer. According to [ICAO 2004], data sources with different levels of priorities are defined for these two values, which are listed in Table 1.4.

Data sources for two vertical rates in heading and speed report
Parameter Input Data Source Priorities
Barometric altitude rate 1. Air Data System
2. Inertial Reference System/Flight Management System
Inertial vertical velocity 1. Flight Management Computer / GNSS integrated
2. Flight Management Computer (General)
3. Inertial Reference System/Flight Management System

Figure 1.3 illustrates an example on how to decode a BDS 6,0 message.

Try it out Using pyModeS, we can decode information of BDS 6,0 messages as:

import pyModeS as pms

msg = "A80004AAA74A072BFDEFC1D5CB4F"

pms.commb.hdg60(msg)      # 110.391, heading (deg)
pms.commb.ias60(msg)      # 259, ISA (kt)
pms.commb.mach60(msg)     # 0.7, Mach (-)
pms.commb.vr60baro(msg)   # -2144, baro vertical rate (ft/min)
pms.commb.vr60ins(msg)    # -2016, INS vertical rate (ft/min)
Chulliat, A., Macmillan, S., Alken, P., et al. 2015. The US/UK world magnetic model for 2015-2020.
ICAO. 2004. Manual on Mode S Specific Services, 2nd Edition. International Civil Aviation Organization.

© Copyright 2021 Junzi Sun. Build with LaTeX, Pandoc, and GitHub