第3章 LoRa调制原理:Chirp扩频(CSS)调制

好,咱们进入正题。LoRa最核心的东西,就是它的调制方式——Chirp扩频,英文叫CSS(Chirp Spread Spectrum)。

我第一次接触这东西的时候,脑子里全是问号。这跟FSK、BPSK完全不一样啊。后来调了几个月板子,才慢慢摸清楚它的脾气。

Chirp信号的时频特性

Chirp信号,说白了就是一个频率随时间变化的波形。你想想看,普通正弦波频率是固定的,比如1kHz就是1kHz。但Chirp不一样,它的频率会从低到高扫过去,或者从高到低扫下来。

在LoRa里,我们把频率从低到高的叫up-chirp,从高到低的叫down-chirp。这两种信号构成了LoRa调制的基石。

时频图上看,Chirp信号是一条斜线。斜率决定了扫频速度,这个速度跟带宽和符号时间有关。我习惯用公式来理解:

频率变化率 = 带宽 / 符号时间

举个例子,如果带宽是125kHz,符号时间是1ms,那频率变化率就是125MHz/s。嗯,这个数值挺大的。

关键点:Chirp信号的时频特性决定了它的抗干扰能力。频率在变化,窄带干扰只能影响其中一小段,其他部分不受影响。这就是扩频的好处。

LoRa符号与码片的关系

这里有个概念容易搞混——符号和码片。

LoRa里,一个符号代表一个数据点。比如SF=7时,一个符号能表示7个比特。码片呢?码片是构成符号的基本单元。

它们的关系很简单:

一个符号 = 2^SF 个码片

SF=7时,一个符号包含128个码片。SF=12时,一个符号包含4096个码片。

码片速率等于带宽。比如125kHz带宽,码片速率就是125kcps(千码片每秒)。符号速率呢?

符号速率 = 码片速率 / 2^SF

SF=7时,符号速率 = 125000 / 128 ≈ 976.56 符号/秒。

我在项目中遇到过一个问题:有人把码片速率和符号速率搞混了,算出来的数据速率差了好几倍。嗯,这个坑我踩过。

扩频因子 (SF) 码片/符号 符号速率 (sps) 数据速率 (bps)
7 128 976.56 5468.75
8 256 488.28 3125.00
9 512 244.14 1757.81
10 1024 122.07 976.56
11 2048 61.04 537.11
12 4096 30.52 292.97

注意看,SF越大,数据速率越低,但灵敏度越高。这就是LoRa的trade-off。

LoRa调制过程详解

好了,咱们把整个调制过程拆开来看。

第一步:数据编码

原始数据先经过编码。LoRa用的是纠错编码,比如4/5编码率,意思是每4个数据比特,实际发送5个比特。多出来的那个是冗余,用来纠错。

第二步:符号映射

编码后的比特流,按SF个比特一组,映射成一个符号。比如SF=7,每7个比特对应一个符号值,范围是0到127。

这个符号值决定了Chirp信号的起始频率偏移。

第三步:生成Chirp信号

基础Chirp信号是一个从最低频扫到最高频的up-chirp。但LoRa不是直接发这个基础Chirp,而是根据符号值做循环移位。

怎么理解?

假设基础Chirp的频率从f0扫到f1。如果符号值是0,那就从f0开始扫。如果符号值是1,那就从f0往后偏移一个码片的位置开始扫。扫到f1后,再跳回f0继续扫完剩下的部分。

说白了,就是在一个符号周期内,频率从某个起始点开始,扫完整个带宽。

第四步:加窗和滤波

生成的Chirp信号还要加窗,目的是减少频谱泄漏。LoRa用的是升余弦窗,这个窗函数能平滑信号的起始和结束部分。

我建议你在实际调试时,用频谱仪看看加窗前后的区别。不加窗的话,频谱上会有很多旁瓣,干扰隔壁信道。

个人经验:加窗参数不能太激进。太强的加窗会降低信号的能量利用率,影响通信距离。我一般用0.5的滚降系数,效果比较均衡。

第五步:上变频

基带的Chirp信号,最后要上变频到射频频率。比如433MHz、868MHz或者915MHz。这一步由混频器完成。

上变频后的信号,就是最终发射出去的LoRa信号了。

避坑指南:我曾经在调试时发现,上变频后的信号频谱不对称。查了半天,原来是本振信号有泄漏。解决办法是加一个直流偏置校正,或者用IQ调制器来抵消本振泄漏。

解调过程简述

解调是调制的逆过程。接收端收到信号后,先下变频到基带,然后跟本地生成的down-chirp做相关运算。

相关峰的位置,就对应了发送的符号值。比如相关峰出现在第50个码片位置,那符号值就是50。

这个过程的数学本质是FFT。LoRa解调器里,实际上是用FFT来快速计算相关的。SF=7时,做128点FFT;SF=12时,做4096点FFT。

嗯,这里要注意:FFT的点数必须等于码片数,不能多也不能少。

解调完成后,再经过解码、纠错,就还原出原始数据了。

整个流程看起来复杂,但芯片内部都帮你做好了。你只需要配置好SF、带宽、编码率这几个参数就行。不过,理解原理能帮你更好地调试和优化。

我记得有一次,客户说通信距离不够。我一看配置,SF=7,带宽500kHz。我建议改成SF=12,带宽125kHz。距离立马翻了三倍。这就是理解原理的好处——你知道怎么调参数来达到目标。