(三)标签防碰撞--树形算法

RFID 系统的标签编码采用二进制方式,01 两个特征值可以用如二叉树的数据结构思想来进行区分[4][^1]。

对于二进制比特位来说,一个比特位对应两种情况 0 和 1,而两个比特位则对应四种情况 00、01、10、11,因此如果是以冲突的比特位作为划分,则采用的是二叉树的数据结构;而如果是采用两个比特位进行

匹配划分,则采用的是四叉树的数据结构,以此类推。

3.1 查询树算法

查询树算法[5][^2]的思路极其类似与二叉树查找节点的思路,具体流程如下:阅读器维持一个二进制前缀串 S,初始为 0。

  1. 每个时隙开始时,阅读器向识别范围内广播该前缀,标签将自身标识符的前几位与该前缀比较:查询树算法的代码实现^((20230831090900-vljl60j “[code-6]”))^

    • 若相同,则标签发送识别码,该标签被成功识别;
    • 否则该标签进入沉默。
  2. 阅读器判断是否有多个标签响应:

    • 若有多个标签响应,说明串 S 长度小于标签的标识符长度,不能够区分,需要继续增加长度,则下轮开始时将前缀 S 加 0 或加 1;
    • 若只有唯一响应,则成功识别该标签,并让前缀串为当前栈顶元素,出栈;
    • 若没有标签响应,则让前缀串为当前栈顶元素,出栈;
  3. 重复以上过程,直到所有标签被成功识别。

image

这里我们给出具体例子,需要识别的六个标签标识码假设为{0010、0011、1001、1000、1101、1111}:

  1. 阅读器广播前缀串 S=0,并将 1 压入堆栈,0 有多个标签响应,则 S=0 在下一轮增加长度;
  2. 阅读器广播前缀串 S=00,并将 01 压入堆栈,00 有多个标签响应,则 S=00 在下一轮增加长度;
  3. 阅读器广播前缀串 S=000,并将 001 压入堆栈,000 无响应,001 有多个响应,则 S=001 在下一轮增加长度;
  4. 阅读器广播前缀串 S=0010,并将 0011 压入堆栈,0010 有唯一标签响应,S 变为栈顶元素,出栈,直到识别所有标签。
3.2 碰撞树算法

查询树算法执行过程中,因为在产生冲突时是执行前缀串加 0 且将加 1 入栈的策略,因此会出现空时隙(没有标签相应)的情况。碰撞树算法对这种情况进行了改进,直接将前缀串精确到发生碰撞的比特位从而进行区分,其实现思路和执行流程与查询树算法基本相似,但碰撞树只关注产生碰撞的第一个比特位。将其分别设置为 0 和 1 对分别压入堆栈,从而对标签进行区分。碰撞树算法的代码实现^((20230904205605-vhzfpmv “[code-7]”))^

image

这里我们给出具体例子,需要识别的六个标签标识码假设为 list = {0010、0011、1001、1000、1101、1111}:初始冲突前缀 preStr = 0,将 1(preStr+1)入栈

  1. preStr 对应的标签列表为 z1 ={0010、0011},z1 的标签个数 >1,将 preStr 变为 z1 的冲突前缀 0010,同时将 0011 入栈
  2. list 中符合 preStr 前缀的标签列表 z2 = {0010},z2 的标签个数=1,将 preStr 变为栈顶元素 0011,出栈,z2 被识别,在 list 中删去该标签
  3. list 中符合 preStr 前缀的标签列表 z3 = {0011},z3 的标签个数=1,将 preStr 变为栈顶元素 1,出栈,z3 被识别,在 list 中删去该标签
  4. list 中符合 preStr 前缀的标签列表 z4 ={1001、1000、1101、1111},z4 的个数 > 1,将 pre 变为 z4 的冲突前缀 10,同时将 11 入栈,以此类推,直到所有标签成功识别位置
3.3 二进制搜索树算法

二进制搜索树算法[6][^5]的主要思路如下:阅读器以与标签编码长度相同的二进制串序列,对标签进行查询,该序列的初始值为此长度的二进制串能够表示的最大值( “1” * binaryLength ),每轮识别时找出二进制串值小于该序列的标签列表 targetList,如果只有一个标签响应,则该标签相应成功,下轮又将该序列变为最大值;若有多个标签相应,则找出 targetList 中标签的碰撞位 index,将序列的 0~index 替换为这些标签的共同前缀,并将 index 为替换为 0,再对 targetList 重复以上操作,直到所有标签识别完成为止。 假设标签列表为{10100、10110、11001、11011},识别过程如下:二进制树搜索算法的代码实现^((20230917002425-ik96sdm “[code-8]”))^

image

3.4 基于多叉树的防碰撞算法

除了上述应用二叉树进行防碰撞算法外,多叉树在防碰撞算法中也有很多实际应用,比如四叉树。四叉树的分组长度为 2,节点共有四种组合:00、01、10、11。(对应四个分叉)

这里我们给出基于四叉树防碰撞算法[6][^5]的具体例子,需要识别的标签为 list = {{0101、0110、1010}。基于多叉树的防碰撞算法的代码实现^((20230907001807-t4nciec “[code-9]”))^

image

从理论上来看,分组长度越大(树节点的分支越多),发生碰撞的次数(概率)就越小且识别的效率也越大,但是对应产生空时隙的概率就越大。故而,四叉树防碰撞算法的重点就是减少甚至消除空时隙的发生。

3.5 基于四叉树的改进型防碰撞算法( todo )

基于四叉树的改进型 RFID 防碰撞算法[7][^8],主要通过引进分组重编码的机制,改进常规四叉树的结构,从而减少或者消除空闲时隙的个数,缩短识别时间,提高识别效率。

3.6 树-时隙 Aloha 算法

树分裂算法本质上是利用的深度优先遍历(DFS)思想,在标签个数较少时,使用树分裂算法能够显著提高标签的识别效率,但是当标签数量增大到一定程度时,树分裂算法的识别效率会急剧下降,

动态帧时隙算法的优点是根据剩余的标签数量动态决定帧长,从而提高算法的识别效率。学术界将树分裂协议引入到 ALoha 协议中,融合形成了基本的树时隙算法[8][^9],树时隙算法首先采用动态帧时隙的过程,让每个标签选择一个时隙,对于有冲突的时隙则采用树分裂算法,直到这个选择时隙的的标签被全部识别,再接着判断下一个时隙。树时隙-Aloha 算法的代码实现^((20230918233514-rb4pzql “[code-10]”))^。

从代码的执行流程可以看出,树时隙算法需要准确估计标签个数,而这为算法增加了复杂度和难度,因此接下来介绍基于无需估计的树时隙-Aloha 算法的改进。

3.7 动态树-时隙 Aloha 算法

为了解决树时隙-Aloha 算法需要准确估计剩余标签个数的问题,动态树-时隙 Aloha 算法主要利用了这样的思想:标签个数远大于时隙数时,第一个时隙发生碰撞的概率就很大;而若远小于时隙数时,第一个时隙发生碰撞的概率就很小;若非常接近,则第一个时隙大概率为成功时隙。

3.8 位与位的二进制树算法

IKM 标签响应阅读器的请求,并将它 ID 号的第一位发送给阅读器。每个标签会哦通过两个子载波频率中的一个来发送一位,一个频率专门用来发送 1,另一个专门来发送 0。如果阅读器同时接收到 1 和 0,则阅读器会把确认位 0 发送给标签,否则阅读器会将接收到的确认位发送给标签。只有 ID 号对应位置为确认位的标签才能发送接下来的位置,当一个标签被识别后,阅读器又重新开始以上循环[​^((20231103203535-lr6w49c “code-11”))]^。

  • 44
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值