Source: FAA
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.
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 |
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:
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.