Skip to main content
gr-adsb supports recording demodulated bursts to a SQLite database and replaying them later. This is useful for:
  • Offline testing — develop and tune decoder settings without an SDR connected
  • Sharing captures — distribute recorded ADS-B bursts to others for analysis
  • Debugging — reproduce decoder failures on a specific burst repeatedly without waiting for it to appear again live

Dependency: gr-sqlite

The SQLite recording and playback feature depends on the companion GNU Radio OOT module gr-sqlite.
gr-sqlite must be installed separately before you can use the SQLite Sink or SQLite Source blocks in GRC. Follow the installation instructions in the gr-sqlite repository.

Recording bursts

1

Open the live reception flowgraph

In GNU Radio Companion, open gr-adsb/examples/adsb_rx.grc.
2

Enable the SQLite Sink block

Locate the SQLite Sink block in the flowgraph. By default it is disabled.
The SQLite Sink block is disabled by default in the example flowgraph. You must right-click the block and select Enable before running the flowgraph, otherwise no data will be written to the database.
Configure the block with the path to the SQLite database file you want to write to (e.g., adsb_capture.db). The file will be created if it does not already exist.
3

Run the flowgraph

Execute the flowgraph normally. The SQLite Sink will write each demodulated burst to the database as it is produced by the ADS-B Demod block.
4

Stop and save

When you are finished recording, stop the flowgraph. The SQLite database file is written continuously, so the capture is safe to use immediately after stopping.

Replaying bursts

1

Open the playback flowgraph

In GNU Radio Companion, open gr-adsb/examples/adsb_playback.grc.
2

Set the database file path

Configure the SQLite Source block with the path to the .db file you recorded earlier.
3

Run the playback flowgraph

Execute the flowgraph. The SQLite Source reads the stored bursts and feeds them into the ADS-B Decoder exactly as the live Demod block would during live reception. Decoded output appears in the terminal according to your Print Level setting.

Use cases

Record a capture with a live SDR, then iterate on decoder settings (message filter, error correction, print level) by replaying the same capture repeatedly without needing the SDR hardware.
If a specific message triggers unexpected decoder behaviour, record a capture that includes it and replay it to reproduce the issue consistently. This makes it much easier to instrument the decoder with additional logging.
Share a SQLite .db file with others so they can validate gr-adsb behaviour on real-world ADS-B data without access to an SDR or an area with aircraft traffic.

Build docs developers (and LLMs) love