Skip to main content
gr-adsb provides three GNU Radio blocks that form a sequential pipeline for receiving, demodulating, and decoding ADS-B aircraft transponder messages. Each block has a single responsibility, and they are chained together using both stream connections and message port connections.

The pipeline

1

Framer — burst detection

The Framer accepts a magnitude-squared (|I|² + |Q|²) float stream. It searches for the ADS-B preamble pattern and tags the stream with "burst" stream tags at every detected preamble location, carrying the start-of-burst indicator and SNR estimate.
2

Demod — PPM demodulation

The Demod block reads the same float stream and acts on the "burst" stream tags emitted by the Framer. For each burst, it samples the PPM-encoded bits and publishes a PMT PDU on its demodulated message port containing 112 raw bits plus metadata.
3

Decoder — protocol parsing

The Decoder receives PDUs from the Demod block’s demodulated message port. It runs a CRC-24 check, optionally applies error correction, parses the Mode S downlink format, and publishes fully decoded aircraft state data on its decoded message port.

GRC connections

In GNU Radio Companion the blocks are wired as follows:
  • Stream connection: adsb_framer:outadsb_demod:in
  • Message connection: adsb_demod:demodulatedadsb_decoder:demodulated
The Framer and Demod blocks share the same float stream. The Demod block passes all samples through unchanged on its out port, so further stream processing (e.g., recording or display) is possible without a separate tap.

Import and block IDs

import gnuradio.adsb as adsb
All three blocks are in the GRC category [ADS-B].
GRC block IDPython constructor
adsb_frameradsb.framer(fs, threshold)
adsb_demodadsb.demod(fs)
adsb_decoderadsb.decoder(msg_filter, error_corr, print_level)
framer  = adsb.framer(fs=2e6, threshold=0.01)
demod   = adsb.demod(fs=2e6)
decoder = adsb.decoder(
    msg_filter="Extended Squitter Only",
    error_corr="None",
    print_level="Brief",
)

Block summary

BlockStream inputsStream outputsMessage inputsMessage outputs
Framerin (float)out (float)
Demodin (float)out (float)demodulated
Decoderdemodulateddecoded, unknown

Block pages

Framer

Detects ADS-B preambles in a magnitude-squared float stream and emits burst stream tags with SNR estimates.

Demod

Demodulates PPM-encoded ADS-B bursts and publishes raw 112-bit PDUs on a message port.

Decoder

Parses Mode S downlink formats, checks CRC-24, and publishes fully decoded aircraft state PDUs.

Build docs developers (and LLMs) love