Decoding ADS-B Airplane Tracking Data

22 June 2019

When I first started fiddling SDR, the very first experiment I ran was to receive and decode airplane's telemetry data. That's esseitnally how the crowd-sourced FlightRadar24.com gather its data - people worldwide set up their radio station to receive airplanes data and contribute received data to the central source.

It takes as cheap as a $20 DVB-T dongle, plus your computer to play out. ADS-B protocol transmists on the 1090Mhz band; on Linux, dump1090 is the most poular choice of decoding ADS-B signals.

Setup

There are close to no setup work apart from making sure your SDR device works and is correctly recognised on your computer. With Linux, this has never been a problem for me; the Linux kernel at the time of writing already has drivers for most of the popular devices out there.

The Basics

Simply run dump1090 and you should see decoded data start to flow in. That's of course assuming there are active airplanes nearby. Example output:

*8d7c6bb9990cd234600405e70602;
CRC: 000000 (ok)
DF 17: ADS-B message.
  Capability     : 5 (Level 2+3+4 (DF0,4,5,11,20,21,24,code7 - is airborne))
  ICAO Address   : 7c6bb9
  Extended Squitter  Type: 19
  Extended Squitter  Sub : 1
  Extended Squitter  Name: Airborne Velocity
    EW status         : Valid
    EW velocity       : -209
    NS status         : Valid
    NS velocity       : 418
    Vertical status   : Valid
    Vertical rate src : 0
    Vertical rate     : 0

*8d7c6bb958c3823c2f4fbe2fb655;
CRC: 000000 (ok)
DF 17: ADS-B message.
  Capability     : 5 (Level 2+3+4 (DF0,4,5,11,20,21,24,code7 - is airborne))
  ICAO Address   : 7c6bb9
  Extended Squitter  Type: 11
  Extended Squitter  Sub : 0
  Extended Squitter  Name: Airborne Position (Baro Altitude)
    F flag   : even
    T flag   : non-UTC
    Altitude : 38000 feet
    Latitude : -32.647385
    Longitude: 141.521375

Interactive Mode

Run dump1090 --interactive to show an interactive prompt in your terminal instead, listing latest info of nearby airplanes.

Interactive prompt of dump1090

Web Dashboard

dump1090 also provides a simple web interface to give you a map plot visualisation; the default port is 8080. Run dump1090 --net and navigate to http://localhost:8080 to view.

Web mode of dump1090

Decoding when you are in the plane

How about doing the above when you're travelling in a plane, to see realtime data? Since ADS-B has such a large power output of 75W for small aircrafts, you should be able to receive the signal no matter where you seat or how you place your antenna. Though since fiddling with antennas and termminal is rather likely to raise suspicions from the general publilc, I strongly suggest hiding your antenna from other people's eyes (e.g. your porcket).

The Setup

Running dump1090 on linux with DVB-T dongel and small antenna tucked in the seat pocket:

Running dump1090 on the plane

Results

Live monitoring

Dump1090 interactive mode showing my airplane data

With a little bit of scripting you can plot the your flight path. This is a quick plot of the lat lon using matplotlib:

Flight path

Flight path from the entertainment system for comparison:

Flight path map for comparison

?amateur radio
#ads-bsdrmatplotlibdump1090dvb-t