LoRa基础
LoRa的调制与扩频
由通信原理的知识知,在一个载波中,基带信息可以被承载在幅度、相位、和频率上。以2FSK调制为例,它使用两个不同频率的载波来分别表示不同的”0” 和 “1”。但是Chirp调制本身就进行了”扫频”, 那么如何来通过频率进行载波呢?由扩频通信简介一节中Chirp扩频知,Chirp频率是有个范围的,始于$f_0$,上下被$f_H,f_L$限制。LoRa将基带信息承载在这个$f_0$上面,也就是说,LoRa调制后Symbol的频率-时间图如下(LoRa采用线性Chirp):
信号在时域上振幅-时间图如下(这张图里面是down-chirp, 和上面那张up-chirp的图不是对应的关系):
论文[1]中作者把它称为:频移啁啾调制 Frequency Shift Chirp Modulation (FSCM) 大部分文章都是这么叫的,也有另外一些地方直接把这个称为PSK调制
起始频率$f_0$的确定
LoRa的扩频因子SF不光决定了频率的展扩倍数,还决定了信道进制M(例如,8FSK的M=8,一个symbol包含$log_28=3$个bit)。M和SF的关系是:
MFSK里,M为几就有几个不同的频率;对应地,LoRa里M为几就有几个不同的$f_0$。$M=2^{SF}$,也就是说,一个Chirp symbol 可以调进去SF个二进制位,共有$2^{SF}$种不同的$f_0$,我们把这一簇二级制数据记为一个向量w。举个例子,如果SF=4,那么一个Chirp symbol就有4个Bit,w就为
其中x代表这一位可以是0也可以是1。那么第n个chirp symbol 承载的信息 $s(nT_s)$ 就可以用如下公式算得:
注意这个$w(nT_s)$是一个整体,下标h才代表取这个向量里面的第几个,这个$T_s$是符号持续时间,$nT_s$只是指这是第几个符号之后。
论文就是喜欢用弯弯绕绕的表达,这玩意其实就是把二进制序列换算成十进制了!,更详细地说,LoRa在调制的时候把二进制序列换算成了范围在$[0,2^{SF}-1]$的十进制,然后作为频率的偏移量调进载波里面。$s(nT_s)=\{0,1,2,3,4….,2^{SF}-1\}$
调入载波
现在,我们要把这个十进制数用成一个起始频率来表示。LoRa的码元持续时间$T_s$被规定成$T_s=\frac{2^{SF}}{Bandwidth}$,把这个$T_s$ 以B为采样频率离散化一下:
同时再来个离散化的时间轴$k=0,1,2…2^{SF}-1$
那么频率相较于$f_L$的偏移量就可以通过$(s(nT_s)+k)\ mod\ 2^{SF}$算出来,这里巧妙的利用取余计算实现了频率顶到$f_H$又返回$f_L$的操作。整体的调后信号就可以被表示为:
LoRa的规定:
扩频因子: LoRa规定SF必须在[7,12]之内
码元持续时间:规定$T_s=\frac{2^{SF}}{Bandwidth}$
通过码元持续时间可以计算符号速率$R_s=\frac{BW}{2^{SF}}$
LoRa支持冗余纠错,SEMTECH定义了一个$Rate Code=\frac{4}{4+CR}$,其中CR={1,2,3,4}
在rate code已知时,bit传输速率使用这个公式计算:
LoRa的解调
我们已知,LoRa调后的信号长这样:
这个信号可以看做是一个chirp信号被移动了一下初始相位,我们可以把它补偿回来以此来分离出chirp信号
这里$+k-k$并不影响函数结果,但是我们却可以分离出一个$+k$出来
在$(s(nT_s)+k)mod2^{SF}-k$中,这个取模运算是为了处理$(s(nT_s)+k)$超过了$f_H$的情况而使用的。但是这里整个时间尺度被-k之后,控制频率的分量将永远在$s(nT_s)$的范围内,不会超过$2^{SF}$,因此无需再取模计算。去掉mod画简后式子如下:
此时,基础chirp信号被分离出来了。在这个例子中这里这是一个up chirp信号。只需要将现在的接收信号乘上它自己的基础chirp信号的共轭$e^{-j2\pi \frac{k^2}{2^{SF}}}$,就可以把这个chirp信号消除掉。up chirp的共轭恰好为down chirp, down chirp的共轭为up chirp。消除后信号为:
此时接收信号的频率只与我们调入的信息$s(nT_s)$相关了,对这个函数进行FFT,然后寻找FFT结果的峰值位置,即可解调出$s(nT_s)$内包含的信息。
因此,LoRa的解调只需要将收到的信号与其基础chirp信号的共轭相干,就可以分离出调入了信息的信号。
LoRa的调制和解调详细过程是SEMTECH闭源的,但是可以确定的是SF确实直接对应一个symbol能调几个bit,以及LoRa采用初始频率的shift去调制。其他的细节仅摘自论文,里面有很多只能看个大概的地方,就比如那个论文[1]里提及讲Ts离散化的时候,间隔时间T=1/B,这是不符合奈奎斯特采样定律的。看个大概就好……
LoRa的时钟同步
LoRa的时钟同步原理官方并未披露,现有的各种文章各执一词,但是大体都是前面有一段Preamble发送标准的up-chirp信号来进行同步。下图是对LoRa的信号进行捕获得到的。
emmmm
研究了几十个小时,啃了十来篇文章,LoRa有太多东西是SEMTECH闭源的了,每个文章都是点逆向工程又讲得不明不白的。下面[3]这个youtube视频算是所有不明不白的文章的一个核心思想吧,但是每篇文章细节是有差异的。
搞了这么多,只想说好奇心害死猫,这玩意只能别人告诉你怎么用你就怎么用就行了╮(╯﹏╰)╭
所以说,有些东西没人搞,那必然是有没人搞的理由吧哎……活该干不过NB-IOT
References
- [1] L. Vangelista, “Frequency Shift Chirp Modulation: The LoRa Modulation,” in IEEE Signal Processing Letters, vol. 24, no. 12, pp. 1818-1821, Dec. 2017, doi: 10.1109/LSP.2017.2762960.
- [2] AN1200_22_Semtech_LoRa_Basics_v2_STD (lahoud.fr)
- [3] How LoRa Modulation really works - long range communication using chirps - YouTube
- [4] H. Mroue, A. Nasser, B. Parrein, S. Hamrioui, E. Mona-Cruz and G. Rouyer, “Analytical and Simulation study for LoRa Modulation,” 2018 25th International Conference on Telecommunications (ICT), Saint-Malo, France, 2018, pp. 655-659, doi: 10.1109/ICT.2018.8464879.
- [5] Low Complexity LoRa Frame Synchronization for Ultra-Low Power Software-Defined Radios (hal.science)