一种基于搜索树的双时隙RFID防碰撞算法的制作方法

文档序号:15217013发布日期:2018-08-21 16:58阅读:263来源:国知局

本发明涉及rfid防碰撞算法相关领域,具体讲是一种基于搜索树的双时隙rfid防碰撞算法。



背景技术:

rfid技术即无线射频识别技术,通常由阅读器、标签和数据系统组成,由于其非接触、自动识别、穿透性强等优点,被广泛应用于医疗、交通、物流、电力等各个行业。阅读器作用范围内通常有多个标签,由于所有标签使用同一信道,当多个标签同时向阅读器发送数据时,就会相互干扰,造成阅读器无法读取数据,这就是rfid的碰撞问题。

现有rfid防碰撞算法

(1)纯aloha算法:纯aloha算法是一种比较简单的随机时分多址防碰撞算法,标签在一个周期性的循环中不断向阅读器发送数据,标签发送数据的时间只是重复时间的一小部分,其发送数据的时间是随机的,当一个标签发送数据时,如果另一个标签也在发送数据,就会发生碰撞,纯aloha算法在发送数据的过程中碰撞的概率比较大。

帧时隙aloha算法是在纯aloha算法基础上的改进算法,在时间上分成多个离散时隙,把多个时隙组成一帧,标签在每个帧内随机选择一个时隙发送数据,帧时隙aloha算法避免了纯aloha算法部分数据碰撞的情况,吞吐率提高了一倍。

在帧时隙aloha算法中,帧的长度是固定的,当标签数量远大于帧长度时,会导致碰撞时隙过多,当标签数量远小于帧长度时,会导致空闲时隙过多,动态帧时隙aloha算法对此作了改进,在标签的搜索过程中,动态调整帧的长度,以提高搜索效率。

aloha算法是一种概率算法,存在空闲时隙,识别效率不高,在不知道标签数量情况下,不能保证所有标签都能够被有效识别。

(2)二进制搜索防碰撞算法:

(2.1)基本二进制搜索算法:基本二进制搜索算法需要准确的检测碰撞位,这需要对标签数据进行特殊的编码,通常是通过曼彻斯特编码来实现,同时要确保多个标签同步向阅读器发送数据。在基本二进制搜索算法中,阅读器根据接收数据的碰撞位位置来确定发送命令序列号,各标签把自身的id号和阅读器发送的命令序列号进行比较,如果小于或等于序列号,就发送id数据给阅读器,否则就不响应阅读器命令,当识别出一个标签后,又重头开始搜索,直到识别出所有标签。

假设有n个标签,基本二进制搜索算法识别一个标签的搜索次数为

识别所有标签的搜索次数为:

(2.2)动态二进制搜索算法:基本二进制搜索算法在搜索过程中,阅读器的发送命令参数中,最高碰撞位以后的比特位都置‘1’,这部分信息对标签来说是已知的;标签总是返回完整的序列号,最高碰撞位以前的比特位对于阅读器来说也是已知的,标签和阅读器都重复发送了多余信息,动态二进制对此作了改进,阅读器只发送最高碰撞位及以前的比特位,标签只发送最高碰撞位以后的比特位,这样,传输的数据量减少了一半,在iso/iec1443a标准中,动态二进制搜索算法为推荐的防碰撞算法。动态二进制搜索算法的搜索次数与基本二进制搜索算法相同。

(2.3)后退式动态二进制防碰撞算法:由于本文算法和后退式动态二进制防碰撞算法作了仿真对比,所以有必要介绍下后退式动态二进制防碰撞算法,这是一种应用很广的一种算法,很多防碰撞算法都是以此为基础的改进算法。动态二进制搜索算法有效的减少了数据通信量,但是搜索次数没有减少,对此,后退式动态二进制防碰撞算法作了改进,当识别出一个标签后,不是重头开始搜索,而是返回上一个碰撞节点往下搜索,这种使用后退策略的方式减少了搜索次数。

后退式动态二进制防碰撞算法的搜索次数为:l(n)=2n-1。

rfid的防碰撞算法可分为确定性算法和不确定性算法两种。不确定性算法主要是基于aloha的算法,在基本aloha算法的基础上,又产生了时隙aloha算法,帧时隙aloha算法、动态帧时隙aloha算法等,这类算法识别效率低,部分标签可能在较长时间不能被识别,即产生标签“饥饿”问题,导致整个系统的信道利用率降低、可靠性降低;确定性算法主要是基于二进制搜索树的算法,在基本二进制搜索算法的基础上,又产生了动态二进制搜索算法、后退式二进制搜索算法等,确定性算法不存在“饥饿”问题,没有错误判决,但系统通信量大,识别时延长,算法较复杂。



技术实现要素:

因此,为了解决上述不足,本发明在此提供一种基于搜索树的双时隙rfid防碰撞算法;本算法属于确定性算法,但引入了aloha算法中的时隙思想,综合二者的优点,减少了阅读器和标签间的数据通信量,减少了搜索次数,提高了搜索效率。

在rfid多标签应用中,标签碰撞问题严重影响了rfid系统的性能。传统的rfid算法存在标签搜索次数多、识别时间长等问题。为此,在搜索树算法的基础上引入时隙的思想,提出了一种新的防碰撞算法:基于搜索树的双时隙防碰撞算法。该算法利用阅读器堆栈形成进一步搜索命令;响应标签分为两个子集,并分别在两个时隙发送数据信息,一次搜索最多可识别4个标签。理论分析和仿真结果表明:基于搜索树的双时隙防碰撞算法综合了aloha算法和搜索树算法的优点,减少了搜索次数和识别时间,提高了rfid系统的整体性能。

本发明是这样实现的,构造一种基于搜索树的双时隙rfid防碰撞算法,其特征在于:算法流程如下:

(1)阅读器发出请求命令req(nul);

(2)阅读器作用范围内所有标签响应请求命令,序列号最高位为‘0’的标签(子集0)在时隙1发送最高位‘0’以后标签序列号给阅读器;序列号最高位为‘1’的标签(子集1)在时隙2发送最高位‘1’以后标签序列号给阅读器;

(3)阅读器在时隙1接收子集0数据,在时隙2接收子集1数据,如果无碰撞位。则标签被识别,转至步骤(5),如果只有一个碰撞位,则可识别两个标签,转至步骤(5),如果子集0有一个以上的碰撞位,设最高碰撞位为第p位,则搜索命令前缀x为子集0标签序列号n-1~p+1位(对于阅读器来说,子集0标签序列号n-1~p+1位是已知的,方法为:上次阅读器请求命令参数x加‘0’加阅读器接收数据最高碰撞位以前比特位),阅读器发出请求命令req(x);如果子集1有一个以上的碰撞位,设最高碰撞位为第p’位,则搜索命令前缀x’为子集1标签序列号n-1~p’+1位(对于阅读器来说,子集1标签序列号n-1~p+1位是已知的,方法为:上次阅读器请求命令参数x加‘1’加阅读器接收数据最高碰撞位以前比特位),x’存入阅读器堆栈区;

(4)标签接收数据x,设x长度为y比特,则序列号最高y比特与x相同的标签响应命令,在这些标签中,序列号第n-y-1位为‘0’的标签在时隙1返回标签序列号的n-y-2~0位给阅读器;序列号第n-y-1位为‘1’的标签在时隙2返回标签序列号的n-y-2~0位给阅读器;转至步骤(3);

(5)阅读器先后发出select(id)、rw(id)、unselect(id)命令,选中相应标签,并对标签进行数据读写,令标签进入休眠状态,在标签再次被激活之前,标签对阅读器命令不再响应;

(6)阅读器堆栈区弹出数据,设为x’,阅读器发出请求命令req(x’),转至步骤(4);

(7)依此循环,直到所有标签都被识别。

本发明具有如下优点:本发明通过提出了一种新的rfid防碰撞算法:基于搜索树的双时隙rfid防碰撞算法。在算法中,引入aloha算法中时隙的思想,充分利用搜索树算法的确定性和可控性。该算法是确定性算法,完全排除了aloha算法的空闲时隙问题和标签“饥饿”问题,综合了aloha算法和搜索树算法的优点。

阅读器每一次搜索中,把标签分成两个子集,这两个子集在两个时隙分别发送数据,当识别一个标签,再返回上次碰撞位节点继续搜索。当只有一个碰撞位时,直接识别两个标签。

后退式动态二进制搜索算法一次搜索只能识别一个标签,本文算法一次搜索可能识别一个或两个、三个、甚至四个标签。理论分析和仿真表明,本文算法减少了搜索次数、加快了搜索时间,提高了搜索效率。

由于标签的处理能力弱,不适合太复杂的算法,长期以来,rfid工程师都在寻找适合标签实际的防碰撞算法,本文算法易于实现且实用高效,有较大的应用价值和推广价值。

附图说明

图1系统搜索次数曲线;

图2系统搜索时间曲线。

具体实施方式

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

本发明通过改进在此提供一种基于搜索树的双时隙防碰撞算法,具体如下:

如上所述,上面介绍了aloha算法和二进制搜索算法,这两种算法各有优缺点,aloha算法存在误判和“饥饿”问题,二进制搜索算法不存在“饥饿”问题,但搜索时延长,如果把二者的优点结合起来,就可以在保证不误判的情况下提高搜索效率。

1)算法命令:

为了叙述的方便以及便于理解,下面引入几个命令来描述算法。

req(nul):请求命令,所有标签发送数据给阅读器。

req(x):请求命令,x为阅读器搜索标签序列前缀,设x长度为y,则序列号最高y位和x相同的标签返回数据给阅读器。

select(id):选择命令,序列号为id的标签被选中。

rw(id):读写命令,序列号为id的标签被读取数据或写入数据。

unselect(id):休眠命令,序列号为id的标签进入休眠状态。

2)算法原理:阅读器作用范围内响应标签分为两个子集:子集0和子集1。每个标签都有两个时隙:时隙1和时隙2。

阅读器发出搜索命令,子集0在时隙1返回数据,子集1在时隙2返回数据。在每个时隙如果无碰撞位。则标签被识别,如果只有一个碰撞位,则可识别两个标签,如果子集0有一个以上的碰撞位,则把子集0又往下分为子集0和子集1,即子集00和子集01两个子集,阅读器搜索子集00和子集01,子集00在时隙1返回数据,子集01在时隙2返回数据;如果子集1有一个以上的碰撞位,则把子集1又往下分为子集0和子集1,即子集10和子集11两个子集,依次类推。如果有标签被识别,则返回上一个碰撞节点继续搜索,直到识别所有标签。

设标签序列号长度为n位,按位表示为(n-1,n-2,…,0),阅读器设堆栈存储区,用于存放阅读器搜索子集1的命令参数前缀,按先进后出的原则存取数据。

算法流程如下:

(1)阅读器发出请求命令req(nul)。

(2)阅读器作用范围内所有标签响应请求命令,序列号最高位为‘0’的标签(子集0)在时隙1发送最高位‘0’以后标签序列号给阅读器;序列号最高位为‘1’的标签(子集1)在时隙2发送最高位‘1’以后标签序列号给阅读器。

(3)阅读器在时隙1接收子集0数据,在时隙2接收子集1数据,如果无碰撞位。则标签被识别,转至步骤(5),如果只有一个碰撞位,则可识别两个标签,转至步骤(5),如果子集0有一个以上的碰撞位,设最高碰撞位为第p位,则搜索命令前缀x为子集0标签序列号n-1~p+1位(对于阅读器来说,子集0标签序列号n-1~p+1位是已知的,方法为:上次阅读器请求命令参数x加‘0’加阅读器接收数据最高碰撞位以前比特位),阅读器发出请求命令req(x);如果子集1有一个以上的碰撞位,设最高碰撞位为第p’位,则搜索命令前缀x’为子集1标签序列号n-1~p’+1位(对于阅读器来说,子集1标签序列号n-1~p+1位是已知的,方法为:上次阅读器请求命令参数x加‘1’加阅读器接收数据最高碰撞位以前比特位),x’存入阅读器堆栈区。

(4)标签接收数据x,设x长度为y比特,则序列号最高y比特与x相同的标签响应命令,在这些标签中,序列号第n-y-1位为‘0’的标签在时隙1返回标签序列号的n-y-2~0位给阅读器;序列号第n-y-1位为‘1’的标签在时隙2返回标签序列号的n-y-2~0位给阅读器。转至步骤(3)。

(5)阅读器先后发出select(id)、rw(id)、unselect(id)命令,选中相应标签,并对标签进行数据读写,令标签进入休眠状态,在标签再次被激活之前,标签对阅读器命令不再响应。

(6)阅读器堆栈区弹出数据,设为x’,阅读器发出请求命令req(x’),转至步骤(4)。

(7)依此循环,直到所有标签都被识别。

3)算法举例:

假设阅读器作用范围内有8个标签:标签a:1011111001,b:0101010110,c:0010011011,d:1011101001,e:1010101010,f:0010010011,g:0101000110,h:1111010001。搜索树双时隙rfid防碰撞算法

识别过程如表1所示。

表1:搜索树双时隙rfid防碰撞算法识别过程

阅读器具体搜索过程:

(1)阅读器发出请求命令req(nul)。

(2)在时隙1,标签子集0:b、c、f、g发送序列号,阅读器接收数据为:xxx0xxx1x,最高碰撞位为第8位,得到阅读器命令参数x为子集0标签序列号的第9位:‘0’,阅读器发出请求命令:req(0)。在时隙2,标签子集1:a、d、e、h发送序列号,阅读器接收数据为:xxxxxx0xx,最高碰撞位为第8位,得到x’为子集1标签序列号的第9位:‘1’,‘1’存于阅读器堆栈区。

(3)标签收到数据‘0’,序列号最高位为‘0’的标签为子集0:b、c、f、g,这些标签响应阅读器命令,n-y-1=10-1-1=8,序列号第8位为‘0’的标签为:c、f;序列号第8位为‘1’的标签为:b、g。在时隙1,标签c、f发送序列号7~0位,阅读器接收数据为:1001x011,只有一个碰撞位,则识别两个标签:c、f;在时隙2,标签b、g发送序列号7~0位,阅读器接收数据为:010x0110,只有一个碰撞位,则识别两个标签:b、h。

(4)阅读器弹出堆栈数据‘1’,阅读器发出请求命令:req(1)。

(5)标签收到数据‘1’,序列号最高位为‘1’的标签为子集1:a、d、e、h,只有这些标签会响应阅读器命令,n-y-1=10-1-1=8,序列号第8位为‘0’的标签为子集10:a、d、e;序列号第8位为‘1’的标签为子集11:h。在时隙1,标签a、d、e发送序列号7~0位,阅读器接收数据为:1x1xx0xx,最高碰撞位为第6位,子集10序列号9~7位为“101”,阅读器发送请求命令req(101);在时隙2,标签h发送序列号7~0位,阅读器接收数据为:11010001,无碰撞位,则识别标签h。

(6)标签收到数据“101”,序列号最高3位为“101”的标签为子集10:a、d、e,这些标签响应阅读器命令,n-y-1=10-3-1=6,序列号第6位为‘0’的标签为:e;序列号第6位为‘1’的标签为:a、d。在时隙1,标签e发送序列号5~0位给阅读器,阅读器接收数据为:101010,无碰撞位,识别标签:e;在时隙2,标签a、d发送序列号5~0位给阅读器,阅读器接收数据为:1x1001,只有一个碰撞位,则识别两个标签:a、d。

算法性能分析:

本文算法在搜索效率上得到提高,为了便于性能比较,下面把本文算法和后退式动态二进制搜索算法的性能进行比较分析,以下分析都假设标签序列号为n位。

(1)搜索次数分析:

后退式动态二进制搜索算法的搜索次数为:2n-1次。

本文算法中,当阅读器作用范围内标签只有1个时,搜索次数为1次;当标签数量大于1个时,由于每次搜索标签分两个时隙发送,子集0在时隙1发送,子集1在时隙2发送,和后退式动态二进制搜索算法相比,相当于减少了子集1的搜索,故搜索次数为:n-1次。

由于在只有一个碰撞位情况下,直接识别两个标签,进一步减少了搜索次数,假设只有一个碰撞位出现了h次,则本文算法搜索次数为:n-h-1次。

若用q表示本文算法搜索次数和后退式动态二进制搜索算法搜索次数的比值,则:

可见,当标签数量大于1个时,本文算法标签搜索次数和后退式动态二进制搜索算法相比,搜索次数减少了一半以上,如果存在只有一个碰撞位的情况,则本文算法搜索次数更少,搜索效率提高了一倍以上。

(2)通信数据量分析:后退式动态二进制搜索算法搜索一次,阅读器发送的数据和标签发送数据之和为n比特。则总的数据通信量为:(2n-1)n比特。

本文算法每次搜索采用了双时隙发送标签子集0和子集1数据,同时,阅读器已知的最高碰撞位信息,标签不再发送。本文算法每次搜索的数据通信量和最高碰撞位位置有关,假设第n次搜索阅读器的最高碰撞位为第pn位,则阅读器每次搜索过程中,阅读器和标签收发数据之和为:n-1+pn(pn<n)比特。识别所有标签的总数据通信量为:(n-1)(n-h-1)+(p1+p2+…+pn-h-1)比特。

若用u表示本文算法搜索次数和后退式动态二进制搜索算法搜索次数的比值

可见,本文算法标签搜索次数和后退式动态二进制搜索算法相比,数据通信量减少了,如果存在只有一个碰撞位的情况,则本文算法数据通信量更少。

在实际通信中,还存在控制命令本身的开销,如果考虑到这些实际的控制命令开销,由于本文算法搜索次数不到后退式动态二进制搜索算法的一半,相对后退式动态二进制搜索算法,本文算法数据通信量减少的更多。

算法仿真:

假设标签数量为100,标签序列号长度为96bit,每个控制命令头的长度固定为10bit,传输比特率为128kbit/s,10次仿真取平均值,利用matlab对系统搜索次数和搜索时间进行仿真,结果如图1和图2所示。

由图可以看出,两种算法都能正确识别出全部标签,随着标签数量的增多,阅读器搜索标签总的次数和搜索时间都在增多,和后退式动态二进制搜索算法相比,基于搜索树的双时隙防碰撞算法搜索次数更少,搜索时间更快,搜索效率更高,与理论分析大致相同。可见,本文算法优于后退式动态二进制搜索算法。

综上所述:本文提出了一种新的rfid防碰撞算法:基于搜索树的双时隙rfid防碰撞算法。在算法中,引入aloha算法中时隙的思想,充分利用搜索树算法的确定性和可控性。该算法是确定性算法,完全排除了aloha算法的空闲时隙问题和标签“饥饿”问题,综合了aloha算法和搜索树算法的优点。

阅读器每一次搜索中,把标签分成两个子集,这两个子集在两个时隙分别发送数据,当识别一个标签,再返回上次碰撞位节点继续搜索。当只有一个碰撞位时,直接识别两个标签。

后退式动态二进制搜索算法一次搜索只能识别一个标签,本文算法一次搜索可能识别一个或两个、三个、甚至四个标签。理论分析和仿真表明,本文算法减少了搜索次数、加快了搜索时间,提高了搜索效率。

由于标签的处理能力弱,不适合太复杂的算法,长期以来,rfid工程师都在寻找适合标签实际的防碰撞算法,本文算法易于实现且实用高效,有较大的应用价值和推广价值。

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

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