← Back to projects

Radio Receiver

A Linux-based software-defined radio receiver in C++ designed to continuously process and decode 1090 MHz ADS-B transmissions from an RTL-SDR.

Hardware Firmware
C++ Linux RTL-SDR GNU Radio DSP

The receiver operates around the 1090 MHz ADS-B band and processes a continuous stream of complex I/Q samples from the RTL-SDR. It supports both live SDR input and prerecorded I/Q files through a shared sample-source interface.

GNU Radio is used as a reference and visualization environment for validating filters, spectrum behavior, and recorded RF captures.

Raw samples are processed through a custom C++ DSP pipeline consisting of:

  • I/Q normalization and power estimation
  • noise-floor estimation
  • ADS-B preamble detection
  • symbol synchronization
  • pulse-position demodulation
  • FFT-based spectrum analysis

Detected transmissions are converted into 56-bit or 112-bit Mode-S frames and validated using CRC checks.

Validated frames are parsed by a Mode-S decoder that extracts aircraft telemetry including ICAO address, callsign, altitude, and velocity. Position messages go through Compact Position Reporting (CPR) decoding to produce latitude and longitude.

Satellite telemetry reception is a possible extension, but it would need Doppler compensation, among other things.

Extending the receiver to decode DMR frames and export reports to a Qt app is in progress.

Coming soon.