As a Software Engineer 2 on the ADS-B team at FlightAware, Eric Tran is responsible for the development and maintenance of FlightAware’s ADS-B receiver network.
This post gives a breakdown of our ADS-B ground station hardware and how they process aircraft data to provide us our largest source of real-time flight data at FlightAware.
How It Started
Before we dive into it, let’s take a flight through history. In the early 2000s, there was an emergence of a new aircraft surveillance technology known as Automatic Dependent Surveillance–Broadcast, or ADS–B. With this technology, aircraft obtain their location and other information via satellite and broadcast it on the 1090 MHz frequency. Air Traffic Control (ATC) receives this ADS-B data and uses the information to manage nearby airspace.
FlightAware took advantage of this new opportunity and created our very own ADS-B receiver that could forward raw flight data to FlightAware over the Internet. With the help of evolving technology and a group of dedicated aviation enthusiasts, plane-spotter techies, and airports around the world, we were able to build out the network of receivers we know today.
What’s in our ADS-B Receivers?
The central components consist of a Raspberry Pi Computer, a USB RTL2832U Software Defined Radio (SDR), and a 1090 MHz antenna. We developed our very own line of SDRs, which we call the Pro-Stick and Pro-Stick Plus. While both models have built-in RF amplifiers to maximize ADS-B performance, the Pro-Stick Plus has a built-in 1090 MHz filter to reduce noise in high RF environments. A detailed review of our 1090 MHz antenna and SDRs can be found here.
FlightAware provides users with two ADS-B hardware solutions. The first is an open-source solution, called PiAware, that anyone can build themselves with full autonomy by gathering the hardware and loading FlightAware ADS-B decoding software on it. The other solution is called FlightFeeder, which is manufactured by FlightAware. FlightFeeder is self-configuring and remotely managed by FlightAware, so we can provide troubleshooting support.
The software that runs on our receivers is responsible for decoding aircraft signals, providing a local webpage to view the aircraft on a map, and sending the tracking data to FlightAware.
dump1090-fa is an ADS-B, Mode S, and Mode 3A/3C demodulator and decoder that will receive and decode aircraft transponder messages received from a connected SDR. It listens for client connections on specific TCP ports to allow streaming of the decoded messages in a variety of formats. Examples of the data formats and their respective ports:
- TCP port 30002 for raw/unparsed messages in AVR format
- TCP port 30003 for parsed messages in BaseStation format
- TCP port 30005 for raw/unparsed messages in Beast binary format
The information that can be derived directly from these aircraft messages includes position, altitude, squawk code, aircraft identification, airborne vs ground messages, speed, heading, roll, and more. Using this data, we even derive other information like weather!
piaware is the program responsible for formatting and relaying aircraft data to FlightAware servers. It starts up at boot-time and connects to localhost:30005 to consume the Beast formatted data from dump1090-fa. It then establishes an encrypted TLS connection with FlightAware servers to transfer that flight data and sends regular heartbeats, providing system and health information such as CPU load, temperature, uptime, etc. This information allows us to monitor our network health and notify hosts about any issues with their receiver.
For easy installation, we’ve bundled all the necessary software into a pre-built Raspberry Pi OS Lite image that users can load onto a micro-SD card for their Raspberry Pi. Alternatively, the software packages can be downloaded and installed from FlightAware’s upstream repositories via Debian’s Advanced Package Tool (APT).
Not all aircraft are ADS-B equipped and, as a result, cannot broadcast their location. However, through the use of a multilateration, FlightAware can derive an aircraft’s location using the 1090 MHz Mode-S transponder signals being emitted from the aircraft. By using the known location of 4 or more ADS-B receivers on the ground, we can calculate the distance an aircraft is away from each of the receivers. We achieve this by using the time it takes for the Mode-S signal to propagate from the aircraft to the receiver and the propagation speed of the signal. With those distances, we can derive the location and track these aircraft that are not trackable via ADS-B.
fa-mlat-client is the program within piaware that selectively forwards Mode-S messages to dedicated MLAT servers at FlightAware to perform MLAT calculations. As an incentive for hosting a receiver, we return the MLAT results back to the receiver, which can be displayed on SkyAware and streamed on the following TCP ports:
- TCP port 30105 for multilateration results in Beast binary format
- TCP port 30106 for multilateration results in extended BaseStation format
Where We Are Today and What’s to Come
Over the last 15+ years, we gained an invaluable network of users that helped reach more than 32,000 receivers throughout the world. These receivers are simultaneously sending real-time flight data 24/7/365 to FlightAware, so you can imagine the immense amount of data there is to process. We have built out a backend infrastructure to ingest, filter, and standardize this data and can handle the load from the rapid network growth we expect in the coming years.
The FlightAware ADS-B team has some highly anticipated hardware and software releases coming later this year. We plan to continue making new developments to benefit our existing flight tracking community and plan to reach out to a new generation of aviation enthusiasts to teach them about the world of flight tracking.