ADS-B Messages

Overview

ADS-B stands for Automatic Dependent Surveillance–Broadcast.  It is a protocol for radio transmissions where information is sent in packets to and from aircraft and is completely automated requiring no human intervention. Information such as the aircraft's United States Federal Aviation Administation ("FAA") identification numer, e.g. "F" number, as well as the "HEX" aircraft identification, status of whether in-flight or on the ground, longitude, latitude, altitude, and velocity are constantly emitted, sometimes several packets a second.  I collect these radio messages with a Raspberry Pi computer and a USB software defined radio receiver hooked up to an antenna on a roof.

Background

The ads-b standard is promulgated by International Civil Aviation Organization's (ICAO) which is an organization within the United Nations.  The standard has been published as follows:

The United Nations asserts copyright over these publications which are bound by brass folding tacks through three-hold punch paper and offers them for sale here.

The two tables have been copied from a version of August, 2023 at: http://woodair.net/sbs/article/barebones42_socket_data.htm

 

ID
Type
Description
SEL
 SELECTION CHANGE MESSAGE
 Generated when the user changes the selected aircraft in BaseStation.
ID
 NEW ID MESSAGE
 Generated when an aircraft being tracked sets or changes its callsign.
AIR
 NEW AIRCRAFT MESSAGE
 Generated when the SBS picks up a signal for an aircraft that it isn't
 currently tracking.
STA
 STATUS CHANGE MESSAGE
 Generated when an aircraft's status changes according to the time-out
 values in the Data Settings menu.
CLK
 CLICK MESSAGE
 Generated when the user double-clicks (or presses return) on an aircraft
 (i.e. to bring up the aircraft details window).
MSG
 TRANSMISSION MESSAGE
 Generated by the aircraft. There are eight different MSG types.

Transmission messages (MSG) from aircraft may be one of eight types:

ID
Type
 
Description
MSG,1
 ES Identification and Category
DF17 BDS 0,8
  
MSG,2
 ES Surface Position Message
DF17 BDS 0,6
 Triggered by nose gear squat switch.
MSG,3
 ES Airborne Position Message
DF17 BDS 0,5
  
MSG,4
 ES Airborne Velocity Message
DF17 BDS 0,9
  
MSG,5
 Surveillance Alt Message
DF4, DF20
 Triggered by ground radar. Not CRC secured.
  MSG,5 will only be output if  the aircraft has previously sent a
  MSG,1, 2, 3, 4 or 8 signal.
MSG,6
 Surveillance ID Message
DF5, DF21
 Triggered by ground radar. Not CRC secured.
  MSG,6 will only be output if  the aircraft has previously sent a
  MSG,1, 2, 3, 4 or 8 signal.
MSG,7
 Air To Air Message
DF16
 Triggered from TCAS.
 
MSG,7 is now included in the SBS socket output.
MSG,8
 All Call Reply
DF11
  Broadcast but also triggered by ground radar

 

Field Data

Each of the above message types may contain up to 22 data fields separated by commas. These fields are:

Field 1:
 Message type  (MSG, STA, ID, AIR, SEL or CLK)
Field 2:
 Transmission Type  MSG sub types 1 to 8. Not used by other message types.
Field 3:
 Session ID  Database Session record number
Field 4:
 AircraftID  Database Aircraft record number
Field 5:
 HexIdent  Aircraft Mode S hexadecimal code
Field 6:
 FlightID  Database Flight record number
Field 7:
 Date message generated   As it says
Field 8:
 Time message generated   As it says
Field 9:
 Date message logged   As it says
Field 10:
 Time message logged   As it says

 The above basic data fields are standard for all messages (Field 2 used only for MSG).

The fields below contain specific aircraft information.

Field 11:
 Callsign  An eight digit flight ID - can be flight number or registration (or even nothing).
Field 12:
 Altitude  Mode C altitude. Height relative to 1013.2mb (Flight Level). Not height AMSL..
Field 13:
 GroundSpeed  Speed over ground (not indicated airspeed)
Field 14:
 Track  Track of aircraft (not heading). Derived from the velocity E/W and velocity N/S
Field 15:
 Latitude  North and East positive. South and West negative.
Field 16:
 Longitude  North and East positive. South and West negative.
Field 17:
 VerticalRate  64ft resolution
Field 18:
 Squawk  Assigned Mode A squawk code.
Field 19:
 Alert (Squawk change)  Flag to indicate squawk has changed.
Field 20:
 Emergency  Flag to indicate emergency code has been set
Field 21:
 SPI (Ident)  Flag to indicate transponder Ident has been activated.
Field 22:
 IsOnGround  Flag to indicate ground squat switch is active

Salem's Airspace - A Sample

Here are some real samples from Salem's airspace taken on April 24, 2024:

Script started on 2024-06-02 14:16:55-07:00 [TERM="xterm-256color" TTY="/dev/pts/2" COLUMNS="110" LINES="28"]
ryzdesk /home/jlpoole # date

Sun Jun  2 02:17:01 PM PDT 2024
ryzdesk /home/jlpoole # cat /adsbwork/logs/2024/04/24/24/2024_04_24_1090.log.ORIGINAL|grep "MSG,1" |head -n 3
cat /adsbwork/logs/2024/04/24/24/2024_04_24_1090.log.ORIGINAL|grep "MSG,1" |head -n 3

MSG,1,1,1,A1280A,1,2024/04/24,07:00:52.992,2024/04/24,07:00:53.014,N174AA  ,,,,,,,,,,,0

MSG,1,1,1,A828E1,1,2024/04/24,07:02:13.995,2024/04/24,07:02:14.005,ASA7039 ,,,,,,,,,,,0

MSG,1,1,1,A828E1,1,2024/04/24,07:02:38.985,2024/04/24,07:02:39.019,ASA7039 ,,,,,,,,,,,0

ryzdesk /home/jlpoole # cat /adsbwork/logs/2024/04/24/24/2024_04_24_1090.log.ORIGINAL|grep "MSG,2" |head -n 3

MSG,2,1,1,A40B26,1,2024/04/24,14:02:01.000,2024/04/24,14:02:01.026,,,0,,,,,,,,,-1

MSG,2,1,1,A40B26,1,2024/04/24,14:02:05.930,2024/04/24,14:02:05.941,,,0,,44.901295,-123.000052,,,,,,-1

MSG,2,1,1,A40B26,1,2024/04/24,14:02:10.760,2024/04/24,14:02:10.801,,,0,,44.901295,-123.000052,,,,,,-1

ryzdesk /home/jlpoole # cat /adsbwork/logs/2024/04/24/24/2024_04_24_1090.log.ORIGINAL|grep "MSG,3" |head -n 3

MSG,3,1,1,A1280A,1,2024/04/24,07:00:02.647,2024/04/24,07:00:02.659,,37025,,,44.547272,-121.260812,,,0,,0,0

MSG,3,1,1,A1280A,1,2024/04/24,07:00:05.768,2024/04/24,07:00:05.773,,37025,,,44.541740,-121.258716,,,0,,0,0

MSG,3,1,1,A1280A,1,2024/04/24,07:00:06.808,2024/04/24,07:00:06.811,,37025,,,44.539924,-121.258046,,,0,,0,0

ryzdesk /home/jlpoole # cat /adsbwork/logs/2024/04/24/24/2024_04_24_1090.log.ORIGINAL|grep "MSG,4" |head -n 3

MSG,4,1,1,A1280A,1,2024/04/24,07:00:03.040,2024/04/24,07:00:03.043,,,403,165,,,64,,,,,0

MSG,4,1,1,A1280A,1,2024/04/24,07:00:04.992,2024/04/24,07:00:05.008,,,403,165,,,0,,,,,0

MSG,4,1,1,A1280A,1,2024/04/24,07:00:07.144,2024/04/24,07:00:07.193,,,403,165,,,-64,,,,,0

ryzdesk /home/jlpoole # cat /adsbwork/logs/2024/04/24/24/2024_04_24_1090.log.ORIGINAL|grep "MSG,5" |head -n 3

MSG,5,1,1,A1280A,1,2024/04/24,07:00:10.412,2024/04/24,07:00:10.415,,37000,,,,,,,0,,0,

MSG,5,1,1,A828E1,1,2024/04/24,07:00:46.659,2024/04/24,07:00:46.679,,41025,,,,,,,0,,0,

MSG,5,1,1,A1280A,1,2024/04/24,07:00:51.391,2024/04/24,07:00:51.429,,37000,,,,,,,0,,0,

ryzdesk /home/jlpoole # cat /adsbwork/logs/2024/04/24/24/2024_04_24_1090.log.ORIGINAL|grep "MSG,6" |head -n 3

MSG,6,1,1,A828E1,1,2024/04/24,07:05:44.228,2024/04/24,07:05:44.268,,,,,,,,3525,0,0,0,

MSG,6,1,1,A828E1,1,2024/04/24,07:05:56.163,2024/04/24,07:05:56.174,,,,,,,,3525,0,0,0,

MSG,6,1,1,A828E1,1,2024/04/24,07:06:08.170,2024/04/24,07:06:08.189,,,,,,,,3525,0,0,0,

ryzdesk /home/jlpoole # cat /adsbwork/logs/2024/04/24/24/2024_04_24_1090.log.ORIGINAL|grep "MSG,7" |head -n 3

MSG,7,1,1,A1280A,1,2024/04/24,07:00:50.770,2024/04/24,07:00:50.774,,37000,,,,,,,,,,

MSG,7,1,1,A1280A,1,2024/04/24,07:01:15.770,2024/04/24,07:01:15.788,,37000,,,,,,,,,,

MSG,7,1,1,A828E1,1,2024/04/24,07:01:18.634,2024/04/24,07:01:18.681,,41000,,,,,,,,,,

ryzdesk /home/jlpoole # cat /adsbwork/logs/2024/04/24/24/2024_04_24_1090.log.ORIGINAL|grep "MSG,8" |head -n 3

MSG,8,1,1,A1280A,1,2024/04/24,07:00:01.527,2024/04/24,07:00:01.568,,,,,,,,,,,,0

MSG,8,1,1,A1280A,1,2024/04/24,07:00:02.554,2024/04/24,07:00:02.604,,,,,,,,,,,,0

MSG,8,1,1,A1280A,1,2024/04/24,07:00:02.655,2024/04/24,07:00:02.659,,,,,,,,,,,,0

ryzdesk /home/jlpoole # exit

exit

Script done on 2024-06-02 14:17:53-07:00 [COMMAND_EXIT_CODE="0"]

Some further statistics about the occurrence of certain message types.

The total number of packets I collected on April 24, 2024, was: 12,390,546.  The file size is 546 MBs, and when compressed with daily decibel data (3.4 MBs) is 61 MBs. So, a day's worth of data compresses to about 10%.

About 50% of those packets were incomplete, or mangeled, so I created a file of packets deemed to be valid packets and the line court is: 6,195,274.  I account for this due to the fact that my antenna is near several large trees which interfere, if not block, with collecting flight data. 

Of those 6 million+ valid packets, here's a breakdown of the occurrences of message types within:

Breakdown of MSG Type for 4/24/2024
Type
Count
Percentage

1

638,083
10.30%
2
3,515
0.06%
3
2,197,302
35.47%
4
1,598,070
25.79%
5
340,035
5.49%
6
6,110
0.10%
7
551,144
8.90%
8
861,015
13.90%
100%

Of the 2,197,302 Position (MSG 3) messages I collected, I determined that the flights that flew within the airspace of 1,500 feet above therectangular area defined by blue lines below accounted for 377,717 of the MSG 3, or  17% of all MSG 3.  The blue rectangular box was something I arbitrarily defined.