Fully-functional GNU Radio blocks to implement the physical layer (PHY)of LoRa
Explore the docs »
Running the demo
·
Report a bug
·
Request a feature
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 originally conducted at the Telecommunication Circuits Laboratory, EPFL and later the code has been extended at the Technical University of Eindhoven.
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 presence of a header and a CRC, the message to be transmitted, etc.
- In the Tx chain, the implementation contains all the main blocks of the LoRa transceiver: the header- and the CRC-insertion blocks, the whitening block, the Hamming encoder block, the interleaver block, the Gray mapping block, and the modulation block.
- On the receiver side there is the packet synchronization block, which performs all the necessary tasks needed for the synchronization, such as the necessary STO and CFO estimation and correction. The demodulation block follows, along with the Gray demapping block, the deinterleaving block, the Hamming decoder block and the dewhitening block, as well as a CRC block.
- The implementation can be used for fully end-to-end experimental performance results of a LoRa SDR receiver at low SNRs. P
This work was based on github.com/rpp0/gr-lora by Pieter Robyns, Peter Quax, Wim Lamotte and William Thenaers. Which architecture and functionnalities have been improved to better emulate the physical layer of LoRa. This work also used the kiss FFT libary from github.com/mborgerding/kissfft for FFT operations. And is a fork of code from github.com/tapparelj/gr-lora_sdr
Next to code this project is based on :
J. Tapparel, O. Afisiadis, P. Mayoraz, A. Balatsoukas-Stimming, and A. Burg, “An Open-Source LoRa Physical Layer Prototype on GNU Radio”
Which can be found at arxiv.org/abs/2002.08208
If you find this implementation useful for your project, please consider citing the aforementioned paper.
- The documentation of the source files can be found at docs and is automatically build from source.
- The more practical and high level documentation and examples can be found on the wiki
Both are WIP
Similarly to any GNU Radio OOT module, it can be build using cmake and make.
- Clone the repo
git clone https://github.com/martynvdijke/gr-lora_sdr
- Enter the cloned directory
cd gr-lora_sdr
- Make build folder and enter it
mkdir build && cd build
- Configure cmake
cmake ../ #-DCMAKE_INSTALL_PREFIX=/usr for Arch Linux users
- Make install
You will need root or sudo acces in order to properly install the repo, since it will add module blocks to be used in gnuradio-companian and makes a local python package. Be sure to have the following requirements installed:
sudo make install
- Gnuradio 3.8
- python >2.7
- cmake >3.8
- swig >4.0
- libvolk
- UHD
- cppunit
- doxygen (optional for documentation)
- log4cpp (optional for logging/debugging)
- An example of a transmitter and a receiver can be found in gr-lora_sdr/app (both python and grc).
Distributed under the GPL-3.0 License License. See LICENSE
for more information.