2. LoRa调制原理:三大核心参数详解
LoRa调制,说白了就是Semtech公司搞出来的一种物理层技术。它用的是一种叫「Chirp扩频」的方式,跟传统的FSK、GFSK完全不一样。我刚开始接触LoRa时,第一反应是:这玩意儿怎么这么慢?后来才明白,慢是为了远,远是为了低功耗。
要理解LoRa,必须先搞懂三个参数:扩频因子(SF)、带宽(BW)、编码率(CR)。这三个参数决定了你的通信距离、抗干扰能力、功耗和速率。调好了,项目就稳了;调不好,要么连不上,要么功耗爆炸。
2.1 扩频因子(SF)—— 距离与速率的博弈
扩频因子,英文叫Spreading Factor。它表示每个数据位用多少个chirp符号来编码。SF值范围是7到12,整数。
举个例子:
SF=7时,每个bit用2^7=128个chirp符号表示。
SF=12时,每个bit用2^12=4096个chirp符号表示。
你想想看,同样的数据量,SF=12比SF=7多用了32倍的符号。这意味着什么?
- 灵敏度更高:接收机能从更弱的信号里解调出来。SF=12比SF=7灵敏度高约6-8dB。
- 距离更远:实测下来,SF=12在郊区能跑5-8公里,SF=7可能只有1-2公里。
- 速率更慢:符号多了,空中时间自然就长了。
关键结论:SF每增加1,灵敏度提升约2-3dB,但空中时间翻倍。这是LoRa最核心的权衡。
我在项目中遇到过一个问题:客户要求通信距离3公里,但节点电池只能用一年。我一开始选了SF=12,距离是够了,但电池只撑了8个月。后来改成SF=10,距离勉强够,电池撑了14个月。嗯,这里要注意:不是SF越大越好,够用就行。
2.2 带宽(BW)—— 速度与噪声的平衡
带宽,就是LoRa信号占用的频率宽度。常见值有125kHz、250kHz、500kHz。
带宽越大,chirp符号变化越快,速率就越高。但代价是什么?噪声也进来了更多。
| 带宽(BW) | 速率影响 | 灵敏度影响 | 典型场景 |
|---|---|---|---|
| 125 kHz | 最慢 | 最高(-137dBm左右) | 远距离、低速率 |
| 250 kHz | 中等 | 中等(-134dBm左右) | 平衡型应用 |
| 500 kHz | 最快 | 最低(-131dBm左右) | 近距离、高速率 |
我个人习惯:能选125kHz就不选250kHz。为什么?因为LoRa的优势就是远距离和低功耗,带宽大了反而丢掉了核心优势。除非你的数据量很大,比如OTA升级,那才考虑250kHz或500kHz。
避坑指南:我曾经在一个项目中用了500kHz带宽,结果接收机灵敏度掉了6dB,通信距离直接砍半。后来查资料才发现,带宽每翻一倍,灵敏度下降约3dB。这个坑我踩过,你别再踩了。
2.3 编码率(CR)—— 纠错能力与冗余的取舍
编码率,就是有效数据在总传输数据中的占比。LoRa的CR范围是4/5到4/8。
CR=4/5:每5个bit里有4个是有效数据,1个是冗余纠错。
CR=4/8:每8个bit里有4个是有效数据,4个是冗余纠错。
编码率越低,纠错能力越强,但有效速率也越低。说白了,就是用更多的冗余来换可靠性。
| 编码率(CR) | 冗余比例 | 纠错能力 | 速率影响 |
|---|---|---|---|
| 4/5 | 20% | 弱 | 最快 |
| 4/6 | 33% | 中等 | 中等 |
| 4/7 | 43% | 较强 | 较慢 |
| 4/8 | 50% | 最强 | 最慢 |
我建议:除非信道环境极差,否则用CR=4/5就够了。因为LoRa本身就有扩频增益,抗干扰能力已经很强了。加太多冗余反而浪费空中时间,增加功耗。
注意:CR=4/8虽然纠错最强,但有效速率只有CR=4/5的62.5%。在电池供电的场景下,多出来的空中时间可能让节点提前没电。我曾经吃过这个亏,后来改回4/5,功耗降了30%。
2.4 LoRa调制解调流程
LoRa的调制解调流程,我画了一张图,你看完就明白了。
调制过程其实不复杂:
- 原始数据:你的传感器读数、开关状态等。
- CRC + 编码:加上循环冗余校验,再用CR指定的编码率做前向纠错。
- Chirp扩频:根据SF值,把每个bit映射成对应数量的chirp符号。这是LoRa的核心。
- 射频发射:把chirp符号调制到载波上发出去。
解调就是反过来:射频接收 → 解扩频(匹配SF和BW)→ 解码 + CRC校验 → 恢复数据。
个人经验:调试时最常遇到的问题就是SF和BW不匹配。发送端用SF=12、BW=125kHz,接收端配置成SF=12、BW=250kHz,结果死活收不到数据。我花了整整一个下午才找到这个bug。所以,收发双方的SF、BW、CR必须完全一致,这是铁律。
2.5 空中速率计算公式
空中速率,就是数据从发送端到接收端在空中的传输速度。单位是bps(bit per second)。
公式如下:
DR = SF * (BW / 2^SF) * (4 / CR)
其中:
- DR:空中速率,单位bps
- SF:扩频因子,7-12
- BW:带宽,单位Hz
- CR:编码率,4/5到4/8
举个例子:
SF=12, BW=125kHz, CR=4/5
DR = 12 * (125000 / 4096) * (4 / 5) = 12 * 30.52 * 0.8 ≈ 293 bps
嗯,你没看错,只有293bps。这就是LoRa远距离的代价。
再算一个:
SF=7, BW=500kHz, CR=4/5
DR = 7 * (500000 / 128) * (4 / 5) = 7 * 3906.25 * 0.8 ≈ 21875 bps
快了将近75倍。但距离也短了很多。
| SF | BW (kHz) | CR | 空中速率 (bps) | 典型距离 |
|---|---|---|---|---|
| 7 | 125 | 4/5 | 5469 | 1-2 km |
| 9 | 125 | 4/5 | 1465 | 2-4 km |
| 12 | 125 | 4/5 | 293 | 5-8 km |
| 12 | 250 | 4/5 | 586 | 4-6 km |
| 12 | 500 | 4/8 | 586 | 3-5 km |
核心结论:空中速率主要由SF决定,BW和CR做微调。SF每增加1,速率大约减半。BW翻倍,速率翻倍。CR从4/5降到4/8,速率降到62.5%。
2.6 影响空中速率的其他因素
除了SF、BW、CR这三个核心参数,还有几个因素会影响实际速率:
- 前导码长度:LoRa包前面有一段前导码,用于接收机同步。前导码越长,同步越可靠,但开销也越大。默认是8个符号,我一般不改。
- 数据包长度:包越长,有效数据占比越高,但出错概率也越大。建议单包不超过64字节。
- CRC校验:开启CRC会加2个字节的开销,但能保证数据完整性。我建议永远开启CRC。
- 隐式/显式头:显式头包含SF、CR、包长度等信息,接收机能自动解析。隐式头需要收发双方约定好参数。我建议用显式头,调试方便。
避坑指南:我曾经为了省那2个字节的CRC开销,关掉了CRC。结果在强干扰环境下,误码率飙升到30%,数据全是错的。从那以后,我再也不敢关CRC了。省那2个字节,不值得。
好了,LoRa的三大核心参数和调制解调流程就讲到这里。你只要记住:SF管距离,BW管速度,CR管可靠性。调参时,先定SF,再调BW,最后微调CR。这个顺序,我用了五年,没出过问题。