方旺盛,楊 庚,胡中棟
江西理工大學 信息工程學院,江西 贛州 341000
無線傳感器網(wǎng)絡由資源受限的傳感器節(jié)點組成,這些節(jié)點可以相互通信并協(xié)作收集環(huán)境中的信息,通過無線通信方式形成一個自組織的智能網(wǎng)絡系統(tǒng),能夠?qū)崟r監(jiān)測、感知和采集所監(jiān)控區(qū)域內(nèi)的各種環(huán)境或監(jiān)測對象的信息,并對這些信息進行處理,將獲取到的信息發(fā)送到任務管理節(jié)點或者需要這些信息的用戶[1]。因為傳感器節(jié)點是無線傳感器網(wǎng)絡中的基本組成單位,節(jié)點定位又是無線傳感器網(wǎng)絡系統(tǒng)部署完成后面臨的首要問題,是無線傳感器網(wǎng)絡其他功能的基礎,所以節(jié)點的位置信息至關重要。
無線傳感器網(wǎng)絡現(xiàn)有的定位技術通??梢苑譃閮深悾夯跍y距(range-based)的和無需測距(range-free)的定位技術?;跍y距的定位方法首先需要精確地測量相關節(jié)點之間的距離信息(距離或者角度),然后再使用三邊測量、三角測量或最大似然估計定位計算方法來計算節(jié)點位置。常見的基于測距的定位算法有RSSI[2],AOA[3],TOA[4],TDOA[5]。基于測距的定位算法有定位精度高的特點,但卻有兩個主要缺點:首先,距離信息很容易受到多徑衰落、噪聲和環(huán)境變化的影響;其次,通常需要額外的測距裝置,這會消耗更多的能量并增加硬件成本。無需測距的定位技術具有硬件成本低、能量消耗少的特點,特別適用于網(wǎng)絡規(guī)模大和需要耗能小的環(huán)境。無需測距的定位算法主要有質(zhì)心算法、凸近似算法、DV-hop算法、APIT算法、Amorphous定位算法等。
DV-hop定位算法的定位過程利用網(wǎng)絡中錨節(jié)點的信息廣播過程位置信息來進行節(jié)點定位,能夠有效地節(jié)約成本和節(jié)省能耗,因此是一種廣泛應用的無線傳感器網(wǎng)絡的定位技術。但是DV-Hop算法卻有定位精度較低的缺點,例如網(wǎng)絡在平均連通度為10,錨節(jié)點比例為10%的各向同性時的定位精度約為33%[6-7]。因此國內(nèi)外學者都對DV-hop定位算法進行了不斷的改進。劉士興等提出一種使用多個通信半徑廣播自身分組信息的RWDV-Hop算法,獲得了未知節(jié)點與錨節(jié)點更精確的跳數(shù)[8],然而該算法需要錨節(jié)點在泛洪階段向鄰居節(jié)點廣播多次不同通信半徑的數(shù)據(jù)信息,這樣增加了網(wǎng)絡節(jié)點的能耗。黨宏社等人提出采用節(jié)點接收的RSSI值與理想一跳的RSSI值的比值對經(jīng)典DV-Hop定位算法的一跳距離進行修正,并且直接對第一跳節(jié)點使用RSSI測距技術計算距離[9],但是該算法忽略了在定位過程中直接使用的RSSI值極易受環(huán)境的影響而造成較大的誤差,而且因其需要錨節(jié)點直接從節(jié)點寄存器中讀取RSSI值,這樣明顯地加大了泛洪信息的數(shù)據(jù)量和通信開銷。Hou S和Zhou等人提出了一種基于新型差分誤差的算法DDV-Hop,在定位計算的過程中,改進每個定位節(jié)點的平均跳距大小,然后對從不同錨節(jié)點接收到的平均跳距進行加權賦值來估計待定位節(jié)點的自身位置[10],該算法有效地降低了經(jīng)典DV-Hop的誤差,但是卻存在當所選取的兩個錨節(jié)點之間的跳數(shù)較多時導致估計的跳距仍有較大誤差的問題。范時平等是在Hou S等人的算法基礎上提出使用跳距誤差的加權平均值,修正原始的平均每跳距離,再采用分段的指數(shù)、對數(shù)遞減權重改進粒子群的權重,用改進的粒子群算法求解未知節(jié)點坐標[11],從而提高了定位精度。張玲華等引入多通信半徑方法細化節(jié)點間的跳數(shù),且在計算未知節(jié)點平均跳距時,剔除了孤立節(jié)點,并利用錨節(jié)點得到的平均跳距進行加權歸一化處理,使得未知節(jié)點定位精度提高[12],但在對所有加權參數(shù)值進行歸一化處理時計算復雜度較大。這些所改進的定位算法在一定條件下均能有效地降低經(jīng)典DV-Hop算法的誤差,但是在節(jié)約節(jié)點能耗和減少硬件成本方面效果并不顯著,且加大了整個網(wǎng)絡的計算復雜度。
本文針對現(xiàn)有的DV-hop改進算法在計算平均每跳距離時和對節(jié)點通信半徑內(nèi)的細化跳數(shù)估計仍然存在較大誤差的問題,提出一種基于杰卡德系數(shù)跳距修正的改進算法(簡稱JDV-Hop),引入杰卡德系數(shù)的修正因子對鄰居節(jié)點間的單跳距離進行修正,并采用DDV-Hop算法中錨節(jié)點的實際位置和估計位置的差分誤差系數(shù)進一步對平均跳距進行校正,最后在選擇參與定位計算的錨節(jié)點時,引入一種可協(xié)作式定位的可信度因子,將定位精度較高的節(jié)點升級位錨節(jié)點,在不增加硬件成本和節(jié)省網(wǎng)絡能耗的前提下實現(xiàn)更加準確的定位。
DV-Hop定位算法的原理與經(jīng)典的距離矢量路由算法比較相似。在DV-Hop算法中,通過計算未知節(jié)點與錨節(jié)點的最小跳數(shù),估算平均每跳的距離,并使用跳段距離代替實際距離來計算未知節(jié)點的定位坐標。
DV-Hop算法分為以下三個階段。
(1)計算未知節(jié)點與每個錨節(jié)點的最小跳數(shù)。錨節(jié)點向網(wǎng)絡廣播錨信息,錨信息中包含此錨節(jié)點的位置信息和一個初始值為0的跳數(shù)參數(shù),例如{ }id,xi,yi,hi的格式。接收節(jié)點記錄到每個錨節(jié)點的最小跳數(shù),忽略來自同一個錨節(jié)點的較大跳數(shù)的分組,然后將跳數(shù)值加1,并轉(zhuǎn)發(fā)給鄰居節(jié)點。通過這個方法,網(wǎng)絡中的所有節(jié)點能夠記錄其到每個錨節(jié)點的最小跳數(shù)。
(2)計算未知節(jié)點與錨節(jié)點的實際跳段距離。每個錨節(jié)點根據(jù)第一個階段中記錄的其他錨節(jié)點的位置信息和相距跳數(shù),利用式(1)計算平均每跳距離。
其中,(xi,yi),(xj,yj)為錨節(jié)點i,j的坐標,hi為錨節(jié)點i和 j(i≠j)之間的跳數(shù)。
然后,錨節(jié)點將計算的每跳平均距離用帶有生存期字段的分組廣播至網(wǎng)絡中,未知節(jié)點僅記錄接收到的第一個每跳平均距離,并轉(zhuǎn)發(fā)給鄰居節(jié)點。這個策略確保了絕大多數(shù)節(jié)點從最近的錨節(jié)點接收每跳平均距離值。未知節(jié)點接收到平均每跳距離后,根據(jù)記錄的跳數(shù),計算到每個錨節(jié)點的跳段距離。用hi表示某未知節(jié)點到第i個錨節(jié)點的最小跳數(shù),則其跳段距離di為:
(3)當未知節(jié)點獲得與3個或更多錨節(jié)點的距離時,利用三邊測量法或極大似然估計法或最小二乘法計算自身坐標位置。
(1)DV-Hop算法是基于網(wǎng)絡拓撲的連通度信息,因此在測距時存在誤差,而且跳數(shù)越多,累積的誤差就會越來越大。無線傳感器網(wǎng)絡節(jié)點是隨機分布的,而在錨節(jié)點的通信半徑范圍內(nèi)對所有未知節(jié)點或鄰居節(jié)點的跳數(shù)值都計為1跳,如圖1所示,節(jié)點B,C,D均在錨節(jié)點A的通信半徑中,所以與錨節(jié)點A跳數(shù)均只有一跳,但是實際距離卻相差較大,如果用平均每跳距離與跳數(shù)的乘積去計算A到某未知節(jié)點的距離必定產(chǎn)生較大誤差。
圖1 通信半徑內(nèi)的節(jié)點跳數(shù)示意圖
(2)在DV-Hop算法中未知節(jié)點用它到達錨節(jié)點的最小跳數(shù)和離它距離最近的錨節(jié)點的平均每跳距離的乘積來作為它和錨節(jié)點之間的距離,因此平均跳距的不精確容易對節(jié)點距離的計算產(chǎn)生較大的誤差。另外,未知節(jié)點選擇離自己最近的錨節(jié)點的平均跳距作為自己的平均每跳距離,而受網(wǎng)絡拓撲結(jié)構和網(wǎng)絡連通度的影響,單個錨節(jié)點估計的平均跳距無法準確地反映網(wǎng)絡的實際平均跳距。
(3)DV-Hop算法在求未知節(jié)點位置時,至少需要知道3個以上錨節(jié)點的距離信息,因此錨節(jié)點的最優(yōu)選取對未知節(jié)點的坐標確定極為重要?,F(xiàn)有的大多改進算法權衡了定位精度和計算復雜度,從錨節(jié)點的共線度、未知節(jié)點與錨節(jié)點間的跳數(shù)以及整個網(wǎng)絡的錨節(jié)點覆蓋分布三個方面進行了改進[13-15]。但是在減小網(wǎng)絡整體能耗上未能考慮到可以采用具體的閾值機制將已定位的未知節(jié)點轉(zhuǎn)換為錨節(jié)點,在不降低定位精度的同時又能夠節(jié)約網(wǎng)絡的整體能耗。
杰卡德系數(shù)又稱為杰卡德相似系數(shù),用于比較有限樣本集之間的相似性與差異性。杰卡德系數(shù)值越大,樣本相似度越高。定義如下:給定兩個集合A,B,杰卡德系數(shù)定義為A與B交集的大小與A與B并集的大小的比值
當集合A,B都為空時,J(A,B)的值為1。與杰卡德系數(shù)相關的指標叫做杰卡德距離,也用于描述集合之間的差異程度。杰卡德距離越大,樣本相似程度越低。公式定義如下:
M00:A、B屬性值同時為0的屬性個數(shù);
M01:A屬性值為0且B屬性值為1的屬性個數(shù);
M10:A屬性值為1且B屬性值為0的屬性個數(shù);
M11:A,B屬性值同時為1的屬性個數(shù)。
顯然有:
杰卡德系數(shù):
杰卡德距離:
(1)杰卡德系數(shù)不僅可以比較兩個集合的相似程度,也可以區(qū)分集合的差異程度。為了在DV-Hop算法中計算更加精確的平均跳距,本文將杰卡德系數(shù)引入到DV-hop算法中,在鄰居節(jié)點間的通信半徑范圍內(nèi),利用杰卡德系數(shù)作為一種修正因子τi,對其相交區(qū)域中的節(jié)點數(shù)量進行賦值,從而進一步細化節(jié)點對其鄰居節(jié)點的估計跳數(shù),并得到更加精確的單跳距離。
在圖2中錨節(jié)點A的通信半徑內(nèi)有很多未知節(jié)點,任取兩個未知點B、C,B、C兩點也有相同的通信半徑,分別將A、B、C通信半徑內(nèi)的節(jié)點數(shù)看作是一個集合,并將節(jié)點個數(shù)計為NA、NB、NC。
圖2 節(jié)點通信半徑內(nèi)相交區(qū)域示意圖
因此可求得節(jié)點A、B通信半徑內(nèi)相交區(qū)域的杰卡德系數(shù):
杰卡德距離為:
同理可以求得:
顯然dj(A,B)>dj(A,C)。不難發(fā)現(xiàn),在錨節(jié)點通信半徑范圍內(nèi)任意一個較均勻分布的節(jié)點離錨節(jié)點距離的遠近程度都可以用其通信范圍與錨節(jié)點通信范圍所相交區(qū)域節(jié)點數(shù)的杰卡德距離來表示,離得越遠的杰卡德距離越大,如dj(A,B)≈0.788接近跳數(shù)1。因此引入一種基于杰卡德系數(shù)的修正因子τi,來對節(jié)點通信半徑范圍內(nèi)的跳數(shù)進一步修正,實現(xiàn)更精確的平均跳距的計算。使用此方法修正得到的通信半徑內(nèi)的跳數(shù)為1-τi,其中τi=J(a,b),J(a,b)表示為節(jié)點a的通信半徑范圍內(nèi)的b節(jié)點,兩節(jié)點通信半徑范圍內(nèi)相交區(qū)域集合的杰卡德系數(shù)。
(2)在利用了杰卡德系數(shù)因子修正了跳數(shù)的基礎上,引入DDV-Hop的有限差分誤差來改進平均跳距的計算。因為第一階段錨節(jié)點的信息經(jīng)過泛洪廣播之后,所有錨節(jié)點也接收到了其他錨節(jié)點的具體跳數(shù)信息,因此可以得到一個估算的錨節(jié)點的距離,例如錨節(jié)點i和j之間的距離可以表示為:
然后把所有錨節(jié)點的差分誤差在全網(wǎng)進行廣播,未知節(jié)點接收到跳數(shù)信息時,不僅保存接收到的第一個錨節(jié)點的跳距和差分誤差,而且設定一個閾值Mthh,使得未知節(jié)點接收具有差分信息錨節(jié)點的數(shù)量達到Mthh時,最終可以得到一個修正誤差的系數(shù)權值為式(7)。
從而得到某一點A修正后的跳距為式(8)。
其中σi是未知節(jié)點A從錨節(jié)點i獲取的平均跳數(shù)的加權系數(shù),并且Mthh與無線傳感器網(wǎng)絡節(jié)點最終定位精度的目標相關。所以假設閾值Mthh與最終定位目標成線性相關函數(shù),比例系數(shù)為β,所以Mthh的公式為式(9)。
其中Mmax為所選取的最優(yōu)錨節(jié)點集合內(nèi)的節(jié)點個數(shù)。
(3)現(xiàn)有的多數(shù)DV-hop改進算法都是在第三階段任取三個或者三個以上的錨節(jié)點采用三邊測量法、最大似然估計法和一些改進后的最小二乘法計算待定位節(jié)點的位置坐標。協(xié)作式定位算法的基本思想是將定位后的節(jié)點有條件地升級為錨節(jié)點,對其他未知節(jié)點繼續(xù)進行定位。而升級為錨節(jié)點的未知節(jié)點的自身定位精度必須要足夠高,否則雖然能減少無線傳感器網(wǎng)絡整體的能耗,但是用其不準確的位置去再次估計其他未知節(jié)點的位置仍然會造成較大的誤差。本文提出一種可以進行協(xié)作式定位的可信度因子,有效地將定位精度高的未知節(jié)點升級為錨節(jié)點。
例如在一個無線傳感器網(wǎng)絡里未知節(jié)點A1的位置可以通過其他三個錨節(jié)點 A2、A3、A4三邊測量法得到。在對節(jié)點A1的定位結(jié)束后,得到了A1的具體位置信息,此時將A1視為錨節(jié)點,而A2、A3、A4中任選取一點(這里選作A2)作為待定位節(jié)點,并通過其他兩點A3、A4和A1對其進行定位,運用三邊測量法得到后的坐標為A2(xest,yest),而A2實際的坐標為(x,y),假設通信半徑為R,因此A1的歸一化定位誤差為:
將e視作為節(jié)點間可協(xié)作式定位的可信度因子。從第二階段的差分誤差改進方法中,可以得到任意節(jié)點的可信度因子ei的閾值為式(11)。
僅當節(jié)點的可信度因子滿足ei≤ui時,才可以將其升級為錨節(jié)點并參與對其他未知節(jié)點進行定位計算。
(2)當全網(wǎng)所有節(jié)點都接收到錨節(jié)點的信息后,可以得到每個錨節(jié)點間的歐幾里德距離dij,并計算每個錨節(jié)點的平均跳距為錨節(jié)點i和j之間通過跳數(shù)與平均跳距的乘積得到的估計距離,從而得到每個錨節(jié)點的差分誤差值diff_erri,并把所有錨節(jié)點的差分誤差在全網(wǎng)進行廣播,未知節(jié)點接收到跳數(shù)信息時,不僅保存接收到的第一個錨節(jié)點的跳距和差分誤差。而是設定一個閾值Mthh,使得未知節(jié)點接收差分信息的錨節(jié)點數(shù)量達到Mthh,最終可以得到一個修正誤差的系數(shù)權值σi;并修正未知節(jié)點的平均跳距。
(3)通過錨節(jié)點的兩次泛洪信息,每個未知節(jié)點都得到與自己相連通的錨節(jié)點的個數(shù)和跳距。未知節(jié)點選取離自己較近的3個錨節(jié)點,并按照式(10)、(11)計算它們的可信度因子ei。當未知節(jié)點的可信度因子符合ei≤ui時,將其升級為錨節(jié)點并參與其他待定位節(jié)點的定位中。新的錨節(jié)點集循環(huán)以上步驟,直到網(wǎng)絡中沒有符合定位條件的未知節(jié)點為止。
改進的算法流程圖如圖3所示。
為了驗證本文對傳統(tǒng)DV-Hop算法和DDV-Hop算法的改進方法的可行性,使用MATLAB R2014a對DV-hop算法,DDV-hop等改進算法和本文所提出的改進算法(JDV-hop算法)進行仿真實驗,并對實驗結(jié)果進行對比和分析。仿真環(huán)境設定為:100 m×100 m的正方形區(qū)域,150個隨機分布的節(jié)點(包括錨節(jié)點和未知節(jié)點)。節(jié)點通信半徑為R。
未知節(jié)點的平均定位誤差:
未知節(jié)點的相對定位誤差:
圖3 改進算法流程圖
在默認設定的仿真環(huán)境下,改變節(jié)點通信半徑R,經(jīng)典DV-Hop算法、DDV-Hop算法、文獻[8]中的改進算法、文獻[9]中的改進算法和本文改進算法JDV-Hop在仿真實驗中隨著節(jié)點通信半徑從25 m增加到55 m的過程,五種不同算法的平均相對誤差變化情況如圖4所示。
圖4 相關改進算法在不同通信半徑的定位誤差比較圖
從圖4可以看出隨著通信半徑R的增加,五種定位算法的平均定位誤差都呈下降趨勢,當R>40時,DDVHop算法和文獻[8]算法及JDV-Hop算法,三種算法的平均相對誤差都趨于穩(wěn)定,其中DDV-hop的平均定位誤差比經(jīng)典DV-hop算法僅下降為18.5%,而JDV-Hop改進算法的平均定位誤差值比傳統(tǒng)DV-Hop算法的平均誤差值低約27%,比文獻[8]的算法的誤差值下降了10%,比DDV-Hop的平均誤差值下降了8%,和文獻[9]的改進算法相比,平均誤差值也下降了3.5%。由此可知在相同的仿真環(huán)境下,當錨節(jié)點個數(shù)一定時,隨著通信半徑的增加,相應的網(wǎng)絡連通度變大時,本文的改進算法能夠?qū)崿F(xiàn)更加精確的定位。
在默認設定的仿真環(huán)境下,將錨節(jié)點個數(shù)從10個增加到50個(即錨節(jié)點比例從7%增大到33%)。當通信半徑為30 m、40 m和50 m時幾種算法的相對定位誤差值與錨節(jié)點比例關系的仿真圖分別如圖5~圖7所示。
圖5 通信半徑為30 m時不同錨節(jié)點比例下的定位誤差
圖6 通信半徑為40 m時不同錨節(jié)點比例下的定位誤差
圖7 通信半徑為50 m時不同錨節(jié)點比例下的定位誤差
在圖5中,將本文改進的算法與經(jīng)典DV-Hop算法、文獻[8]的算法和文獻[9]的算法等幾種改進算法進行比較發(fā)現(xiàn)當錨節(jié)點個數(shù)大于30時,本文的改進算法比經(jīng)典DV-Hop算法相比,誤差降低了近12%,而DDV-Hop改進算法只降低了近5%。文獻[9]算法因為其直接使用RSSI測距技術測量一跳距離,所以此時是平均誤差最低的一種算法。
在圖6中,當通信半徑增加到40 m,且錨節(jié)點比例個數(shù)大于30時,五種算法的相對誤差值趨于平穩(wěn),此時本文算法比傳統(tǒng)DV-Hop定位算法的相對定位誤差下降了近15%,比DDV-hop算法相比下降了近11%,在不用增加額外硬件成本的基礎上就達到了和文獻[9]算法定位結(jié)果較為接近的精度,且相對定位誤差基本處于0.2以下,在錨節(jié)點數(shù)大于30時,達到了0.15(即控制在了15%以內(nèi))。
將圖6和圖7進行比較,可以看出錨節(jié)點比例個數(shù)大于30時,通信半徑固定在40 m或者50 m時,隨著錨節(jié)點個數(shù)的繼續(xù)增加,本文改進算法比經(jīng)典DV-Hop算法和DDV-Hop算法的相對誤差下降了近16%,這是因為通信半徑固定時,隨著網(wǎng)絡錨節(jié)點密度的增加,在節(jié)點的通信半徑內(nèi)會出現(xiàn)更多的節(jié)點,而本文所提出的JDV-Hop改進算法并沒有使用文獻[9]中的改進算法采用RSSI測距技術直接測量單跳距離,而是利用杰卡德系數(shù)因子細化通信半徑內(nèi)未知節(jié)點的跳數(shù),并使用差分誤差值進一步修正跳距,使當通信半徑內(nèi)的鄰居節(jié)點越多,網(wǎng)絡拓撲結(jié)構越規(guī)則時,能夠?qū)崿F(xiàn)更加精確的定位。圖7仿真的實驗結(jié)果顯示,本文算法在不增加硬件成本和額外通信開銷的基礎上已經(jīng)達到了和文獻[9]的改進算法十分接近的定位精度。
在仿真實驗中,定位算法的網(wǎng)絡運行時間被用來當作其計算復雜度的度量。在圖8中,描述了在150個節(jié)點個數(shù),通信半徑R=30 m以及不同錨節(jié)點比例的環(huán)境下,幾種算法的網(wǎng)絡運行時間的比較。
圖8 不同算法的網(wǎng)絡運行時間圖
由圖8可知,文獻[9]的改進算法和本文所提出的JDV-Hop改進算法所需要的運行時間最多,因此這兩類改進算法具有最高的計算復雜度,這也說明了文獻[9]改進算法和本文所提出的JDV-Hop算法與經(jīng)典DV-Hop算法相比,以一定的計算復雜度換取了更高的定位精度。而本文所提出的JDV-Hop改進算法所需要的運行時間比文獻[9]的改進算法所需要的網(wǎng)絡運行時間更少,所以其計算復雜度比文獻[9]改進算法的更低,且其不需要增加硬件成本,就能夠有效地減小定位誤差,實現(xiàn)更精確的節(jié)點定位精度。
本文針對DV-Hop算法中對節(jié)點單跳距離內(nèi)的未知節(jié)點跳數(shù)的估計所產(chǎn)生的誤差,利用杰卡德系數(shù)的跳數(shù)修正因子細化節(jié)點間跳數(shù),并引入DDV-hop算法中的差分誤差進一步修正節(jié)點間的平均跳距,實現(xiàn)更精確的平均跳距計算。在選擇參與定位計算的錨節(jié)點時,提出一種可協(xié)作式定位的可信度因子,將定位結(jié)果精度高的節(jié)點升級為新的錨節(jié)點,進一步減小節(jié)點定位誤差和網(wǎng)絡能耗。MALTLAB仿真實驗結(jié)果表明,本文所提出的JDV-Hop改進算法與經(jīng)典DV-Hop定位算法及相關改進算法相比不僅能夠減小能耗,在不增加硬件成本的基礎上還能夠更有效地減小定位誤差。未來將針對節(jié)點數(shù)目較少,錨節(jié)點覆蓋率較低等研究的算法問題上作進一步的改進,使其在工程中應用廣泛。