一种基于位屏蔽的RFID碰撞位编码防碰撞方法
文献发布时间:2023-06-19 09:55:50
技术领域
本发明属于RFID系统防碰撞技术领域,具体涉及一种基于位屏蔽的RFID碰撞位编码(Bit-shield Collision-bits Coding,BCC)防碰撞方法。
背景技术
射频识别(Radio Frequency Identification,RFID)是一种非接触自动识别技术,由于它的低成本、快速识别、环境适应性强等优点,广泛应用于物流、销售交通、教育和医疗等领域,典型的RFID系统通常由多个电子标签和一个阅读器组成,当多个标签同时向阅读器发送数据,就会相互干扰,这就是标签的碰撞问题,常用的防碰撞算法可以分为两类:基于ALOHA协议的随机算法和基于树形搜索的确定算法,树形搜索算法又包括二叉树搜索算法、多叉树搜索算法和混合算法。
二叉树搜索分裂速率较低,碰撞时隙较多,难以有效提高搜索效率。近年来,一些学者对多叉树防碰撞算法展开了研究,多叉树搜索具有分裂速率快,碰撞时隙少的优点,但存在空闲时隙问题,为了减少或避免空闲时隙,部分学者提出了对多叉树碰撞位进行探测或查询的方法,但这又增加了查询时隙。
在树形搜索中,阅读器接收多个标签发送的数据,对于非碰撞位,阅读器是已知的,为了避免重复发送,部分学者提出对碰撞位进行锁位的方法,即通过锁位指令提取碰撞位信息,标签锁住碰撞位,在随后的标签识别中不再传输非碰撞位信息,这种方法,减少了标签传输数据量,但增加了锁位时隙。
发明内容
针对现有技术中的上述不足,本发明提供的基于位屏蔽的RFID碰撞位编码防碰撞方法解决了现有的RFID树形防碰撞算法搜索次数多且数据通信量大的问题。
为了达到上述发明目的,本发明采用的技术方案为:一种基于位屏蔽的RFID碰撞位编码防碰撞方法,包括以下步骤:
S1、使阅读器初始化堆栈为空,并发送初始搜索命令REQ(NULL);
S2、在阅读器作用范围内的所有标签响应初始搜索命令REQ(NULL);
S3、基于当前响应的命令,确定当前标签碰撞位序列;
S4、基于当前碰撞位序列的长度,对最高的若干个比特位进行编码,并返回编码数据及剩余比特位至阅读器;
S5、通过阅读器对接收到的数据进行碰撞位检测,基于碰撞位检测结果,判断是否识别到标签;
若是,则进入步骤S6;
若否,则进入步骤S7;
S6、对识别到的标签进行数据读写和去活化处理,进而步骤S8;
S7、对接收到的数据进行译码处理,得到屏蔽序列,并将其存入阅读器堆栈,进入步骤S8;
S8、判断当前阅读器堆栈是否为空;
若是,则进入步骤S10;
若否,则进入步骤S9;
S9、弹出阅读器堆栈数据,发送位屏蔽搜索命令REQ(C,L),使符合条件的标签对其进行响应并更新碰撞位序列,返回步骤S4;
S10、结束搜索,实现放碰撞。
进一步地,所述步骤S3中的标签碰撞位序列为标签原ID序列。
进一步地,所述步骤S4中:
当标签碰撞位序列N_ID的长度大于3时,将N_ID分为最高3个比特位C和剩余比特位R,对C进行编码,得到8位二进制的高3位的编码结果C',将C'+R作为编码数据返回至阅读器;
当标签碰撞位序列N_ID的长度小于或等于3时,对N_ID的所有比特位进行编码,得到编码结果C',将C'作为编码数据返回至阅读器。
进一步地,所述步骤S5中:
当标签碰撞位序列N_ID的长度大于3时,阅读器接收数据大于8位,对接收到的数据C'+R进行碰撞位检测的方法具体为:
(1)当C'中无碰撞位,R中无碰撞位时,识别到一个标签,进入步骤S6;
(2)当C'中无碰撞位,R中有一个碰撞位时,识别到两个标签,进入步骤S6;
(3)当C'中有碰撞位,R中无碰撞位时,识别到多个标签,进入步骤S6;
(4)当C'中无碰撞位,R中有一个以上的碰撞位时,未识别到标签,进入步骤S7;
(5)当C'中有碰撞位,R中有碰撞位时,未识别到标签,进入步骤S7。
进一步地,所述步骤S7中:
当C'中无碰撞位,R中有一个以上的碰撞位时,将C'译码得到译码数据C,将R中的碰撞位置为1,非碰撞位置为0,得到对应的屏蔽序列L,将“C,L”存入堆栈,进入步骤S7;
当C'中有碰撞位,R中有碰撞位时,将C'译码得到译码数据C1、C2......,将R中的碰撞位置为1,非碰撞位置为0,得到屏蔽序列L,将“Ci,L”存入堆栈,进入步骤S7;
其中,i为译码数据序号,i=1,2,3,......。
进一步地,所述步骤S5中:
当标签碰撞位序列N_ID的长度小于或等于3时,阅读器接收数据小于或等于8位,对接收到的数据C'进行碰撞位检测的方法具体为:
(1)当C'中无碰撞位时,识别到一个标签,进入步骤S6;
(2)当C'中有碰撞位时,识别到多个标签,进入步骤S6。
进一步地,所述步骤S9中:
对屏蔽搜索命令REQ(C,L)进行响应的标签为N_ID长度和“C+L”的长度相等且N_ID最高三位为C的标签,其中,+为连接符。
进一步地,所述步骤S9中:
对屏蔽搜索命令REQ(C,L)进行响应的方法具体为:
将标签当前碰撞位序列N_ID的最高三位去除后与屏蔽序列L进行比较,在标签序列中将对应屏蔽序列号为1的比特位提取出来,更新碰撞位序列N_ID,返回步骤S4。
本发明的有益效果为:
(1)本方法通过对非碰撞位的屏蔽,使阅读器和标签不再发送已知的数据信息,有效减少了阅读器和标签间的数据通信量;
(2)本方法中,在进行位屏蔽的同时,巧妙的利用了碰撞比特序列的长度,结合编码碰撞位译码信息对标签进行分类搜索,和传统的前缀搜索相比,在对标签搜索的同时实现了对非碰撞位信息的屏蔽,在屏蔽的痛死,对多个最高碰撞位进行编码,阅读器通过译码获知碰撞位信息,避免了空闲时隙和查询碰撞位时隙;
(3)本发明方法克服了NLHQT等算法增加锁位时隙的不足,克服了BQBMT等算法增加查询碰撞位时隙的不足,有效的减少了总时隙数,提高了吞吐率,减少了阅读器和标签间数据通信量,有效提高了RFID系统识别标签的性能。
附图说明
图1为本发明提供的基于位屏蔽的RFID碰撞位编码防碰撞方法流程图。
图2为本发明实施例中的各种算法的总时隙数对比示意图。
图3为本发明实施例中的各种事算法的吞吐率对比示意图。
图4为本发明实施例中的各种算法的通信数据比特数对比示意图。
具体实施方式
下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
实施例1:
如图1所示,一种基于位屏蔽的RFID碰撞位编码防碰撞方法,其特征在于,包括以下步骤:
S1、使阅读器初始化堆栈为空,并发送初始搜索命令REQ(NULL);
S2、在阅读器作用范围内的所有标签响应初始搜索命令REQ(NULL);
S3、基于当前响应的命令,确定当前标签碰撞位序列;
S4、基于当前碰撞位序列的长度,对最高的若干个比特位进行编码,并返回编码数据及剩余比特位至阅读器;
S5、通过阅读器对接收到的数据进行碰撞位检测,基于碰撞位检测结果,判断是否识别到标签;
若是,则进入步骤S6;
若否,则进入步骤S7;
S6、对识别到的标签进行数据读写和去活化处理,进而步骤S8;
S7、对接收到的数据进行译码处理,得到屏蔽序列,并将其存入阅读器堆栈,进入步骤S8;
S8、判断当前阅读器堆栈是否为空;
若是,则进入步骤S10;
若否,则进入步骤S9;
S9、弹出阅读器堆栈数据,发送位屏蔽搜索命令REQ(C,L),使符合条件的标签对其进行响应并更新碰撞位序列,返回步骤S4;
S10、结束搜索,实现放碰撞。
本实施例的步骤S3中的标签碰撞位序列为标签原ID序列。
上述步骤S4中:
当标签碰撞位序列N_ID的长度大于3时,将N_ID分为最高3个比特位C和剩余比特位R,对C进行编码,得到8位二进制的高3位的编码结果C',将C'+R作为编码数据返回至阅读器;
当标签碰撞位序列N_ID的长度小于或等于3时,对N_ID的所有比特位进行编码,得到编码结果C',将C'作为编码数据返回至阅读器。
基于上述编码数据,步骤S5中:
当标签碰撞位序列N_ID的长度大于3时,阅读器接收数据大于8位,对接收到的数据C'+R进行碰撞位检测的方法具体为:
(1)当C'中无碰撞位,R中无碰撞位时,识别到一个标签,进入步骤S6;
(2)当C'中无碰撞位,R中有一个碰撞位时,识别到两个标签,进入步骤S6;
(3)当C'中有碰撞位,R中无碰撞位时,识别到多个标签,进入步骤S6;
(4)当C'中无碰撞位,R中有一个以上的碰撞位时,未识别到标签,进入步骤S7;
(5)当C'中有碰撞位,R中有碰撞位时,未识别到标签,进入步骤S7。
具体地,对于需要进入步骤S7的两种情况:
当C'中无碰撞位,R中有一个以上的碰撞位时,将C'译码得到译码数据C,将R中的碰撞位置为1,非碰撞位置为0,得到对应的屏蔽序列L,将“C,L”存入堆栈,进入步骤S7;
当C'中有碰撞位,R中有碰撞位时,将C'译码得到译码数据C1、C2......,将R中的碰撞位置为1,非碰撞位置为0,得到屏蔽序列L,将“Ci,L”存入堆栈,进入步骤S7;
其中,i为译码数据序号,i=1,2,3,......。
当标签碰撞位序列N_ID的长度小于或等于3时,阅读器接收数据小于或等于8位,对接收到的数据C'进行碰撞位检测的方法具体为:
(1)当C'中无碰撞位时,识别到一个标签,进入步骤S6;
(2)当C'中有碰撞位时,识别到多个标签,进入步骤S6。
上述步骤S9中:
对屏蔽搜索命令REQ(C,L)进行响应的标签为N_ID长度和“C+L”的长度相等且N_ID最高三位为C的标签,其中,+为连接符。
对屏蔽搜索命令REQ(C,L)进行响应的方法具体为:
将标签当前碰撞位序列N_ID的最高三位去除后与屏蔽序列L进行比较,在标签序列中将对应屏蔽序列号为1的比特位提取出来,更新碰撞位序列N_ID,返回步骤S4。
实际上,更新的标签碰撞位序列N_ID就是当前搜索标签子集中,所有的碰撞位组成的序列,在以后的操作中,都是对该序列进行操作。通过对多个最高碰撞位进行编码和译码来实现碰撞位查询,对于N个比特位,编码后为2
本发明对多叉树算法进行了研究,提出了位屏蔽碰撞位编码(Bit-shieldCollision-bits Coding,BCC)防碰撞方法,通过位屏蔽实现了只发送碰撞位信息,通过非屏蔽序列宽度搜索代替传统的前缀搜索,既减少了数据传送量,又避免了锁位时隙,还能够确定多叉树分支,实现多叉树子集搜索;通过对最高多个碰撞位编码,不仅避免了空闲时隙,而且不需增加包括探测时隙在内的额外时隙,BCC算法很好的把碰撞位锁位、碰撞位查询和多叉树搜索融合到一起,是一个无空闲时隙、无额外查询时隙、无锁位时隙的多叉树算法,和现有多叉树算法相比,不仅有更少的总时隙数,而且有更少的数据通信复杂度。
在传统的树形搜索算法中,通常是通过查询前缀对标签进行搜索,不断缩小标签子集,直到识别标签,这种方法,标签的一些比特位被重复发送,对于阅读器来说,非碰撞位是已知的信息,对于标签来说,查询前缀中的非碰撞位是已知的信息,如果标签不再发送这些阅读器已知的信息,阅读器不再发送标签已知的信息,则可大大减少阅读器和标签间数据通信比特数,BCC算法通过位屏蔽,很好的解决了阅读器和标签间重复发送已知数据的问题,同时,BCC算法摒弃了传统的前缀搜索方式,利用各标签子集非屏蔽位长度的不同,在位屏蔽的同时,标签对多个最高碰撞位编码,阅读器通过译码就可以得到碰撞位信息,实现了标签的无空闲时隙搜索。本发明提供的BCC算法可实现4叉树、8叉树、16叉树……的搜索,叉树越大,总时隙数越少,但标签平均每次发送的数据量会增多。
实施例2:
假设有8个标签,ID号如表1所示:
表1标签及ID号
BCC算法识别过程如表2所示,由表2可见,识别8个标签,总共用了8个时隙,时隙1是初始搜索命令,所有标签响应命令,标签N_ID就是标签原ID,长度为10比特,高3位经过编码后为8位,与剩余的7比特数据一起传送给阅读器,为了便于区分编码部分与剩余比特部分,在C′和R之间加了个空格,阅读器接收数据为“0XXXX0X0 XX0XXXX”,C′部分第1、3、4、5、6位发生碰撞,分别译码为:“001”,“011”,“100”,“101”,“110”,由R部分得屏蔽序列“1101111”,长度为7;时隙2是位屏蔽搜索命令,标签N_ID长度为“3+7”且前三位为“001”的标签:C、F、H响应命令,C、F、H标签N_ID前3位去掉后为7位数据,与“1101111”相比较,把和‘1’对应的部分提取出来,更新N_ID为6位新标签序列,N_ID前3位经过编码后为8位,与剩余的3比特数据一起传送给阅读器,阅读器接收数据为“00X00X00 XXX”,把“010,111”,“101,111”存入堆栈;时隙3标签返回数据仅有C′部分且无碰撞,识别标签H;时隙4标签返回数据仅C′部分有两个碰撞位,识别标签C和F;时隙5标签返回数据的C′部分有两个碰撞位,R部分无碰撞位,识别标签D和G;时隙6、时隙7、时隙8标签返回数据的C′部分和R部分都无碰撞,分别识别标签B、A、E。
表2 BCC算法识别过程
实施例3:算法性能分析:
对于一个满8叉树,假设有K个标签,L表示所在的层数,在L层有8
P(0/K,L)表示L层的空闲时隙概率,P(1/K,L)表示L层的识别时隙概率,则L层的碰撞时隙概率为:
P(Y>1/K,L)=1-P(0/K,L)-P(1/K,L) (2)
假设标签ID各位是相互独立的随机值,则同一层中每个节点发生碰撞的概率相同,8叉树的碰撞时隙总数为:
Y个标签中任意一位不发生碰撞的概率为:
Y个标签中任意一位发生碰撞的概率为:
Q(Y)=1-Q'(Y)=1-2
在K个标签中,只有Y个标签发生碰撞的时隙总数为:
根据BCC算法,阅读器接收数据不超过3个碰撞位时,可一次识别多个标签。
(1)阅读器接收数据只有一个碰撞位。
当阅读器接收数据只有一个碰撞位时,可直接识别两个标签。
当只有一个碰撞位时,一定是两个标签发生碰撞,设标签序列号的长度为N,则两个标签只有一位发生碰撞的概率服从二项分布:
结合(5)(6)(7)式,可得只有一个碰撞位时,直接识别的标签数:
(2)阅读器接收数据只有两个碰撞位。
当阅读器接收数据只有两个碰撞位时,可直接识别2个、3个或4个标签。
当只有两个碰撞位时,一定是2个、3个或4个标签发生碰撞,在Y(2≤Y≤4)个标签中,对于长度为N的标签序列号,只有两位发生碰撞的概率服从二项分布:
结合(5)(6)(9)式,可得只有两个碰撞位时,直接识别的标签数:
(3)阅读器接收数据只有三个碰撞位。
当阅读器接收数据只有三个碰撞位时,可直接识别2个、3个……8个标签。
当只有三个碰撞位时,一定是2个、3个……8个标签发生碰撞,在Y(2≤Y≤8)个标签中,对于长度为N的标签序列号,只有三位发生碰撞的概率服从二项分布:
结合(5)(6)(11)式,可得只有三个碰撞位时,直接识别的标签数:
由(3)(8)(10)(13)式,可得BCC算法总时隙数为:
BCC算法的吞吐率为:
CT(Collision Tree)算法是典型的二叉树防碰撞算法,AS算法、NLHQT(n=2)算法、BQBMT算法是近几年提出的多叉树防碰撞算法,通过MATLAB对这几种算法进行仿真,标签的ID长度为128bit,标签数量为:10-100,仿真结果取100次平均值,不考虑校验冗余及控制字节的影响。
图2为总时隙数比较图,由图可见,随着标签数量的增多,几种算法的总时隙数近似线性增长,在相同的标签数量时,CT算法的总时隙数最多,BCC算法的总时隙数最少,这是由于CT算法是二叉树算法,具有较多的碰撞时隙,AS算法、NLHQT(n=2)算法、BQBMT算法是多叉树算法,碰撞时隙数相比CT算法有所减少,但这几种算法为了消除多叉树的空闲时隙,增加了查询碰撞信息的时隙,BCC算法是多叉树算法,具有较少的碰撞时隙,它在位屏蔽搜索的同时,进行了碰撞位信息的查询,没有空闲时隙,也没有查询碰撞位信息的时隙。在标签数为100时,BCC算法的总时隙为128,而CT算法、AS算法、NLHQT算法、BQBMT算法分别为:199、178、165、153,BCC算法总时隙数相对其他几种算法有较大的减少。
图3为吞吐率比较图,由图可见,随着标签数量的增多,几种算法的吞吐率变化比较平稳,其中BCC算法具有最高的吞吐率,当标签数为100时,吞吐率为78%,而CT算法、AS算法、NLHQT算法、BQBMT算法吞吐率分别为:50%、56%、61%、65%,BCC算法吞吐率相对其他几种算法有较大的提高。
图4为通信数据比特数比较图,由图可见,随着标签数量的增多,几种算法的通信数据比特数近似线性增长,在相同的标签数量时,BCC算法的通信数据比特数最少,这是由于新算法不但有较少的总时隙数,而且通过位屏蔽,避免了标签重复发送阅读器已知的数据和阅读器发送标签已知的数据,减少了阅读器和标签间的通信数据量。在标签数为100时,BCC算法的通信数据比特数为13953bit,而CT算法、AS算法、NLHQT算法、BQBMT算法分别为:25471bit、18967bit,17473bit、16356bit,BCC算法数据通信比特数相对其他几种算法有较大的减少。
- 一种基于位屏蔽的RFID碰撞位编码防碰撞方法
- 一种基于信息位编码的自适应搜索的RFID防碰撞方法