在 LoRaWAN 网络中,一个常见的问题是:设备的数据速率(扩频因子、带宽)到底由谁来决定?是设备自己选,还是网络说了算?答案是两者都有,但主控权在网络服务器——这就是 ADR(Adaptive Data Rate,自适应数据速率)机制。

本文拆解 ADR 的工作原理、决策逻辑和实际限制。

ADR 解决什么问题

LoRaWAN 使用不同的扩频因子(SF7–SF12)和带宽(125/250/500 kHz)组合来定义数据速率(Data Rate, DR)。低速率(如 SF12)覆盖范围大、抗干扰强,但空口时间长、网络容量低;高速率(如 SF7)空口时间短、容量高,但覆盖范围小。

问题在于:同一张 LoRaWAN 网络里,不同设备距离网关的远近不同,信道条件也不同。如果所有设备都固定用一个速率,要么远端设备连不上,要么近端设备浪费空口资源。

ADR 机制让网络服务器根据每个设备的链路质量,动态调节其数据速率和发射功率——信号好的设备调高速率(省空口时间、提升网络容量),信号差的设备调低速率(保证连接可靠性)。

谁在控制数据速率

ADR 的决策权分配如下:

角色 控制内容 触发条件
网络服务器 计算最优 DR 和发射功率,下发 ADR 命令 设备开启 ADR(ADR 置 1)时
设备 执行收到的 ADR 命令;移动场景下可自主降低 DR 收到 LinkADRReq MAC 命令时

关键点:ADR 是由网络服务器主导的。 设备在每次上行帧的 MAC 层头部设置 ADR 位(0 或 1)来告诉网络:"我希望你帮我管理数据速率"。一旦 ADR 置 1,网络服务器就开始收集该设备的链路质量数据(SNR 余量),计算最优参数,并通过 LinkADRReq MAC 命令下发调整指令。

设备也可以在本地做一件事:如果设备检测到自身在移动(例如通过加速度传感器检测到运动状态变化),它可以暂时忽略网络下发的 ADR 命令,自主选择一个更稳健的速率。这就是 LoRaWAN 规范中"设备移动性"对 ADR 的影响。

ADR 算法工作流程

ADR 不是一个标准化的固定算法——LoRa Alliance 规范定义的是接口和行为,具体算法由各网络服务器实现。但基本流程一致:

设备上行(ADR=1)
    ↓
网关接收,记录 SNR 和 RSSI
    ↓
网络服务器收集足够样本(通常 ≥ 20 个上行帧)
    ↓
计算 SNR 余量 = 测量 SNR − 该 DR 所需最低 SNR
    ↓
选择使 SNR 余量 ≈ 0 的最高 DR(即刚好够用的最快速率)
    ↓
生成 LinkADRReq 命令(含 DR、TxPower、ChMask)
    ↓
通过下行帧发送给设备
    ↓
设备执行,回复 LinkADRAns(成功/失败)

SNR 余量是核心指标

网络服务器不会只看一帧的 SNR,而是收集一批上行帧的 SNR 统计值(通常是最大值或某个百分位数),然后计算"余量":

具体的最低 SNR 需求因 DR 而异(SF12 需要约 −20 dB,SF7 需要约 −7.5 dB,具体值取决于芯片和实现)。

LinkADRReq 命令字段

字段 位数 含义
DR 4 目标数据速率索引(0–15)
TxPower 4 发射功率索引(0–15,0 为最大)
ChMask 16 信道掩码,启用/禁用特定信道
Redundancy 4 ChMask 掩码 + NbRep(重复次数)

设备收到后回复 LinkADRAns,包含状态位指示是否成功执行。

ADRACKReq:设备如何"催"网络

ADR 有一个自保护机制:如果设备长时间收不到网络的下行帧,它无法确认网络是否还在管理自己的速率。这时设备会设置 ADRACKReq 位。

工作时序

设备开启 ADR 后开始计数
    ↓
连续发送 ADR_ACK_LIMIT 个上行帧(默认 64 帧)未收到下行
    ↓
设置 ADRACKReq = 1
    ↓
继续发送 ADR_ACK_DELAY 个上行帧(默认 32 帧)
    ↓
如果仍未收到下行 → 回退到默认 DR(区域最低 DR)

这个机制的设计意图是:如果网络服务器"失联"了,设备自动切换到最稳健的速率,确保即使没有 ADR 管理,上行帧也能被接收。

注意: ADR_ACK_LIMIT 和 ADR_ACK_DELAY 的默认值是 64 和 32,但网络服务器可以通过 LinkADRReq 命令中的参数调整这些值(LoRaWAN 1.0.4 / 1.1 及以上版本)。

各区域 DR 范围

ADR 的调节范围受限于各区域的 Regional Parameters 定义。以下是主要区域的 DR 映射:

EU868

DR 调制 SF BW 比特率
0 LoRa 12 125 kHz 250 bps
1 LoRa 11 125 kHz 440 bps
2 LoRa 10 125 kHz 980 bps
3 LoRa 9 125 kHz 1760 bps
4 LoRa 8 125 kHz 3125 bps
5 LoRa 7 125 kHz 5470 bps
6 LoRa 7 250 kHz 11000 bps
7 FSK — — 50000 bps

ADR 调节范围:DR0–DR5(SF12/SF125k 到 SF7/SF125k)。DR6 和 DR7 通常不纳入 ADR 默认范围。

US915

DR 调制 SF BW
0 LoRa 10 125 kHz
1 LoRa 9 125 kHz
2 LoRa 8 125 kHz
3 LoRa 7 125 kHz
4 LoRa 8 500 kHz
5–7 LoRa — 500 kHz(更高 SF 组合)
8–13 LoRa — 500 kHz

US915 的 ADR 范围是 DR0–DR3(125 kHz 子带)。DR4 及以上是 500 kHz 快速通道。

Dwell Time 限制: US915、AU915 区域有"驻留时间"(dwell time)限制——每个子频带的发射时间不超过 400 ms。这意味着如果使用 SF12(空口时间约 1.5 秒),会触发 dwell time 限制,影响 ADR 的速率选择。网络服务器在计算 ADR 时需要考虑这一约束。

CN470

DR 调制 SF BW
0 LoRa 12 125 kHz
1 LoRa 11 125 kHz
2 LoRa 10 125 kHz
3 LoRa 9 125 kHz
4 LoRa 8 125 kHz
5 LoRa 7 125 kHz

CN470 的 ADR 范围是 DR0–DR5,与 EU868 类似但不完全相同。

AS923

AS923 的 DR 表与 EU868 基本一致(DR0–DR7),但 AS923 有子区域变体,如 AS923-2、AS923-3、AS923-4,各变体的频率范围和部分 DR 参数有差异。ADR 调节范围通常是 DR2–DR5(部分变体允许更宽范围)。

ADR Backoff 机制

ADR Backoff 是 LoRaWAN 1.0.4 引入的补充机制,目的是防止设备频繁请求 ADR 调整而导致的下行流量过载。

问题场景

想象一个场景:网络中有 10,000 台设备,每台设备每 5 分钟上行一次。如果每台设备每次上行都触发 ADR 调整,网络服务器需要为每台设备发送下行 MAC 命令——这在 LoRaWAN 的下行容量限制下是不可行的(网关下行占空比受限)。

Backoff 的工作方式

注意: ADR Backoff 的具体参数实现因网络服务器而异。LoRa Alliance 规范定义了行为框架,各厂商(ChirpStack、TTN、ThinkLink 等)在实现细节上有差异。

ADR 与设备移动性

移动设备是 ADR 的一个重要边界场景。

静态设备

大多数 LoRaWAN 设备是静态的(固定安装在楼宇、工厂、农田等位置),链路条件相对稳定,ADR 可以充分发挥作用——网络服务器收集一段时间的数据后做出优化,设备长期保持最优速率。

移动设备

如果设备在移动(如资产追踪、物流追踪),链路条件随位置快速变化: - 设备刚从网关附近走到远处时,之前 ADR 设定的高速率可能导致丢包 - 网络服务器收集的 SNR 数据是"过时"的

LoRaWAN 规范的建议是:移动设备应关闭 ADR(ADR = 0),使用固定的稳健速率(如 SF11 或 SF12)。或者设备实现本地 ADR 逻辑——检测到运动时自主降速,检测到静止时重新启用网络 ADR。

部分网络服务器(如 ChirpStack)实现了"移动性检测"功能,通过分析 SNR 变化率自动判断设备是否在移动,动态调整 ADR 策略。

ADR 实践建议

何时开启 ADR

常见误区

误区 1:"ADR 永远选最高速率"

错。ADR 选择的是"刚好够用的最高速率"——使 SNR 余量接近零的 DR。如果链路条件不够好,ADR 会选择较低速率。

误区 2:"关闭 ADR 可以省电"

通常正好相反。ADR 开启后,信号好的设备被调到高速率(如 SF7),空口时间从约 1.5 秒(SF12)降到约 0.05 秒(SF7),发射时间缩短 30 倍,功耗大幅下降。关闭 ADR 后设备固定用 SF12,反而更耗电。

误区 3:"ADR 会自动覆盖所有区域"

不会。ADR 只在设备当前所在区域的 DR 范围内调节。跨区域漫游时,设备需要先执行区域切换流程,ADR 参数也会重置。

调试排查

如果设备开启 ADR 后速率一直不变,检查以下几点:

  1. 上行帧数不够 → 网络服务器需要足够样本(通常 ≥ 20 帧)才计算 ADR,确认上行频率是否足够
  2. ADR 位未设置 → 确认设备上行帧的 ADR 位是否为 1
  3. 链路质量极端 → 如果 SNR 余量始终很大或很小,ADR 可能判定不需要调整
  4. 网络服务器不支持 ADR → 确认所连接的网络服务器是否实现了 ADR 算法(大多数主流 NS 都支持)
  5. 区域限制 → 某些区域的特定 DR 不可用(如 dwell time 限制)

与 ThinkLink 平台的配合

ThinkLink 物联网平台支持 ADR 功能:

如果你使用第三方网络服务器(如 ChirpStack、TTN)连接 GD6 网关,ADR 由对应网络服务器的算法负责,GD6 作为网关只负责转发上下行帧,不参与 ADR 决策。

小结

要点 说明
ADR 是什么 网络服务器根据设备链路质量,动态调节 DR 和发射功率
谁控制 网络服务器主导,设备执行
核心指标 SNR 余量(测量 SNR − 该 DR 最低 SNR)
调节范围 各区域 Regional Parameters 定义的 DR 范围
移动设备 建议关闭 ADR 或实现本地 ADR
省电效果 ADR 提速后空口时间缩短,发射功耗下降
ADRACKReq 设备长时间无下行时请求网络确认,否则回退到最低 DR

ADR 是 LoRaWAN 容量管理的基石——没有 ADR,一张网络要么牺牲覆盖(全部用高速率),要么牺牲容量(全部用低速率)。理解 ADR 的工作原理,是做好 LoRaWAN 网络规划和设备管理的前提。


相关阅读:

ManThink — 让物联网开发更高效。