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的调制解调流程,我画了一张图,你看完就明白了。

LoRa调制解调流程 LoRa调制解调流程 发送端 原始数据 CRC + 编码 Chirp扩频 射频发射 无线信道(噪声 + 干扰) 接收端 射频接收 解扩频 解码 + CRC校验 恢复数据 关键说明: 1. 发送端:原始数据 → CRC编码 → Chirp扩频(SF/BW/CR参数生效)→ 射频发射 2. 接收端:射频接收 → 解扩频(匹配SF/BW)→ 解码 + CRC校验 → 恢复数据 3. 扩频和解扩频必须使用相同的SF和BW,否则无法解调

调制过程其实不复杂:

  1. 原始数据:你的传感器读数、开关状态等。
  2. CRC + 编码:加上循环冗余校验,再用CR指定的编码率做前向纠错。
  3. Chirp扩频:根据SF值,把每个bit映射成对应数量的chirp符号。这是LoRa的核心。
  4. 射频发射:把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。这个顺序,我用了五年,没出过问题。