姜文旭, 柳 迪, 趙書銳, 陳本志, 魏勝非
(東北師范大學(xué) 物理學(xué)院, 長春 130024)
無線傳感器網(wǎng)絡(luò)(wireless sensor network, WSN)由大量的微型傳感器節(jié)點組成, 它們通過無線電進(jìn)行通信, 形成了一個具有無中心、自組織、多跳路由特點的網(wǎng)絡(luò)系統(tǒng)[1]. 1978 年, 美國的卡耐基-梅隆大學(xué)最早成立了分布式傳感器網(wǎng)絡(luò)工作組[2]. 2003 年, 美國《技術(shù)評論》雜志將WSN 評選為未來十大新興科技中的第一項. 2006 年, 我國在《國家中長期科學(xué)與技術(shù)發(fā)展規(guī)劃綱要》中, 提出的3 個信息領(lǐng)域的前沿方向, 有兩項與WSN 有關(guān). 由此可見, WSN 的發(fā)展是必然趨勢.因其可以分布在人員無法到達(dá)的區(qū)域, 所以WSN 可廣泛應(yīng)用于國防軍事、環(huán)境監(jiān)測、衛(wèi)生保健等領(lǐng)域[3].
由于節(jié)點拋灑的隨機(jī)性, 在WSN 的應(yīng)用中節(jié)點采集的信息數(shù)據(jù)只有結(jié)合與之對應(yīng)的位置信息才有意義,比如森林突發(fā)火災(zāi)時需要確定節(jié)點監(jiān)測到火源的位置信息; 軍事活動中需要確定節(jié)點監(jiān)測到敵方活動信息的位置信息; 海底探測時需要確定節(jié)點監(jiān)測到海底環(huán)境的位置信息. 同時, WSN 為了節(jié)約成本并且降低功耗, 只有少部分錨節(jié)點攜帶GPS, 其他大部分節(jié)點都是不知道具體位置的未知節(jié)點, 如何通過已知位置的錨節(jié)點得到未知節(jié)點的位置信息是WSN 定位技術(shù)面臨的一大難點[4]. 所以, 節(jié)點定位技術(shù)一定程度上決定了WSN 的實際應(yīng)用前景, 這項技術(shù)也是眾多學(xué)者研究WSN 的重點方向之一.
在WSN 的定位算法中, 質(zhì)心定位算法能耗低、實現(xiàn)簡單, 但是定位精度易受到錨節(jié)點密度的影響. 所以,很多學(xué)者為了減少定位誤差將其與RSSI定位算法相結(jié)合進(jìn)行研究: 文獻(xiàn)[5]使用均值濾波、中值濾波對RSSI進(jìn)行預(yù)處理, 然后對過濾后的信號進(jìn)行高斯濾波并進(jìn)行加權(quán), 得到較精確的RSSI值. 該算法通過結(jié)合多種濾波方法, 減小了使用單一濾波造成的測率誤差,但是該算法在定位環(huán)節(jié)沒有考慮到由質(zhì)心造成的誤差.文獻(xiàn)[6]提出了一種改進(jìn)的加權(quán)質(zhì)心定位算法, 首先使用中值濾波對RSSI進(jìn)行預(yù)處理, 然后對權(quán)值進(jìn)行距離的差分修正. 該算法在原始的加權(quán)質(zhì)心定位算法基礎(chǔ)上有效地提高了定位精度, 但是能耗過高, 計算量過大.文獻(xiàn)[7]引入迭代的思想, 將已定位成功的未知節(jié)點升級為錨節(jié)點輔助計算. 該算法可以在錨節(jié)點占比小的情況下, 降低無法定位的節(jié)點比例, 但是該算法沒有考慮在測距過程中存在的誤差. 文獻(xiàn)[8]在原有錨節(jié)點的基礎(chǔ)之上, 利用余弦定理增加了虛擬靜態(tài)錨節(jié)點參與定位. 該算法降低了定位所需要的硬件成本, 但是沒有考慮到定位過程中將距離作為權(quán)重帶來的誤差.
針對上述研究中的缺點和不足, 本文在質(zhì)心定位算法的基礎(chǔ)之上進(jìn)行改進(jìn), 提出了一種改進(jìn)的加權(quán)質(zhì)心定位算法, 并通過仿真驗證算法的有效性.
接收信號強(qiáng)度指示(received signal strength indicator,RSSI)表示發(fā)射端向接收端發(fā)送能量信號的信號強(qiáng)度數(shù)值[9]. 其定位過程的實現(xiàn)步驟, 依次是信號發(fā)射、信號采集、信號轉(zhuǎn)換以及定位計算[10]. 其中, 第3 步信號轉(zhuǎn)換最為重要, 該過程通過空間傳播模型來計算錨節(jié)點和未知節(jié)點間的距離. 本文采用對數(shù)——常態(tài)分布模型[11], 公式如下:
其中,PL(d)為距離為d(m)時的信號路徑損耗;PL(d0)為距離信號發(fā)射端d0(m)處的信號損耗, 其中d0為參考距離, 一般為1 m;η為路徑損耗指數(shù);d為發(fā)送端到接收端的距離;Xσ為均值為零, 方差為σ的高斯隨機(jī)變量. 則接收信號強(qiáng)度如下:
其中,PT為發(fā)送信號強(qiáng)度;RSSI為接收信號強(qiáng)度.
由式(1)、式(2)可得, 錨節(jié)點到未知節(jié)點之間的距離為:
RSSI定位算法不需要增加多余的硬件模塊, 在實際應(yīng)用中容易實現(xiàn), 但是極易受到多徑效應(yīng)等環(huán)境因素的影響, 導(dǎo)致其定位精度不高.
質(zhì)心定位算法[12]是一種不需要測距的定位算法,通過計算網(wǎng)絡(luò)連通性進(jìn)行定位. 其原理是以錨節(jié)點為圓心, 以通過路徑損耗模型計算出的距離為半徑畫圓,計算出形成的公共區(qū)域的質(zhì)心坐標(biāo). 可得出未知節(jié)點A(x,y)的質(zhì)心算法公式為:
其中, (x,y)為未知節(jié)點坐標(biāo); (xi,yi)為未知節(jié)點通信范圍內(nèi)第i個錨節(jié)點坐標(biāo);n為未知節(jié)點通信范圍內(nèi)錨節(jié)點數(shù)量.
質(zhì)心定位算法計算簡單、開銷小、容易實現(xiàn). 但是定位誤差大, 而且定位精度極易受到錨節(jié)點數(shù)量和均勻程度的影響.
通過文獻(xiàn)[13]可知, 傳統(tǒng)的質(zhì)心定位算法不能反映出錨節(jié)點在節(jié)點定位時位置的影響, 因此, 將RSSI值作為權(quán)重因子引入質(zhì)心定位算法中, 以此來反映錨節(jié)點的位置對質(zhì)心坐標(biāo)的影響. 如果RSSI值越大, 代表節(jié)點之間的距離越近, 則該錨節(jié)點的位置對質(zhì)心坐標(biāo)有更大的影響. 可得出未知節(jié)點A(x,y)的加權(quán)質(zhì)心算法公式為:
其中, (x,y)為未知節(jié)點坐標(biāo); (xi,yi)為未知節(jié)點通信范圍內(nèi)第i個錨節(jié)點坐標(biāo);RSSIi為第i個錨節(jié)點的信號強(qiáng)度值;n為未知節(jié)點通信范圍內(nèi)錨節(jié)點數(shù)量.
雖然這種改進(jìn)方法明顯提高了質(zhì)心定位算法的定位精度, 但是在實際應(yīng)用中, 外界環(huán)境比較復(fù)雜,RSSI值極易受到環(huán)境干擾, 單純使用RSSI值作為權(quán)值不易修正誤差值, 影響定位精度.
由于實際環(huán)境中使用RSSI作為權(quán)值會影響到未知節(jié)點的定位精度, 因此, 有學(xué)者提出利用信號的空間傳輸模型計算出錨節(jié)點到未知節(jié)點間的距離, 用該距離的倒數(shù)作為影響質(zhì)心的權(quán)重因子. 可得出未知節(jié)點A(x,y)的加權(quán)質(zhì)心算法公式為:
其中, (x,y)為未知節(jié)點坐標(biāo); (xi,yi)為未知節(jié)點通信范圍內(nèi)第i個錨節(jié)點坐標(biāo);di為未知節(jié)點A與第i個錨節(jié)點經(jīng)距離校正后的距離值;n為未知節(jié)點通信范圍內(nèi)錨節(jié)點數(shù)量.
式(5)和式(6)都是在RSSI算法的基礎(chǔ)之上對質(zhì)心定位算法進(jìn)行權(quán)值修正, 而式(6)考慮到了RSSI的系統(tǒng)環(huán)境誤差, 采用距離加權(quán)修正定位誤差, 提高了質(zhì)心定位算法的定位精度. 因此本文保留其優(yōu)點, 對權(quán)值能否繼續(xù)優(yōu)化展開研究.
在節(jié)點定位過程中, 信號傳輸過程很容易受到多徑效應(yīng)等環(huán)境因素的影響, 使得未知節(jié)點接收到的RSSI具有較大的波動性. 因此, 本文針對這個問題對接收到的RSSI值進(jìn)行濾波處理, 得到優(yōu)化后的RSSI值,用于測距階段的距離計算. 具體實現(xiàn)過程如下:
首先, 設(shè)置閾值k, 對未知節(jié)點接收到的RSSI值進(jìn)行計數(shù), 當(dāng)接收到的RSSI值達(dá)到閾值時停止接收, 否則將繼續(xù)接收.
然后, 對接收到的RSSI值進(jìn)行降序排序, 得到集合RSSIsort, 將該集合分別進(jìn)行均值濾波和中值濾波, 公式如下:
其中,k為未知節(jié)點接收到的RSSI值個數(shù),RSSIk為未知節(jié)點接收到的第k個RSSI值,RSSIsort為降序排列后的RSSI集合,RSSImid為中值濾波處理后的RSSI值,RSSIAVG為均值濾波處理后的RSSI值.
最后, 對RSSImid和RSSIAVG取平均值, 得到較為準(zhǔn)確的RSSI值. 公式如下:
在加權(quán)質(zhì)心定位算法中, 權(quán)值的選取對節(jié)點定位精度影響很大, 式(6)的算法以距離的倒數(shù)作為權(quán)值來修正誤差, 進(jìn)一步提高了未知節(jié)點的定位精度. 因此,本文將在此基礎(chǔ)上繼續(xù)對質(zhì)心權(quán)值進(jìn)行改進(jìn).
由式(3)的變形可得:
可以看出, 在其他參數(shù)確定的前提下, 測距值d和RSSI之間更接近于指數(shù)關(guān)系. 所以, 結(jié)合上述距離加權(quán)的質(zhì)心定位算法, 將權(quán)值由距離的倒數(shù)升級為距離倒數(shù)的t次冪. 改進(jìn)后的公式為:
對于t的取值, 根據(jù)文獻(xiàn)[14]的研究可知,t的取值主要受到錨節(jié)點密度的影響, 與環(huán)境干擾和定位區(qū)域大小無關(guān). 因此, 接下來將通過仿真探尋t的最優(yōu)取值. 仿真中t的取值范圍為[0.5, 2.5], 以0.1 為步長遍歷區(qū)間全部數(shù)值, 將算法的定位誤差作為評判標(biāo)準(zhǔn), 分別尋找不同錨節(jié)點密度下t的最優(yōu)取值, 即定位誤差最小時對應(yīng)t的取值.
仿真實驗中, 實驗環(huán)境和實驗條件詳見第3 節(jié). 在200 m×200 m 的區(qū)域中, 隨機(jī)部署300 個節(jié)點, 通信半徑為45 m, 改變錨節(jié)點密度, 實驗結(jié)果如表1. 由此可見, 其他條件不變, 當(dāng)錨節(jié)點密度不同時, 隨著錨節(jié)點密度的增大,t的最優(yōu)取值分布在(1.8, 2.2)區(qū)間. 因此,式(12)中的t值將會依據(jù)錨節(jié)點密度來確定, 比如錨節(jié)點密度為20%, 則t取值為2.
表1 不同錨節(jié)點密度下的t 值
質(zhì)心定位算法在定位過程中受錨節(jié)點的密度影響很大, 當(dāng)錨節(jié)點密度較低時, 會產(chǎn)生大量無法進(jìn)行定位的節(jié)點, 導(dǎo)致節(jié)點的覆蓋率較低. 因此本文引入迭代的思想, 實現(xiàn)過程如下.
當(dāng)未知節(jié)點通信范圍內(nèi)的錨節(jié)點數(shù)量大于或等于3 個時, 則使用原有錨節(jié)點進(jìn)行定位; 當(dāng)未知節(jié)點通信范圍內(nèi)的錨節(jié)點數(shù)量小于3 個時, 則需要接收已定位節(jié)點所攜帶的位置信息, 將其升級為錨節(jié)點參與未定位節(jié)點的定位. 由于距離越遠(yuǎn)節(jié)點接收到的RSSI值誤差越大, 使用升級為錨節(jié)點的節(jié)點參與后續(xù)定位運算,將會產(chǎn)生更大的定位誤差. 因此, 如果該節(jié)點要用到升級節(jié)點, 需要先判斷其接收到的升級節(jié)點所攜帶的RSSI值是否滿足閾值N, 如果滿足閾值N則接收, 否則丟棄該節(jié)點. 改進(jìn)后的算法流程圖如圖1 所示.
王樹林在辛娜不斷完成創(chuàng)新高指標(biāo)后的淡定和高調(diào)中,感覺到了不安和壓力。辛娜在家里開始說一不二了。辛娜開始主動干預(yù)家庭事務(wù)了。換句話說,王樹林十多年建立起來的一家之主的地位變得岌岌可危了。他開始有意無意地抗?fàn)?,開始不經(jīng)思索地否決辛娜的提案,為此,兩個人之間的爭執(zhí)多了起來,冷戰(zhàn)多了起來。
圖1 迭代式加權(quán)質(zhì)心定位算法流程圖
1)錨節(jié)點周期性的廣播自身id、位置坐標(biāo)、RSSI值等信息.
2)每個未知節(jié)點分別接收并記錄下多個來自鄰居錨節(jié)點發(fā)送的信息, 如鄰居錨節(jié)點的id、坐標(biāo)信息和RSSI值. 將每組RSSI值分別進(jìn)行均值濾波和中值濾波處理, 取二者均值作為該錨節(jié)點的RSSI值.
3)使用對數(shù)——常態(tài)分布模型, 利用上述預(yù)處理后的RSSI值計算出每個錨節(jié)點到未知節(jié)點之間的距離d.
4)若未知節(jié)點周圍的錨節(jié)點數(shù)大于兩個, 則根據(jù)改正過的加權(quán)質(zhì)心定位算法式(12), 計算出該未知節(jié)點的坐標(biāo).
5)逐一檢查未定位的節(jié)點, 重新接收鄰居錨節(jié)點以及已定位的未知節(jié)點的信息, 判斷接受到的RSSI值是否滿足閾值條件, 如果滿足, 則將已定位好的未知節(jié)點升級為錨節(jié)點, 重新對剩余的未知節(jié)點進(jìn)行定位.
6)計算所有節(jié)點的平均定位誤差, 公式為:
其中, (xo,yo)為第i個未知節(jié)點的真實坐標(biāo), (xbest,ybest)為第i個未知節(jié)點的估計坐標(biāo),R為節(jié)點的通信半徑,Ei為第i個節(jié)點的定位誤差,N為未知節(jié)點的總數(shù),EAVG為所有未知節(jié)點的平均定位誤差.
將300 個節(jié)點隨機(jī)部署在200 m×200 m 的正方形區(qū)域中, 根據(jù)實驗要求設(shè)定錨節(jié)點比例和節(jié)點通信半徑. 信號傳播模型采用對數(shù)——常態(tài)分布模型, 路徑損耗指數(shù)在不同環(huán)境下取值不同, 具體可根據(jù)表2 進(jìn)行參考取值, 仿真中以室內(nèi)空間為定位環(huán)境, 因此將η設(shè)為4. 為了提高算法的穩(wěn)定性, 采用多次重復(fù)實驗, 實驗次數(shù)為50 次, 最終的結(jié)果取50 次的平均值.
表2 各應(yīng)用場景下路徑損耗系數(shù)η 的取值
根據(jù)表2 參數(shù)設(shè)置, 形成最初的節(jié)點分布圖, 如圖2所示, 圓形代表未知節(jié)點, 星形代表錨節(jié)點, 均勻分布在定位區(qū)域內(nèi).
圖2 節(jié)點分布圖
在總節(jié)點數(shù)為300, 通信半徑45 m, 錨節(jié)點比例分別為10%、15%、20%、25%、30%、35%、40%的情況下對質(zhì)心定位算法、基于RSSI的加權(quán)質(zhì)心定位算法和本文改進(jìn)后的算法進(jìn)行仿真, 得到的仿真結(jié)果如圖3 所示, 可以看出這3 種算法的平均定位誤差都隨著錨節(jié)點比例的增加而減小.
圖3 不同錨節(jié)點密度的平均定位誤差圖
當(dāng)錨節(jié)點比例為10%時, 質(zhì)心定位算法平均定位誤差最大, 這是由于未知節(jié)點周圍的錨節(jié)點過少, 導(dǎo)致質(zhì)心定位算法暴露其弊端, 在錨節(jié)點密度小的情況下無法精準(zhǔn)定位, 而其他兩種算法的平均定位誤差都有明顯的減小, 其中, 基于RSSI的加權(quán)質(zhì)心定位算法平均定位誤差為36.53%, 本文改進(jìn)算法的平均定位誤差為34.50%, 由此可見這兩種算法都可以有效改善質(zhì)心定位算法的弊端, 而且本文的改進(jìn)算法效果更好; 隨著錨節(jié)點比例的逐漸增大, 可以看出基于RSSI的加權(quán)質(zhì)心定位算法和本文的改進(jìn)算法表現(xiàn)出巨大的優(yōu)越性,定位精度有著顯著的提升, 而本文的改進(jìn)算法在同等條件下定位精度最高, 同時平均定位誤差減小的最快;當(dāng)錨節(jié)點比例大于20%時, 可以看出3 種定位算法的平均定位誤差減少緩慢, 這是由于隨著錨節(jié)點的比例逐漸增大, 錨節(jié)點到達(dá)了一定數(shù)量, 足夠提供較為準(zhǔn)確的位置輔助信息; 在其他條件相同的情況下, 錨節(jié)點比例為25%時, 本文改進(jìn)的算法平均定位誤差19.24%,比質(zhì)心定位算法降低了38.23%, 比基于RSSI的加權(quán)質(zhì)心定位算法降低了14.49%, 由此可見本文的改進(jìn)算法定位精度明顯優(yōu)于前兩種算法.
在總節(jié)點數(shù)為300, 錨節(jié)點密度占總節(jié)點數(shù)20%,節(jié)點通信半徑分別為30 m、35 m、40 m、45 m、50 m、55 m、60 m 的情況下對質(zhì)心定位算法、基于RSSI的加權(quán)質(zhì)心定位算法和本文改進(jìn)后的算法進(jìn)行仿真, 得到的仿真結(jié)果如圖4 所示, 可以看出這3 種算法的平均定位誤差都隨著節(jié)點通信半徑的增大而減小.
圖4 不同節(jié)點通信半徑的平均定位誤差圖
當(dāng)節(jié)點通信半徑為30 m 時, 質(zhì)心定位算法平均定位誤差為45.30%, 在3 種算法中定位誤差最大, 這是由于通信半徑過小, 導(dǎo)致未知節(jié)點無法與更多的錨節(jié)點進(jìn)行通信, 從而無法精確定位, 而基于RSSI的加權(quán)質(zhì)心定位算法和本文改進(jìn)算法的平均定位誤差都有明顯減小, 二者平均定位誤差分別為36.05%和34.07%,由此可見, 這兩種算法都可以有效改善節(jié)點通信距離過短時質(zhì)心定位算法造成的誤差, 而且本文的改進(jìn)算法效果更好; 隨著通信半徑的逐漸增大, 可以看出基于RSSI的加權(quán)質(zhì)心定位算法和本文的改進(jìn)算法表現(xiàn)出巨大的優(yōu)越性, 這兩種算法的定位精度比質(zhì)心定位算法有著顯著的提升, 而本文的改進(jìn)算法在同等條件下定位精度最高, 同時平均定位誤差減小的最快; 當(dāng)通信半徑大于45 m 時, 3 種算法的平均定位誤差減少緩慢, 這是由于通信半徑越大, 節(jié)點能收獲到的定位精度越多,定位越精確; 當(dāng)通信半徑為50 m 時, 本文改進(jìn)的算法平均定位誤差19.24%, 比質(zhì)心定位算法降低了40.70%,比基于RSSI的加權(quán)質(zhì)心定位算法降低了18.27%, 由此可見本文的改進(jìn)算法定位精度明顯優(yōu)于前兩種算法.
本文對質(zhì)心定位算法及加權(quán)質(zhì)心定位算法進(jìn)行研究,在此基礎(chǔ)之上提出了一種改進(jìn)的基于RSSI的加權(quán)質(zhì)心定位算法. 首先在測距階段對RSSI值進(jìn)行預(yù)處理,然后在定位階段對質(zhì)心定位算法進(jìn)行加權(quán)改進(jìn), 進(jìn)而引入迭代的思想將已定位的未知節(jié)點升級為錨節(jié)點輔助定位, 最后將其與質(zhì)心定位算法以及基于RSSI的加權(quán)質(zhì)心定位算法一同進(jìn)行仿真分析, 結(jié)果表明, 本文提出的改進(jìn)算法相較于其他兩種算法定位精度有明顯的提高.