一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法与流程

文档序号:15447023发布日期:2018-09-14 23:29阅读:139来源:国知局

本发明涉及通信技术领域,更具体的说是涉及一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法。



背景技术:

随着信息技术的高速发展,人们的生活也在不断地被改变着,物联网的兴起堪称信息领域的一次新革命。在物联网中,其通信终端可以是我们身边的任何一个物体,能够实现物物互联。而射频识别技术作为物联网的关键技术之一,发挥着不可替代的作用,其所具有的无接触式自动识别、低成本和低功耗等优点,在国内外具有着广泛的应用。但同时,rfid技术也面临着很多的挑战,比如在一个rfid系统中,多个标签存在于同一个阅读器工作范围内,当它们同时向阅读器传输数据时,便会发生标签碰撞。尤其是未来物联网中的rfid系统必然会存在海量标签,碰撞问题会变得愈加严重,因此,提出有效的防碰撞策略对提高rfid系统的性能至关重要。

关于rfid系统中多标签防碰撞算法主要分为两类,分别为:基于aloha的不确定性防碰撞算法和基于二进制树的确定性防碰撞算法。但由于基于aloha的防碰撞算法存在标签饥饿的问题,而基于二进制数的确定性算法可以对标签进行逐一识别,有效的避免了标签饥饿现象的发生,但同时也造成了识别总时隙数量的增多,因而如何减少标签识别的总时隙数,提高系统的吞吐量是首要解决的问题。对此,许多相关领域的学者对该问题进行了研究与改进,提出了许多优秀的基于树的防碰撞协议。查询树算法(querytree,qt),是最经典的基于树的防碰撞算法,首次引入堆栈,用以存储新生成的查询前缀,是一种标签无记忆算法,许多优秀的协议都是基于其来改进的,它采用逐位识别,直至堆栈为空;碰撞树算法(collisiontree,ct)是在qt算法的基础上改进的,在每次查询中,只关注首碰撞位,将原有查询前缀分别加0和1,然后将它们压入堆栈,该算法相比于qt算法,可以减少总查询时隙的数量,提高系统吞吐量;自适应多叉树防碰撞算法(adaptiveanti-collisionalgorithmbasedonmulti-tree,ams),引入了碰撞因子的概念,当碰撞因子大于或等于0.75时,采用四叉查询树的方法进行查询,当碰撞因子小于0.75时,采用二叉查询树的方法进行查询,在一定程度上提高了系统的吞吐量,但同时也存在很多空闲时隙,且随着标签数量的增多,系统吞吐量并不能保持很好的稳定性;自适应四叉修剪查询树算法(adaptive4-arypruningquerytree,a4pqt),在每次查询过程中,仅关注最高碰撞位及其后一个比特位,根据后一个比特位的特征,对四叉查询树进行有效的修剪,从而减少部分空闲时隙,但当两个标签id为00和11时,阅读器经曼彻斯特解码得到xx,仍然要产生两个空闲时隙;位仲裁树协议(bitarbitrationtree,bat),首次提出了两个规则,分别为基于特征值的分组规则和碰撞比特位规则,进一步减少了空闲时隙的数量,在一定程度上提高了系统吞吐量,但同时由于分组查询指令的发送,也引入了许多碰撞时隙。

因此,如何提供一种依据每次查询中的碰撞因子的大小自适应选择分叉机制进行下一步的查询,完全避免空闲时隙的产生,并可减少总的查询时隙数,提高系统吞吐量的基于碰撞因子的自适应分叉查询树多标签防碰撞方法是本领域技术人员亟需解决的问题。



技术实现要素:

有鉴于此,本发明提供了一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法,依据每次查询中的碰撞因子的大小自适应选择分叉机制进行下一步的查询,完全避免了空闲时隙的产生,同时也减少了总的查询时隙数,提高了系统吞吐量。

为了实现上述目的,本发明采用如下技术方案:

一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法,其特征在于,具体步骤如下:

s1:阅读器初始化查询堆栈,将其置空;

s2:阅读器发送查询前缀为ε的查询指令request,处于该阅读器工作范围内全部标签响应,并将自身id信息发送给阅读器;

s3:阅读器接收相应的标签id信息,利用曼彻斯特编码的特性,对接收到的信息进行解码,得到所有的碰撞位,确定发生碰撞的比特位数及具体位置,根据碰撞因子σ选择自适应分叉规则;

s4:判断堆栈是否为空,若不为空,则从栈顶弹出新的查询前缀,阅读器发送查询前缀为pre的查询指令request,查询过程转到s3;若为空,则查询结束。

通过上述技术方案,本发明的技术效果:阅读器对存在其工作范围内的全部标签发送请求指令,前缀与查询指令中pre相同的标签响应,阅读器根据译码结果判断发生碰撞的比特位数,并计算碰撞因子σ,根据碰撞因子σ的大小对标签数量进行估计,自适应的选择分叉方式。若碰撞因子则采用二叉树搜索方式进行下一步的查询;若碰撞因子采用碰撞前缀编码转换的方法,对前缀进行精确的预测。本发明能够完全避免空闲时隙的发生,同时减少标签识别的总时隙数,提高系统的吞吐量以及时隙的利用率。

优选的,在上述的一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法,所述s3中针对发生碰撞的比特位数的不同分为情况:

(1)若没有标签响应,则证明阅读器的工作范围内没有任何标签存在,查询过程转到s4;

(2)若经过曼彻斯特解码后没有碰撞位产生,则证明阅读器工作范围内只存在一个标签,阅读器分别发送select和read-data指令,对某一id的标签进行读写操作,然后发送silence指令,将该标签置于静默状态,查询过程转到s4;

(3)若经过曼彻斯特解码后有碰撞位产生,则计算碰撞因子σ,根据碰撞因子σ的大小估计当前分支存在的待识别标签的数量,然后按照自适应分叉规则产生新的查询前缀,依次放入堆栈中等待查询,转到s4。

通过上述技术方案,本发明的技术效果:依据所估计的标签数量,选择合适的分叉规则,对查询树的节点进行自适应的分叉。若标签数量较多,则采用碰撞前缀编码转换的无空闲时隙的四叉树搜索方式进行查询,反之,则采用二叉树搜索方式进行查询。

优选的,在上述的一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法,所述指令包括:

request:阅读器请求指令;查询前缀为pre,当阅读器向存在其工作范围内的标签发送这个指令时,前缀与pre相同的标签响应,并将自身除pre外余下的id部分发送给阅读器;算法初始时,阅读器发送的指令带有查询前缀ε的查询指令request,即存在于阅读器工作范围内的标签全部响应;

prequest:前缀预测编码转换指令;查询前缀为pre,当阅读器发送这条指令时,前缀与pre相同的标签将自身pre后的两位进行编码转换,并返回4位二进制比特串;

push:读写指令;将pre作为新的查询前缀压入堆栈;等待阅读器指令出栈;

select:选择指令;通过发送该指令选择符合某一id的标签;

read-data:读取指令;阅读器向待识别的标签发送此指令,读取标签id;

silence:静默指令;当标签id被识别后,阅读器发送此指令,使标签处于静默状态;

||:连接指令;将前后两组数据连成一个字符串。

通过上述技术方案,本发明的技术效果:指令的定义为整体技术方案的实施提供基础,进一步减少标签识别的总时隙数,提高系统的吞吐量以及时隙的利用率。

优选的,在上述的一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法,所述碰撞因子σ定义为在一次查询过程中,做出响应的标签所回传的信息中发生碰撞的比特位数与标签id比特长度的比值;在一个rfid系统中,存在一个阅读器,同时在其工作范围内有n个待识别标签,每个标签的id长度均为m,令ncol为发生碰撞的比特位数,则全部标签id的每一个比特位均不发生碰撞的概率为

存在碰撞比特位的概率为

p(ncol≥1)=1-(1/2)n-1

碰撞因子σ表示为

优选的,在上述的一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法,所述待识别标签的识别概率当查询深度为1时,所述标签的识别概率为

p(n,1)=(1-1/l)n-1

当查询深度为k时,所述标签的识别概率为

p(n,k)=p(n,1)[1-p(n,1)]k-1

当0<1-p(n,1)<1,整理得搜索深度的均值为

由此得所需的平均时隙数为

t=e(n,k)l=l/{(1-1/l)n-1}

l表示采用l进制的分叉方式,l为2、4、6……。

当l=2时,即采用二叉树搜索时,所需平均时隙为

t2=2/{(1-1/2)n-1}

当l=4时,即采用四叉树搜索时,所需平均时隙为

t4=4/{(1-1/4)n-1}

通过比较二叉树和四叉树搜索所需的平均时隙,可以看出,当n>3时,采用四叉树查询比二叉树查询更优;反之,当n<3时,采用二叉树查询优于四叉树查询。因而,n=3是选择二叉树还是四叉树搜索的决定性参数,当n=3时,碰撞因子为

所以,通过比较每一次查询中的碰撞因子与的大小,依据自适应分叉规则,从而选择最优的分叉方式,使算法变得更加灵活可靠,减少碰撞时隙的数量。

优选的,在上述的一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法,所述s3中所述自适应分叉规则包括:

(1)当碰撞因子时,阅读器发送碰撞前缀编码转换指令request,前缀与pre相同的标签将pre后的两位进行二-十进制转换,分别得到相应的十进制数k,同时符合查询条件的标签将发送长度为2^2个比特位,即4位二进制比特串,标签根据所得到的十进制数k,置比特串的第k位为1,其余位为0,并将其发送给阅读器;4位二进制比特串从右到左是从第0位到第3位,具体编码转换规则如表1所示;阅读器接收到符合查询条件的全部标签返回的信息后,经过曼彻斯特解码后,得到发生碰撞的具体位置,然后进行十-二进制转换,得到当前查询发生碰撞的两个比特位全部的组合方式,然后分别将其与原有查询前缀组合,将新产生的查询前缀依次放入堆栈中,等待查询;

表1

(2)若在一次查询过程中,阅读器通过曼彻斯特解码后,求得的碰撞因子则采用二叉树搜索方式,置碰撞位为0和1,然后与原有前缀分别结合,新产生的查询前缀截止到当前查询的下一个碰撞位的前一位。最后将新产生的查询前缀分别放入堆栈,等待查询。

通过上述技术方案,本发明的技术效果:所述自适应分叉规则(1)采用四进制查询相比于二进制查询可以减少大量的碰撞时隙的数量,但在同时也增加了许多空闲时隙的数量。为了避免不必要的空闲时隙的产生,采用碰撞前缀编码转换的方法,对前缀进行精确的预测。

经由上述的技术方案可知,与现有技术相比,本发明公开提供了一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法,首先,在每一次查询过程中,通过计算碰撞因子来对当前查询树的一个分支里标签数量进行估计;然后,依据所估计的标签数量,选择合适的分叉规则,对查询树的节点进行自适应的分叉。若标签数量较多,则采用碰撞前缀编码转换的无空闲时隙的四叉树搜索方式进行查询,反之,则采用二叉树搜索方式进行查询。该协议能够减少rfid系统标签识别的总时隙数,提高吞吐量以及时隙利用率,完全避免空闲时隙的产生,显著提高系统识别效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1附图为本发明的流程图;

图2为本发明实施例的rfid系统标签识别的查询树结构图;

图3为本发明与其他几种算法比较的系统吞吐量仿真图。

具体实施方式

下面将结合本发明实施例中的附图1-3,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

如图1所示,本发明实施例提供了一种基于碰撞因子的自适应分叉查询树多标签防碰撞方法,该方法的步骤具体包括:

步骤1:阅读器初始化查询堆栈,将其置空。

步骤2:阅读器发送查询前缀为ε的查询指令request,处于该阅读器工作范围内全部标签响应,响应标签并将自身id信息回传给阅读器。

步骤3:阅读器接收相关标签id信息,通过曼彻斯特码对接收到的信息进行解码,检测出所有的碰撞位,确定发生碰撞的比特位数及具体位置。针对发生碰撞的比特位数可分为如下几种情况:

(1)若没有标签响应,则证明阅读器的工作范围内没有任何标签存在,查询过程结束;

(2)若经过曼彻斯特解码后没有碰撞位产生,则证明阅读器工作范围内只存在一个标签,阅读器分别发送select和read-data指令,对该标签id进行读写操作,然后发送silence指令,使该标签处于静默状态,不再参与接下来的查询过程,然后转到步骤4;

(3)若经过曼彻斯特解码后有碰撞位产生,则计算碰撞因子σ,根据σ的大小估计当前分支存在的待识别标签的数量,然后按照自适应分叉规则产生新的查询前缀,此时共存在两种可能:若则采用自适应分叉规则(1)——碰撞前缀编码转换的方法,对前缀进行精确的预测;若则采用自适应分叉规则(2)——二叉树搜索方式进行下一步的查询。然后将原有前缀和两个碰撞位的几种可能的组合方式组合,新产生的查询前缀截止到下一个碰撞位的前一位,然后将它们依次放入堆栈中等待查询,转到步骤4。

步骤4:判断堆栈是否为空,若不为空,则从栈顶弹出新的查询前缀,阅读器发送查询前缀为pre的查询指令request,查询过程转到步骤3;若为空,则查询结束。

通过对几种算法的系统吞吐量的仿真对比,如图2所示,可以看出,caqt协议可以明显提高系统的吞吐量,同时相比于ams算法具有更好的稳定性,且比ams算法吞吐量高11.6%。同时,caqt协议的吞吐量高于qt算法的吞吐量65.7%,远远优于qt算法。

下面通过一个具体的实施例对本发明进行进一步说明。

假设rfid系统中存在一个阅读器和五个待识别的标签,taga(0010)、tagb(0100)、tagc(0110)、tagd(1001)和tage(1000),而且全部标签都存在于该阅读器的工作范围内。表3和图3所示分别为该协议下五个标签识别的过程以及查询树结构图。

表3标签识别通信过程

实施例的具体过程叙述如下:

步骤1:阅读器初始化查询堆栈,将其置空。阅读器发送查询前缀为ε的查询指令request,处于该阅读器工作范围内全部标签响应,并将自身id信息回传给阅读器。阅读器经过曼彻斯特解码后得到xxxx,此时可求得碰撞因子σ=1>3/4,因而采用碰撞前缀编码转换的方法对标签进行下一步的查询;

步骤2:阅读器发送查询前缀为ε的前缀预测编码转换指令prequest,全部标签响应,每个标签将自身id的前两位进行二-十进制转换,分别得到十进制数0、1和2,然后分别将四位二进制数比特串的第0位、第1位和第2位置1,其余为置0,即得到0001、0010和0100,并发送给阅读器,阅读器收到信息后经解码,得到0xxx,然后进行十-二进制转换,得到00、01和10,即得到当前查询所有存在的前缀组合方式,并将新产生的三种查询前缀放入堆栈中,等待查询;

步骤3:位于栈顶的查询前缀出栈,阅读器发送查询前缀为00的查询指令request,由于taga的前缀与00相同,因而只有该标签做出响应,并将自身id除00外其余部分,即10,发送给阅读器,由于无碰撞位产生,所以taga被成功识别,阅读器发送标签id为0010的选择指令select和read-data对此标签进行读写操作,然后发送science指令,令其处于静默状态;

步骤4:阅读器发送查询前缀为01的指令request,tagb和tagc响应,分别发送00和10给阅读器,阅读器解码后得到的x0,可求得碰撞因子为σ=1/4=<3/4,因而采用二叉树查询方式,分别置碰撞位为0和1,然后阅读器发送push,查询前缀分别为01||00,01||10,将两个新的查询前缀放入堆栈中,等待查询;

步骤5:阅读器依次发送查询前缀为0100和0110的查询指令request,tagb和tagc分别被成功识别;

步骤6:阅读器发送查询前缀为01的查询指令request,tagd和tage响应,分别发送00和01给阅读器,阅读器解码后得到的0x,可求得碰撞因子为σ=1/4=<3/4,因而采用二叉树查询方式,分别置碰撞位为0和1,然后阅读器发送push,查询前缀分别为10||00,10||01,将两个新的查询前缀放入堆栈中,等待查询;

步骤7:阅读器依次发送查询前缀为1000和1001的查询指令request,tage和tagd分别被成功识别,堆栈为空,查询结束。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1