在 LoRaWAN 网络中,一个常见的问题是:设备的数据速率(扩频因子、带宽)到底由谁来决定?是设备自己选,还是网络说了算?答案是两者都有,但主控权在网络服务器——这就是 ADR(Adaptive Data Rate,自适应数据速率)机制。
本文拆解 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 不是一个标准化的固定算法——LoRa Alliance 规范定义的是接口和行为,具体算法由各网络服务器实现。但基本流程一致:
设备上行(ADR=1)
↓
网关接收,记录 SNR 和 RSSI
↓
网络服务器收集足够样本(通常 ≥ 20 个上行帧)
↓
计算 SNR 余量 = 测量 SNR − 该 DR 所需最低 SNR
↓
选择使 SNR 余量 ≈ 0 的最高 DR(即刚好够用的最快速率)
↓
生成 LinkADRReq 命令(含 DR、TxPower、ChMask)
↓
通过下行帧发送给设备
↓
设备执行,回复 LinkADRAns(成功/失败)
网络服务器不会只看一帧的 SNR,而是收集一批上行帧的 SNR 统计值(通常是最大值或某个百分位数),然后计算"余量":
具体的最低 SNR 需求因 DR 而异(SF12 需要约 −20 dB,SF7 需要约 −7.5 dB,具体值取决于芯片和实现)。
| 字段 | 位数 | 含义 |
|---|---|---|
| DR | 4 | 目标数据速率索引(0–15) |
| TxPower | 4 | 发射功率索引(0–15,0 为最大) |
| ChMask | 16 | 信道掩码,启用/禁用特定信道 |
| Redundancy | 4 | ChMask 掩码 + NbRep(重复次数) |
设备收到后回复 LinkADRAns,包含状态位指示是否成功执行。
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 及以上版本)。
ADR 的调节范围受限于各区域的 Regional Parameters 定义。以下是主要区域的 DR 映射:
| 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 默认范围。
| 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 时需要考虑这一约束。
| 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 的 DR 表与 EU868 基本一致(DR0–DR7),但 AS923 有子区域变体,如 AS923-2、AS923-3、AS923-4,各变体的频率范围和部分 DR 参数有差异。ADR 调节范围通常是 DR2–DR5(部分变体允许更宽范围)。
ADR Backoff 是 LoRaWAN 1.0.4 引入的补充机制,目的是防止设备频繁请求 ADR 调整而导致的下行流量过载。
想象一个场景:网络中有 10,000 台设备,每台设备每 5 分钟上行一次。如果每台设备每次上行都触发 ADR 调整,网络服务器需要为每台设备发送下行 MAC 命令——这在 LoRaWAN 的下行容量限制下是不可行的(网关下行占空比受限)。
注意: ADR Backoff 的具体参数实现因网络服务器而异。LoRa Alliance 规范定义了行为框架,各厂商(ChirpStack、TTN、ThinkLink 等)在实现细节上有差异。
移动设备是 ADR 的一个重要边界场景。
大多数 LoRaWAN 设备是静态的(固定安装在楼宇、工厂、农田等位置),链路条件相对稳定,ADR 可以充分发挥作用——网络服务器收集一段时间的数据后做出优化,设备长期保持最优速率。
如果设备在移动(如资产追踪、物流追踪),链路条件随位置快速变化: - 设备刚从网关附近走到远处时,之前 ADR 设定的高速率可能导致丢包 - 网络服务器收集的 SNR 数据是"过时"的
LoRaWAN 规范的建议是:移动设备应关闭 ADR(ADR = 0),使用固定的稳健速率(如 SF11 或 SF12)。或者设备实现本地 ADR 逻辑——检测到运动时自主降速,检测到静止时重新启用网络 ADR。
部分网络服务器(如 ChirpStack)实现了"移动性检测"功能,通过分析 SNR 变化率自动判断设备是否在移动,动态调整 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 后速率一直不变,检查以下几点:
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 — 让物联网开发更高效。