一种改进的后退式动态二进制搜索树方法
技术领域
本发明涉及物联网技术领域,特别涉及一种改进的后退式动态二进制搜索树方法。
背景技术
畜牧业作为中国农业增效、农民增收的重要产业,近年来得到了迅猛的发展,牧场也逐渐向规模化和专业化方向发展。农户、农场主对于牧场大量牲畜的统一管理问题随之而来。随着网络化、数字化的迅捷发展,如何提升畜牧业的生产效率、实现智能化养殖已成为人们广泛关注的研究课题。我国传统的羊群养殖方式较为原始,养殖环境恶劣,尤其是贫困地区的羊群养殖更加缺乏对智能化养殖的认知与使用,因此极大地限制了养殖生产水平的提升。在这样的背景下,将物联网RFID技术引进到羊群养殖产业,实现自动化管理已成为发展必然。
RFID技术作为物联网领域最重要的技术之一,学校、企业的人员和物品管理方面得到了广泛应用。而在牧场等农业领域还没有得到大规模的使用。如果我们把牲畜信息保存在牲畜佩戴的标签中,利用RFID读写器扫描牲畜佩戴的标签能直接获得该牲畜的全部信息,这样就可以极大地提高了养殖户的工作效率。另一方面,由于养殖场内牲畜数量庞大,针对困扰牧场主的牲畜计数问题,也可以利用RFID技术实现。
通过对RFID读写器进行后台开发,实现计数功能,从而做到智能化计数”。然而在读写器对牲畜群进行识别的过程中,由于牲畜内部的无秩序性,不方便管理,很难做到“一对一识别”,并且存在多只牲畜同一时间来到读写器识别区域的问题,多标签碰撞情况很容易出现。
现有的RFID多标签防碰撞算法主要分为两大类:一类是ALOHA类算法,另一类算法是树类算法。
树类算法是一种确定性的算法,与标签的ID相关,读写器发送命令搜索,标签根据命令的参数与自己的ID进行多次比较,判断是否返回相关的数据,这样可以不断缩小响应的标签个数,当有唯一的标签响应时,读写器就可以成功识别标签。现有的基于二进制搜索树的标签防碰撞算法主要包括以下几种:二进制搜索树算法(Binary Search,BS)、动态二进制搜索树算法(Dynamic Binary Search,DBS)与后退式二进制搜索树算法(BackwardBinary Search,BBS)等。
但是,仍存在读写器与标签数据传输过程总通信量高及搜索次数较高的问题,如何解决该问题,是目前同行从业人员亟待解决的问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种改进的后退式动态二进制搜索树方法。
本发明实施例提供一种改进的后退式动态二进制搜索树方法,包括:
(1)读写器给识别范围内的所有标签发送ask(ALL)命令;
(2)标签收到ask(ALL)命令后,将其ID返还给读写器;所述ID由二值0和1组成;
(3)读写器检测标签发来的数据,根据碰撞位的情况确定待发出的指令;所述待发出的指令包括:select/RW(ID)、sleep(ID)和ask(K)指令;所述ask(K)指令为请求指令,当最高碰撞位为第K位,将K值存入读写器堆栈;
(4)当标签收到ask(K)指令后,第K位为0的标签将该位后面的字串发送给读写器;第K位为1的标签进入沉默状态,沉默轮次M值加1,转至步骤(3)继续识别;
(5)当标签被读写器成功识别时,读写器向该标签发送select/RW(ID)命令,将该标签挑选出来,对其进行读/写数据的操作;
(6)读写器从堆栈中弹出数据,设该数据值为P;发送awake(P,M)指令给标签;标签中第P位值为1,且在第M轮被沉默的标签被唤醒,将第P位后面的字串发送给读写器;唤醒命令结束后,M值减1;然后转至步骤(3),继续循环,直至所有标签都被成功识别。
在一个实施例中,步骤(3)读写器检测标签发来的数据,根据碰撞位的情况确定待发出的指令,包括:
(3.1)若读写器没有收到任何信息,表示识别范围内没有待识别标签;
(3.2)若读写器检测到的数据没有发生碰撞,表示一个标签能够被成功识别,转至步骤(5);
(3.3)若读写器仅检测到一位碰撞位,此时两个标签被成功识别,转至步骤(5);
(3.4)若读写器检测到两位及以上的碰撞位,令最高碰撞位为K,并将K值存储进读写器堆栈,然后发送请求命令ask(K)。
在一个实施例中,所述步骤(3.4)还包括:标签收到select/RW(ID)读写器指令后,回复的字串长度的平均值为:
式中,读写器端检测到的碰撞数据包含s(s>1)位碰撞位,标签ID长度为E时,平均每位发生碰撞的概率为s/E。
在一个实施例中,所述步骤(5)还包括:发送sleep(ID)命令使该标签休眠。
与现有技术相比,本发明实施例提供的一种改进的后退式动态二进制搜索树方法,可解决多个标签同时与读写器交换数据引起的碰撞问题,基于改进式后退动态二进制搜索树算法(M-BDBS),是在BBS、DBS算法基础上进行的改进,当碰撞信息中仅有一位碰撞位时,直接识别两个标签;该方法可减少读写器与标签数据传输过程中的总通信量;并减少算法的搜索次数,提高系统吞吐率。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例提供的改进的后退式动态二进制搜索树方法流程图。
图2为本发明实施例提供的M-BDBS算法流程图。
图3为本发明实施例提供的三种算法的吞吐率与标签数目关系比较示意图。
图4为本发明实施例提供的M-BDBS算法的系统通信量与标签数目关系示意图。
图5为本发明实施例提供的两种算法的系统通信量与标签数目关系比较示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1所示,本发明实施例提供的一种改进的后退式动态二进制搜索树方法,包括:
(1)读写器给识别范围内的所有标签发送ask(ALL)命令;
(2)标签收到ask(ALL)命令后,将其ID返还给读写器;所述ID由二值0和1组成;
(3)读写器检测标签发来的数据,根据碰撞位的情况确定待发出的指令;所述待发出的指令包括:select/RW(ID)、sleep(ID)和ask(K)指令;所述ask(K)指令为请求指令,当最高碰撞位为第K位,将K值存入读写器堆栈;
(4)当标签收到ask(K)指令后,第K位为0的标签将该位后面的字串发送给读写器;第K位为1的标签进入沉默状态,沉默轮次M值加1,转至步骤(3)继续识别;
(5)当标签被读写器成功识别时,读写器向该标签发送select/RW(ID)命令,将该标签挑选出来,对其进行读/写数据的操作;
(6)读写器从堆栈中弹出数据,设该数据值为P;发送awake(P,M)指令给标签;标签中第P位值为1,且在第M轮被沉默的标签被唤醒,将第P位后面的字串发送给读写器;唤醒命令结束后,M值减1;然后转至步骤(3),继续循环,直至所有标签都被成功识别。
本实施例中,当多头牲畜进入到读写器的识别区域内时,该读写器给识别范围内的所有标签发送ask(ALL)命令;该多头牲畜佩戴的标签收到ask(ALL)命令后,将其ID返还给读写器;其中该ID由二值0和1组成;比如为:11011011、11000110。该方法是在BBS、DBS算法基础上进行的改进,当碰撞信息中仅有一位碰撞位时,可以直接识别两个标签;该方法可减少读写器与标签数据传输过程中的总通信量;并减少算法的搜索次数,提高系统吞吐率。
M-BDBS算法中的标签存在三种状态:标准态、沉默态与休眠态。标准态是标签的正常状态,能够响应读写器发来的所有指令。读写器按照二叉树的查询方式向标签发送指令,标签根据读写器的指令分成左节点、右节点两个集合,小于查询指令的标签被分进左节点集合,大于该指令的标签分入右节点集合。左节点集合的标签继续向下分叉,右节点集合内的标签进入沉默状态。沉默态的标签暂时停止信息传输,直到收到相应的唤醒指令时才恢复标准状态,重新响应读写器的其他指令信息。为了区别在不同节点被沉默的标签,顺利执行算法的后退策略,为沉默态的标签设置沉默轮次M,M的初始值设为0。二叉树从根节点自上而下分层,M的值逐层递增。第一层被沉默的标签M值为1,第二层被沉默的标签M值为2,后面同理。读写器根据M的值选择要唤醒的标签并发送唤醒指令。
当读写器成功识别一个标签后,该标签立即进入休眠状态,休眠态的标签不再参与后续的识别过程。为了节省信息传输过程中的通信数据量,M-BDBS算法摒弃了原有算法中,读写器的查询指令为标签ID一部分的形式,采用了仅占1-2位的request指令。读写器内部还设置堆栈,符合“先入后出”的原则。假设标签ID长度为E,M-BDBS算法中读写器发送的命令主要包含以下几种:
(1)ask(ALL):请求命令。读写器给识别范围内的所有标签发送该命令,
标签将ID信息返还给读写器;
(2)ask(K):请求命令。读写器收到标签的ID信息后,检测碰撞位信息。
假设最高碰撞位为第K位,将K值存入读写器堆栈。最高碰撞位,即第K位为0的标签,将该位后面的字串发送给读写器。第K位为1的标签进入沉默状态,沉默轮次为M+1(M初始值为0);
(3)awake(P,M):唤醒命令。读写器从堆栈中弹出数据,设该数据值为P。标签中第P位值为1,且在第M轮沉默的标签被唤醒,将第P位后面的字串发送给读写器。唤醒命令结束后,M值减1;
(4)select/RW(ID):挑选、读和写命令。读写器将被成功识别的标签挑选出来,并对标签进行读、写等操作;
(5)sleep(ID):休眠命令。收到该指令后,标签立即进入休眠状态,不再参与后续识别过程。
参照图2所示,为本实施例提供的M-BDBS算法流程图。
其中:M-BDBS算法的执行过程如下:
(1)读写器给识别范围内的所有标签发送ask(ALL)命令;
(2)标签收到ask(ALL)命令后,将其ID返还给读写器;
(3)读写器检测标签发来的数据,根据碰撞位的情况决定下一步指令。若读写器没有收到任何信息,说明其范围内没有待识别标签;若读写器检测到的数据没有发生碰撞,说明一个标签能够被成功识别,转至步骤(5);若读写器仅检测到一位碰撞位,此时两个标签被成功识别,转至步骤(5);若读写器检测到两位及以上的碰撞位,令最高碰撞位为K,并将K值存储进读写器堆栈,然后发送请求命令ask(K);
(4)标签收到ask(K)指令后,第K位为0的标签将该位后面的字串发送给读写器。第K位为1的标签进入沉默状态,沉默轮次M值加1,此时被沉默的标签属于第M轮沉默标签。然后转至步骤(3)继续识别;
(5)当标签被读写器成功识别时,读写器向该标签发送select/RW(ID)命令,先将标签挑选出来,然后对其进行读/写数据的操作。最后发送sleep(ID)命令使该标签休眠,休眠标签不再参与后续识别过程;
(6)读写器从堆栈中弹出数据,设该数据值为P。然后发送awake(P,M)指令给标签。标签中第P位值为1,且在第M轮被沉默的标签被唤醒,将第P位后面的字串发送给读写器。唤醒命令结束后,M值减1。然后转至步骤(3),继续循环,直至所有标签都被成功识别。
补充说明:
(1)当请求命令是ask(ALL)时,读写器将标签发送过来的信息直接存到读写器的存储区域;
(2)当请求命令是ask(K)时,由于最高碰撞位前的字串信息已被读写器存储区域存储下来了,这部分字串加上第K位的“0”,以及标签收到该指令后回复的后半段字串,一起被存放进读写器的存储区域,构成完整的标签ID;
(3)当请求命令是awake(P,M)时,读写器存储区域中存储的最高碰撞位前面的字串,加上第P位的“1”,以及标签收到该指令后回复给读写器的后半段字串,一起被存放进读写器的存储区域,构成完整的标签ID;
(4)读写器收到标签发来的数据后,若没有检测到碰撞位,说明没有发生碰撞,此时一个标签被成功识别。若读写器仅检测到一位碰撞位,由于造成该位发生碰撞的数据只能为“0”和“1”,所以碰撞的两个标签必定是一个该位为0,一个该位为1,其余位的数据均相同。假设读写器检测到的碰撞位信息为:11011X00,那么发生碰撞的两个标签ID只能是11011100和11011000。因此,当读写器仅检测到一位碰撞位时,两个标签被成功识别。
对M-BDBS算法的性能分析主要从两个方面展开:系统的吞吐率以及传输过程中的总通信量。下面分别从这两个方面对算法的性能进行分析。
1.系统吞吐率
M-BDBS算法是在基本二进制搜索树算法的基础上进行的改进,因此改进算法吞吐率的计算方式与BS算法类似,即S=N/Q,其中N为待识别的标签总数,Q为算法的查询次数。
通过对改进算法的流程分析可知,当读写器端检测到的碰撞信息中只包含一位碰撞位时,读写器进入直接识别模式,两个标签被成功识别。当读写器覆盖范围内有大量标签等待识别,识别任务比较繁重时,出现碰撞位仅有一位的情况的概率会显著增大,此时利用M-BDBS算法进行标签识别会大大减少读写器的查询次数,从而提升系统的吞吐率指标。
由于M-BDBS算法采用了BBS算法的后退策略,因此改进算法查询次数的计算方式如下:
QN-BDBS=2N-1-2H (1)
其中N为读写器范围内待识别的标签数量,H为识别过程中仅有一位碰撞位的发生次数。
系统的吞吐率为:
如图3为M-BDBS算法与现有几种二进制搜索树算法的吞吐率关系比较。M-BDBS算法中,由于仅有一位碰撞位时能直接识别出两个标签,精简了一部分查询过程,因此算法的吞吐率在BBS算法的基础上得到了提升,维持在0.6以上。又因为出现一位碰撞位的次数是随机的,即公式(2)中的H值不是定值,因此图3中M-BDBS算法吞吐率与标签数目的关系图是一个波动的曲线。
2.通信量
通过对现有几种算法的流程分析可知,BS、DBS和BBS算法中读写器查询命令的长度等于标签全部或部分ID字串的长度,占用了信息传输过程中的大部分信道容量。本文的提出的M-BDBS算法针对这一问题进行了改进,读写器的查询指令ask(K)和awake(P,M)中仅显示碰撞位置以及从堆栈弹出的信息,不再包括标签ID字串信息,因此缩减了传输过程中近半的通信量。
M-BDBS算法在信息传输过程中的通信数据包括以下几个部分:读写器发送的ask(ALL)指令以及标签返回的长度为E的ID信息;读写器发送的ask(K)、awake(P,M)指令;标签收到查询指令后返回的字串信息。由于标签返回给读写器的字串数据屏蔽掉了读写器已知的部分,故每次返回的字串长度是不定的,因此只能对改进算法的通信数据量进行估算。
假设读写器端检测到的碰撞数据包含s(s>1)位碰撞位,当标签ID长度为E时,平均每位发生碰撞的概率为s/E。当最高碰撞位为第(E-1)位时,标签回复给读写器的字串长度为(E-1);当最高碰撞位为第(E-2)位时,标签回复的字串长度为(E-2)……当最高碰撞位为第1位时,标签回复的字串长度为1;当最高碰撞位为第0位时,此时只有一位碰撞位存在,读写器直接识别两个标签。据此,可以求得标签收到读写器指令后,回复的字串长度的平均值为:
假设ask(ALL)、ask(K)、awake(P,M)指令的长度分别为1、1、2,结合公式(3),可以求得M-BDBS算法的通信量为:
根据公式(4)可以看出,M-BDBS算法在数据传输过程中的通信量并非确定值,而是由标签每次回复给读写器的数据长度以及仅有一位碰撞位出现的次数H决定的。当标签ID的长度较长时,改进算法读写器的查询指令所占的通信容量几乎可以忽略不计。图4为M-BDBS算法系统通信量与标签数目的关系图,标签ID长度取96比特。由于H为随机值,因此系统的通信量是一条随标签数目增大而增大的波动曲线。
参照图5所示,为M-BDBS算法与BBS算法的通信量与标签数目的关系比较示意图。相比于通信量较少的BBS算法,改进算法还可以节省一半以上的通信量,且二者间的差距随标签数目的增大而增大。因此,M-BDBS算法在减少系统通信量方面具有明显优势。
下面通过一个具体实施例对本发明的技术方案进行详细说明:
比如进入识别范围内有四头牲畜,其中标签分别为A(01001100)、B(01010101)、C(01001011)与D(01001110)。利用M-BDBS算法识别这四个标签的流程如下:
(1)读写器发送请求命令ask(ALL),所有标签回复ID信息;
(2)读写器端检测并存进存储区域的碰撞信息为:010XXXXX,最高碰撞位K=4。读写器将K的值存进堆栈,然后发送请求命令ask(4)。最高碰撞位,即第4位是“0”的标签有tagA,C和D,这三个标签将第四位后面的字串返回给读写器。此时最高碰撞位为“1”的tag B被沉默,沉默轮次M的值为1(M始值为0),即tag B为第1轮被沉默的标签;
(3)读写器端检测到的碰撞信息为:1XXX,最高碰撞位K=2。读写器将K=2存进堆栈,并将01001XXX存进存储区域,然后发送请求命令ask(2)。第二位是0的标签为tag C,将第二位后面的字串“11”发送给读写器。第二位是1的两个标签——tag A,D被沉默,沉默轮次M=2,即tagA,D为第2轮被沉默的标签;
(4)读写器端检测到的信息为:11,未发生碰撞。此时读写器在存储区域寻找到最高碰撞位为第二位的碰撞信息:01001XXX,将第二位前的字串“01001”,第二位的“0”,以及tag C返回的第二位后面的字串“11”加在一起,得到tag C的ID全部信息:01001011;
(5)成功识别tag C后,读写器从堆栈中弹出数据2,然后发送请求信息awake(2,2),对第二轮被沉默的tag A和D进行唤醒操作。tag A和D接到唤醒指令后,将第二位后面的字串返还给读写器,然后将M值减1变为1;
(6)读写器端检测到数据“X0”,仅有一位碰撞位,此时两个标签被成功识别。读写器将存储区域存储的第2位前的字串“01001”,第二位的“1”,以及标签返回的后两位字串信息加在一起,得到tag A和D的ID信息:01001100,01001110;
(7)读写器从堆栈中弹出数据4,然后发送请求信息awake(4,1),对第一轮被沉默的tag B进行唤醒操作。tag B收到唤醒指令后,将第4位后的字串返还给读写器,然后M值减1变为0;
(8)读写器端检测到数据“0101”,未发生碰撞,一个标签被成功识别。读写器在存储区域找到最高碰撞位为第4位的信息:0101XXXX,加上第4位的“1”,以及标签返回的信息“0101”,得到tag B的ID全部信息:01010101。至此,tag A,B,C和D均被成功识别。具体的识别过程如表1所示。
表1 MBDBS算法示例
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。