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. In this chapter, the structures and decoding processes of these reports are explained.

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.

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 .

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

In Figure 1.1, an example of how to decode a BDS 4,0 message is illustrated:

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

import pyModeS as pms

msg = "A8001EBCAEE57730A80106DE1344"
selaltfms = pms.commb.selalt40fms(msg)
selaltmcp = pms.commb.selalt40mcp(msg)
pressure = pms.commb.p40baro(msg)

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, we can see three signed values, 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.

In Figure 1.2, an example of how to decode a BDS 5,0 message is illustrated.

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

import pyModeS as pms

msg = "A80006ACF9363D3BBF9CE98F1E1D"

roll_angle = pms.commb.roll50(msg)
track_angle = pms.commb.trk50(msg)
track_angle_rate = pms.commb.rtrk50(msg)
ground_speed = pms.commb.gs50(msg)
TAS = pms.commb.tas50(msg)

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 type of 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, we can see 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 in 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 . 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. Due to the lacking of filtering from air data input, significant noise is contained in these values. On the other hand, inertial vertical velocities are values provided by navigational equipment from different sources including the flight management computer. According to , 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

In Figure 1.3, the example on how to decode a BDS 6,0 message is illustrated.

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

import pyModeS as pms

msg = "A80004AAA74A072BFDEFC1D5CB4F"

heading = pms.commb.hdg60(msg)
IAS = pms.commb.ias60(msg)
Mach = pms.commb.mach60(msg)
vertical_rate_baro = pms.commb.vr60baro(msg)
vertical_rate_ins = pms.commb.vr60ins(msg)

Site maintained by @junzis. Build with LaTeX, Pandoc, and GitHub