2、LoRa调制技术:扩频因子(SF)、带宽(BW)、编码率(CR)详解、LoRa调制解调原理、链路预算与灵敏度计算
各位同学,欢迎来到第二章。上一章我们聊了LoRaWAN的整体架构,算是打了个底。这一章,咱们要钻进物理层,看看LoRa最核心的看家本领——调制技术。
说实话,我第一次接触LoRa调制时,也被那些参数搞得有点晕。扩频因子、带宽、编码率,每个都能调,调完效果还不一样。但搞懂了之后你会发现,这其实就是一套“用时间换距离”的精妙把戏。
2.1 扩频因子(SF):决定“嗓门”大小的关键
扩频因子,英文叫Spreading Factor,简称SF。它决定了每个数据比特被扩展成多少个“码片”(chips)来发送。
你可以这么理解:
假设你要跟对面的人喊一句话。SF小,就像你正常说话,对方离得近能听清,离远了就听不见。SF大,就像你拿着大喇叭,一个字一个字慢慢喊,每个字都拖长音,对方哪怕隔着一公里也能听清。
LoRa的SF取值范围是7到12。每个SF值对应一个固定的扩频增益:
| 扩频因子 (SF) | 码片数/符号 | 扩频增益 (dB) | 典型应用场景 |
|---|---|---|---|
| SF7 | 128 | 21.1 | 近距离、高速率 |
| SF8 | 256 | 24.1 | 中等距离 |
| SF9 | 512 | 27.1 | 中等偏远距离 |
| SF10 | 1024 | 30.1 | 较远距离 |
| SF11 | 2048 | 33.1 | 远距离 |
| SF12 | 4096 | 36.1 | 极限距离、穿透复杂环境 |
这里有个关键点:SF每增加1,灵敏度提升约3dB,但数据速率直接减半。我在做智慧农业项目时,田里的传感器距离基站有3公里,中间还有一片小树林。用SF7根本连不上,换成SF12后,信号稳稳的。代价是什么?一个数据包从原来0.5秒发完,变成了4秒多。
核心公式:数据速率 ≈ SF × (BW / 2^SF) × (4 / (4 + CR))
从公式可以看出,SF在分母上是指数级的,所以SF越大,速率下降非常明显。
我的经验:实际项目中,不要一上来就用SF12。先试试SF9或SF10,如果丢包率能接受,就别用更高的SF。我曾经有个项目,为了追求“绝对可靠”全用了SF12,结果网关一天只能处理几百个节点,完全不够用。
2.2 带宽(BW):信号占用的“马路宽度”
带宽,Bandwidth,单位是Hz。LoRa常用的带宽有125kHz、250kHz和500kHz三种。
带宽决定了信号占用的频谱宽度。你可以把它想象成一条马路:
125kHz是单车道,车走得慢但能走很远;
500kHz是四车道,车跑得快但跑不远。
带宽对系统的影响体现在两个方面:
- 数据速率:带宽翻倍,速率也翻倍。500kHz比125kHz快4倍。
- 灵敏度:带宽越宽,噪声功率越大,灵敏度越差。500kHz比125kHz灵敏度差约6dB。
我个人习惯,在大多数场景下优先使用125kHz。原因很简单:
第一,125kHz是LoRaWAN标准中最常用的带宽,兼容性最好;
第二,它提供了最好的灵敏度,能覆盖更远的距离。
什么时候用250kHz或500kHz?
当你的节点离网关很近(比如几百米内),而且你需要更高的吞吐量时。比如一些固件升级的场景,用500kHz能大大缩短升级时间。
2.3 编码率(CR):给数据加一层“防弹衣”
编码率,Code Rate,表示有效数据在总传输数据中的占比。LoRa支持4/5、4/6、4/7、4/8四种编码率。
编码率4/5的意思是:每5个传输的比特中,有4个是有效数据,1个是纠错码。编码率4/8则是每8个比特中只有4个有效数据,纠错码占了4个。
你可能会问:为什么不用4/5?效率最高啊!
嗯,这里要注意:编码率越低,纠错能力越强,但有效数据速率也越低。
| 编码率 (CR) | 有效数据占比 | 纠错能力 | 速率损失 |
|---|---|---|---|
| 4/5 | 80% | 弱 | 0% |
| 4/6 | 66.7% | 中等 | 20% |
| 4/7 | 57.1% | 较强 | 33% |
| 4/8 | 50% | 最强 | 40% |
我在实际项目中,大部分时候用4/5就够了。只有在信号极差的环境下,比如地下停车场、金属罐体内部,才会考虑用4/7或4/8。但说实话,如果信号差到4/5都扛不住,我建议你先检查天线位置,而不是盲目降低编码率。
避坑指南:我曾经在一个项目中,为了“保险起见”把所有节点都设成了4/8。结果发现,空中时间变长了40%,导致网关的并发容量大幅下降。后来改回4/5,配合适当的天线调整,效果反而更好。记住:编码率不是越高越好,够用就行。
2.4 LoRa调制解调原理:从比特到“啁啾”
LoRa调制用的是CSS(Chirp Spread Spectrum,啁啾扩频)技术。说白了,就是把数据编码成频率随时间线性变化的信号。
你可以想象一个“啁啾”声:
从低频率慢慢升到高频率,这叫“上行啁啾”;
从高频率慢慢降到低频率,这叫“下行啁啾”。
LoRa用不同的起始频率来表示不同的符号。比如SF=7时,一个符号可以表示7个比特(128种可能)。接收端通过检测这个啁啾信号的起始频率,就能解调出原始数据。
为什么CSS抗干扰能力强?
因为啁啾信号占用了整个带宽,能量是分散的。窄带干扰只能影响其中一小部分频率,接收端通过相关运算,依然能恢复出完整信号。这就像你在一张白纸上画了一条线,有人用笔点了一个点,你依然能看清那条线的走向。
调制过程简化为三步:
- 将数据比特映射为符号(比如SF7时,7个比特对应一个符号)
- 根据符号值计算啁啾的起始频率偏移
- 生成从起始频率到结束频率的线性调频信号
解调过程反过来:
- 接收信号与本地生成的啁啾模板做相关运算
- 找到相关峰值的位置,即得到起始频率偏移
- 将起始频率偏移映射回数据比特
2.5 链路预算与灵敏度计算:算清楚你的信号能跑多远
链路预算,Link Budget,是无线通信中最基础也最重要的计算。它回答一个问题:我的信号从发射端到接收端,到底还剩多少“力气”?
公式很简单:
接收功率 (dBm) = 发射功率 (dBm) + 发射天线增益 (dBi) - 发射馈线损耗 (dB)
+ 接收天线增益 (dBi) - 接收馈线损耗 (dB) - 路径损耗 (dB)
接收灵敏度,则是接收机能正确解调的最小信号功率。LoRa的接收灵敏度可以用以下公式估算:
灵敏度 (dBm) = -174 + 10×log10(BW) + NF + SNR_min
其中:
- -174 dBm/Hz:室温下的热噪声基底
- BW:带宽(Hz)
- NF:接收机噪声系数(典型值6dB)
- SNR_min:解调所需最小信噪比(SF7约-7.5dB,SF12约-20dB)
举个例子,计算SF12、125kHz带宽下的灵敏度:
灵敏度 = -174 + 10×log10(125000) + 6 + (-20)
= -174 + 50.97 + 6 - 20
= -137.03 dBm
这个-137dBm是什么概念?
相当于一根针掉在足球场上,你站在球场另一端要听到它落地的声音。LoRa能做到这一点,靠的就是扩频增益带来的信噪比优势。
我的经验:理论计算出来的链路预算,在实际环境中通常要打8折。墙壁、树木、天气都会带来额外损耗。我一般会在理论值基础上预留10-15dB的余量。比如算出来能传5公里,实际部署时按3公里规划比较稳妥。
2.6 知识体系总览
为了让你更直观地理解这些参数之间的关系,我画了一张图:
这张图把SF、BW、CR三个参数以及它们对系统性能的影响串起来了。你仔细看会发现,这三个参数其实是在做同一个权衡:用速率换距离,用时间换可靠性。
好了,这一章的内容就到这里。LoRa调制的核心就是这三个参数,搞懂了它们,你就掌握了LoRa物理层80%的精髓。下一章我们会聊LoRaWAN的MAC层,看看数据到了协议栈上层是怎么被处理的。
公众号:蓝海资料掘金营,微信deep3321