$ show tapparelj/gr-lora_sdr
This repository is a GNU Radio out-of-the-module (OOT) implementation of the LoRa physical layer. It provides a comprehensive set of signal processing blocks for transmitting and receiving LoRa signals, including channel coding (Hamming), interleaving, whitening, CRC, header processing, modulation, demodulation, and frame synchronization. The module is designed for use with GNU Radio 3.10+ and includes hierarchical blocks for quick assembly of transmitter and receiver flowgraphs in GNU Radio Companion or Python. It also features a simulation framework for performance evaluation (BER/FER vs SNR) and has been validated with USRP hardware and commercial LoRa transceivers. The code is modular, well-documented, and actively maintained, with recent updates adding support for lower spreading factors (SF 5-6) and improved soft-decision decoding.
The LLM identified 2 files worth highlighting for reuse:
Implements a LoRa FFT demodulator supporting both hard and soft decision decoding. Uses FFT to detect chirp symbols and calculates log-likelihood ratios (LLRs) for soft output, including SNR estimation and Bessel function-based LLR calculation. This block is self-contained within the GNU Radio framework and demonstrates sophisticated signal processing techniques for chirp spread spectrum systems.
Implements a frame synchronizer for LoRa signals that detects preamble, estimates carrier and sampling frequency offsets, and decodes the header. Uses a state machine to handle synchronization with options for different CFO/STO estimation algorithms (e.g., Bernier vs. standard). This block is a key component for burst-mode communication and showcases robust synchronization techniques adaptable to other protocols.