2、LoRa射频基础:扩频通信原理、SF扩频因子、BW带宽、CR编码率、链路预算与灵敏度
各位同学,咱们今天聊点硬核的。LoRa 这个名字,做物联网的应该都不陌生。但很多人只是把它当成一个「能传得远」的模块来用,调几个参数就完事了。我个人习惯是,先把底层的射频原理摸透,再去调参数,这样心里才有底。
这一节,咱们就掰开揉碎,把 LoRa 射频的五个核心概念讲清楚:扩频通信、SF、BW、CR,还有链路预算和灵敏度。嗯,内容不少,但都是干货。
2.1 扩频通信:为什么 LoRa 能「抗干扰」?
先问大家一个问题:为什么 Wi-Fi 和蓝牙在嘈杂环境里容易断,而 LoRa 却能稳稳地传几百米?
答案就是——扩频通信。
说白了,扩频就是把一个窄带信号,扩展到很宽的频带上去发送。你想想看,原本只有 1kHz 宽的信号,我把它展宽到 125kHz、250kHz 甚至 500kHz。这样做的好处是什么?
- 抗干扰能力强:窄带干扰只影响一小部分频谱,大部分信号还是完整的。
- 功率谱密度低:信号像「噪声」一样散布在频带上,不容易被截获。
- 多径衰落不敏感:频率分集带来的天然优势。
LoRa 用的是 CSS(Chirp Spread Spectrum,啁啾扩频) 技术。它不像传统 DSSS(直接序列扩频)那样用伪随机码去调制,而是用频率随时间线性变化的「啁啾」信号。我在一个工厂项目里遇到过,现场有大量变频器和电机产生的电磁干扰,普通 2.4G 方案根本没法用。换成 LoRa 之后,数据包几乎没丢过——这就是扩频的魅力。
核心要点:扩频通信的本质,是用带宽换信噪比。带宽越宽,抗干扰能力越强,但代价是传输速率下降。
2.2 SF 扩频因子:决定「距离」和「速率」的关键
SF(Spreading Factor,扩频因子)是 LoRa 最重要的参数之一。它决定了每个符号能携带多少比特信息。
公式很简单:SF = log2(每个符号的码片数)。比如 SF=7,表示每个符号用 2^7=128 个码片来表示。
SF 的取值范围是 7 到 12。数值越大,扩频增益越高,接收灵敏度越好,传输距离越远。但代价也很明显——传输速率变慢。
| SF 值 | 码片数/符号 | 相对速率 | 典型应用场景 |
|---|---|---|---|
| 7 | 128 | 最快 | 近距离、高吞吐量 |
| 9 | 512 | 中等 | 一般距离、平衡 |
| 12 | 4096 | 最慢 | 超远距离、低速率 |
我建议你在实际项目中,不要一上来就用 SF=12。我曾经在一个智慧农业项目里,为了追求最远距离,所有节点都设成 SF=12。结果呢?数据上报间隔太长,网关处理不过来,还造成了严重的空中碰撞。后来我把靠近网关的节点改成 SF=7,远处的保持 SF=12,整个系统的吞吐量提升了 3 倍。
实战技巧:SF 值不同的节点可以同时传输,因为 LoRa 的 SF 之间是准正交的。利用这一点,你可以实现「多速率并行传输」,大幅提升网络容量。
2.3 BW 带宽:影响灵敏度和速率的「双刃剑」
BW(Bandwidth,带宽)指的是 LoRa 信号占用的频率宽度。常见的有 125kHz、250kHz、500kHz 三种。
带宽越大,传输速率越快,但接收灵敏度会下降。为什么?因为带宽越宽,噪声功率也越大,信噪比要求就更高。
举个例子:
- BW=125kHz,SF=12 时,灵敏度可以做到 -137dBm 左右。
- BW=500kHz,SF=12 时,灵敏度大概只有 -131dBm。
差了 6 个 dB,换算成距离,可能就是几百米的差距。
我个人习惯是:能选 125kHz 就不选 250kHz。除非你对速率有硬性要求,否则窄带宽带来的灵敏度优势太明显了。记得有一次做地下管廊的温湿度监测,信号要穿过好几层混凝土墙,我果断选了 125kHz + SF=12,最终实现了 800 米的穿透距离。
注意:不同国家和地区对 LoRa 的带宽使用有法规限制。比如中国 470-510MHz 频段,建议使用 125kHz 带宽,避免干扰其他合法业务。
2.4 CR 编码率:纠错能力与有效速率的权衡
CR(Coding Rate,编码率)是 LoRa 前向纠错(FEC)的参数。它表示有效数据比特与总传输比特的比例。
LoRa 支持 4 种编码率:4/5、4/6、4/7、4/8。数值越小,冗余越多,纠错能力越强,但有效速率越低。
| CR 值 | 冗余比例 | 纠错能力 | 有效速率损失 |
|---|---|---|---|
| 4/5 | 20% | 弱 | 最小 |
| 4/6 | 33% | 中等 | 中等 |
| 4/7 | 43% | 较强 | 较大 |
| 4/8 | 50% | 最强 | 最大 |
你可能会问:是不是 CR 越大越好?不一定。我曾经在实验室里做过对比测试,在信噪比良好的环境下,CR=4/5 和 CR=4/8 的误包率几乎没有差别。但在强干扰环境下,CR=4/8 的优势就体现出来了。
我的建议是:默认用 CR=4/5,只有在链路余量不足或者误包率偏高时,才考虑增大 CR。毕竟,速率也是宝贵的资源。
2.5 链路预算与灵敏度:算清楚你的「通信距离」
链路预算,说白了就是算一笔账:发射端能发出多少信号,经过空间损耗后,接收端还能收到多少。
公式很简单:
链路预算 (dB) = 发射功率 (dBm) + 发射天线增益 (dBi) - 路径损耗 (dB) + 接收天线增益 (dBi)
接收灵敏度,就是接收机能正确解调的最小信号强度。LoRa 的灵敏度可以做到 -130dBm 到 -148dBm,这取决于 SF、BW 和 CR 的组合。
举个例子:
- 发射功率:20dBm(100mW)
- 发射天线增益:2dBi
- 接收天线增益:2dBi
- 路径损耗(1km 视距):约 100dB(取决于频率和环境)
- 接收灵敏度:-137dBm(SF=12, BW=125kHz)
链路预算 = 20 + 2 - 100 + 2 = -76dBm。这个值远高于 -137dBm 的灵敏度,说明链路余量很充足,通信完全没问题。
经验公式:链路余量 = 接收信号强度 - 接收灵敏度。余量大于 10dB 才算可靠。我曾经在山区项目里,链路余量只有 5dB,结果一下雨信号就断断续续。后来加了高增益天线,余量提到 15dB,问题才解决。
2.6 四个参数的协同配置
SF、BW、CR 这三个参数不是孤立的。它们共同决定了 LoRa 的 空中速率:
空中速率 (bps) = SF * (BW / 2^SF) * (4 / (4 + CR))
你看,SF 在分子和分母里都出现了,所以它和速率的关系不是线性的。SF 每增加 1,速率大约减半。
我整理了一个常用的配置组合,供你参考:
| 应用场景 | SF | BW (kHz) | CR | 空中速率 (bps) | 典型距离 |
|---|---|---|---|---|---|
| 室内短距离 | 7 | 500 | 4/5 | ~5468 | 100m |
| 一般室外 | 9 | 250 | 4/5 | ~976 | 500m |
| 远距离/穿透 | 12 | 125 | 4/8 | ~293 | 2km+ |
嗯,看到这个速率,你可能觉得 LoRa 好慢。没错,LoRa 的设计哲学就是「用速率换距离和可靠性」。如果你的应用需要高速率,那 LoRa 可能不是最佳选择。但如果你需要的是「一颗电池用三年,传遍整个园区」,那 LoRa 就是你的不二之选。
避坑指南:我曾经在调试一个 LoRa 网关时,发现某些节点总是丢包。排查了半天,发现是 SF 和 BW 配置不一致。记住:通信双方的 SF、BW、CR 必须完全一致,否则无法解调。
好了,这一节的内容就到这里。下一节咱们会深入 LoRa 的帧结构,看看数据包是怎么组装和解析的。到时候我会带大家手写一个 LoRa 数据包的解析器,敬请期待。