第1章:LoRa物理层原理——扩频调制技术
各位同学,咱们今天聊聊LoRa最核心的东西——物理层。说白了,就是信号到底是怎么在空中飞的。
很多人觉得LoRa就是“传得远、功耗低”,但为什么能传得远?为什么抗干扰那么强?这背后的秘密,就在扩频调制技术里。
我当年第一次接触LoRa时,也被这些术语搞得头大。什么Chirp、扩频因子、编码率……但后来我发现,只要抓住一条主线,一切都通了——LoRa用带宽换距离,用时间换信噪比。
1.1 扩频调制技术:为什么LoRa能“听”到那么微弱的信号?
传统无线通信,比如FSK(频移键控),是把信息直接调制到载波上。信号窄,功率集中,但抗干扰差。你想想看,如果两个设备同时发,互相一干扰,基本就废了。
LoRa不一样。它把信号“摊开”到很宽的频带上。就像你在一间嘈杂的房间里,正常说话别人听不清,但如果你用一个大喇叭放一段很长的、有规律的旋律,别人就能从噪音里分辨出来。
扩频就是这个道理。信号能量被分散了,但接收端知道这个“旋律”长什么样,就能把它重新“收拢”回来。
核心思想:LoRa 使用 CSS(Chirp Spread Spectrum,啁啾扩频) 技术。它不是直接发“0”或“1”,而是发一段频率随时间线性变化的信号——也就是 Chirp 信号。
我在项目中遇到过一个问题:两个LoRa节点距离很远,信号强度已经低于底噪了。用普通FSK根本收不到,但LoRa就是能解出来。为什么?因为扩频增益把信号从噪声里“捞”出来了。
1.2 Chirp扩频:LoRa的“指纹”信号
Chirp,中文叫“啁啾”。你想象一下鸟叫的声音,频率从低到高,或者从高到低。LoRa用的就是这种信号。
具体来说,LoRa的每个符号(symbol)就是一个Chirp。这个Chirp的频率从起始频率开始,线性扫过整个带宽,然后结束。
- Up-Chirp:频率从低到高(默认方式)
- Down-Chirp:频率从高到低(用于同步等特殊场景)
为什么用Chirp?因为它的自相关特性非常好。接收端只要做一个“匹配滤波”,就能在噪声中精确找到信号的起始点。嗯,这里要注意,匹配滤波是数字信号处理里的经典操作,LoRa的接收机就是靠这个来“锁定”信号的。
我的经验:调试LoRa时,如果你发现接收灵敏度上不去,先检查一下Chirp的同步头是否完整。我曾经因为天线匹配不好,导致Chirp信号变形,同步失败,折腾了两天才找到原因。
1.3 带宽与扩频因子:一对“相爱相杀”的参数
LoRa有两个最重要的参数:带宽(BW) 和 扩频因子(SF)。这两个参数决定了你的通信性能。
带宽(BW)
带宽就是Chirp扫过的频率范围。常见的值有125kHz、250kHz、500kHz。
- 带宽越大,Chirp扫得越快,数据传输速率越高。
- 但带宽越大,噪声功率也越大(噪声功率 = 带宽 × 噪声密度),信噪比要求反而更高。
说白了,带宽是个“双刃剑”。想传得快,就得忍受更差的灵敏度。
扩频因子(SF)
扩频因子决定了每个比特用多少个Chirp符号来表示。SF从7到12,共6个等级。
- SF7:每个符号代表2^7=128种状态,速率最快,但抗干扰最差。
- SF12:每个符号代表2^12=4096种状态,速率最慢,但抗干扰最强。
你想想看,SF12比SF7多了32倍的状态数。这意味着接收端有更多信息来区分信号和噪声。代价是什么?传输时间长了32倍。
关键公式:符号速率 Rs = BW / 2^SF
SF每增加1,符号速率减半,传输时间翻倍,但接收灵敏度提升约2-3dB。
我建议你在实际项目中,先根据距离需求选SF。比如城市里1-2公里,SF7就够了。郊区5公里以上,至少SF10。别一上来就用SF12,那速率慢得让人着急。
1.4 编码率与抗干扰性:给数据加一层“铠甲”
LoRa还有一个参数叫编码率(CR),范围是4/5到4/8。它表示每4个有效数据位,实际发送多少位。
- CR = 4/5:每5位中有4位是数据,1位是冗余。开销最小,抗干扰最弱。
- CR = 4/8:每8位中有4位是数据,4位是冗余。开销最大,抗干扰最强。
这个冗余是用来做前向纠错(FEC)的。接收端如果收到一些错误位,可以通过冗余信息把原始数据恢复出来。
避坑指南:我曾经在一个项目中,为了追求速率,把CR设成了4/5。结果在工业现场,电机启动时的电磁干扰直接把数据包打废了。后来改成4/7,虽然速率降了一点,但误包率从30%降到了1%以下。所以,别为了那点速率牺牲可靠性。
1.5 链路预算计算:你的信号到底能传多远?
链路预算,说白了就是算一算信号从发射端到接收端,一路“损耗”了多少,还剩多少。
公式很简单:
链路预算(dB)= 发射功率(dBm) + 发射天线增益(dBi) - 路径损耗(dB) + 接收天线增益(dBi) + 接收灵敏度(dBm)
其中,路径损耗用自由空间传播模型估算:
路径损耗(dB)= 32.4 + 20 × log10(频率(MHz)) + 20 × log10(距离(km))
举个例子:
- 发射功率:14 dBm(约25mW)
- 天线增益:2 dBi(两端相同)
- 频率:868 MHz
- 接收灵敏度:-137 dBm(SF12, BW125kHz)
链路预算 = 14 + 2 - (32.4 + 20×log10(868) + 20×log10(距离)) + 2 + 137
简化后:链路预算 = 155 - (32.4 + 58.8 + 20×log10(距离)) = 63.8 - 20×log10(距离)
当链路预算为0时,距离最大:20×log10(距离) = 63.8 → 距离 ≈ 1.55 km
我的习惯:算出来的理论距离,实际打七折。因为还有多径衰落、遮挡、干扰等因素。比如上面算出来1.55公里,实际能稳定通信的距离大概在1公里左右。
小结
这一章我们聊了LoRa物理层的核心原理。扩频调制让LoRa能在噪声中“听”到信号,Chirp信号提供了优秀的同步性能,带宽和扩频因子决定了速率和灵敏度的取舍,编码率则给数据加了保护。最后,链路预算帮你估算实际通信距离。
下一章,我们会深入LoRa的帧结构和数据包格式。到时候你会发现,LoRa的“聪明”远不止物理层这么简单。