请选择 进入手机版 | 继续访问电脑版
查看: 845|回复: 0

[技术交流] LoRaWAN核心特点之 ADR机制详解

[复制链接]

74

主题

169

帖子

573

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
573
发表于 2020-3-10 18:42:41 | 显示全部楼层 |阅读模式

【简介】
      ADR(Adaptive Data Rate)速率自适应是LoRaWAN的核心功能之一。在Semtech官方文件LoRaWAN_Specification_V1.0.2中给出了ADR功能的介绍:
开启ADR功能后,NS服务器可以接管每一个终端的通信速率及发射功率,使得终端功耗最优以及通信速率最高,从而实现网络容量的最大化以及低功耗终端寿命的提升。
      ADR功能需要NS服务器来动态管理网络内所有节点的通信速率及功率。然而官方协议中只明确给出了MAC命令的帧格式,对于NS侧的ADR算法实现(即何时,以什么为标准,将终端速率及功率到怎样的水平)Semtech并没有具体给出。(官方有一份参考文档:“LoRaWAN – simple rate adaptationrecommended algorithm”,仅针对EU868频段给出了简单的ADR算法建议)
      高质量的自适应速率算法实现是任何商业网络管理服务器的重要组成部分,目前LoRaWAN的NS服务器厂商在ADR算法的实现方式上不尽相同。(我司利尔达Unicore 3.0 NS服务器的速率自适应算法经过大量实际工程的考验,且在持续优化迭代中)



【效果】
在下图中可以比较直观地看到,ADR功能开启后,
- 距离网关较近的终端使用较高速率通信,射频传输时间TOA短,功耗低,信道占用量最少。
- 距离网关较远的终端使用较低速率通信,射频传输时间TOA长,功耗高,信道占用量大,但是可以保障通信质量。

实际工程环境下,LoRaWAN网络中的各个终端节点信号覆盖情况都不相同,而使用ADR算法可以让每一个节点在通信成功率以及功耗之间找到一个平衡点。
在整体网络层面上可以使近处节点使用更快的速率通信,占用更少的信道资源,减小信号碰撞概率,使得网络容量获得提升。



【适用性】
      ADR算法不适用于移动终端,若终端节点位置相对于网关位置经常发生改变,那么基于最近数据包信号质量而选择的数据速率可能会和新环境不匹配而导致通信丢包。
但目前LPWAN行业的典型应用基本都是静态节点,如水电表、地磁、门锁、温湿度之类,对于这些静态终端以及部分偶尔发生移动的终端设备,ADR功能都可以有效地将通信速率调节至合理,并且对于偶发的位置变化导致的数据丢包也可以在一定时间内进行自愈。



【实现方式】
NS对于终端设备通信速率/功率的控制通过MAC命令-LinkADR(CID-0x03) 来实现,该指令帧格式及通信协议在官方文档中给出了详细描述,下面做简单介绍。

○ LinkADRReq命令,由NS发起,要求节点修改Datarate(速率)、TXPower(功率)、ChMask(信道掩码)、NbTrans(重传次数)等参数,如下图。




○ LinkADRAns命令,节点用以回复NS的Req命令,包含Power ACK(功率确认)、Data rate ACK(速率确认)、Channel maskACK(信道掩码确认)三个字段,需要注意的是任何一个字段为0代表节点拒绝了本次调速,将保持原参数继续运行。




【调速逻辑】
利尔达的ADR调速机制分为两块,NS端负责节点提速,节点侧负责自身降速。
NS及节点都具备ADR调速开关,服务器侧可配置项目下全局ADR的使能/禁用,也可以针对单个节点修改其ADR开关。
节点侧通过AT指令“AT+ADR”来选择开启或关闭ADR功能。





NS服务器侧提速逻辑
服务器端会记录节点的历史上行信号质量,包含RSSI、SNR、FCNT等,若节点通信速率高于预期值,NS会缓存好LinkADR指令,等待下行窗口到来时进行下发。逐级调速,每次只提升一档通信速率。
节点收到调速指令后回复Ans,并在下一次通信时开始使用新速率上行。

终端节点侧降速逻辑
节点侧的降速依据为上行通信的丢包率,需要分为Confirm帧及Unconfirm帧两种情况。
○ 对于发送确认帧(Confirmed Data)的节点,节点自身知晓上行信号是否被网关收到。在连续的两包(缺省值,可配置)确认帧未收到网关ACK时,节点的下一次上行将使用更低一级的速率。最低速率按照LoRaWAN Regional Parameters中各地域的频谱规范执行。
○ 对于发送非确认帧(Unonfirmed Data)的节点,节点无法确认自身的上行信号是否丢包,需要周期性地向服务器确认上行消息的可到达性,这个可以通过LoRaWAN协议帧FHDR内,FCtrl字段中的ADRACKReq位来实现(帧格式见官方文档LoRaWAN_Specification_V1.0.2)。

简述其调速机制如下:
1、节点上发的每一包非重传包都会使ADR_ACK_CNT累加
2、在ADR_ACK_LIMIT次上行数据没有收到任何下行时(ADR_ACK_CNT≥ADR_ACK_LIMIT),节点会在上行数据包中置位ADRACKReq bit,要求服务器进行回复
3、在接下来的ADR_ACK_DELAY次通信过程中,任意一包NS服务器的下行将会使节点端的ADR_ACK_CNT计数器清零。
4、若网关在收到ADRACKReq后超过ADR_ACK_DELAY次通信内没有进行回复,节点将会降低一级通信速率以提升上行通信链路质量。
5、若网关在下一次ADR_ACK_DELAY次通信内还没有进行回复,节点会再降低一级速率,直至最低。


其中ADR_ACK_LIMIT及ADR_ACK_DELAY的缺省参数官方在LoRaWAN Regional Parameters中有给出,分别为64和32,如下图:
利尔达标准LoRaWAN模组内这两个个参数的缺省值参照官方规定,可配置。



以上协议标准相关图片截取于Semtech的《LoRaWAN_Specification_V1.0.2》及《LoRaWAN Regional Parameters_V1.1rb》,文中内容仅代表个人意见,欢迎留言交流。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表