姜 鈞,程良倫
(廣東工業(yè)大學(xué) 自動(dòng)化學(xué)院,廣州 510006)
無(wú)線傳感器網(wǎng)絡(luò)(WSN)技術(shù)在軍事、商業(yè)、環(huán)境監(jiān)測(cè)、醫(yī)療護(hù)理、家庭自動(dòng)化等領(lǐng)域獲得越來(lái)越多的應(yīng)用[1-2]。節(jié)點(diǎn)定位作為其關(guān)鍵技術(shù)之一逐漸成為研究熱點(diǎn)[3-4]。
無(wú)線傳感器網(wǎng)絡(luò)定位算法有很多種,一般可以分為基于測(cè)距(rang-based)和無(wú)需測(cè)距(rang-free)兩類[5]。前者需要測(cè)量節(jié)點(diǎn)間的角度或距離信息,然后使用三邊或多邊定位得到節(jié)點(diǎn)位置,對(duì)時(shí)間同步和節(jié)點(diǎn)硬件提出較高的要求;后者不需要測(cè)量節(jié)點(diǎn)間角度或距離信息,僅通過(guò)節(jié)點(diǎn)間的連通度進(jìn)行定位。因此,無(wú)需測(cè)距的定位算法更適合大規(guī)模無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)定位的實(shí)際需求,得到越來(lái)越多的關(guān)注。
DV-Hop[6]定位算法是目前運(yùn)用最廣泛的無(wú)需測(cè)距的定位算法,針對(duì)該算法的優(yōu)化也是不斷出現(xiàn)[7-10]。文獻(xiàn)[7]對(duì)未知節(jié)點(diǎn)與錨節(jié)點(diǎn)之間的估計(jì)距離作修正,該修正由多跳的校正值和錨節(jié)點(diǎn)的平均每跳距離誤差所組成,同時(shí)將總體最小二乘法應(yīng)用于最后的三邊測(cè)量法中。文獻(xiàn)[8]在節(jié)點(diǎn)的初始位置上利用彈簧模擬方法對(duì)節(jié)點(diǎn)位置迭代求精。文獻(xiàn)[9]根據(jù)不同的節(jié)點(diǎn)分布情況計(jì)算出不同的平均跳距,使其更接近于實(shí)際平均跳距,定位時(shí)用Min-Max方法代替了最小二乘法,另外,對(duì)定位初步結(jié)果進(jìn)行循環(huán)位置修正。文獻(xiàn)[10]通過(guò)最小二乘準(zhǔn)則校正了平均每跳距離,并且通過(guò)加權(quán)修正了跳段距離,最后還通過(guò)泰勒展開(kāi)進(jìn)行了迭代求精。上述參考文獻(xiàn)中的優(yōu)化都或多或少的增加了通信開(kāi)銷和計(jì)算開(kāi)銷。本文主要從降低DV-Hop算法對(duì)錨節(jié)點(diǎn)密度需求的角度入手引入虛擬錨節(jié)點(diǎn),并參考文獻(xiàn)[10],對(duì)跳數(shù)和平均跳距進(jìn)行了限制與修正,通過(guò)仿真實(shí)驗(yàn),驗(yàn)證了方案的性能。
DV-Hop算法的基本思想是,將未知節(jié)點(diǎn)到錨節(jié)點(diǎn)間的距離用節(jié)點(diǎn)平均每跳距離和跳數(shù)的乘積來(lái)表示,然后再利用三邊測(cè)量法或者多邊測(cè)量法求得未知節(jié)點(diǎn)的位置。它主要包括3個(gè)階段。
第一階段,每個(gè)錨節(jié)點(diǎn)以泛洪的形式在整個(gè)網(wǎng)絡(luò)廣播信息,信息格式為{idi,xi,yi,hopsi},其中包含了錨節(jié)點(diǎn)的標(biāo)識(shí)idi,位置信息(xi,yi)以及跳數(shù)信息hopsi。這樣錨節(jié)點(diǎn)i根據(jù)式(1)計(jì)算自己的平均每跳距離。

式中j為錨節(jié)點(diǎn)i數(shù)據(jù)表中的其它錨節(jié)點(diǎn),hopsij為錨節(jié)點(diǎn)i和j之間的跳數(shù)。
第二階段,錨節(jié)點(diǎn)廣播自己計(jì)算的平均每跳距離,未知節(jié)點(diǎn)收取每個(gè)錨節(jié)點(diǎn)的第一個(gè)平均每跳距離,而丟棄后來(lái)數(shù)據(jù)。
如圖 1 所示,假設(shè)有錨節(jié)點(diǎn)i,j,k,錨節(jié)點(diǎn)i和j、k之間的距離為dij,dik,則錨節(jié)點(diǎn)i計(jì)算的平均每跳距離為

假設(shè)要定位未知節(jié)點(diǎn)m的位置,m先收到三個(gè)錨節(jié)點(diǎn)中i的平均每跳距離信息,節(jié)點(diǎn)m便用cm=ci估算出到錨節(jié)點(diǎn)i,j,k的距離分別為cmhopsmi,cmhopsmj,cmhopsmk。
第三階段,未知節(jié)點(diǎn)根據(jù)求出的到各錨節(jié)點(diǎn)的距離,利用三邊或多邊定位法完成定位。

圖1 DV-Hop定位算法示意圖
由于節(jié)點(diǎn)之間的信息交互不是走的直線距離,再加上節(jié)點(diǎn)間每一跳的距離都是有差別的,所以估算的節(jié)點(diǎn)位置和實(shí)際值是有差別的。例如圖1中未知節(jié)點(diǎn)m估算的到錨節(jié)點(diǎn)k的距離為4cm,即使網(wǎng)絡(luò)中每一跳的距離都相等,得到的估計(jì)距離也和實(shí)際值dmk不相等。節(jié)點(diǎn)隨機(jī)分布的網(wǎng)絡(luò)拓?fù)涫沟靡云骄刻嚯x來(lái)衡量所有距離本身就是有誤差的,如果錨節(jié)點(diǎn)密度偏小,這種誤差將會(huì)更大。
本文參考DV-Hop算法,提出一種基于虛擬錨節(jié)點(diǎn)的定位算法,簡(jiǎn)稱為VAD-Hop定位算法。
由于節(jié)點(diǎn)不是均勻分布的,所以會(huì)出現(xiàn)在錨節(jié)點(diǎn)的通信距離內(nèi)有的未知節(jié)點(diǎn)離錨節(jié)點(diǎn)較近,有的未知節(jié)點(diǎn)離錨節(jié)點(diǎn)較遠(yuǎn),但它們各自從收到的信息來(lái)看都認(rèn)為自己在離錨節(jié)點(diǎn)距離一跳的位置,這樣得到的跳段距離是不準(zhǔn)確的。這會(huì)間接影響錨節(jié)點(diǎn)得到平均每跳距離的數(shù)值,因此要采取相應(yīng)措施。

實(shí)際上,跳數(shù)依照小數(shù)的細(xì)分與距離成直線性關(guān)系,而信號(hào)強(qiáng)度與距離并不是,所以式(3)并不是一個(gè)很準(zhǔn)確的式子。而在細(xì)化的程度不大的時(shí)候,也就是k值不大的時(shí)候,該公式的應(yīng)用還是準(zhǔn)確的。k值的選取與網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),節(jié)點(diǎn)通信半徑都有關(guān)系,具體選取時(shí)需要實(shí)際情況實(shí)際對(duì)待,既要考慮能夠提高定位精度,又要考慮不過(guò)多增加存儲(chǔ)量,增加成本。
在網(wǎng)絡(luò)中,如果錨節(jié)點(diǎn)稀疏,跳距的累計(jì)誤差會(huì)加大,定位精度會(huì)降低,但是由于錨節(jié)點(diǎn)的成本比較高[11],因此在低錨節(jié)點(diǎn)密度的無(wú)線傳感器網(wǎng)絡(luò)中如何用DV-Hop算法來(lái)保證定位精度是首要著手點(diǎn)。文獻(xiàn)[12]將未知節(jié)點(diǎn)升級(jí)為新錨節(jié)點(diǎn),最終實(shí)現(xiàn)低錨節(jié)點(diǎn)密度網(wǎng)絡(luò)中所有未知節(jié)點(diǎn)的定位,本文將其稱為虛擬錨節(jié)點(diǎn),即在網(wǎng)絡(luò)布局的時(shí)候?yàn)槲粗?jié)點(diǎn),在定位的過(guò)程中升級(jí)成為錨節(jié)點(diǎn)為其它的未知節(jié)點(diǎn)的定位提供幫助。
根據(jù)虛擬錨節(jié)點(diǎn)的得到條件,又可分為四類。這里將依靠三個(gè)及三個(gè)以上錨節(jié)點(diǎn)定位的虛擬錨節(jié)點(diǎn)稱為準(zhǔn)虛擬錨節(jié)點(diǎn),將依靠少量準(zhǔn)錨節(jié)點(diǎn)和大量錨節(jié)點(diǎn)定位的虛擬錨節(jié)點(diǎn)稱為亞虛擬錨節(jié)點(diǎn),將依靠大量虛擬錨節(jié)點(diǎn)和少量錨節(jié)點(diǎn)定位的虛擬錨節(jié)點(diǎn)稱為次虛擬錨節(jié)點(diǎn),將依靠全部虛擬錨節(jié)點(diǎn)定位的虛擬錨節(jié)點(diǎn)稱為純虛擬錨節(jié)點(diǎn)。理論上講只要網(wǎng)絡(luò)中存在3個(gè)以上的錨節(jié)點(diǎn),每一個(gè)未知節(jié)點(diǎn)都能接收到從每個(gè)錨節(jié)點(diǎn)傳來(lái)的信息,從而利用三邊或多邊法進(jìn)行定位,但是有的未知節(jié)點(diǎn)距離錨節(jié)點(diǎn)的跳數(shù)很大,會(huì)造成跳距的很大累計(jì)誤差,定位誤差很大,本文認(rèn)為這些從很遠(yuǎn)處的錨節(jié)點(diǎn)獲取消息是無(wú)效的,不如利用相隔較近的虛擬錨節(jié)點(diǎn)的信息進(jìn)行定位。雖然虛擬錨節(jié)點(diǎn)本身的位置信息是估算的,不如錨節(jié)點(diǎn)的位置信息準(zhǔn)確,但是如果經(jīng)過(guò)一定的處理,提高虛擬錨節(jié)點(diǎn)位置信息的準(zhǔn)確度,可以使得最后節(jié)點(diǎn)的定位誤差小于依靠較遠(yuǎn)位置的錨節(jié)點(diǎn)定位產(chǎn)生的誤差。同時(shí)節(jié)點(diǎn)將收到跳數(shù)較多的錨節(jié)點(diǎn)發(fā)出的信息丟棄在一定程度上還能減少網(wǎng)絡(luò)的通信量。這里引入跳數(shù)的有效閾值m,大于m的跳數(shù)被認(rèn)為節(jié)點(diǎn)間相隔較遠(yuǎn)。
由于四類虛擬錨節(jié)點(diǎn)的定位存在依賴關(guān)系,即會(huì)造成累計(jì)誤差,本文研究和實(shí)驗(yàn)的對(duì)象以依靠準(zhǔn)虛擬錨節(jié)點(diǎn)和亞虛擬錨節(jié)點(diǎn)實(shí)現(xiàn)所有未知節(jié)點(diǎn)定位的低錨節(jié)點(diǎn)密度的無(wú)線傳感器網(wǎng)絡(luò)。
假設(shè)得到的準(zhǔn)虛擬錨節(jié)點(diǎn)存在誤差e1,亞虛擬錨節(jié)點(diǎn)存在誤差e2,由于e1是由錨節(jié)點(diǎn)得到的,并且沒(méi)有依賴距離比較遠(yuǎn)的錨節(jié)點(diǎn),故其值是很小的。而e2主要是由大量錨節(jié)點(diǎn)定位的,這中間也沒(méi)有依賴距離比較遠(yuǎn)的錨節(jié)點(diǎn),所以其值也是可以信賴的,雖然在e1的基礎(chǔ)上存在累計(jì)誤差,但是有部分亞虛擬錨節(jié)點(diǎn)的e2可能與e1存在方向相反的分量,可以有效消除部分誤差分量。而后面兩種虛擬錨節(jié)點(diǎn)也存在部分的誤差抵消情況,但是本身是依靠位置信息存在誤差的虛擬錨節(jié)點(diǎn)得到的,故本身位置信息的誤差較大,暫時(shí)不在本文實(shí)驗(yàn)范圍之內(nèi)。
引入虛擬錨節(jié)點(diǎn)會(huì)出現(xiàn)一個(gè)問(wèn)題,就是虛擬錨節(jié)點(diǎn)的id確定的問(wèn)題。由于定位的過(guò)程中,節(jié)點(diǎn)需要識(shí)別不同的錨節(jié)點(diǎn)的信息,也就是需要辨別出數(shù)據(jù)包的來(lái)源,這里提出特征標(biāo)識(shí)Tb的概念,用于區(qū)分錨節(jié)點(diǎn)與虛擬錨節(jié)點(diǎn)。當(dāng)錨節(jié)點(diǎn)發(fā)送數(shù)據(jù)包時(shí),Tb=0,當(dāng)準(zhǔn)虛擬錨節(jié)點(diǎn)發(fā)送數(shù)據(jù)包時(shí),Tb=1,當(dāng)亞虛擬錨節(jié)點(diǎn)發(fā)送數(shù)據(jù)包時(shí)Tb=2,后面依次類推。通過(guò)引入特征標(biāo)識(shí)可以將錨節(jié)點(diǎn)與虛擬錨節(jié)點(diǎn)區(qū)分開(kāi)來(lái),但是還是不能很好的區(qū)分同類虛擬錨節(jié)點(diǎn)的id,會(huì)出現(xiàn)未知節(jié)點(diǎn)由于收到來(lái)源于不同虛擬錨節(jié)點(diǎn)的相同的id而將后來(lái)者丟棄的情況。這里定義

為準(zhǔn)虛擬錨節(jié)點(diǎn)的id,其中n為到虛擬錨節(jié)點(diǎn)的可用錨節(jié)點(diǎn)的個(gè)數(shù),hopsn為每個(gè)錨節(jié)點(diǎn)經(jīng)過(guò)細(xì)化后的到虛擬錨節(jié)點(diǎn)的總跳數(shù)。使用式(4)用簡(jiǎn)單的計(jì)算得到小數(shù)形式的數(shù)據(jù)作為準(zhǔn)虛擬錨節(jié)點(diǎn)的id,即使兩個(gè)未知節(jié)點(diǎn)相隔比較近,但是式中用兩個(gè)不相關(guān)的變量基本能將不同虛擬錨節(jié)點(diǎn)相同id的概率降到0。亞虛擬錨節(jié)點(diǎn)將準(zhǔn)虛擬錨節(jié)點(diǎn)以錨節(jié)點(diǎn)看待,采用同樣的方法得到自己的id。
基于無(wú)偏估計(jì)準(zhǔn)則計(jì)算錨節(jié)點(diǎn)平均每跳距離應(yīng)用得很多,最小二乘法也可應(yīng)用其中[10]。在 DVHop的第一階段,假設(shè)錨節(jié)點(diǎn)i接收到其它錨節(jié)點(diǎn)的位置信息,則錨節(jié)點(diǎn)i計(jì)算的平均每跳距離ci應(yīng)滿足:

式中j為錨節(jié)點(diǎn)i的數(shù)據(jù)表中存儲(chǔ)的其它錨節(jié)點(diǎn),hopsij為錨節(jié)點(diǎn)i和j之間的跳數(shù),dij為二者之間的真實(shí)距離,eij為用平均每跳距離與跳數(shù)乘積代替實(shí)際距離產(chǎn)生的誤差。如果誤差越小,采用的ci最合理,根據(jù)最小二乘法準(zhǔn)則,用∑作為總誤差,則


以圖1為例,錨節(jié)點(diǎn)i采用VAD-Hop算法計(jì)算的平均每跳距離為

當(dāng)然這里的hopsij和hopsij并不為2和5,而是采用上面提到的經(jīng)過(guò)細(xì)化處理后的跳距,具體的數(shù)值要根據(jù)選取的信號(hào)強(qiáng)度等級(jí)k有關(guān)。
該算法主要在于用虛擬錨節(jié)點(diǎn)參與未知節(jié)點(diǎn)的定位,減少了成本,同時(shí)為了提高定位精度采用細(xì)化跳距,修正平均每跳距離的做法,對(duì)于很多人提到的加權(quán)處理和迭代處理,雖然在一定程度上能夠提高定位精度,但是增加了計(jì)算量和通信量,本文沒(méi)有考慮。具體的算法步驟如下:①網(wǎng)絡(luò)初始化,設(shè)置k,m;②錨節(jié)點(diǎn)以泛洪形式廣播包含Tb,id,hops信息的數(shù)據(jù)包,其中hops的初始值為0;③接收到數(shù)據(jù)包的未知節(jié)點(diǎn)獲取細(xì)化后的跳數(shù)y,然后通過(guò)比較特征標(biāo)識(shí)和id將同一來(lái)源的跳數(shù)較小的數(shù)據(jù)信息記錄下來(lái),并將跳數(shù)加y,如果此時(shí)的跳數(shù)小于m就將數(shù)據(jù)包轉(zhuǎn)發(fā)出去,否則丟棄;④廣播一段時(shí)間后,每個(gè)錨節(jié)點(diǎn)使用得到的錨節(jié)點(diǎn)的信息計(jì)算出自己的平均每跳距離c,然后將包含 Tb,id,hops,c信息的數(shù)據(jù)包以泛洪形式廣播出去;⑤重復(fù)③,同時(shí),未知節(jié)點(diǎn)計(jì)算自己到錨節(jié)點(diǎn)的估算距離;⑥獲得三個(gè)以上錨節(jié)點(diǎn)信息的未知節(jié)點(diǎn)利用三邊法或多邊法進(jìn)行定位,定位后的節(jié)點(diǎn)計(jì)算自己的id,并將自己的Tb改為1;⑦一段時(shí)間后,已經(jīng)定位的未知節(jié)點(diǎn)成為虛擬錨節(jié)點(diǎn),和錨節(jié)點(diǎn)一起通過(guò)泛洪形式廣播包含Tb,id,hops信息的數(shù)據(jù)包,其中 hops的初始值為0;⑧重復(fù)③、④、⑤;⑨獲得3個(gè)以上少量虛擬錨節(jié)點(diǎn)和大量錨節(jié)點(diǎn)的未知節(jié)點(diǎn)利用三邊法或多邊法進(jìn)行定位,定位后的節(jié)點(diǎn)計(jì)算自己的id,并將自己的Tb改為2;⑩一段時(shí)間后,亞虛擬錨節(jié)點(diǎn),準(zhǔn)虛擬錨節(jié)點(diǎn)和錨節(jié)點(diǎn)一起重復(fù)②、③、④、⑤,未知節(jié)點(diǎn)按照三邊或者多邊測(cè)量法計(jì)算自己的位置。
為了驗(yàn)證算法的性能,本文對(duì)傳統(tǒng)的DV-Hop定位算法和VAD-Hop算法在MATLAB 7.1平臺(tái)上進(jìn)行了仿真對(duì)比。將100個(gè)節(jié)點(diǎn)隨機(jī)分布于50×50的區(qū)域內(nèi),錨節(jié)點(diǎn)的個(gè)數(shù)分別取 5,8,11,14,17,20,23,節(jié)點(diǎn)通訊距離取15,跳數(shù)閾值m取35,記錄50次節(jié)點(diǎn)隨機(jī)分布試驗(yàn)的定位誤差取平均值。其中k取值2,亞虛擬錨節(jié)點(diǎn)的選取按依靠少于1/3的準(zhǔn)虛擬錨節(jié)點(diǎn)和多于2/3的錨節(jié)點(diǎn)定位確定來(lái)決定,定位誤差按照文獻(xiàn)[10]中計(jì)算,將基于平均跳距修正的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)迭代定位算法簡(jiǎn)稱為DVHop(跳距修正),將本文算法與其比較。接著逐步增加節(jié)點(diǎn)總數(shù),進(jìn)一步進(jìn)行比較。
從圖2和圖3可以看出VAD-Hop算法比原DV-Hop和DV-Hop(跳距修正)的定位誤差小,并且隨著節(jié)點(diǎn)總數(shù)的增加,VAD-Hop的優(yōu)越性更加體現(xiàn)出來(lái)。通過(guò)仿真實(shí)驗(yàn)很好的說(shuō)明了VAD-Hop算法的效果。

圖2 錨節(jié)點(diǎn)個(gè)數(shù)與定位誤差

圖3 節(jié)點(diǎn)總數(shù)與定位誤差
本文在DV-Hop算法的基礎(chǔ)上,以減少錨節(jié)點(diǎn)完成定位為目標(biāo),引入虛擬錨節(jié)點(diǎn),并對(duì)幾種虛擬錨節(jié)點(diǎn)進(jìn)行了定性分析,提出解決虛擬錨節(jié)點(diǎn)身份識(shí)別的方法,在使用準(zhǔn)虛擬錨節(jié)點(diǎn)和亞虛擬錨節(jié)點(diǎn)的基礎(chǔ)上,又采用了跳數(shù)閾值限制下的跳數(shù)細(xì)分,并且修正了跳距。整個(gè)算法可以降低定位對(duì)錨節(jié)點(diǎn)的需求,從而可以降低網(wǎng)絡(luò)成本,并且可以提高定位精度。對(duì)于類型有區(qū)別的虛擬錨節(jié)點(diǎn)還需要深入的深究,對(duì)于如何選擇跳數(shù)閾值以及跳數(shù)細(xì)分時(shí)采用的信號(hào)強(qiáng)度等級(jí)也需要進(jìn)一步作研究,這些問(wèn)題將在以后的論文中提出。
[1]李瑤怡,赫曉星,劉守印.基于路徑損耗模型參數(shù)實(shí)時(shí)估計(jì)的無(wú)線定位方法[J].傳感技術(shù)學(xué)報(bào),2010,23(9):1328-1333.
[2]Wang Lei,Wang Xiaopeng,Du Xiaotong.Some Issues on WSN Localization Based on MLE[C]//Intelligent Control and Automation(WCICA),2010 8th World Congress on,2010:796-800.
[3]蔡紹濱,李希,田鷹,等.基于圓形選擇技術(shù)的循環(huán)三邊組合測(cè)量法的研究[J].計(jì)算機(jī)研究與發(fā)展,2010,47(2):238-244.
[4]Shahriari Nia M,Khaxar M,Rashti S M.Discrete Probabilistic DVHop:Reengineering High Accuracy Range-Free WSN Localization[C]//Ultra Modern Telecommunications & Workshops,2009.ICUMT’09.International Conference on,2009:1-6.
[5]Gao Guoqing,Lei Lin.An Improved Node Localization Algorithm Based on DV-HOP in WSN[C]//Advanced Computer Control(ICACC),2010 2nd International Conference on,2010:321-324.
[6]Nicolescu D,Nath B.Ad-Hoc Positioning Systems(APS)[C]//Proc.of the 2001 IEEE Global Telecommunications Conf.Vol.5,San Antonio:IEEE Communications Society,2001.2926-2931.
[7]張佳,吳延海,石峰,等.基于DV-HOP的無(wú)線傳感器網(wǎng)絡(luò)定位算法[J].計(jì)算機(jī)應(yīng)用,2010,30(2):323-326.
[8]田金鵬,施惠昌.無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)定位改進(jìn)算法[J].上海大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,15(3):225-229.
[9]趙清華,劉少飛,張朝霞,等.一種無(wú)需測(cè)距節(jié)點(diǎn)定位算法的分析和改進(jìn)[J].傳感技術(shù)學(xué)報(bào),2010,23(1):122-127.
[10]林金朝,陳曉冰,劉海波.基于平均跳距修正的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)迭代定位算法[J].通信學(xué)報(bào),2009,30(10):107-113.
[11]Zhou Zude,Wang Sheng,Liu Quan.Local Hop-Count Probability Grid:An Improvement Nodes Localization Scheme in WSN[C]//Innovative Computing,Information and Control,2006.ICICIC '06.First International Conference on,2006:64-67.
[12]楊石磊,樊曉平,劉少?gòu)?qiáng).一種改進(jìn)的無(wú)線傳感器網(wǎng)絡(luò)DV-Hop定位算法[J].計(jì)算機(jī)測(cè)量與控制,2008,16(9):1356-1358.