RFID 中間件數(shù)據(jù)的過濾方法
RFID是“radiofequencyidentification,無線射頻識別”的縮寫,是一種非接觸自動(dòng)識別和數(shù)據(jù)采集技術(shù),該技術(shù)最早誕生于1948年,美國人HarryStrockman在IRE無線電工程師協(xié)會(huì)學(xué)報(bào)上發(fā)表論文對其理論和實(shí)現(xiàn)方法進(jìn)行了詳細(xì)描述,迄今已有60年。在進(jìn)入20世紀(jì)90年代后,RFID技術(shù)的應(yīng)用規(guī)模急劇擴(kuò)大,從2000年之后到現(xiàn)在,RFID產(chǎn)品種類得到極大豐富,成本不斷降低,各種新的應(yīng)用層出不窮。
RFID系統(tǒng)包括RFID硬件和應(yīng)用支撐軟件2個(gè)部,硬件部分由電子標(biāo)簽和閱讀器組成,電子標(biāo)簽是數(shù)據(jù)載體,分為無源射頻標(biāo)簽、半無源射頻標(biāo)簽、有源射頻標(biāo)簽3類,無源電子標(biāo)簽通過提取閱讀器發(fā)出射頻能量作為其工作的電源,并將標(biāo)簽內(nèi)信息向閱讀器傳送;半無源標(biāo)簽及有源標(biāo)簽的工作能量由電池提供。RFID中間件則是RFID軟件系統(tǒng)中最重要的一環(huán),它直接面對硬件采集上來的海量數(shù)據(jù),對其進(jìn)行過濾,有效封裝后再提交給高層應(yīng)用軟件,被稱為是RFID系統(tǒng)的神經(jīng)中樞。目前對RFID中間件的研究,主要集中于如何對海量數(shù)據(jù)進(jìn)行過濾,去冗余化,并有效挖掘其中的有用信息這樣幾個(gè)方面。筆者結(jié)合幾年的RFID應(yīng)用經(jīng)驗(yàn),對當(dāng)前已有的過濾算法進(jìn)行了研究,并提出了一種帶有噪點(diǎn)抑制功能的RFID數(shù)據(jù)過濾算法,主要解決了RFID數(shù)據(jù)采集中的噪聲干擾以及過濾冗余數(shù)據(jù)2個(gè)問題。
1 RFID中間件構(gòu)成
根據(jù)RFID權(quán)威研究機(jī)構(gòu)Auto-ID實(shí)驗(yàn)室對其EPC物聯(lián)網(wǎng)Savant中間件的定義,以及后來由EPCglobal提出的EPC應(yīng)用層事件規(guī)范和低層讀寫器接口協(xié)議,一個(gè)最基本的RFID中間件應(yīng)該包含如下幾個(gè)功能模塊:Reader接口模塊、邏輯驅(qū)動(dòng)器映射模塊、RFID數(shù)據(jù)過濾模塊、業(yè)務(wù)規(guī)則過濾模塊、設(shè)備管理與配置模塊、上層服務(wù)接口模塊,如圖1所示。
Reader接口用于中間件與RFID讀寫器的數(shù)據(jù)通信,主要有獲取RFID數(shù)據(jù)以及下達(dá)設(shè)備管理模塊的讀寫器指令2個(gè)功能。
設(shè)備管理配置模塊用于調(diào)整RFID讀寫設(shè)備的工作狀態(tài),配置相應(yīng)的Reader接口參數(shù)等.邏輯讀寫器映射模塊用于將多個(gè)物理讀寫器,或者讀寫器的多條天線映射成為一個(gè)邏輯讀寫器。一個(gè)邏輯讀寫器代表了一個(gè)有具體含義的數(shù)據(jù)采集點(diǎn)(比如5號貨架),而不管該采集點(diǎn)在物理上由多少個(gè)讀寫器和天線組成。它屏蔽了數(shù)據(jù)采集點(diǎn)的具體實(shí)現(xiàn)方式,減少了數(shù)據(jù)過濾等上層模塊與下層數(shù)據(jù)采集部分的軟件耦合度。對于上層模塊來說,可見的只有邏輯讀寫器,所以邏輯讀寫器映射模塊對RFID數(shù)據(jù)有初步過濾的功能。
RFID數(shù)據(jù)過濾與業(yè)務(wù)規(guī)則過濾,這2個(gè)部分統(tǒng)稱為RFID中間件數(shù)據(jù)過濾模塊,分別在2個(gè)層次上對RFID數(shù)據(jù)進(jìn)行過濾.前者對硬件上報(bào)的海量RFID數(shù)據(jù)進(jìn)行去冗余化等處理,是公認(rèn)的RFID中間件核心功能之一。后者則在具體業(yè)務(wù)規(guī)則的基礎(chǔ)上對過濾后的RFID數(shù)據(jù)進(jìn)行進(jìn)一步組裝,使其成為符合上層軟件要求的、帶有商業(yè)含義的事件數(shù)據(jù),使抽象的RFID數(shù)據(jù)擁有了豐富的現(xiàn)實(shí)含義。
上層服務(wù)接口將經(jīng)過過濾和組裝的RFID數(shù)據(jù)向上層應(yīng)用軟件發(fā)送,以實(shí)現(xiàn)更為豐富和貼近現(xiàn)實(shí)的功能。
2 RFID數(shù)據(jù)過濾方法設(shè)計(jì)
2.1 現(xiàn)有數(shù)據(jù)過濾方法及問題分析
從硬件上報(bào)的原始RFID數(shù)據(jù)量非常巨大,根據(jù)具體的配置不同,每臺讀寫器每秒可以上報(bào)數(shù)個(gè)至數(shù)十個(gè)不等的標(biāo)簽數(shù)據(jù),但其中只有少部分是對用戶有意義的、非重復(fù)性的數(shù)據(jù),這樣大量的數(shù)據(jù)如果不經(jīng)過去冗等處理而直接上傳,將會(huì)給整個(gè)RFID系統(tǒng)帶來很大的負(fù)擔(dān)。所以,對RFID數(shù)據(jù)過濾方法的研究在近幾年一直是個(gè)熱點(diǎn)。
現(xiàn)有過濾方法主要可以分為如下幾類:
1)建立事件列表類.對每一個(gè)新到標(biāo)簽數(shù)據(jù)進(jìn)行檢測,如果是新標(biāo)簽加入相應(yīng)列表中,且該標(biāo)簽在列表中已存在,則僅更新對應(yīng)標(biāo)簽的時(shí)間等狀態(tài)數(shù)據(jù),而不新建標(biāo)簽數(shù)據(jù)記錄,以達(dá)到去除重復(fù)信息的作用。
2)事件編碼類.對標(biāo)簽狀態(tài)的改變進(jìn)行編碼,標(biāo)簽出現(xiàn)編碼為0,標(biāo)簽消失編碼為1.然后加入計(jì)時(shí)器機(jī)制,對計(jì)時(shí)器有效時(shí)間內(nèi)的同一標(biāo)簽的狀態(tài)跳變進(jìn)行忽略,從而在狀態(tài)定義和時(shí)間維度2個(gè)方面對數(shù)據(jù)進(jìn)行了去重化。
這些算法均能夠很好地消除冗余數(shù)據(jù),減少了上層系統(tǒng)的負(fù)荷,有著較好的過濾效果.但在實(shí)際應(yīng)用中,除了RFID數(shù)據(jù)的去冗化以外,對數(shù)據(jù)的過濾還有著其他的需求.比如,由于信號不穩(wěn)定或其他干擾因素,貨架上物品的RFID標(biāo)簽并不能在每一個(gè)讀寫器周期中被檢測到;或者當(dāng)顧客推著小推車從貨架旁走過時(shí),其推車內(nèi)已選購的商品被貨架內(nèi)的讀寫器誤讀到。本文中將類似的無效RFID數(shù)據(jù)稱為RFID噪點(diǎn)。
在上述幾類過濾算法設(shè)計(jì)中,RFID噪點(diǎn)顯然不是一個(gè)被考慮到的因素,只要出現(xiàn)了RFID標(biāo)簽,哪怕只是誤讀到一次,也會(huì)被作為一個(gè)事件數(shù)據(jù)進(jìn)行上傳。如果上層業(yè)務(wù)規(guī)則過濾模塊沒有對這些噪點(diǎn)數(shù)據(jù)進(jìn)行處理,則會(huì)產(chǎn)生一些莫須有的事件記錄,對整個(gè)系統(tǒng)的數(shù)據(jù)管理造成很大麻煩,但上層業(yè)務(wù)規(guī)則過濾模塊對噪點(diǎn)的發(fā)現(xiàn)和抑制顯然是一件很難的事情,因?yàn)閿?shù)據(jù)采集細(xì)節(jié)已經(jīng)被RFID數(shù)據(jù)過濾模塊完全屏蔽掉了,對噪點(diǎn)的發(fā)現(xiàn)失去了最基本的依據(jù)。
2.2 帶噪點(diǎn)抑制功能的RFID數(shù)據(jù)過濾方法設(shè)計(jì)
RFID標(biāo)簽數(shù)據(jù)由讀寫器在每個(gè)報(bào)告周期reportcycle進(jìn)行上報(bào),在經(jīng)歷多個(gè)報(bào)告周期之后,一個(gè)典型的RFID讀寫器上報(bào)數(shù)據(jù)如圖2所示。
將在報(bào)告周期中出現(xiàn)的RFID標(biāo)簽編碼為1,未出現(xiàn)的編碼為0,則對每一個(gè)標(biāo)簽,其事件可以記錄為一個(gè)01序列串.對圖2而言:tag1可編碼為0001111000,表示標(biāo)簽通過了讀寫器范圍;tag2可編碼為1111100000,表示標(biāo)簽離開了讀寫器范圍;tag3可編碼為0000001111,表示標(biāo)簽進(jìn)入并停留在讀寫器范圍中.對tag4和tag5而言,它們出現(xiàn)了噪點(diǎn)數(shù)據(jù),tag4也許不應(yīng)該出現(xiàn)在讀寫器范圍內(nèi),而tag5根本就沒有離開。根據(jù)實(shí)際情況,RFID噪點(diǎn)可分為1噪點(diǎn)和0噪點(diǎn)2類,前者表示非讀寫器范圍內(nèi)的標(biāo)簽被偶爾讀到,如tag4;后者表示處于讀寫器范圍內(nèi)的標(biāo)簽偶爾沒有被讀到,如tag5.按照傳統(tǒng)的過濾算法,tag5將產(chǎn)生一個(gè)通過事件,tag4將產(chǎn)生2個(gè)離開事件和2個(gè)進(jìn)入事件。
對噪點(diǎn)進(jìn)行抑制的關(guān)鍵在于對偶爾出現(xiàn)的噪點(diǎn)進(jìn)行識別,從而通過程序?qū)⑵淠ㄈ?,本文中提出的抑噪算法采用了閥值的思想,對標(biāo)簽的每次上報(bào)出現(xiàn)都賦予一定的權(quán)值,沒出現(xiàn)的標(biāo)簽則減少其權(quán)值.當(dāng)該標(biāo)簽權(quán)值高于或低于某個(gè)閥值的時(shí)候,觸發(fā)相應(yīng)的標(biāo)簽事件,本算法具體描述為:
1)定義標(biāo)簽每次出現(xiàn)后累加的權(quán)值valueStep.
2)定義觸發(fā)標(biāo)簽出現(xiàn)事件的閥值fapp.
3)定義觸發(fā)標(biāo)簽消失事件的閥值fdis.
4)定義標(biāo)簽狀態(tài)字段detectStatus.
5)如果標(biāo)簽出現(xiàn),則其權(quán)值加valueStep.
6)如果標(biāo)簽未出現(xiàn),其權(quán)值減1.
7)標(biāo)簽權(quán)值大于等于fapp,且detectStatus=false,則觸發(fā)標(biāo)簽出現(xiàn)事件,產(chǎn)生一條標(biāo)簽出現(xiàn)的記錄.然后將detectStatus置為true.
8)標(biāo)簽權(quán)值小于等于fdis,且detectStatus=true,則觸發(fā)標(biāo)簽消失事件,產(chǎn)生一條標(biāo)簽消失的記錄.然后將detectStatus置為false.
在該算法中,不管是0噪點(diǎn)還是1噪點(diǎn),由于其出現(xiàn)的次數(shù)很少,則其標(biāo)簽權(quán)值很難高于fapp或低于fdis,就無法觸發(fā)標(biāo)簽事件,從而有效地抑制了噪點(diǎn)數(shù)據(jù).而正常標(biāo)簽不管被讀寫器上報(bào)了多少次,其只有在權(quán)值大于等于fapp時(shí)才會(huì)觸發(fā)一條標(biāo)簽出現(xiàn)記錄,而標(biāo)簽狀態(tài)字段detectStatus則保證了當(dāng)標(biāo)簽權(quán)值在閥值上下波動(dòng)時(shí)不會(huì)對事件重復(fù)觸發(fā),所以該算法也有效解決了標(biāo)簽數(shù)據(jù)冗余的問題。在經(jīng)過處理后,標(biāo)簽的報(bào)告情況由多個(gè)離散點(diǎn)變成了較為連續(xù)的權(quán)值變化,如圖3所示。
算法中的出現(xiàn)閥值fapp與權(quán)值valueStep之比fapp/valueStep越大,則對1噪點(diǎn)的過濾情況越好;消失閥值fdis越低,則對0噪點(diǎn)的過濾更加有效。當(dāng)fapp/valueStep小于等于1的時(shí)候,該過濾算法將不對1噪點(diǎn)進(jìn)行過濾處理,而僅保留去除冗余數(shù)據(jù)的功能.所以,根據(jù)客觀使用環(huán)境的需求,對valueStep,fapp,fdisp3個(gè)參數(shù)進(jìn)行合理調(diào)整和搭配,可以使本算法有效適應(yīng)不同過濾目標(biāo)的需求。
3 算法實(shí)現(xiàn)與驗(yàn)證
3.1 算法實(shí)現(xiàn)
筆者對該算法設(shè)計(jì)思想進(jìn)行了實(shí)現(xiàn),以驗(yàn)證其在不同應(yīng)用場景下的適應(yīng)性和有效性.實(shí)驗(yàn)平臺使用RS232接口的單天線讀寫器,該讀寫器報(bào)告周期為1s,每次報(bào)告標(biāo)簽數(shù)為1個(gè).算法實(shí)現(xiàn)采用java語言,通過comm.jar開發(fā)包進(jìn)行串口通訊。
首先是為標(biāo)簽構(gòu)建一個(gè)TagEvent類,該類包含的關(guān)鍵參數(shù)和方法為:
publicclassTagEventimplementsRunnable{
intvalue;
booleandetecStauts=false;
intfmax;
intfmin;
publicvoidrun(){
while(value>0){
try{
Thread.currentThread().sleep(1000);
}catch(InterruptedExceptione){}
if(value>=fmax!detecStauts){
(觸發(fā)標(biāo)簽出現(xiàn)記錄)
detecStauts=true;
}
elseif(value=fmindetecStauts){
(觸發(fā)標(biāo)簽消失記錄)
detecStauts=false;
}
value--;
}}
當(dāng)過濾模塊主程序檢測到一個(gè)新標(biāo)簽的時(shí)候,便為其建立一個(gè)TagEvent類的對象newTag,并對各個(gè)關(guān)鍵字段賦初值,同時(shí)啟動(dòng)該對象內(nèi)部的計(jì)時(shí)器線程:
newThread(newTag).start();該計(jì)時(shí)器線程的作用是每個(gè)報(bào)告周期對標(biāo)簽權(quán)值value進(jìn)行檢查并觸發(fā)相應(yīng)操作.每次檢查后將標(biāo)簽權(quán)值value減1,以實(shí)現(xiàn)當(dāng)標(biāo)簽未被報(bào)告時(shí)其權(quán)值的逐步下降.當(dāng)權(quán)值value減到0的時(shí)候,計(jì)時(shí)器線程停止,這時(shí)可以銷毀該對象。
當(dāng)過濾算法主模塊發(fā)現(xiàn)報(bào)告的標(biāo)簽已存在時(shí),對該標(biāo)簽對象的value值進(jìn)行累加:
newTag.value+=valueStep;
if(newTag.value>=newTag.fmax){
newTag.value=newtag.fmax;
}
其中valueStep就是算法中定義的累加權(quán)值.如果權(quán)值value已經(jīng)達(dá)到閥值fmax,則將其保持在該值,防止經(jīng)過多個(gè)上報(bào)周期后標(biāo)簽權(quán)值過高,影響后繼判斷。
3.2 實(shí)驗(yàn)驗(yàn)證
在驗(yàn)證的過程中模擬了2種應(yīng)用場景:第1種是帶讀寫器的貨架,該場景要求達(dá)到貨架讀寫器能穩(wěn)定識別放入的帶標(biāo)簽物品,不會(huì)因?yàn)樾盘柌▌?dòng)而誤報(bào)貨品離開信息,并對經(jīng)過貨架的其他物品保持較低的敏感度;第2種是門禁系統(tǒng),要求對出現(xiàn)在讀寫范圍內(nèi)的標(biāo)簽立刻做出反應(yīng),但在一定時(shí)間內(nèi)不能重復(fù)上報(bào)同一個(gè)標(biāo)簽。
在第1種貨架系統(tǒng)場景中,設(shè)置valueStep=3,fapp=10,fdisp=0,當(dāng)標(biāo)簽進(jìn)入讀寫器范圍后,經(jīng)過5s左右的時(shí)間過濾模塊觸發(fā)標(biāo)簽出現(xiàn)操作,人為將標(biāo)簽多次短時(shí)間移出讀寫器范圍,模擬信號干擾和波動(dòng)的情況,并將另一標(biāo)簽從讀寫器范圍內(nèi)移過,讀寫器均未觸發(fā)多余的標(biāo)簽出現(xiàn)和消失操作。
在第2種門禁系統(tǒng)場景中,設(shè)置valueStep=10,fapp=10,fdisp=0,當(dāng)標(biāo)簽進(jìn)入讀寫器范圍內(nèi),過濾模塊立即觸發(fā)了標(biāo)簽出現(xiàn)操作,當(dāng)標(biāo)簽消失后,10s內(nèi)不再重新觸發(fā)。
4 結(jié)束語
本文中通過對RFID中間件實(shí)際應(yīng)用場景的分析和現(xiàn)有過濾算法的研究,設(shè)計(jì)并實(shí)現(xiàn)了一種適用范圍廣,帶有噪點(diǎn)抑制功能的RFID數(shù)據(jù)過濾算法,通過一個(gè)java程序在模擬場景中對算法進(jìn)行了實(shí)驗(yàn)。結(jié)果表明,該算法具有良好的抑噪和去冗能力,在不同參數(shù)的組合下,可以適應(yīng)各種實(shí)際應(yīng)用需求,該過濾算法為更高層的業(yè)務(wù)規(guī)則過濾模塊奠定了很好的數(shù)據(jù)基礎(chǔ),對于RFID中間件的設(shè)計(jì)和開發(fā)有一定的實(shí)用價(jià)值。
RFID系統(tǒng)包括RFID硬件和應(yīng)用支撐軟件2個(gè)部,硬件部分由電子標(biāo)簽和閱讀器組成,電子標(biāo)簽是數(shù)據(jù)載體,分為無源射頻標(biāo)簽、半無源射頻標(biāo)簽、有源射頻標(biāo)簽3類,無源電子標(biāo)簽通過提取閱讀器發(fā)出射頻能量作為其工作的電源,并將標(biāo)簽內(nèi)信息向閱讀器傳送;半無源標(biāo)簽及有源標(biāo)簽的工作能量由電池提供。RFID中間件則是RFID軟件系統(tǒng)中最重要的一環(huán),它直接面對硬件采集上來的海量數(shù)據(jù),對其進(jìn)行過濾,有效封裝后再提交給高層應(yīng)用軟件,被稱為是RFID系統(tǒng)的神經(jīng)中樞。目前對RFID中間件的研究,主要集中于如何對海量數(shù)據(jù)進(jìn)行過濾,去冗余化,并有效挖掘其中的有用信息這樣幾個(gè)方面。筆者結(jié)合幾年的RFID應(yīng)用經(jīng)驗(yàn),對當(dāng)前已有的過濾算法進(jìn)行了研究,并提出了一種帶有噪點(diǎn)抑制功能的RFID數(shù)據(jù)過濾算法,主要解決了RFID數(shù)據(jù)采集中的噪聲干擾以及過濾冗余數(shù)據(jù)2個(gè)問題。
1 RFID中間件構(gòu)成
根據(jù)RFID權(quán)威研究機(jī)構(gòu)Auto-ID實(shí)驗(yàn)室對其EPC物聯(lián)網(wǎng)Savant中間件的定義,以及后來由EPCglobal提出的EPC應(yīng)用層事件規(guī)范和低層讀寫器接口協(xié)議,一個(gè)最基本的RFID中間件應(yīng)該包含如下幾個(gè)功能模塊:Reader接口模塊、邏輯驅(qū)動(dòng)器映射模塊、RFID數(shù)據(jù)過濾模塊、業(yè)務(wù)規(guī)則過濾模塊、設(shè)備管理與配置模塊、上層服務(wù)接口模塊,如圖1所示。
Reader接口用于中間件與RFID讀寫器的數(shù)據(jù)通信,主要有獲取RFID數(shù)據(jù)以及下達(dá)設(shè)備管理模塊的讀寫器指令2個(gè)功能。
設(shè)備管理配置模塊用于調(diào)整RFID讀寫設(shè)備的工作狀態(tài),配置相應(yīng)的Reader接口參數(shù)等.邏輯讀寫器映射模塊用于將多個(gè)物理讀寫器,或者讀寫器的多條天線映射成為一個(gè)邏輯讀寫器。一個(gè)邏輯讀寫器代表了一個(gè)有具體含義的數(shù)據(jù)采集點(diǎn)(比如5號貨架),而不管該采集點(diǎn)在物理上由多少個(gè)讀寫器和天線組成。它屏蔽了數(shù)據(jù)采集點(diǎn)的具體實(shí)現(xiàn)方式,減少了數(shù)據(jù)過濾等上層模塊與下層數(shù)據(jù)采集部分的軟件耦合度。對于上層模塊來說,可見的只有邏輯讀寫器,所以邏輯讀寫器映射模塊對RFID數(shù)據(jù)有初步過濾的功能。
RFID數(shù)據(jù)過濾與業(yè)務(wù)規(guī)則過濾,這2個(gè)部分統(tǒng)稱為RFID中間件數(shù)據(jù)過濾模塊,分別在2個(gè)層次上對RFID數(shù)據(jù)進(jìn)行過濾.前者對硬件上報(bào)的海量RFID數(shù)據(jù)進(jìn)行去冗余化等處理,是公認(rèn)的RFID中間件核心功能之一。后者則在具體業(yè)務(wù)規(guī)則的基礎(chǔ)上對過濾后的RFID數(shù)據(jù)進(jìn)行進(jìn)一步組裝,使其成為符合上層軟件要求的、帶有商業(yè)含義的事件數(shù)據(jù),使抽象的RFID數(shù)據(jù)擁有了豐富的現(xiàn)實(shí)含義。
上層服務(wù)接口將經(jīng)過過濾和組裝的RFID數(shù)據(jù)向上層應(yīng)用軟件發(fā)送,以實(shí)現(xiàn)更為豐富和貼近現(xiàn)實(shí)的功能。
2 RFID數(shù)據(jù)過濾方法設(shè)計(jì)
2.1 現(xiàn)有數(shù)據(jù)過濾方法及問題分析
從硬件上報(bào)的原始RFID數(shù)據(jù)量非常巨大,根據(jù)具體的配置不同,每臺讀寫器每秒可以上報(bào)數(shù)個(gè)至數(shù)十個(gè)不等的標(biāo)簽數(shù)據(jù),但其中只有少部分是對用戶有意義的、非重復(fù)性的數(shù)據(jù),這樣大量的數(shù)據(jù)如果不經(jīng)過去冗等處理而直接上傳,將會(huì)給整個(gè)RFID系統(tǒng)帶來很大的負(fù)擔(dān)。所以,對RFID數(shù)據(jù)過濾方法的研究在近幾年一直是個(gè)熱點(diǎn)。
現(xiàn)有過濾方法主要可以分為如下幾類:
1)建立事件列表類.對每一個(gè)新到標(biāo)簽數(shù)據(jù)進(jìn)行檢測,如果是新標(biāo)簽加入相應(yīng)列表中,且該標(biāo)簽在列表中已存在,則僅更新對應(yīng)標(biāo)簽的時(shí)間等狀態(tài)數(shù)據(jù),而不新建標(biāo)簽數(shù)據(jù)記錄,以達(dá)到去除重復(fù)信息的作用。
2)事件編碼類.對標(biāo)簽狀態(tài)的改變進(jìn)行編碼,標(biāo)簽出現(xiàn)編碼為0,標(biāo)簽消失編碼為1.然后加入計(jì)時(shí)器機(jī)制,對計(jì)時(shí)器有效時(shí)間內(nèi)的同一標(biāo)簽的狀態(tài)跳變進(jìn)行忽略,從而在狀態(tài)定義和時(shí)間維度2個(gè)方面對數(shù)據(jù)進(jìn)行了去重化。
這些算法均能夠很好地消除冗余數(shù)據(jù),減少了上層系統(tǒng)的負(fù)荷,有著較好的過濾效果.但在實(shí)際應(yīng)用中,除了RFID數(shù)據(jù)的去冗化以外,對數(shù)據(jù)的過濾還有著其他的需求.比如,由于信號不穩(wěn)定或其他干擾因素,貨架上物品的RFID標(biāo)簽并不能在每一個(gè)讀寫器周期中被檢測到;或者當(dāng)顧客推著小推車從貨架旁走過時(shí),其推車內(nèi)已選購的商品被貨架內(nèi)的讀寫器誤讀到。本文中將類似的無效RFID數(shù)據(jù)稱為RFID噪點(diǎn)。
在上述幾類過濾算法設(shè)計(jì)中,RFID噪點(diǎn)顯然不是一個(gè)被考慮到的因素,只要出現(xiàn)了RFID標(biāo)簽,哪怕只是誤讀到一次,也會(huì)被作為一個(gè)事件數(shù)據(jù)進(jìn)行上傳。如果上層業(yè)務(wù)規(guī)則過濾模塊沒有對這些噪點(diǎn)數(shù)據(jù)進(jìn)行處理,則會(huì)產(chǎn)生一些莫須有的事件記錄,對整個(gè)系統(tǒng)的數(shù)據(jù)管理造成很大麻煩,但上層業(yè)務(wù)規(guī)則過濾模塊對噪點(diǎn)的發(fā)現(xiàn)和抑制顯然是一件很難的事情,因?yàn)閿?shù)據(jù)采集細(xì)節(jié)已經(jīng)被RFID數(shù)據(jù)過濾模塊完全屏蔽掉了,對噪點(diǎn)的發(fā)現(xiàn)失去了最基本的依據(jù)。
2.2 帶噪點(diǎn)抑制功能的RFID數(shù)據(jù)過濾方法設(shè)計(jì)
RFID標(biāo)簽數(shù)據(jù)由讀寫器在每個(gè)報(bào)告周期reportcycle進(jìn)行上報(bào),在經(jīng)歷多個(gè)報(bào)告周期之后,一個(gè)典型的RFID讀寫器上報(bào)數(shù)據(jù)如圖2所示。
將在報(bào)告周期中出現(xiàn)的RFID標(biāo)簽編碼為1,未出現(xiàn)的編碼為0,則對每一個(gè)標(biāo)簽,其事件可以記錄為一個(gè)01序列串.對圖2而言:tag1可編碼為0001111000,表示標(biāo)簽通過了讀寫器范圍;tag2可編碼為1111100000,表示標(biāo)簽離開了讀寫器范圍;tag3可編碼為0000001111,表示標(biāo)簽進(jìn)入并停留在讀寫器范圍中.對tag4和tag5而言,它們出現(xiàn)了噪點(diǎn)數(shù)據(jù),tag4也許不應(yīng)該出現(xiàn)在讀寫器范圍內(nèi),而tag5根本就沒有離開。根據(jù)實(shí)際情況,RFID噪點(diǎn)可分為1噪點(diǎn)和0噪點(diǎn)2類,前者表示非讀寫器范圍內(nèi)的標(biāo)簽被偶爾讀到,如tag4;后者表示處于讀寫器范圍內(nèi)的標(biāo)簽偶爾沒有被讀到,如tag5.按照傳統(tǒng)的過濾算法,tag5將產(chǎn)生一個(gè)通過事件,tag4將產(chǎn)生2個(gè)離開事件和2個(gè)進(jìn)入事件。
對噪點(diǎn)進(jìn)行抑制的關(guān)鍵在于對偶爾出現(xiàn)的噪點(diǎn)進(jìn)行識別,從而通過程序?qū)⑵淠ㄈ?,本文中提出的抑噪算法采用了閥值的思想,對標(biāo)簽的每次上報(bào)出現(xiàn)都賦予一定的權(quán)值,沒出現(xiàn)的標(biāo)簽則減少其權(quán)值.當(dāng)該標(biāo)簽權(quán)值高于或低于某個(gè)閥值的時(shí)候,觸發(fā)相應(yīng)的標(biāo)簽事件,本算法具體描述為:
1)定義標(biāo)簽每次出現(xiàn)后累加的權(quán)值valueStep.
2)定義觸發(fā)標(biāo)簽出現(xiàn)事件的閥值fapp.
3)定義觸發(fā)標(biāo)簽消失事件的閥值fdis.
4)定義標(biāo)簽狀態(tài)字段detectStatus.
5)如果標(biāo)簽出現(xiàn),則其權(quán)值加valueStep.
6)如果標(biāo)簽未出現(xiàn),其權(quán)值減1.
7)標(biāo)簽權(quán)值大于等于fapp,且detectStatus=false,則觸發(fā)標(biāo)簽出現(xiàn)事件,產(chǎn)生一條標(biāo)簽出現(xiàn)的記錄.然后將detectStatus置為true.
8)標(biāo)簽權(quán)值小于等于fdis,且detectStatus=true,則觸發(fā)標(biāo)簽消失事件,產(chǎn)生一條標(biāo)簽消失的記錄.然后將detectStatus置為false.
在該算法中,不管是0噪點(diǎn)還是1噪點(diǎn),由于其出現(xiàn)的次數(shù)很少,則其標(biāo)簽權(quán)值很難高于fapp或低于fdis,就無法觸發(fā)標(biāo)簽事件,從而有效地抑制了噪點(diǎn)數(shù)據(jù).而正常標(biāo)簽不管被讀寫器上報(bào)了多少次,其只有在權(quán)值大于等于fapp時(shí)才會(huì)觸發(fā)一條標(biāo)簽出現(xiàn)記錄,而標(biāo)簽狀態(tài)字段detectStatus則保證了當(dāng)標(biāo)簽權(quán)值在閥值上下波動(dòng)時(shí)不會(huì)對事件重復(fù)觸發(fā),所以該算法也有效解決了標(biāo)簽數(shù)據(jù)冗余的問題。在經(jīng)過處理后,標(biāo)簽的報(bào)告情況由多個(gè)離散點(diǎn)變成了較為連續(xù)的權(quán)值變化,如圖3所示。
算法中的出現(xiàn)閥值fapp與權(quán)值valueStep之比fapp/valueStep越大,則對1噪點(diǎn)的過濾情況越好;消失閥值fdis越低,則對0噪點(diǎn)的過濾更加有效。當(dāng)fapp/valueStep小于等于1的時(shí)候,該過濾算法將不對1噪點(diǎn)進(jìn)行過濾處理,而僅保留去除冗余數(shù)據(jù)的功能.所以,根據(jù)客觀使用環(huán)境的需求,對valueStep,fapp,fdisp3個(gè)參數(shù)進(jìn)行合理調(diào)整和搭配,可以使本算法有效適應(yīng)不同過濾目標(biāo)的需求。
3 算法實(shí)現(xiàn)與驗(yàn)證
3.1 算法實(shí)現(xiàn)
筆者對該算法設(shè)計(jì)思想進(jìn)行了實(shí)現(xiàn),以驗(yàn)證其在不同應(yīng)用場景下的適應(yīng)性和有效性.實(shí)驗(yàn)平臺使用RS232接口的單天線讀寫器,該讀寫器報(bào)告周期為1s,每次報(bào)告標(biāo)簽數(shù)為1個(gè).算法實(shí)現(xiàn)采用java語言,通過comm.jar開發(fā)包進(jìn)行串口通訊。
首先是為標(biāo)簽構(gòu)建一個(gè)TagEvent類,該類包含的關(guān)鍵參數(shù)和方法為:
publicclassTagEventimplementsRunnable{
intvalue;
booleandetecStauts=false;
intfmax;
intfmin;
publicvoidrun(){
while(value>0){
try{
Thread.currentThread().sleep(1000);
}catch(InterruptedExceptione){}
if(value>=fmax!detecStauts){
(觸發(fā)標(biāo)簽出現(xiàn)記錄)
detecStauts=true;
}
elseif(value=fmindetecStauts){
(觸發(fā)標(biāo)簽消失記錄)
detecStauts=false;
}
value--;
}}
當(dāng)過濾模塊主程序檢測到一個(gè)新標(biāo)簽的時(shí)候,便為其建立一個(gè)TagEvent類的對象newTag,并對各個(gè)關(guān)鍵字段賦初值,同時(shí)啟動(dòng)該對象內(nèi)部的計(jì)時(shí)器線程:
newThread(newTag).start();該計(jì)時(shí)器線程的作用是每個(gè)報(bào)告周期對標(biāo)簽權(quán)值value進(jìn)行檢查并觸發(fā)相應(yīng)操作.每次檢查后將標(biāo)簽權(quán)值value減1,以實(shí)現(xiàn)當(dāng)標(biāo)簽未被報(bào)告時(shí)其權(quán)值的逐步下降.當(dāng)權(quán)值value減到0的時(shí)候,計(jì)時(shí)器線程停止,這時(shí)可以銷毀該對象。
當(dāng)過濾算法主模塊發(fā)現(xiàn)報(bào)告的標(biāo)簽已存在時(shí),對該標(biāo)簽對象的value值進(jìn)行累加:
newTag.value+=valueStep;
if(newTag.value>=newTag.fmax){
newTag.value=newtag.fmax;
}
其中valueStep就是算法中定義的累加權(quán)值.如果權(quán)值value已經(jīng)達(dá)到閥值fmax,則將其保持在該值,防止經(jīng)過多個(gè)上報(bào)周期后標(biāo)簽權(quán)值過高,影響后繼判斷。
3.2 實(shí)驗(yàn)驗(yàn)證
在驗(yàn)證的過程中模擬了2種應(yīng)用場景:第1種是帶讀寫器的貨架,該場景要求達(dá)到貨架讀寫器能穩(wěn)定識別放入的帶標(biāo)簽物品,不會(huì)因?yàn)樾盘柌▌?dòng)而誤報(bào)貨品離開信息,并對經(jīng)過貨架的其他物品保持較低的敏感度;第2種是門禁系統(tǒng),要求對出現(xiàn)在讀寫范圍內(nèi)的標(biāo)簽立刻做出反應(yīng),但在一定時(shí)間內(nèi)不能重復(fù)上報(bào)同一個(gè)標(biāo)簽。
在第1種貨架系統(tǒng)場景中,設(shè)置valueStep=3,fapp=10,fdisp=0,當(dāng)標(biāo)簽進(jìn)入讀寫器范圍后,經(jīng)過5s左右的時(shí)間過濾模塊觸發(fā)標(biāo)簽出現(xiàn)操作,人為將標(biāo)簽多次短時(shí)間移出讀寫器范圍,模擬信號干擾和波動(dòng)的情況,并將另一標(biāo)簽從讀寫器范圍內(nèi)移過,讀寫器均未觸發(fā)多余的標(biāo)簽出現(xiàn)和消失操作。
在第2種門禁系統(tǒng)場景中,設(shè)置valueStep=10,fapp=10,fdisp=0,當(dāng)標(biāo)簽進(jìn)入讀寫器范圍內(nèi),過濾模塊立即觸發(fā)了標(biāo)簽出現(xiàn)操作,當(dāng)標(biāo)簽消失后,10s內(nèi)不再重新觸發(fā)。
4 結(jié)束語
本文中通過對RFID中間件實(shí)際應(yīng)用場景的分析和現(xiàn)有過濾算法的研究,設(shè)計(jì)并實(shí)現(xiàn)了一種適用范圍廣,帶有噪點(diǎn)抑制功能的RFID數(shù)據(jù)過濾算法,通過一個(gè)java程序在模擬場景中對算法進(jìn)行了實(shí)驗(yàn)。結(jié)果表明,該算法具有良好的抑噪和去冗能力,在不同參數(shù)的組合下,可以適應(yīng)各種實(shí)際應(yīng)用需求,該過濾算法為更高層的業(yè)務(wù)規(guī)則過濾模塊奠定了很好的數(shù)據(jù)基礎(chǔ),對于RFID中間件的設(shè)計(jì)和開發(fā)有一定的實(shí)用價(jià)值。
評論