Implementing an ADS-B Receiver on Crimson

In this tutorial, we will demonstrate the use of a Crimson TNG for receiving and decoding aircraft transponder messages, known as ADS-B signals, with a program called dump1090. Messages are able to be intercepted using a 1.09 GHz receiver.

1. Downloading and compiling dump1090

In order to demodulate and decode the ADS-B signal collected by your SDR, you will need to download and install the following dump1090 program. See the README file on how to build/install this program for your specific distribution.

We used Arch Linux to install this program using the following commands:

$ git clone https://github.com/flightaware/dump1090.git

Then, within the dump1090 directory, run make:

$ make
For help on using the program or learning what the different parameters do, you can run the following within dump1090:

$ ./dump1090 --help 

2. Physical Setup

Here we discuss the physical setup of Crimson TNG and the receive chain.

2.1. Hardware Requirements

  1. Crimson TNG SDR with associated host computer/adaptors/cables
  2. Mini-Circuits BP filter (978 MHz - 1090 MHz)
  3. Log periodic antenna (850 MHz - 6500 MHz)
  4. SMA cables
  5. Stand to isolate and hold antenna

2.2. Setup

Note

ADS-B transmissions are vertically polarized, and therefore the reception using the antenna is best when oriented vertically.

To setup the device, we used the log periodic antenna oriented for vertically polarized EM waves and connected to an SMA cable, which is connected to the input of our BP filter and then outputted to a shorter SMA cable which is then connected to Crimson TNG Rx channel A. See Figure 1 below for our setup:

Figure 1: ADS-B Hardware Setup

3. Creating a Linux FIFO device

In order to stream our data, we created a FIFO special file, similar to a pipe, which can be opened by multiple processes for reading or writing. To create this pipe, we run the following commands in a terminal and give the appropriate permissions:

$ mkfifo sc16-to-adsb.fifo
$ chmod a+rw sc16-to-adsb.fifo

4. GNU Radio Flow Graph

We also needed to create a flow graph in GNU Radio to capture and stream the data to our FIFO device. The GNU Radio program resamples the data to the sample rate required and streams it to the FIFO device which acts as our file sink before being passed to the dump1090 program. This GRC script provides data at 2.4MSPS as complex shorts and appends it to the FIFO file; the script captured at 3.25MSPS, and used a polyphase resampler with an appropriate resampling factor (==2.4/3.25) to resample the data before it streams to the FIFO pipe. The GNU Radio script is found here. It should look like Figure 2 below:

Figure 2: GNU Radio Resampler

5. Testing dump1090 in Interactive Mode

Note

In order to use this program with the FIFO device, you’ll need to follow the below steps in order. You need to open the listener (dump1090) before running data to it through the FIFO.

  1. Run the dump1090 program using the following command within the dump1090 directory:

    $ ./dump1090 --ifile ../sc16-to-adsb.fifo --iformat SC16 --modeac --interactive

  2. Run the GNU Radio script discussed in section 4 of this tutorial.

  3. This will open up a blank window in GNU Radio (do not close this), and also the terminal where the dump1090 program is running will now display ADS-B flight data, similar to what is shown in Figure 3 below:

    Figure 3: ADS-B Interactive Mode

6. Run dump1090 in Production Mode

Note

You will need to input your specific longitude and latitude in the commands below in order to track flights accurately.

Note

In order to use this program with the FIFO device, you’ll need to follow the below steps in order. You need to open the listener (dump1090) before running data to it through the FIFO.

  1. For production purposes, we disable interactive mode and use - -net instead. To do this, run the following code with your specific longitude and latitude:

    $ ./dump1090 --ifile ../sc16-to-adsb.fifo --iformat SC16 --lat 43.6589 --lon -79.4529 --modeac --net
  2. Run the GNU Radio script discussed in section 4 of this tutorial. You will now have a terminal displaying a continuous stream of all ADS-B signals in your range, similar to the Figure 4 below:

    Figure 4: ADS-B Production Mode

  3. While running dump1090 in production mode and the GNU Radio script, you can also open a separate terminal window and run the following:

    $ ./view1090 --lat 43.6589 --lon -79.4529 --modeac

    This will provide more flight tracking data in a table.

7. Video Demonstration of ADS-B Receiver/Decoder

Below is a demo of our ADS-B Receiver/Decoder using Crimson TNG.