首先是为标签构建一个TagEvent类,该类包含的关键参数和方法为:
public class TagEvent imp lements Runnable{
int value;
boolean detecStauts = false;
int fmax;
int fmin;
public void run ( ) {
while ( value > 0) {
try{
Thread. currentThread ( ). sleep (1000) ;
} catch ( Interrup tedExcep tion e) { }
if ( value > = fmax&&! detecStauts) {
(触发标签出现记录)
detecStauts = true;
}
else if ( value < = fmin&&detecStauts) {
(触发标签消失记录)
detecStauts = false;
}
value - - ;
} }
当过滤模块主程序检测到一个新标签的时候,便为其建立一个Tag Event类的对象new Tag,并对各个关键字段赋初值,同时启动该对象内部的计时器线程:
new Thread ( newTag). start ( ) ;该计时器线程的作用是每个报告周期对标签权值value进行检查并触发相应操作. 每次检查后将标签权值value减1,以实现当标签未被报告时其权值的逐步下降. 当权值value减到0的时候,计时器线程停止,这时可以销毁该对象。
当过滤算法主模块发现报告的标签已存在时,对该标签对象的value值进行累加:
newTag. value + = valueStep;
if ( newTag. value > = newTag. fmax) {
newTag. value = newtag. fmax;
}
其中valueStep就是算法中定义的累加权值. 如果权值value已经达到阀值fm ax,则将其保持在该值,防止经过多个上报周期后标签权值过高,影响后继判断。
3. 2 实验验证
在验证的过程中模拟了2 种应用场景: 第1种是带读写器的货架,该场景要求达到货架读写器能稳定识别放入的带标签物品,不会因为信号波动而误报货品离开信息,并对经过货架的其他物品保持较低的敏感度;第2种是门禁系统,要求对出现在读写范围内的标签立刻做出反应,但在一定时间内不能重复上报同一个标签。
在第1种货架系统场景中,设置valueS tep = 3,fapp = 10, fdisp = 0,当标签进入读写器范围后,经过5 s左右的时间过滤模块触发标签出现操作,人为将标签多次短时间移出读写器范围,模拟信号干扰和波动的情况,并将另一标签从读写器范围内移过,读写器均未触发多余的标签出现和消失操作。
在第2 种门禁系统场景中,设置valueS tep =10, fapp = 10, fd isp = 0,当标签进入读写器范围内,过滤模块立即触发了标签出现操作,当标签消失后, 10 s内不再重新触发。
4 结束语
本文中通过对RFID中间件实际应用场景的分析和现有过滤算法的研究,设计并实现了一种适用范围广,带有噪点抑制功能的RFID数据过滤算法, 通过一个java程序在模拟场景中对算法进行了实验。结果表明,该算法具有良好的抑噪和去冗能力,在不同参数的组合下,可以适应各种实际应用需求, 该过滤算法为更高层的业务规则过滤模块奠定了很好的数据基础,对于RFID中间件的设计和开发有一定的实用价值。