二,改进的二进制搜索算法
2.1算法约定
鉴于BS算法的缺点,本文提出了一种改进的二进制搜索算法,算法约定如下:
(1)采用曼彻斯特编码的电子标签序列号每个比特位上的取值不是“0”就是“1”。因此,如果当读写器探测到仅有一位碰撞位时,读写器不需要发送请求命令,可以直接识别出2个标签。
(2)读写器如果检测到有N个碰撞位,则说明这N个碰撞位的比特位对读写器来说是未知的,而其他的比特位对读写器来说是已知的。因此读写器只需要对未知的碰撞位处理,而不需要传输那些已知的比特位,从而减少传输时延。
为了便于描述以及实现该算法,给出如下防碰撞命令:
①查询命令request(DX,MX;DX1,MX1)。参数DX、DX1分别为检测到碰撞位的最高位和次高位,参数MX、MX1为0、1的二维排列组合,例如检测到1?1?00?1,那么读写器发送request(D6,0;D4,0)符合条件的标签响应并返回冲突位及相关信息。
②退出选择命令unselect.取消事先选中的电子标签,使标签进入“无声”状态。在这种状态下标签完全是非激活的,对收到的request命令不做应答。为了重新激活标签,必须暂时离开读写器的作用范围,然后再次进入该读写器范围。
2.2算法原理
下面以读写器作用范围内的8个编码为8bit的标签为例说明该算法,8个标签的编码如下:tag1:01001000,tag2:01010100,tag3:01011010,tag4:01000000,tag5:01000010,
tag6:01010000,tag7:01001010,tag8:01011000.
(1)request≤11111111命令,读写器作用范围内的所有标签应答,读写器译码的结果为010????0碰撞位为D4,D3,D2,D1,最高碰撞位为D4,次高碰撞位为D3,因此下次查询命令为request(D4,0;D3,0)。
(2)读写器发送查询命令request(D4,0;D3,0),标签通过比较各自的D4、D3位,与之相同的标签则发送自己的相关信息给读写器。通过比较后标签4和标签5响应,编码后得到010000?0,读写器检测到仅只有一位碰撞,可以直接识别出标签4和标签5.读写器正确识别它们之后,执行unselect命令,使标签4和标签5处于“无声”状态。
(3)读写器发送查询命令request(D4,0;D3,1),标签1和标签7响应,编码后得到010010?0,读写器检测到仅只有一位碰撞,可以直接识别出标签1和标签7.读写器正确识别它们之后,执行unselect命令,使标签1和标签7处于“无声”状态。
(4)读写器发送查询命令request(D4,1;D3,0),标签2和标签6响应,编码后得到01010?00,读写器检测到仅只有一位碰撞,可以直接识别出标签2和标签6.读写器正确识别它们之后,执行unselect命令,使标签1和标签7处于“无声”状态。
(5)读写器发送查询命令request(D4,1;D3,1),标签3和标签8响应,编码后得到010110?0,读写器检测到仅只有一位碰撞,可以直接识别出标签3和标签8.读写器正确识别它们之后,执行unselect命令,使标签1和标签7处于“无声”状态。至此,读写器作用范围内的所有标签都别正确识别完毕。算法流程如图1所示。
四,算法性能比较
假设读写器作用范围内有N个电子标签,则BS算法完成所有标签识别的搜索命令次数S(N)为:
通过理论和仿真比较,采用改进后的二进制搜索算法较其他两个算法有三个方面的优势:其一减少了查询标签次数,使计算时间减小;其二减少了系统数据传输量,提高了标签的识别速率;其三较大地提高了系统的吞吐率。
本文对BS算法及DBS算法过程进行了分析,找出了其中的不足之处,在此基础上提出了一种改进的二进制搜索算法,并通过Matlab仿真得到该算法的查询次数和吞吐率方面的数据。通过实验数据表明,该改进算法可以减少系统的查询次数,提高系统的吞吐率。从而验证了该改进算法的优越性