馬夢瑩,曾雅麗,魏甜甜,3,陳志德
(1.福建師范大學(xué) 數(shù)學(xué)與信息學(xué)院,福州 350007; 2.福建省網(wǎng)絡(luò)安全與密碼技術(shù)重點實驗室(福建師范大學(xué)),福州 350007;3.中國科學(xué)院信息工程研究所 中國科學(xué)院網(wǎng)絡(luò)測評技術(shù)重點實驗室,北京 100093)(*通信作者電子郵箱zhidechen@fjnu.edu.cn)
無線傳感器網(wǎng)絡(luò)(Wireless Sensor Network, WSN)是由一組傳感器以Ad Hoc方式組成的網(wǎng)絡(luò)。無線傳感器節(jié)點具有數(shù)據(jù)采集和數(shù)據(jù)處理功能,能夠被投放到各種地方進(jìn)行實時感知、采集數(shù)據(jù),并將數(shù)據(jù)傳輸給網(wǎng)絡(luò)管理者。網(wǎng)絡(luò)管理者對接收到的數(shù)據(jù)進(jìn)行分析,從而得到有用的信息,更好地完成遠(yuǎn)程監(jiān)控、調(diào)配等操作。隨著技術(shù)的進(jìn)步,無線傳感器節(jié)點以其價格低廉、體積較小等特點,被廣泛地應(yīng)用到醫(yī)療救護(hù)、農(nóng)業(yè)檢測、國防作戰(zhàn)等各種領(lǐng)域。
由于無線傳感器節(jié)點一般部署在較惡劣的環(huán)境中,極易發(fā)生故障,導(dǎo)致監(jiān)測數(shù)據(jù)無法進(jìn)行傳輸或監(jiān)測的數(shù)據(jù)有誤。管理者對錯誤的數(shù)據(jù)進(jìn)行分析,無法作出正確的決策,導(dǎo)致一系列無法估計的連鎖反應(yīng),因此對無線傳感器節(jié)點進(jìn)行故障檢測至關(guān)重要。
現(xiàn)有的傳感器節(jié)點故障檢測算法一般分為集中式故障檢測[1]和分布式故障檢測[2]兩大類。在集中式故障檢測算法中,節(jié)點將自身的監(jiān)測數(shù)據(jù)通過匯聚節(jié)點傳輸?shù)交?,基站接收到信息后根?jù)節(jié)點間數(shù)據(jù)的相似性在線對傳感數(shù)據(jù)進(jìn)行分類,從而實現(xiàn)節(jié)點的故障診斷;在分布式故障檢測算法中,所有節(jié)點處于同樣的地位,節(jié)點通過自身監(jiān)測數(shù)據(jù)進(jìn)行故障診斷,不需要將傳感數(shù)據(jù)傳輸?shù)交?,減少能量的消耗,延長網(wǎng)絡(luò)壽命。
常見的分布式故障檢測算法主要分為兩種:一種是基于傳感器節(jié)點歷史數(shù)據(jù)進(jìn)行故障檢測,通過比較預(yù)測數(shù)據(jù)與真實值之間的差值來進(jìn)行故障診斷。當(dāng)節(jié)點發(fā)生永久性故障時,基于傳感器節(jié)點歷史數(shù)據(jù)進(jìn)行故障診斷的算法精度會下降。另一種是基于傳感數(shù)據(jù)的時空相關(guān)性進(jìn)行故障診斷。文獻(xiàn)[3-7]中通過對比同一時刻待測節(jié)點的數(shù)據(jù)和鄰居節(jié)點數(shù)據(jù)來進(jìn)行故障檢測;文獻(xiàn)[8-9]使用加權(quán)中值的分布式無線傳感器節(jié)點故障診斷算法,是分布式檢測算法的改進(jìn),通過對傳感器節(jié)點數(shù)據(jù)的加權(quán)處理,提高故障診斷精度;文獻(xiàn)[10]使用分簇的方法對數(shù)據(jù)進(jìn)行劃分,劃分后在每個簇中選取一個簇頭節(jié)點對簇內(nèi)節(jié)點進(jìn)行診斷,減少節(jié)點間的通信,降低了能量的消耗。
文獻(xiàn)[11-13]使用神經(jīng)網(wǎng)絡(luò)算法,通過機(jī)器學(xué)習(xí)對數(shù)據(jù)進(jìn)行分類,從而得到故障節(jié)點。該方法需要大量的歷史數(shù)據(jù),且進(jìn)行模型訓(xùn)練的數(shù)據(jù)需要包含所有的數(shù)據(jù)類型,否則會導(dǎo)致節(jié)點檢測率降低。
本文提出了一種新的故障診斷算法,假設(shè)每個節(jié)點都有一定數(shù)目的鄰居節(jié)點,通過綜合鄰居節(jié)點數(shù)據(jù)和節(jié)點歷史數(shù)據(jù)進(jìn)行故障診斷。該算法首先利用節(jié)點歷史數(shù)據(jù)對節(jié)點狀態(tài)進(jìn)行初步預(yù)測,再結(jié)合其鄰居節(jié)點的初始狀態(tài)和鄰居節(jié)點數(shù)據(jù)對節(jié)點狀態(tài)作最終的判斷。當(dāng)網(wǎng)絡(luò)中故障節(jié)點數(shù)較多時,仍能達(dá)到較高的故障診斷精度,并且在診斷過程中對狀態(tài)確定正常的節(jié)點進(jìn)行狀態(tài)擴(kuò)散,通過移動傳感器尋找最優(yōu)路徑將節(jié)點狀態(tài)反饋給基站,減少了節(jié)點間的通信次數(shù),降低了節(jié)點的能量損耗。
無線傳感器節(jié)點故障大體上可以分為硬故障和軟故障。硬故障是指傳感器節(jié)點發(fā)生硬件故障,不能進(jìn)行數(shù)據(jù)采集和通信;軟故障是指傳感器節(jié)點能夠進(jìn)行數(shù)據(jù)采集,通信功能也正常,但采集到的數(shù)據(jù)有誤。本文主要探究無線傳感器節(jié)點軟故障的檢測。
由于無線傳感器節(jié)點采集的數(shù)據(jù)具有時空相關(guān)性,即在相鄰的一段時間內(nèi)無故障的無線傳感器節(jié)點所采集的數(shù)據(jù)是相似的,且會隨著時間的變化而變化;而發(fā)生軟故障的節(jié)點所采集的數(shù)據(jù)則是隨機(jī)的、無序的,與正常節(jié)點采集的數(shù)據(jù)有一定的偏差。本文主要考慮如下所述的四種類型的故障:
1)偏移故障。偏移故障是指采集的數(shù)據(jù)中連續(xù)多個數(shù)據(jù)的變化率不在正常范圍內(nèi),但其值仍隨時間、環(huán)境的變化而變化。
2)固定值故障。節(jié)點采集的數(shù)據(jù)是一個常數(shù),不會隨時間或環(huán)境的變化而變化。
3)間歇性故障。節(jié)點采集的數(shù)據(jù)一般都在正常值之間,但會有連續(xù)幾個時刻的數(shù)據(jù)遠(yuǎn)大于或小于正常值。
4)瞬時故障。節(jié)點采集的數(shù)據(jù)在某一瞬間出現(xiàn)異常,而其他時刻的數(shù)據(jù)都是正常的。其中,由于瞬時故障節(jié)點的數(shù)據(jù)只在那一瞬間出錯,之后會恢復(fù)正常,因此瞬時故障節(jié)點不作故障節(jié)點考慮。
本文提出的算法根據(jù)節(jié)點的歷史數(shù)據(jù)計算出每個節(jié)點的可能狀態(tài),即對節(jié)點進(jìn)行狀態(tài)預(yù)判斷,預(yù)判斷流程如圖1所示。
圖1 節(jié)點狀態(tài)預(yù)判斷流程
假設(shè)每個節(jié)點都可以存儲l個時刻的數(shù)據(jù),則節(jié)點i的狀態(tài)的預(yù)判過程如下。
(1)
(2)
當(dāng)S2=0時,說明節(jié)點i發(fā)生固定值故障,此時令Ti=1。設(shè)定閾值θ,當(dāng)S2≤θ時,判定節(jié)點狀態(tài)為可能正常,記作PTi=0;否則節(jié)點狀態(tài)為可能故障,記作PTi=1。
對預(yù)判中狀態(tài)無法確定的節(jié)點進(jìn)行進(jìn)一步的診斷,找到節(jié)點中鄰居節(jié)點數(shù)最大的節(jié)點,對鄰居節(jié)點數(shù)最大的節(jié)點優(yōu)先進(jìn)行進(jìn)一步的狀態(tài)判斷。
對選定的根節(jié)點i,若直接利用節(jié)點的一跳鄰居節(jié)點的歷史數(shù)據(jù)進(jìn)行檢測,當(dāng)鄰居節(jié)點故障數(shù)較多時,誤檢率較大。為了準(zhǔn)確判斷節(jié)點i的狀態(tài),本文基于節(jié)點的鄰居節(jié)點j的預(yù)判狀態(tài)來進(jìn)行節(jié)點i狀態(tài)的準(zhǔn)確判斷(如圖2所示)。
圖2 節(jié)點狀態(tài)判斷流程
(3)
(4)
cij表示兩個節(jié)點數(shù)據(jù)的相似性,cij=1表示兩節(jié)點數(shù)據(jù)相差較大;cij=0表示兩節(jié)點數(shù)據(jù)相似。結(jié)合節(jié)點j的預(yù)判狀態(tài)和節(jié)點i、j的相似性,最終判斷節(jié)點i的準(zhǔn)確狀態(tài)。節(jié)點i的狀態(tài)判定可分為四種情況,具體判斷過程如下:
(5)
其中Tij=1/2時,節(jié)點i的狀態(tài)可能正常也可能為故障,無法判斷,此時根據(jù)Tij=1與Tij=0的個數(shù)來對節(jié)點i的最終狀態(tài)進(jìn)行判定。
(6)
由此,可準(zhǔn)確判斷節(jié)點i的真實狀態(tài)。
對狀態(tài)檢測為正常的節(jié)點,利用節(jié)點的時空相關(guān)性,可以將正常節(jié)點的狀態(tài)進(jìn)行擴(kuò)散。節(jié)點部署如圖3所示,其中:圓圈代表節(jié)點,黑色節(jié)點表示選取的正常節(jié)點,兩點之間的線段表示兩節(jié)點能夠通信,大的圓圈代表節(jié)點的通信范圍。
圖3 節(jié)點部署示意圖
狀態(tài)擴(kuò)散減少了節(jié)點之間的通信和計算次數(shù),具體步驟如下:
1)正常節(jié)點將“自己的狀態(tài)”以信息包的形式發(fā)送給它的所有鄰居節(jié)點。
2)鄰居節(jié)點接收到發(fā)送的信息包后,根據(jù)已經(jīng)計算的cij值來作進(jìn)一步判斷:當(dāng)cij=0時,節(jié)點j的狀態(tài)為正常,即Tj=0;若cij=1,則節(jié)點j的狀態(tài)為故障,即Tj=1。即:
(7)
3)狀態(tài)正常的鄰居節(jié)點按照第1)步繼續(xù)進(jìn)行狀態(tài)擴(kuò)散,而狀態(tài)為故障的節(jié)點則不進(jìn)行狀態(tài)擴(kuò)散。
4)重復(fù)上述步驟,直至節(jié)點狀態(tài)全部檢查出來。
算法流程如圖4所示。
當(dāng)無線傳感器網(wǎng)絡(luò)中的節(jié)點分布比較稀疏時,在故障檢測過程中,沒有鄰居節(jié)點或鄰居節(jié)點數(shù)較少時,節(jié)點的狀態(tài)只能由節(jié)點自身歷史數(shù)據(jù)進(jìn)行判斷。
上文中已經(jīng)診斷出狀態(tài)為故障的傳感器節(jié)點,下一步則需要將傳感器節(jié)點的故障信息發(fā)送給基站,讓管理人員知道節(jié)點故障情況,以便對故障節(jié)點采取相應(yīng)的修復(fù)措施。
圖4 狀態(tài)擴(kuò)散流程
若每個節(jié)點都與基站進(jìn)行通信,則距離基站較遠(yuǎn)的節(jié)點需要借助多跳節(jié)點與基站進(jìn)行通信,這會增加傳感器節(jié)點能量的消耗而且在傳輸過程中容易出錯。為了避免這一問題,文獻(xiàn)[14]提出在故障反饋階段,在檢測區(qū)域設(shè)置一個移動傳感器節(jié)點,移動傳感器節(jié)點從基站出發(fā),通過移動來收集所有傳感器節(jié)點的狀態(tài)信息并傳輸給基站。
由于無線傳感器節(jié)點有一定的通信范圍,因此在進(jìn)行故障反饋時不需要遍歷每一個傳感器節(jié)點,首先可以先將傳感器節(jié)點所在區(qū)域進(jìn)行劃分,然后令移動傳感器節(jié)點遍歷每一個小區(qū)域即可。
在對節(jié)點進(jìn)行劃分時,通過計算所有節(jié)點的鄰居節(jié)點數(shù)來劃分,具體步驟如下:
1)計算所有節(jié)點的鄰居節(jié)點數(shù),挑選鄰居節(jié)點數(shù)最多的節(jié)點作為根節(jié)點,該根節(jié)點收集其鄰居節(jié)點的所有狀態(tài)信息,劃成一個區(qū)域。
2)將已劃分的上述節(jié)點剔除,繼續(xù)計算剩余傳感器節(jié)點的鄰居節(jié)點數(shù),挑選鄰居節(jié)點數(shù)最多的節(jié)點作為根節(jié)點,該根節(jié)點收集其鄰居節(jié)點的所有狀態(tài)信息,再劃成一個區(qū)域。
依次經(jīng)過上述方法將傳感器節(jié)點所在區(qū)域劃分成多個小的通信區(qū)域。
對檢測區(qū)域劃分后,列出這些區(qū)域的根節(jié)點坐標(biāo),將這些根節(jié)點的坐標(biāo)看作是新的節(jié)點,使移動傳感器節(jié)點遍歷所有的根節(jié)點。為了節(jié)省能量,移動傳感器節(jié)點的移動距離要求是最小的,即等同于最短路徑問題。
問題的目標(biāo)函數(shù)是:
(8)
滿足如下約束條件:
(9)
其中:
(10)
cij表示從節(jié)點i到節(jié)點j的花費,可以運用線性規(guī)劃進(jìn)行求解。
通過Python軟件對無線傳感器網(wǎng)絡(luò)的節(jié)點故障檢測算法進(jìn)行仿真,并對其結(jié)果進(jìn)行分析。
仿真實驗中,將500個傳感器節(jié)點隨機(jī)部署在100 m×100 m的區(qū)域內(nèi),所有的傳感器節(jié)點具有相同的傳輸距離,并分別模擬網(wǎng)絡(luò)節(jié)點故障率p為0.1,0.2,0.3,0.4,0.5,0.6時節(jié)點檢測的狀況。
為了衡量故障檢測算法的好壞,在無線傳感器網(wǎng)絡(luò)中定義了節(jié)點故障檢測率、節(jié)點故障虛警率。
在無線傳感器網(wǎng)絡(luò)G=(V,E)中,正常態(tài)節(jié)點的集合為VN,故障節(jié)點的集合VF,準(zhǔn)確診斷出故障的節(jié)點集合VTF,將狀態(tài)為正常的節(jié)點診斷為故障的節(jié)點集合VNF。
1)節(jié)點故障檢測率(Detection Rate, DR):
DR=|VTF|/|VF|
(11)
2)節(jié)點故障虛警率(False Alarm Rate, FAR):
FAR=|VNF|/|VN|
(12)
將基于鄰居節(jié)點狀態(tài)的無線傳感器節(jié)點故障檢測(fault diagnosis of WSN based on Precondition of Neighbor Nodes, PNN)算法與傳統(tǒng)的分布式故障診斷(Distributed Fault Detection, DFD)算法和改進(jìn)的分簇式故障算法(Distributed Energy Efficient Clustering-Reactive Distributed Fault Detection, DEEC-RDFD)[15]進(jìn)行比較,結(jié)果如圖5所示。
圖5 三種算法在不同故障率下的診斷精度對比
從圖5中可以看出,隨著節(jié)點故障率的增高,DFD和DEEC-RDFD算法的節(jié)點故障診斷率呈現(xiàn)出不同程度的降低,而PNN算法的故障診斷率呈上升趨勢。這是由于傳統(tǒng)的DFD算法和DEEC-RDFD算法在節(jié)點的鄰居節(jié)點故障數(shù)超過一半時會對節(jié)點狀態(tài)作出錯誤診斷;而PNN算法結(jié)合了節(jié)點自身的歷史數(shù)據(jù)和鄰居節(jié)點數(shù)據(jù),首先利用節(jié)點自身數(shù)據(jù)對節(jié)點狀態(tài)進(jìn)行預(yù)判斷,判斷出每個節(jié)點的可能狀態(tài),然后對節(jié)點進(jìn)行劃分,利用節(jié)點與鄰居節(jié)點的空間相關(guān)性和鄰居節(jié)點自身可能狀態(tài)對節(jié)點狀態(tài)進(jìn)行準(zhǔn)確判斷,且基于節(jié)點歷史數(shù)據(jù)進(jìn)行預(yù)測來診斷節(jié)點狀態(tài)時,由于當(dāng)節(jié)點出現(xiàn)固定值故障時會出現(xiàn)誤診現(xiàn)象,而結(jié)合鄰居節(jié)點數(shù)據(jù),在節(jié)點出現(xiàn)固定值故障且故障率高達(dá)50%的場景中,該算法也能夠準(zhǔn)確檢測節(jié)點的狀態(tài),提高故障診斷的精確度。
本文在將狀態(tài)確定正常的節(jié)點的狀態(tài)進(jìn)行擴(kuò)散時,并不是直接將兩個節(jié)點i、j當(dāng)前時刻t的測量值xit、xjt進(jìn)行比較,而是對最近一段時間的兩個節(jié)點的測量值xi、xj進(jìn)行比較,相比其他算法中只對當(dāng)前測量值進(jìn)行比較,避免了數(shù)據(jù)的偶然性,降低了將瞬時故障節(jié)點診斷為故障節(jié)點的可能性,進(jìn)一步提高了故障檢測精度。
圖6是故障虛警率隨節(jié)點故障率增大的變化趨勢:當(dāng)節(jié)點故障率增大時,DFD和DEEC-RDFD的虛警率都急劇上升,而基于鄰居節(jié)點狀態(tài)的無線傳感器故障診斷算法的虛警率增長幅度較小;當(dāng)節(jié)點故障率低于30%時,三種算法的虛警率都低于1%,但當(dāng)節(jié)點故障率高達(dá)60%時,PNN算法的虛警率只有5%,比DEEC-RDFD低10個百分點。可以看出,本文提出的基于鄰居節(jié)點預(yù)狀態(tài)的無線傳感器故障診斷算法有更好的結(jié)果。
圖6 三種算法在不同故障率下的虛警率
在無線傳感器網(wǎng)絡(luò)中,部署的節(jié)點能量都是有限的,在進(jìn)行故障診斷的過程中最重要的是盡可能減少能量的消耗,延長無線傳感器網(wǎng)絡(luò)的壽命。而在無線傳感器網(wǎng)絡(luò)中,相比節(jié)點間相互通信所消耗的能量,計算所消耗能量可忽略不計。
三種故障診斷算法在進(jìn)行節(jié)點故障診斷時,節(jié)點間的通信次數(shù)基本相近。首先節(jié)點都需要和鄰居節(jié)點進(jìn)行信息交換來確定自身狀態(tài),再將狀態(tài)正常的節(jié)點進(jìn)行狀態(tài)擴(kuò)散,確定其鄰居節(jié)點狀態(tài)。但傳統(tǒng)的DFD算法和DEEC-RDFD算法在將節(jié)點故障信息反饋給基站時需要通過多跳節(jié)點進(jìn)行傳輸,尤其當(dāng)故障節(jié)點距離基站較遠(yuǎn)且節(jié)點故障率過高時,節(jié)點間需要進(jìn)行多次通信,消耗大量能量;而本文的故障診斷算法在將節(jié)點狀態(tài)傳送到基站時,使用移動傳感器通過最優(yōu)路徑進(jìn)行收集,不需要通過多跳傳輸,能有效減少網(wǎng)絡(luò)中節(jié)點間的通信,延長網(wǎng)絡(luò)壽命。
本文提出了一種基于鄰居節(jié)點預(yù)診斷狀態(tài)的無線傳感器網(wǎng)絡(luò)節(jié)點故障診斷的方法。網(wǎng)絡(luò)中的每個節(jié)點首先根據(jù)時間相關(guān)性的特點,通過對傳感器節(jié)點歷史數(shù)據(jù)的處理,對傳感器節(jié)點的狀態(tài)進(jìn)行初步診斷,再根據(jù)節(jié)點間的空間相關(guān)性原理,通過與鄰居節(jié)點所感知的數(shù)據(jù)進(jìn)行比較,從而確定節(jié)點的最終狀態(tài),并將測試狀態(tài)為正常的節(jié)點的狀態(tài)向網(wǎng)絡(luò)中其他節(jié)點進(jìn)行擴(kuò)散。當(dāng)節(jié)點出現(xiàn)固定值故障、瞬時故障和故障率過高時,本文方法都能取得很好的診斷率。仿真結(jié)果表明,本文所提出的故障診斷算法有效地減少了節(jié)點間的通信代價和能量消耗,從而延長了無線傳感器網(wǎng)絡(luò)的生存周期。