Skip to main content
gr-adsb is a GNU Radio out-of-tree (OOT) module that turns a software-defined radio into a real-time aircraft tracker. It receives 1090 MHz PPM-modulated Mode S signals and decodes them into structured data — giving you live callsigns, ICAO addresses, altitudes, positions, velocities, and signal-to-noise ratios directly from the air, without any external subscription or network feed.

The processing pipeline

gr-adsb provides three GNU Radio blocks that form a complete receive chain. Samples flow through each block in sequence:
1

ADS-B Framer — detect bursts

The ADS-B Framer block accepts a float stream of magnitude-squared samples and watches for the characteristic 8-pulse ADS-B preamble pattern. When a match is found, it tags the sample stream with the burst start offset and an SNR estimate computed from the local noise floor. It operates at 1 Msym/s (PPM) and requires the sample rate to be an integer multiple of 2 Msps.
2

ADS-B Demod — recover bits

The ADS-B Demod block reads the tagged bursts from the Framer and performs pulse-position demodulation to extract up to 112 raw bits per message. It passes each demodulated burst downstream as a PDU message on the demodulated message port, carrying the raw bit vector alongside metadata including timestamp and SNR.
3

ADS-B Decoder — decode messages

The ADS-B Decoder block receives PDUs from the Demod block, verifies the 24-bit CRC, optionally corrects burst errors, and decodes all supported Mode S downlink formats. Decoded messages are published as structured PDUs on the decoded message port. Unrecognized messages are forwarded to the unknown port.

Output data

Each decoded message produces a structured PDU containing the fields that were successfully decoded for that message type. Across all supported message formats you can expect to see:
FieldDescription
icao24-bit ICAO aircraft address (hex string, e.g. a03816)
callsignFlight callsign (e.g. SWA398)
altitudeBarometric altitude in feet
speedGround speed in knots
headingTrack angle in degrees
vertical_rateClimb or descent rate in ft/min
latitudeDecoded latitude in decimal degrees
longitudeDecoded longitude in decimal degrees
snrBurst signal-to-noise ratio in dB
timestampUTC timestamp of the burst
dfMode S Downlink Format number
The Decoder’s Brief print mode renders a live terminal table with one row per tracked aircraft. Verbose mode logs every decoded field for every message.

Supported message types

gr-adsb decodes the following Mode S Downlink Formats:
DFDescription
0Short Air-Air Surveillance (ACAS)
4Surveillance Altitude Reply
5Surveillance Identity Reply
11All-Call Reply
16Long Air-Air Surveillance (ACAS)
17ADS-B Extended Squitter
18 (CF=0,1,6)ADS-B Extended Squitter from Non-Mode S Transponders
19 (AF=0)Military ADS-B Extended Squitter
20Comm-B Altitude Reply
21Comm-B Identity Reply

Supported GNU Radio versions

gr-adsb uses a branch-per-version convention. Clone the branch that matches your GNU Radio installation:
GNU Radio versionBranch
3.10maint-3.10
3.9maint-3.9
3.8maint-3.8

SDR hardware

gr-adsb works with any SDR supported by GNU Radio and OsmoSDR, including USRP, RTL-SDR, HackRF, BladeRF, AirSpy, and others. The sample rate must be an integer multiple of 2 Msps (e.g. 2, 4, 6 Msps).

Explore further

Installation

Build gr-adsb from source and install it for your GNU Radio version

Quickstart

Open the example flowgraph and receive aircraft in minutes

Block reference

Parameters, ports, and behavior for each of the three blocks

ADS-B concepts

Mode S, Extended Squitter, CPR position encoding, and CRC

Build docs developers (and LLMs) love