本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!
本文介绍一篇关于用GNU Radio实现LoRa通信的论文,论文第一作者是Joachim Tapparel。LoRa是LoRaWAN的私有物理层协议,且LoRa由于其独特的低功耗特点,已经广泛应用在物联网场景中。为了深入研究LoRa的通信机制,最近几年已经有大量关于LoRa协议逆向的相关工作。在论文中,作者介绍了如何基于GNU Radio来实现LoRa物理层通信,并探讨了采样时间偏差和载波频率偏差对通信的影响效果,以及如何估计和消除这些偏差。利用USRP NI2920来做实验,测试了LoRa在无编码和编码情况下的误码率,展示了所构建的LoRa通信系统的可行性和可靠性。
目录
1、ModuleNotFoundError: No module named 'lora_sdr'
2、No rule to make target '/usr/lib/x86_64-linux-gnu/liborc-0.4.so'
一、论文原文和相关技术报告
该工作介绍网址
LoRa PHY based on GNU Radio ‒ TCL ‐ EPFL
论文原文下载地址
https://arxiv.org/abs/2002.08208
LoRa逆向分析技术报告下载地址
https://www.epfl.ch/labs/tcl/wp-content/uploads/2020/02/Reverse_Eng_Report.pdf
二、LoRa 物理层简介
LoRa使用带宽为125KHz、250KHz或500KHz的扩频调制方法,扩频因子SF为7、8、9、10、11或12。每个LoRa符号扩频成7、8、9、10、11或12比特,具有N=2^SF个码片。LoRa的发射和接收过程,包括whitening、信道编码、交织、格雷映射。其中,
whitening是将有效载荷比特与一个伪随机序列进行异或操作。
信道编码实现纠错编码,LoRa使用汉明编码。
交织,LoRa使用对角交织器(diagonal interleaver)。
格雷映射,LoRa采用反格雷码实现从比特到符号的映射。
LoRa的数据包包括从Preamble upchirps、Network identifiers、Downchirps、Header、Payload和CRC。
关于什么是upchirps和downchirps,可以参见LoRa重要知识 - 简书
三、gr-lora_sdr安装与使用
我的电脑环境是,Ubuntu 20.04虚拟机,GNU Radio 3.8.1.0 (Python 3.8.10)。
代码安装过程如下,如果碰到问题,请参见《六、常见问题与解决方法》。不同人的电脑可能会碰到不同的问题,在cmake或make过程中,提示缺少什么库或者找不到什么库,依次解决即可。
git clone https://github.com/tapparelj/gr-lora_sdr.git
cd gr-lora_sdr
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
需要注意的是,在安装gr-lora_sdr代码之前,你电脑中需要已安装GNU Radio 3.8,否则无法正常安装使用。
在我们安装gr-lora_sdr之前,在GNU Radio的GRC中,当你在模块搜索栏输入“lora”后,你会发现无法搜索到任何模块。
当你成功安装了r-lora_sdr代码之后,你会发现可以搜索到lora相关模块。
gr-lora_sdr的GRC基本实例文件在《apps/single_user》文件夹中,用GNU Radio的GRC打开tx_rx_simulation.grc文件并运行结果如下图所示。该GRC文件是纯仿真程序。在运行程序时,可能会提示“ImportError: No module named lora_sdr”错误,具体解决方法见《六、常见问题与解决方法》。
终端的信息如下图所示:
在《apps/single_user》文件夹中还有用USRP来进行发射和接收的流图程序,可以将UHD模块替换成osmocom Source/Sink模块,LimeSDR Source(Rx)/LimeSDR Sink(Tx)模块后用HackRF或LimeSDR来实现发送和接收。
四、常见问题与解决方法
1、ModuleNotFoundError: No module named 'lora_sdr'
根据GitHub - tapparelj/gr-lora_sdr: 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.的“Frequent errors”和ModuleNotFoundError - GNU Radio相关内容,得知解决方法如下:
在终端中输入:
export PYTHONPATH=/usr/local/lib/python3/dist-packages:$PYTHONPATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
上述命令是适合我电脑的命令,不同人的电脑可能略有不同,具体可以参见ModuleNotFoundError - GNU Radio的方法。
2、No rule to make target '/usr/lib/x86_64-linux-gnu/liborc-0.4.so'
在运行make后,提示,
make[2]: *** No rule to make target '/usr/lib/x86_64-linux-gnu/liborc-0.4.so', needed by 'lib/libgnuradio-lora_sdr.so.ca195cb1'. Stop.
make[1]: *** [CMakeFiles/Makefile2:251: lib/CMakeFiles/gnuradio-lora_sdr.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
原因是缺少liborc-0.4。
根据