The processing pipeline
gr-adsb provides three GNU Radio blocks that form a complete receive chain. Samples flow through each block in sequence: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.
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.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:| Field | Description |
|---|---|
icao | 24-bit ICAO aircraft address (hex string, e.g. a03816) |
callsign | Flight callsign (e.g. SWA398) |
altitude | Barometric altitude in feet |
speed | Ground speed in knots |
heading | Track angle in degrees |
vertical_rate | Climb or descent rate in ft/min |
latitude | Decoded latitude in decimal degrees |
longitude | Decoded longitude in decimal degrees |
snr | Burst signal-to-noise ratio in dB |
timestamp | UTC timestamp of the burst |
df | Mode S Downlink Format number |
Supported message types
gr-adsb decodes the following Mode S Downlink Formats:| DF | Description |
|---|---|
| 0 | Short Air-Air Surveillance (ACAS) |
| 4 | Surveillance Altitude Reply |
| 5 | Surveillance Identity Reply |
| 11 | All-Call Reply |
| 16 | Long Air-Air Surveillance (ACAS) |
| 17 | ADS-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 |
| 20 | Comm-B Altitude Reply |
| 21 | Comm-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 version | Branch |
|---|---|
| 3.10 | maint-3.10 |
| 3.9 | maint-3.9 |
| 3.8 | maint-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