This is the fully-functional GNU Radio software-defined radio (SDR) implementation of a LoRa transceiver with all the necessary receiver components to operate correctly even at very low SNRs. This work has been conducted at the Telecommunication Circuits Laboratory, EPFL.
See the codeThis is the fully-functional GNU Radio software-defined radio (SDR) implementation of a LoRa transceiver with all the necessary receiver components to operate correctly even at very low SNRs. The transceiver is available as a module for GNU Radio 3.10. This work has been conducted at the Telecommunication Circuits Laboratory, EPFL.
In the GNU Radio implementation of the LoRa Tx and Rx chains the user can choose all the parameters of the transmission, such as the spreading factor, the coding rate, the bandwidth, the sync word, the presence of an explicit header and CRC.


Sending and receiving LoRa packets between USRP-USRP and USRP-commercial LoRa transceiver (tested with RFM95, SX1276, SX1262).
Parameters available:
* Spreading factors 5 and 6 are not compatible with SX126x.
J. Tapparel, O. Afisiadis, P. Mayoraz, A. Balatsoukas-Stimming and A. Burg, "An Open-Source LoRa Physical Layer Prototype on GNU Radio," 2020 IEEE 21st International Workshop on Signal Processing Advances in Wireless Communications (SPAWC), Atlanta, GA, USA, 2020, pp. 1-5. IEEE Xplore link, arXiv link
J, Tapparel and A. Burg, "Design and Implementation of LoRa Physical Layer in GNU Radio". Proceedings of the GNU Radio Conference, Knoxville, TN, USA, 2024. GNU Radio Proceedings
If you find this implementation useful for your project, please consider citing the aforementioned paper.
The out of tree module gr-lora_sdr can be installed from source or directly as a conda package.
git clone https://github.com/tapparelj/gr-lora_sdr.git
cd gr-lora_sdr/
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc
conda env create -f environment.yml
conda activate gr310
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=<your prefix> # default to usr/local, CONDA_PREFIX or PYBOMB_PREFIX if no install prefix selected here
(sudo) make install -j$(nproc)
sudo ldconfig
gnuradio-companion &
python3 examples/tx_rx_functionality_check.py
python3 ./{file_name}.pyThanks to Ryan Volz this OOT module can also directly be installed as a Conda package. Note that gnuradio will also be installed in the conda environment.
conda install -c tapparelj -c conda-forge gnuradio-lora_sdr
conda install -c conda-forge gnuradio
gnuradio-grcgnuradio-iiognuradio-qtguignuradio-soapygnuradio-uhdgnuradio-video-sdlgnuradio-zeromqconda install -c conda-forge gnuradio-uhd
$CONDA_PREFIX/share/gr-lora_sdr/examples%CONDA_PREFIX%\Library\share\gr-lora_sdr\examplesmake after pulling a new version from git
(sudo) make uninstall
make clean
make -j4
(sudo) make install
[grc]
local_blocks_path=path_to_the_downloaded_folder/gr-lora_sdr/grc
Add option to ignore sync words checks and print the received values
Add optional print of received payload as hex values
Added tagged stream input support (for frame definition of frame length)
Fixed LLR stream format between fft_demod and deinterleaver
added tags to crc verification output stream indication frame start, length and CRC result.
added separator option for file input
added preamble length option
added parameter for frame zero-padding
add low data-rate optimization support
add support of spreading factors smaller than 7
This work was inspired from https://github.com/rpp0/gr-lora by Pieter Robyns, Peter Quax, Wim Lamotte and William Thenaers. Which architecture and functionalities have been improved to better emulate the physical layer of LoRa.
Distributed under the GPL-3.0 License License. See LICENSE for more information.
434 followers · starred May 2025
199 followers · starred Aug 2023
848 followers · starred Nov 2023
194 followers · starred Jul 2024
This is the fully-functional GNU Radio software-defined radio (SDR) implementation of a LoRa transceiver with all the necessary receiver components to operate correctly even at very low SNRs. This work has been conducted at the Telecommunication Circuits Laboratory, EPFL.
See the codeThis is the fully-functional GNU Radio software-defined radio (SDR) implementation of a LoRa transceiver with all the necessary receiver components to operate correctly even at very low SNRs. The transceiver is available as a module for GNU Radio 3.10. This work has been conducted at the Telecommunication Circuits Laboratory, EPFL.
In the GNU Radio implementation of the LoRa Tx and Rx chains the user can choose all the parameters of the transmission, such as the spreading factor, the coding rate, the bandwidth, the sync word, the presence of an explicit header and CRC.


Sending and receiving LoRa packets between USRP-USRP and USRP-commercial LoRa transceiver (tested with RFM95, SX1276, SX1262).
Parameters available:
* Spreading factors 5 and 6 are not compatible with SX126x.
J. Tapparel, O. Afisiadis, P. Mayoraz, A. Balatsoukas-Stimming and A. Burg, "An Open-Source LoRa Physical Layer Prototype on GNU Radio," 2020 IEEE 21st International Workshop on Signal Processing Advances in Wireless Communications (SPAWC), Atlanta, GA, USA, 2020, pp. 1-5. IEEE Xplore link, arXiv link
J, Tapparel and A. Burg, "Design and Implementation of LoRa Physical Layer in GNU Radio". Proceedings of the GNU Radio Conference, Knoxville, TN, USA, 2024. GNU Radio Proceedings
If you find this implementation useful for your project, please consider citing the aforementioned paper.
The out of tree module gr-lora_sdr can be installed from source or directly as a conda package.
git clone https://github.com/tapparelj/gr-lora_sdr.git
cd gr-lora_sdr/
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc
conda env create -f environment.yml
conda activate gr310
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=<your prefix> # default to usr/local, CONDA_PREFIX or PYBOMB_PREFIX if no install prefix selected here
(sudo) make install -j$(nproc)
sudo ldconfig
gnuradio-companion &
python3 examples/tx_rx_functionality_check.py
python3 ./{file_name}.pyThanks to Ryan Volz this OOT module can also directly be installed as a Conda package. Note that gnuradio will also be installed in the conda environment.
conda install -c tapparelj -c conda-forge gnuradio-lora_sdr
conda install -c conda-forge gnuradio
gnuradio-grcgnuradio-iiognuradio-qtguignuradio-soapygnuradio-uhdgnuradio-video-sdlgnuradio-zeromqconda install -c conda-forge gnuradio-uhd
$CONDA_PREFIX/share/gr-lora_sdr/examples%CONDA_PREFIX%\Library\share\gr-lora_sdr\examplesmake after pulling a new version from git
(sudo) make uninstall
make clean
make -j4
(sudo) make install
[grc]
local_blocks_path=path_to_the_downloaded_folder/gr-lora_sdr/grc
Add option to ignore sync words checks and print the received values
Add optional print of received payload as hex values
Added tagged stream input support (for frame definition of frame length)
Fixed LLR stream format between fft_demod and deinterleaver
added tags to crc verification output stream indication frame start, length and CRC result.
added separator option for file input
added preamble length option
added parameter for frame zero-padding
add low data-rate optimization support
add support of spreading factors smaller than 7
This work was inspired from https://github.com/rpp0/gr-lora by Pieter Robyns, Peter Quax, Wim Lamotte and William Thenaers. Which architecture and functionalities have been improved to better emulate the physical layer of LoRa.
Distributed under the GPL-3.0 License License. See LICENSE for more information.
434 followers · starred May 2025
199 followers · starred Aug 2023
848 followers · starred Nov 2023
194 followers · starred Jul 2024