2、物理层基础(一):Chirp扩频调制原理、扩频因子(SF)详解、带宽(BW)与编码率(CR)的关系
各位同学,欢迎来到《LoRa通信协议栈完全拆解》的第二讲。
今天咱们聊点硬核的——物理层。说白了,就是LoRa到底是怎么把数据“扔”到空中去的。你想想看,同样是无线通信,为什么LoRa能传十几公里,而Wi-Fi隔两堵墙就歇菜了?
答案就在这三个关键词里:Chirp扩频、扩频因子(SF)、带宽(BW)与编码率(CR)。我当年刚接触LoRa时,也被这些术语绕得头晕。但别怕,今天我用最接地气的方式,把它们拆开揉碎了讲给你听。
2.1 Chirp扩频调制:LoRa的灵魂
先问大家一个问题:传统的FSK(频移键控)调制,是怎么传数据的?
很简单,用两个频率代表0和1。比如,1MHz代表“1”,1.1MHz代表“0”。接收端只要检测到哪个频率来了,就知道是啥数据。
但LoRa不这么干。它用的是Chirp扩频。Chirp这个词,直译过来就是“鸟叫声”。你听过鸟叫吗?声音从低到高,或者从高到低,频率一直在变。LoRa的Chirp信号,就是这种频率随时间线性变化的波形。
核心思想:LoRa不是用固定的频率代表数据,而是用频率变化的起始位置来编码信息。
举个例子。假设一个Chirp信号,频率从100kHz线性扫到200kHz,耗时1毫秒。我们把整个扫频范围分成32个等份(也就是32个码片)。如果我想传一个5位的数据(比如“01010”),我就让这个Chirp信号从第10个码片的位置开始扫。
接收端收到信号后,通过一个“解扩”操作(其实就是本地生成一个反向的Chirp,跟接收信号相乘),就能把频率变化变成单一频率的脉冲。这个脉冲出现的时间位置,就对应了原始数据。
嗯,这里要注意:Chirp扩频的本质,是把时间-频率二维空间用起来了。传统FSK只用频率一维,LoRa多了一个时间维度,所以抗干扰能力更强。
我的经验:我在一个智慧农业项目中,遇到过强电机干扰。用FSK根本没法通信,但换成LoRa的Chirp扩频,数据包居然能稳定收发。原因就是Chirp信号在频域上“铺开”了,窄带干扰只影响一小部分能量,通过解扩处理,大部分能量还能被恢复出来。
2.2 扩频因子(SF):灵敏度和速率的博弈
扩频因子(Spreading Factor,SF),是LoRa物理层最重要的参数,没有之一。
它的定义很简单:每个数据符号用多少个Chirp码片来表示。数学上,SF和码片数的关系是:
码片数 = 2^SF
比如,SF=7时,每个符号用128个码片表示;SF=12时,每个符号用4096个码片表示。
你想想看,同样的数据,用更多的码片去“展开”,意味着什么?
- 灵敏度更高:码片越多,每个码片的能量越低,但通过解扩的“处理增益”,接收机能从更低的信噪比(SNR)下恢复出信号。SF=12时,LoRa的理论灵敏度可以达到-148dBm,比SF=7高出约12dB。
- 速率更慢:码片多了,传一个符号的时间就长了。SF每增加1,数据速率大约减半。
| 扩频因子(SF) | 码片数/符号 | 灵敏度(典型值) | 相对速率 |
|---|---|---|---|
| 7 | 128 | -123 dBm | 快 |
| 9 | 512 | -133 dBm | 中 |
| 12 | 4096 | -148 dBm | 慢 |
避坑指南:我曾经在一个项目中,为了追求最远的通信距离,把SF设成了12。结果发现,一个20字节的数据包,在空中要飞将近2秒钟!网关那边收包超时,导致大量重传。后来我学乖了:近距离用SF7,远距离用SF12,中间距离用SF9或SF10。别一根筋到底。
另外,LoRa有个特性叫正交性。不同SF的信号之间是近似正交的,也就是说,SF7和SF12的信号可以在同一个频率上同时传输,互不干扰。这为多用户接入提供了便利。
2.3 带宽(BW):决定频率的“宽度”
带宽(Bandwidth,BW),指的是Chirp信号扫频的范围。LoRa常用的带宽有:125kHz、250kHz、500kHz。
带宽的影响很直观:
- 带宽越大,速率越快。因为扫频范围宽了,每个码片的时间变短,符号速率就上去了。
- 带宽越大,灵敏度越低。带宽宽了,噪声功率也增加了(噪声功率 = 带宽 × 噪声密度),信噪比下降。
我个人习惯,在大多数场景下用125kHz。为什么呢?因为125kHz是LoRaWAN的默认带宽,兼容性最好。而且,125kHz的灵敏度比500kHz高出约6dB,这对远距离通信很关键。
但如果你在做一个高速数据采集的项目,比如每隔几秒传一张图片,那可以考虑250kHz甚至500kHz。不过要记住:带宽和SF是联动的。比如,SF12 + 125kHz,数据速率大约是300bps;而SF7 + 500kHz,速率能到5.5kbps左右。差了将近20倍。
2.4 编码率(CR):给数据穿上“防弹衣”
编码率(Coding Rate,CR),是LoRa物理层的前向纠错(FEC)参数。它的定义是:
CR = 有效数据比特数 / (有效数据比特数 + 冗余校验比特数)
LoRa支持4种编码率:4/5、4/6、4/7、4/8。
- CR = 4/5:每4个有效比特,加1个冗余比特。开销最小,速率最快,但纠错能力最弱。
- CR = 4/8:每4个有效比特,加4个冗余比特。开销最大,速率最慢,但纠错能力最强。
你可能会问:这玩意儿有啥用?
我举个例子。在市区做LoRa通信,信号经常被高楼遮挡,产生多径衰落。数据包在空中飞的时候,可能被“撕”掉几个比特。如果没有FEC,整个包就废了,得重传。但有了FEC,接收端可以用冗余比特把丢失的信息“猜”出来。
关键关系:带宽(BW)、扩频因子(SF)、编码率(CR)共同决定了LoRa的空中数据速率。公式如下:
数据速率 (bps) = SF × (BW / 2^SF) × CR
其中,CR是有效编码率(比如4/5=0.8)。
举个例子:SF=7, BW=125kHz, CR=4/5,那么:
速率 = 7 × (125000 / 128) × 0.8 ≈ 5468 bps
也就是大约5.5kbps。如果换成SF=12, BW=125kHz, CR=4/8:
速率 = 12 × (125000 / 4096) × 0.5 ≈ 183 bps
嗯,183bps,比拨号上网还慢。但换来的是-148dBm的灵敏度,能传十几公里。
我的建议:在大多数LoRaWAN应用中,我推荐使用CR=4/5。因为LoRaWAN本身有MAC层的重传机制,物理层没必要用太高的冗余。只有在极端恶劣的信道环境下(比如矿井、隧道),才考虑用CR=4/7或4/8。
2.5 三者如何协同工作?
好了,现在我们把SF、BW、CR这三个参数串起来,看看它们在实际中怎么配合。
假设你有一个应用场景:
- 场景A:智能水表,每天上报一次读数,数据量很小(20字节),电池要用10年。
- 场景B:工业振动监测,每5秒上报一次加速度数据,数据量较大(200字节),有市电供电。
对于场景A,我会选择:SF=12, BW=125kHz, CR=4/5。虽然速率慢,但灵敏度高,水表通常在地下室或井盖下,信号穿透力要强。而且每天只发一次,速率慢点无所谓。
对于场景B,我会选择:SF=7, BW=250kHz, CR=4/5。速率快,能支撑高频次的数据上报。而且工业现场通常有电源,不担心功耗。
你看,没有万能的配置,只有最适合的配置。这就是LoRa物理层的魅力——你可以在灵敏度、速率、功耗之间自由权衡。
好了,这一讲的内容就到这里。下一讲,我们会深入LoRa的前导码、同步字、数据包结构,看看一个完整的LoRa数据包是怎么组装起来的。到时候,我会结合一个实际的抓包分析,带大家亲眼看看Chirp信号长什么样。
记住:物理层是通信的基石。搞懂了今天的内容,后面讲MAC层、应用层时,你会觉得豁然开朗。
公众号:蓝海资料掘金营,微信deep3321