侯森林,杜秀娟,李梅菊,黃科軍
(1.青海師范大學(xué) 計(jì)算機(jī)學(xué)院,西寧 810008; 2.青海省物聯(lián)網(wǎng)重點(diǎn)實(shí)驗(yàn)室,西寧 810008)
隨著海上絲綢之路的興起,國家對大海探索和關(guān)注日趨增多,水下無線傳感器網(wǎng)絡(luò)(Underwater Wireless Sensor Network,UWSN)得到了越來越多的關(guān)注。作為無線傳感器網(wǎng)絡(luò)(Wireless Sensor Networks,WSN)在水下的延伸,UWSN在海洋農(nóng)業(yè)、海礦產(chǎn)勘探、可燃冰能源開發(fā)等方面具有廣泛的應(yīng)用前景,已經(jīng)成為該領(lǐng)域研究熱點(diǎn)[1,2]。但水下環(huán)境復(fù)雜多變,與WSN有著較大差異。陸地WSN采用電磁波通信,而由于海水的吸收作用,電磁波在水下傳輸能量衰減嚴(yán)重,且頻率越高,衰減越多[3]。實(shí)驗(yàn)表明:使用IEEE 802.15.4(868 MHz、915 MHz、2.4 GHz)或IEEE 802.11b/g(2.4 GHz)協(xié)議的節(jié)點(diǎn)發(fā)送的電磁波在水下的傳播距離為0.5 m~1.0 m。因此,電磁波無法作為信息傳輸媒介在水下使用,取而代之的是聲波。聲波傳播1 000 m需要670 ms,其傳輸速度遠(yuǎn)小于電磁波傳播速度,比電磁波的時(shí)延高了5個數(shù)量級。同時(shí),水的壓力、溫度和礦物質(zhì)導(dǎo)致了水環(huán)境的高時(shí)空變特性,UWSN的時(shí)鐘同步和測距技術(shù)比陸地上的更為復(fù)雜,定位更為困難[4]。傳感器節(jié)點(diǎn)受到水流動的影響,位置變化不定,需要周期性地更新節(jié)點(diǎn)位置,一般由船舶飛機(jī)等隨機(jī)部署在水域,其部署密度有疏有密。因此,陸地傳感器成熟的定位方法不能直接應(yīng)用到UWSN中。在對深海不同深度環(huán)境的監(jiān)測中,網(wǎng)絡(luò)節(jié)點(diǎn)是部署在三維的海水中。與二維的定位技術(shù)相比,水下三維傳感網(wǎng)絡(luò)定位面臨巨大挑戰(zhàn),針對三維環(huán)境定位算法的研究至關(guān)重要[5]。水的流動以及水下復(fù)雜地理和生物環(huán)境導(dǎo)致傳感器節(jié)點(diǎn)位置變幻不定,數(shù)據(jù)傳輸?shù)碾y度較大。同時(shí),水下傳感器節(jié)點(diǎn)通常使用蓄電池,更換和充電不方便。因此,在研究UWSN時(shí),還應(yīng)優(yōu)先考慮節(jié)能和均衡節(jié)點(diǎn)的能量消耗。
監(jiān)測數(shù)據(jù)消息若無位置信息,則沒有意義,因此需要對隨機(jī)布放的傳感器節(jié)點(diǎn)的位置信息進(jìn)行定位。水聲通信具有長時(shí)延、高時(shí)空變等特性,導(dǎo)致UWSN的時(shí)鐘同步存在較大困難。因此,本文提出一種采用無需時(shí)間同步且對時(shí)延不敏感非對稱往返測距(Round-trip Time of Flight,RTOF)算法獲得節(jié)點(diǎn)之間的距離[6],進(jìn)而采用水下傳感器定位(Underwater Sensor Positioning,USP)算法將之映射到Sink節(jié)點(diǎn)的平面[7],由Sink節(jié)點(diǎn)使用三邊定位算法計(jì)算得出節(jié)點(diǎn)的位置集合,隨后用加權(quán)迭代最小二乘法對位置集合進(jìn)行擬合。
本文對節(jié)點(diǎn)定位中常見的專業(yè)術(shù)語進(jìn)行定義。
定位覆蓋率:能夠定位的節(jié)點(diǎn)數(shù)量與節(jié)點(diǎn)總數(shù)之比。尚沒有一種定位算法能確保所有未知節(jié)點(diǎn)都能實(shí)現(xiàn)精確的定位,定位覆蓋率受具體算法和信標(biāo)數(shù)的影響,在某種程度上決定了節(jié)點(diǎn)的定位效果[8]。
定位精度:表示節(jié)點(diǎn)定位的準(zhǔn)確程度,與定位誤差有關(guān),誤差越大,精度越小。定位精度是衡量節(jié)點(diǎn)定位效果的主要指標(biāo)。在軍事行動中,如果定位不準(zhǔn)確,誤差過大,后果不堪設(shè)想。通常用絕對精度和相對精度2種定位精度表現(xiàn)形式[8]。在第4節(jié)的仿真實(shí)驗(yàn)中,本文采用絕對值衡量定位精度。
能耗誤差積(EEP):能耗與平均誤差值的積[7],用來評價(jià)算法在能耗和定位精度兩方面的綜合性能,計(jì)算公式如下:
EEP=E·averageLocationError
(1)
在計(jì)算二維節(jié)點(diǎn)的坐標(biāo)時(shí),通常采用三角測量法、三邊測量法、模式識別等方法。根據(jù)是否要求距離本文將定位算法分為兩大類:距離相關(guān)定位和距離無關(guān)定位算法[9]。由于通過距離無關(guān)獲得的定位得出的位置信息不準(zhǔn)確,因此本文使用與距離有關(guān)的定位算法。測距常用算法有到達(dá)時(shí)間(TOA)算法、到達(dá)時(shí)間差(TDOA)算法、到達(dá)角度(AOA)算法、接收信號強(qiáng)度指示(RSSI)算法、RTOF算法等[10,11]。TOA算法是根據(jù)介質(zhì)的傳播速度,利用介質(zhì)到達(dá)時(shí)間來計(jì)算距離,計(jì)算公式如下:
dr=(T1-T0)V
(2)
其中,T1為信號接收時(shí)間,T0為信號發(fā)送時(shí)間,V為信號傳播速度。TOA算法要求節(jié)點(diǎn)之間保持精確的時(shí)間同步,這在UWSN中存在較大困難。TDOA算法利用信號到達(dá)的時(shí)間差來測距,會受到海水對聲波的吸收、多路徑等不確定性因素干擾。AOA算法利用信號到達(dá)角度或相對方位測距,需要裝配天線陣列或多個超聲波接收機(jī),這使水聲調(diào)制解調(diào)器(modem)設(shè)計(jì)更復(fù)雜而增加成本,且水下環(huán)境復(fù)雜,易受外界干擾。RSSI算法使用水聲信號強(qiáng)度來測量節(jié)點(diǎn)間的間距[12],該算法所需能量少、成本低,但水環(huán)境里噪聲較多,導(dǎo)致測距誤差較大。RTOF算法利用往返時(shí)間差計(jì)算節(jié)點(diǎn)間的距離,不需要水下節(jié)點(diǎn)進(jìn)行時(shí)鐘同步,降低了因時(shí)鐘同步帶來的能量消耗,并且往返時(shí)間差越大,計(jì)算結(jié)果越精確。本文采用RTOF算法。
在基于測距的水下定位算法方面,移動預(yù)測的大規(guī)模水下定位(Scalable Localization with Mobility Prediction,SLMP)[13]算法是在近海條件下、基于水下物體移動模型的預(yù)測位置的方案。SLMP 算法包含水面浮標(biāo)、水下錨節(jié)點(diǎn)、未知位置節(jié)點(diǎn)的定位。在定位過程中,未知節(jié)點(diǎn)首先估計(jì)自身運(yùn)動規(guī)律,其次預(yù)測自己位置。水下錨節(jié)點(diǎn)使用水上節(jié)點(diǎn)計(jì)算自己的位置,并結(jié)合原坐標(biāo)和移動模型計(jì)算自己位置。如果位置之差小于既定閾值,則判定水下錨節(jié)點(diǎn)的移動規(guī)律有效,否則水下錨節(jié)點(diǎn)執(zhí)行移動預(yù)測算法程序更新自身的移動模型。未知節(jié)點(diǎn)偵聽到水下錨節(jié)點(diǎn)位置廣播后,啟動移動預(yù)測程序來更新自身的移動和位置信息。因?yàn)樗牧鲃泳哂邢嚓P(guān)性,SLMP 算法在定位中僅需對移動模型進(jìn)行部分更新,所以水下通信次數(shù)較少,耗費(fèi)能量少[14]。但SLMP算法的性能依賴水下節(jié)點(diǎn)移動模型是否精準(zhǔn),而且極大似然估計(jì)法在計(jì)算節(jié)點(diǎn)坐標(biāo)時(shí)存在一定誤差,導(dǎo)致定位精度和覆蓋率降低。ARTFL是一種基于USP的定位方案[8],使用基站、信標(biāo)節(jié)點(diǎn)和未知節(jié)點(diǎn)3種節(jié)點(diǎn)。水下節(jié)點(diǎn)在進(jìn)行定位時(shí),使用類TOA 的方式保證測距精度,提出了不需要時(shí)鐘同步的RTOF。在測量距離時(shí),用本地時(shí)間與分組的處理時(shí)間差,以此計(jì)算水下節(jié)點(diǎn)和信標(biāo)節(jié)點(diǎn)間的距離。深度信息可通過壓力傳感器獲取,在水下節(jié)點(diǎn)位置計(jì)算中,ARTFL通過映射投影的方法,將水下的定位問題轉(zhuǎn)化到二維定位問題,最后使用最小二乘法計(jì)算出節(jié)點(diǎn)的三維坐標(biāo)。該方案降低了通信消耗,但沒有考慮節(jié)點(diǎn)移動和信標(biāo)位置的不確定對定位精度的影響,具有較大局限性,未知節(jié)點(diǎn)映射水下錨節(jié)點(diǎn)坐標(biāo)帶來較多的能耗,減小了網(wǎng)絡(luò)生存周期,降低了定位成功率和覆蓋率。SWN算法采用對稱往返策略,利用水下聲波的廣播特點(diǎn),每個信標(biāo)節(jié)點(diǎn)發(fā)送測距請求給所有的水下未知節(jié)點(diǎn)[15],收到請求的水下節(jié)點(diǎn)發(fā)送若干分組來響應(yīng)所有的信標(biāo)節(jié)點(diǎn),信標(biāo)節(jié)點(diǎn)通過圓的交點(diǎn)計(jì)算出位置。SWN 定位方案的平均定位誤差較小,但能耗高,網(wǎng)絡(luò)壽命較短。因此,基于測距的UWSN定位算法通常在提高定位精度、降低計(jì)算成本時(shí),會導(dǎo)致能耗和復(fù)雜度增高。
RTOF算法:如果2個節(jié)點(diǎn)屬于不同時(shí)鐘域或無法進(jìn)行準(zhǔn)確的時(shí)鐘同步,可以用計(jì)算往返時(shí)間、扣除處理延時(shí)的策略來計(jì)算設(shè)備之間的距離。對于節(jié)點(diǎn)A、B,若節(jié)點(diǎn)A欲測距,則A發(fā)起測距請求包PA,并將PA的發(fā)送時(shí)刻T0記下;B收到PA,并記下接收PA的時(shí)刻T1,節(jié)點(diǎn)B在T2時(shí)刻發(fā)送反饋包PB(PB包含T1,T2);A接收到PB的時(shí)刻為T3。距離計(jì)算公式如下:
(3)
由于T3、T0和T2、T1分別屬于A、B的時(shí)鐘域,并由A和B分別測量時(shí)間差,因此A、B之間不需要時(shí)鐘同步。同時(shí),該方法只需要一次信號交互即可實(shí)現(xiàn),無需時(shí)鐘的同步要求。文獻(xiàn)[6]證明在釆用高斯過程信號模擬中,TOA與RTOF算法所帶來誤差的差異不大,且RTOF相對表現(xiàn)更好。
USP算法:利用投影原理,通過壓力傳感器獲取的節(jié)點(diǎn)深度,節(jié)點(diǎn)將已知節(jié)點(diǎn)的坐標(biāo)投影到自己所在的平面上,從而用二維的解決方案解決三維空間定位問題。這種算法簡化了定位的復(fù)雜性,使三維問題可以用二維定位算法解決,人們可以使用在WSN中較為成熟的二維定位算法,從而簡化定位問題。USP算法過程分為2個步驟:預(yù)分配和分布式定位。在預(yù)分配步驟中,節(jié)點(diǎn)載入必要信息,分配唯一標(biāo)志ID,配置相關(guān)參數(shù):USP迭代次數(shù)上限M,接收/發(fā)送信號耗費(fèi)時(shí)間ΔB,迭代更新坐標(biāo)耗費(fèi)時(shí)間ΔC以及2次USP定位間的休眠時(shí)間ΔS[7,16]。每次的定位周期ΔT,計(jì)算公式如下:
ΔT=ΔB+ΔC+ΔS
(4)
第二階段執(zhí)行分布式的定位算法。節(jié)點(diǎn)需要維護(hù)鄰居節(jié)點(diǎn)和自身節(jié)點(diǎn)的相關(guān)信息,包括坐標(biāo)集合和位置信息。Sink節(jié)點(diǎn)浮在水面上,通過GPS獲得坐標(biāo),發(fā)送自身位置信息廣播;未知節(jié)點(diǎn)偵聽到Sink廣播信息,在偵聽到足夠的錨節(jié)點(diǎn)位置信息后,啟動投影模塊進(jìn)行錨節(jié)點(diǎn)位置映射,獲得錨節(jié)點(diǎn)映射到自己平面的坐標(biāo)后,采用三邊定位迭代計(jì)算位置。定位的迭代次數(shù)不超過上限M。
圖1顯示了待定位節(jié)點(diǎn)X將錨節(jié)點(diǎn)A、B和C映射到同一平面上,映射后的節(jié)點(diǎn)為A′、B′和C′,映射后的位置用來定位X。
圖1 節(jié)點(diǎn)映射
在ΔB時(shí)間片內(nèi),未知節(jié)點(diǎn)發(fā)起定位請求,并監(jiān)聽來自水下錨節(jié)點(diǎn)的位置廣播信息。在ΔC時(shí)間片內(nèi),未知節(jié)點(diǎn)根據(jù)三邊定位法計(jì)算節(jié)點(diǎn)位置。在ΔS時(shí)間片內(nèi),節(jié)點(diǎn)處于休眠狀態(tài),等待下一個周期開始。
文獻(xiàn)[17]指出USP算法的缺陷是:未知節(jié)點(diǎn)映射錨節(jié)點(diǎn)坐標(biāo),導(dǎo)致能耗增加,網(wǎng)絡(luò)生存周期減小,定位成功率低和需要時(shí)間同步,另外測距方法也不確定。文獻(xiàn)[8]提出使用最小二乘法對位置集合進(jìn)行簡單地?cái)M合,但并未對每個位置元素賦予相應(yīng)的權(quán)重。考慮到實(shí)際定位過程中錨節(jié)點(diǎn)對未知節(jié)點(diǎn)的定位影響不相同,簡單地?cái)M合會導(dǎo)致較大的定位誤差[18]。因此,本文提出一種基于加權(quán)迭代最小二乘法的定位擬合算法(MYALGO)。
簡單最小二乘法的算術(shù)表達(dá)式如下:
(5)
其中,m代表等式的個數(shù),n代表未知數(shù)β的個數(shù),m>n,將式(5)進(jìn)行矩陣化后得到:
Xβ=Y
(6)
為了求解β,引入殘差平方和函數(shù)
S(β)=‖Xβ-Y‖2
(7)
當(dāng)β=β∧時(shí),S(β) 取最小值,記作:
β2=argmin(S(β))
(8)
通過對S(β)進(jìn)行微分,求極值可得:
XTXβ∧=XTY
(9)
若式(9)中矩陣XTX非奇異[19],則β有唯一值:
β∧=(XTX)-1XTY
(10)
本文算法根據(jù)RTOF算法測得節(jié)點(diǎn)間距離。RTOF測距具有傳播時(shí)延越長,測距越精確的特點(diǎn)。每個未知節(jié)點(diǎn)周圍有多個錨節(jié)點(diǎn),為了使USP定位更加精確,對每個錨節(jié)點(diǎn)賦予相應(yīng)權(quán)重,距離越遠(yuǎn)的錨節(jié)點(diǎn)權(quán)重越大。即在對節(jié)點(diǎn)位置進(jìn)行擬合的過程中,對式(7)賦予相應(yīng)的權(quán)重因子,得到:
S(β)=‖Xβ-δY‖2
(11)
其中,X為錨節(jié)點(diǎn)的位置,β表示未知節(jié)點(diǎn)的位置,Y為錨節(jié)點(diǎn)與未知節(jié)點(diǎn)間的距離,δ為權(quán)重因子。
Sink節(jié)點(diǎn)分布在水面,每個Sink節(jié)點(diǎn)配備GPS模塊用以獲取自身位置信息,配備太陽能板供電,配備RF模塊用于Sink節(jié)點(diǎn)間通信,配備水聲通信modem用于和水下節(jié)點(diǎn)間通信。在水下定位算法中,Sink節(jié)點(diǎn)作為首批水下錨節(jié)點(diǎn),其數(shù)量至少為3個。
未知節(jié)點(diǎn)配備水聲通信modem,通過modem可以和錨節(jié)點(diǎn)通信,也可以在節(jié)點(diǎn)間相互通信。由于節(jié)點(diǎn)整體成本低廉,適合大量部署。
此外,為了減少能耗,根據(jù)未知節(jié)點(diǎn)到Sink節(jié)點(diǎn)的距離將未知節(jié)點(diǎn)分為3類:若未知節(jié)點(diǎn)可以收到多于等于3個Sink節(jié)點(diǎn)的定位廣播信息,稱之為A類未知節(jié)點(diǎn);若未知節(jié)點(diǎn)收到定位廣播的個數(shù)小于3且多于等于1個,則稱之為B類未知節(jié)點(diǎn),A、B類節(jié)點(diǎn)定位由Sink節(jié)點(diǎn)集中定位;若未收到任何定位廣播信息,即稱之為C類未知節(jié)點(diǎn),C類節(jié)點(diǎn)采取分布式定位,如圖2所示。
圖2 無線通信網(wǎng)絡(luò)結(jié)構(gòu)
為了使定位的效果盡可能精確,引入加權(quán)迭代最小二乘法對結(jié)果集進(jìn)行優(yōu)化。同時(shí),為了節(jié)約能量和減少通信,優(yōu)化方案通過對水下節(jié)點(diǎn)進(jìn)行分類區(qū)分,使得A、B類節(jié)點(diǎn)只用modem發(fā)送一次數(shù)據(jù)即可定位,C類節(jié)點(diǎn)在未收到任何定位信息的情況下,就知曉自身所處環(huán)境的惡劣,采取推遲發(fā)送定位請求時(shí)間,并減小發(fā)送頻率,盡可能減少了未知節(jié)點(diǎn)發(fā)送數(shù)據(jù)次數(shù),降低通信,達(dá)到節(jié)約能量的目的。文中的改進(jìn)算法可概述如下:
水下錨節(jié)點(diǎn)每隔間隔T時(shí)間周期性地發(fā)送定位廣播包,廣播包的格式為{Type;NodeId;NodeRank;Seqno; SendTime;Location}。
Type:包的類別,取值為BROADCAST_TYPE、BROADCAST_REP、HELP_REQ、HELP_REP、USP_REP、USP_REQ。
NodeId:節(jié)點(diǎn)的唯一標(biāo)識,布放前預(yù)先設(shè)置。
NodeRank:節(jié)點(diǎn)的級別。Sink節(jié)點(diǎn)的NodeRank為0,由Sink節(jié)點(diǎn)計(jì)算位置未知節(jié)點(diǎn)的NodeRank為1,除Sink節(jié)點(diǎn)外還需要其他錨節(jié)點(diǎn)幫助定位的未知節(jié)點(diǎn)的NodeRank為2,進(jìn)而依次遞推。
Seqno:包序列號,與NodeId一起用于唯一標(biāo)識包。
SendTime:包發(fā)送時(shí)間。
Location:節(jié)點(diǎn)的位置。Sink節(jié)點(diǎn)的位置信息通過GPS獲得。
定義:
α=T/10
(12)
3類節(jié)點(diǎn)的定位如下:
1)A類節(jié)點(diǎn)的定位:若未知節(jié)點(diǎn)在定位周期開始后的3α內(nèi)收到Sink節(jié)點(diǎn)定位廣播的個數(shù)多于等于3個,則節(jié)點(diǎn)為A類節(jié)點(diǎn),其NodeRank為1。則該節(jié)點(diǎn)向Sink節(jié)點(diǎn)回復(fù)一次響應(yīng)包,響應(yīng)包格式為{Type;NodeId; Seqno; SendTime; Argu; Depth; Data}。
Argu:收到定位廣播包的個數(shù)。
Depth:未知節(jié)點(diǎn)的水深。
Data:一個數(shù)組。數(shù)組元素有兩個屬性:Sink節(jié)點(diǎn)號和該Sink定位廣播報(bào)文的接收時(shí)間。
接收到響應(yīng)包Sink節(jié)點(diǎn)向周圍Sink節(jié)點(diǎn)請求該未知節(jié)點(diǎn)響應(yīng)包到各個Sink節(jié)點(diǎn)到達(dá)時(shí)間。Sink節(jié)點(diǎn)采用太陽能供電,不需要考慮能耗,且采用RF通信,時(shí)延小。周圍Sink節(jié)點(diǎn)收到該請求后,檢查緩存信息并給該Sink節(jié)點(diǎn)回復(fù),收到回復(fù)的Sink節(jié)點(diǎn)采用RTOF計(jì)算未知節(jié)點(diǎn)到各個Sink節(jié)點(diǎn)的距離,進(jìn)而在采用USP映射后,計(jì)算獲得未知節(jié)點(diǎn)在該水平面上距離各Sink節(jié)點(diǎn)的距離,并使用式(11)進(jìn)行迭代計(jì)算,迭代次數(shù)最多不超過M次(M通過信標(biāo)節(jié)點(diǎn)的個數(shù)確定)。Sink節(jié)點(diǎn)將計(jì)算得到的未知節(jié)點(diǎn)的位置信息、未知節(jié)點(diǎn)到各個Sink節(jié)點(diǎn)的距離、時(shí)間戳等信息發(fā)送給該未知節(jié)點(diǎn),回復(fù)包為{Type;NodeId; Seqno; SendTime; Location; Distance}。
Distance:未知節(jié)點(diǎn)在水平面上距離各Sink節(jié)點(diǎn)的距離。
未知節(jié)點(diǎn)獲得位置信息后,若首次被定位,則采用該位置。否則,最終坐標(biāo)由新舊坐標(biāo)按照相應(yīng)權(quán)重?cái)M合。進(jìn)而通過2次比較RTOF算法得到的距離,若距離相差較大,則判定水聲信道變化劇烈,該節(jié)點(diǎn)即向同層及下一層的節(jié)點(diǎn)發(fā)送警告信息,以避免因受環(huán)境影響而造成不必要的能量損耗,并在此之后采取暫停通信的策略。
2)B類節(jié)點(diǎn)的定位:若未知節(jié)點(diǎn)ζ在5α內(nèi)收到來自Sink的定位廣播個數(shù)少于3個且多于1個,則該節(jié)點(diǎn)為B類節(jié)點(diǎn)。B類節(jié)點(diǎn)需要向鄰居錨節(jié)點(diǎn)廣播發(fā)送一次helpReq報(bào)文,helpReq報(bào)文格式為{Type;NodeId; Seqno; SendTime; Argu; Depth; Data}。
收到helpReq報(bào)文的錨節(jié)點(diǎn)根據(jù)Argu來生成一個隨機(jī)數(shù),通常Argu越大,隨機(jī)數(shù)值越大。水下錨節(jié)點(diǎn)根據(jù)隨機(jī)數(shù)的大小決定是否回復(fù)helpRep。在回復(fù)的helpRep報(bào)文中,包含對應(yīng)helpReq的接收時(shí)間戳和helpRep的發(fā)送時(shí)間。
當(dāng)未知節(jié)點(diǎn)ζ收到足夠的helpRep后,向直連的Sink節(jié)點(diǎn)發(fā)送定位所需的相應(yīng)信息,其中包含接收到的水下錨節(jié)點(diǎn)ID、水下錨節(jié)點(diǎn)消息的接收時(shí)間、與水下錨節(jié)點(diǎn)的距離等。之后該Sink節(jié)點(diǎn)采用RTOF算法計(jì)算未知節(jié)點(diǎn)ζ到各水下錨節(jié)點(diǎn)的距離,進(jìn)一步根據(jù)USP算法映射,獲得未知節(jié)點(diǎn)到各水下錨節(jié)點(diǎn)的距離,使用式(11)加權(quán)迭代最小二乘法進(jìn)行迭代運(yùn)算,并將計(jì)算結(jié)果等信息發(fā)送給該未知節(jié)點(diǎn)。
3)C類節(jié)點(diǎn)的定位:若未知節(jié)點(diǎn)ζ在8α收到的來自Sink節(jié)點(diǎn)的定位廣播包數(shù)為0,則該節(jié)點(diǎn)為C類節(jié)點(diǎn)。ζ向鄰居水下錨節(jié)點(diǎn)發(fā)送USPReq定位請求報(bào)文,收到該請求的鄰居錨節(jié)點(diǎn)向ζ發(fā)送USPRep定位響應(yīng)報(bào)文,報(bào)文格式為{Type; NodeId; Seqno; SendTime; Location; NodeRank; Depth}。節(jié)點(diǎn)ζ在收到足夠的定位響應(yīng)報(bào)文后,采用RTOF算法計(jì)算到各錨節(jié)點(diǎn)的距離,選取最遠(yuǎn)的3個錨節(jié)點(diǎn)的距離,用三邊定位算法進(jìn)行自定位。
本文以NS2作為仿真平臺,對算法的定位覆蓋率、定位精度、EEP進(jìn)行分析。仿真環(huán)境設(shè)置如下:在一個范圍可調(diào)的3D區(qū)域內(nèi)隨機(jī)部署100個傳感器節(jié)點(diǎn),通過控制3D區(qū)域的大小來調(diào)節(jié)節(jié)點(diǎn)密度。通過增減Sink節(jié)點(diǎn)個數(shù)來調(diào)節(jié)首批水下錨節(jié)點(diǎn)個數(shù),水流速度為1 m/s。從定位覆蓋率、定位精度、EEP 3個方面對MYALGO與SLMP、ARTSFL、SWN進(jìn)行性能對比分析。
如圖3所示,由于SLMP算法沒有考慮節(jié)點(diǎn)隨水流移動的情況,在節(jié)點(diǎn)密度相當(dāng)時(shí),SLMP算法的定位覆蓋率比MYALGO算法小。
圖3 不同的節(jié)點(diǎn)密度對應(yīng)的覆蓋率
圖4是在節(jié)點(diǎn)平均距離與通信范圍為150 m的實(shí)驗(yàn)數(shù)據(jù)。結(jié)合圖4可以看出在MYALGO的定位誤差比ARTSFL小的情況下,EEP值降低了些。
圖4 不同的信標(biāo)數(shù)對應(yīng)的EEP值
圖5是在節(jié)點(diǎn)間平均間隔與通信范圍為500 m時(shí)的實(shí)驗(yàn)數(shù)據(jù)。由圖5可知,隨著信標(biāo)節(jié)點(diǎn)數(shù)增加,位置的迭代計(jì)算次數(shù)會相應(yīng)增加,定位精度會隨之提高。并且在信標(biāo)數(shù)為6時(shí),MYALGO算法優(yōu)于ARTSFL和SWN算法。
圖5 不同的信標(biāo)數(shù)對應(yīng)的平均定位誤差
圖6顯示了文中算法在Sink節(jié)點(diǎn)個數(shù)為3、4、5的條件下,平均節(jié)點(diǎn)間隔以50 m為刻度逐漸增大時(shí),平均節(jié)點(diǎn)間隔與各個定位精度的關(guān)系圖。由圖6可知,隨著平均節(jié)點(diǎn)間隔的增加和信標(biāo)節(jié)點(diǎn)的數(shù)目增多,節(jié)點(diǎn)間通信時(shí)延和節(jié)點(diǎn)獲得信標(biāo)節(jié)點(diǎn)的定位廣播越多,計(jì)算位置時(shí)迭代次數(shù)會上升,平均定位誤差逐漸降低。這表明MYALGO算法在增加節(jié)點(diǎn)間隔或信標(biāo)數(shù)目時(shí)都可以取得較好的定位效果,驗(yàn)證了算法在長距離水下定位中的適用性。
圖6 MYALGO不同節(jié)點(diǎn)間隔下的平均定位誤差
圖7為在青海湖搭建的水下網(wǎng)絡(luò)實(shí)驗(yàn)床平臺。文中已經(jīng)在NS2上對算法的性能進(jìn)行了初步的實(shí)驗(yàn),下一步將著手算法在真實(shí)的水下環(huán)境中的測試。
圖7 實(shí)驗(yàn)床安裝調(diào)試平臺
本文提出一種MYALGO算法,該算法通過Sink節(jié)點(diǎn)發(fā)起定位廣播,收到3個或3個以上定位廣播的未知節(jié)點(diǎn)進(jìn)行回復(fù),接收到回復(fù)的Sink節(jié)點(diǎn)通過與其他Sink節(jié)點(diǎn)通信獲得該未知節(jié)點(diǎn)到各個Sink節(jié)點(diǎn)的時(shí)間差,進(jìn)而使用RTOF計(jì)算Sink節(jié)點(diǎn)到該未知節(jié)點(diǎn)的距離。Sink節(jié)點(diǎn)通過加權(quán)迭代最小乘法對位置集合進(jìn)行擬合。仿真結(jié)果表明,該算法能在較低通信量、計(jì)算量以及能量消耗的同時(shí),提高定位覆蓋率和定位精度。依托在青海湖搭建水下網(wǎng)絡(luò)實(shí)驗(yàn)床平臺,將對該算法的定位精度、節(jié)點(diǎn)能耗以及Sink節(jié)點(diǎn)個數(shù)的最優(yōu)關(guān)系在真實(shí)環(huán)境中進(jìn)行檢測分析,并開展進(jìn)一步的研究。