關(guān)鍵詞:無線傳感器網(wǎng)絡(luò);質(zhì)心定位算法;三邊定位算法;Matlab
0 引言
無線傳感器網(wǎng)絡(luò)(wirelesssensornetworks,WSN)作為分布式傳感網(wǎng)絡(luò),其末梢是可以感知和檢查外部世界的傳感器,由于WSN終端節(jié)點數(shù)量大,獲得傳感器較為準(zhǔn)確的位置信息,則其采集傳輸?shù)臄?shù)據(jù)更加具有價值和意義。WSN中終端節(jié)點的位置信息通常有兩種獲取方式,一種是通過GPS(globalpositioningsystem)或者北斗硬件芯片進行衛(wèi)星定位,另一種是通過定位算法進行計算。終端節(jié)點通過定位芯片來實現(xiàn)定位功能,不僅增加硬件成本,還增大終端節(jié)點能耗,尤其對布置在農(nóng)田中的WSN,因能源獲取困難和電池更換不方便,為降低整體系統(tǒng)的能耗,使用定位算法實現(xiàn)節(jié)點定位功能成為更優(yōu)的解決方案[1-5]。
定位算法可根據(jù)是否需要測距分為測距定位算法和非測距定位算法。測距定位算法根據(jù)測量距離方式的不同可分為接收信號強度指示測距算法(receivedsignalstrengthindicator,RSSI)、信號到達時間測距算法(timeofarrival,TOA)、信號到達時間差測距算法(timedifferenceofarrival,TDOA)和信號到達角度測距算法(angleofarrival,AOA);非測距定位算法可分為質(zhì)心算法、近似三角形內(nèi)點測試法(approximatepoint-in-triangulationtest,APIT)、距離向量算法(distancevector-hop,DV-HOP)和基于多維標(biāo)定算法(multidimensionalscaling-map,MAD-MAP)[6-7]。
遠(yuǎn)距離無線電(longrangeradio,LoRa)為低功耗廣域網(wǎng)絡(luò)(lowpowerwideareanetwork,LPWAN)之一,相比其他無線通信技術(shù),LoRa具有成本低、傳播距離遠(yuǎn)、功耗低和節(jié)點多等特點,是LPWAN中發(fā)展較快、相對成熟的技術(shù)。LoRa是一種基于擴頻技術(shù)的低功耗長距離無線通信技術(shù),主要面向物聯(lián)網(wǎng),能源更換不便并且適用電池供電的無線局域網(wǎng)設(shè)備,其通信信息自帶RSSI值,在節(jié)點定位過程中無須增加任何硬件設(shè)備,可減少成本和降低終端功耗[8-11]。
為了提高定位算法的定位精度,國內(nèi)外研究人員對不同的算法進行了大量的優(yōu)化研究。WSN中節(jié)點定位功能作為輔助功能,在設(shè)計中要兼顧考慮通信距離、通信能耗與定位精度等問題。劉元東等[12]測試不同無線通信技術(shù)在節(jié)點定位算法中定位效果,測試結(jié)果表明,使用LoRa定位具有功耗低、通信距離遠(yuǎn)和抗干擾能力強等優(yōu)勢。吳婧涵[13]基于LoRa的室內(nèi)定位技術(shù),采用加權(quán)法對三邊定位算法進行優(yōu)化,使用高斯濾波和均值濾波對RSSI值進行優(yōu)化的方法對定位精度進行優(yōu)化。管寧[14]提出了聚類算法和濾波算法的RSSI處理方案,消除了突發(fā)干擾和隨機干擾等對RSSI測量距離的影響,減小RSSI測量誤差,并對室內(nèi)的無限傳播模型進行動態(tài)修正減小由環(huán)境改變引入的定位誤差。MORAGREGA等[15]提出一種博弈論算法來優(yōu)化WSN中獲取位置信息的資源利用,在一定程度上平衡了定位精度和節(jié)點功耗之間的矛盾,但提高了算法的復(fù)雜度。
相關(guān)研究都在一定程度上提高了定位算法的精度,常見的優(yōu)化方法是加入濾波算法,濾波算法需要采用多次發(fā)送定位數(shù)據(jù)包,由于終端節(jié)點能源受限的原因,不能單一考慮定位精度,還需兼顧節(jié)點能耗的問題[16]。針對以上問題,本研究提出一種基于質(zhì)心算法的修正補償三邊定位算法(modifiedandcompensatedtrilateralpositioningalgorithm,MCTPA),并通過Matlab算法仿真試驗,驗證該算法的可行性和定位精度。
1 節(jié)點定位算法原理
1.1 RSSI測距原理
基于LoRa無線通信的無線傳感器網(wǎng)絡(luò)使用RSSI測距算法結(jié)合三邊定位算法是節(jié)點定位功能實現(xiàn)的常用策略。LoRa射頻芯片都具有RSSI測量功能,無須在終端節(jié)點安裝其他硬件,RSSI測距的實施過程為,待定位節(jié)點向參考節(jié)點發(fā)送無線信號,參考節(jié)點根據(jù)待定位節(jié)點發(fā)來的無線信號解析出RSSI值,選取對數(shù)?常態(tài)模型計算兩點間的距離值,計算過程如下[17-18]。
1.2 三邊定位算法原理
三邊定位算法作為幾何定位算法,通過至少3個已知坐標(biāo)節(jié)點與未知節(jié)點之間的距離解析計算未知節(jié)點坐標(biāo),其計算過程如下。A、B、C3點為錨節(jié)點,坐標(biāo)分別為(x1,y1)、(x2,y2)、(x3,y3),D為未知節(jié)點,假設(shè)其坐標(biāo)是(x,y),A、B、C到D點的距離分別為ρ1、ρ2和ρ3。由距離計算公式可知
3個方程,2個未知量,有且僅有唯一解,該解(x,y)即為未知節(jié)點坐標(biāo)。求解過程如下[19-21]。
1.3 質(zhì)心算法
質(zhì)心算法作為非測距定位算法,單獨使用定位誤差大,常輔助其他幾何定位算法進行定位計算,提高定位精度。算法只需要利用未知節(jié)點周邊錨節(jié)點的位置信息可估算出未知節(jié)點的位置信息,其算法描述如下:未知節(jié)點D(x,y),周圍錨節(jié)點坐標(biāo)分別為A1(x1,y1)、A2(x2,y2)、A3(x3,y3)、A4(x4,y4)、…、An(xn,yn),算法示意如圖2所示[22]。
未知節(jié)點將定位數(shù)據(jù)包發(fā)送給自己周圍的鄰居錨節(jié)點,錨節(jié)點將自身的編號和位置信息返還給未知節(jié)點,當(dāng)未知節(jié)點收到周圍鄰居錨節(jié)點信息個數(shù)超過某一閾值后,根據(jù)周圍鄰居錨節(jié)點組成的多邊形求質(zhì)心坐標(biāo),用該多邊形質(zhì)心坐標(biāo)近似估算未知節(jié)點坐標(biāo)。計算如下[23]
2 三邊定位算法優(yōu)化
在RSSI測距過程中,環(huán)境中噪聲、反射、折射等干擾因素會導(dǎo)致RSSI值出現(xiàn)較大誤差,進而導(dǎo)致距離計算值和實際值出現(xiàn)較大誤差,使用誤差較大的距離測量值計算未知節(jié)點坐標(biāo)時,會出現(xiàn)三邊定位算法定位誤差過大和算法失效的情況。本研究針對三邊定位算法的不足提出一種修正補償三邊定位(MCTPA),通過判定錨節(jié)點圓之間位置關(guān)系,特別是在出現(xiàn)較大的測距誤差導(dǎo)致的錨節(jié)點圓無交點的情況,提出修正補償誤差較大錨節(jié)點圓半徑,使修正補償后的錨節(jié)點圓產(chǎn)生交點,減少因濾波所需發(fā)送更多的定位數(shù)據(jù)包,減少定位算法復(fù)雜度,拓展三邊定位算法的適用范圍,提高了三邊定位算法的定位精度。
假設(shè)3個錨節(jié)點A、B、C坐標(biāo)是(x1,y1)、(x2,y2)、(x3,y3),未知節(jié)點D的坐標(biāo)假設(shè)為(x,y),A、B、C到D點的距離分別為ρ1、ρ2、ρ3,以3個錨節(jié)點為圓心,以3個錨節(jié)點坐標(biāo)到未知節(jié)點的計算距離為半徑畫圓。3個錨節(jié)點圓方程如下[24]
2.1 三圓交于公共區(qū)域
測距過程誤差較小,三圓沒有交于一點產(chǎn)生一個公共區(qū)域,采用基于質(zhì)心算法的三邊定位算法,用三圓相交公共區(qū)域質(zhì)心坐標(biāo)作為未知節(jié)點坐標(biāo)。錨節(jié)點圓及算法示意如圖3所示,AB兩圓交于點F1、F2,以點F1和F2到圓C圓心的距離作為判斷依據(jù),取近舍遠(yuǎn),取F1點;同理,BC兩圓的交點G1和G2的取舍以兩點到圓A圓心的距離為判斷依據(jù),取G1點;AC兩圓的交點E1、E2的取舍以兩點到圓B圓心的距離為判斷依據(jù),取E1點。將F1、E1、G1組成的公共區(qū)域質(zhì)心D1的坐標(biāo)作為未知節(jié)點坐標(biāo),計算過程如下。
2.2 兩兩相交
測距誤差導(dǎo)致3個錨節(jié)點圓兩兩相交,但無公共區(qū)域,基于質(zhì)心算法的三邊定位算法失效,點D的實際位置按照RSSI測距原理可知,大概率處在三圓兩兩相交的公共區(qū)域中離另一個錨節(jié)點距離較近的位置,取一點作為D點的估計值,本研究采用取距離最近的三點組成的中心區(qū)域質(zhì)心坐標(biāo)作為未知節(jié)點坐標(biāo),錨節(jié)點圓及算法示意如圖4所示,未知節(jié)點計算過程參照2.1。
2.3 兩圓不相交
測距誤差導(dǎo)致有一個圓與其余兩圓中任意一圓相離,三邊定位算法失效,本研究對三邊定位算法進行優(yōu)化,優(yōu)化思路是判定兩個不相交的圓,假設(shè)兩圓出現(xiàn)較大的測距誤差,導(dǎo)致三邊定位算法失效,放大兩個不相交圓的半徑作為誤差補償,修正補償因子k為不相交兩圓的圓心距與兩不相交圓半徑和的比值,錨節(jié)點圓及算法示意如圖5所示。
假設(shè)錨節(jié)點圓B和C不相交,BC兩圓的圓心距為dBC,擴大倍數(shù)記為k,擴大后B和C兩錨節(jié)點圓半徑記為ρ21、ρ31。修正補償計算過程如下
補償后的三圓兩兩相交或交于公共區(qū)域,如圖4所示,A和C、A和B、B和C交點分別為E1和E2、F1和F2、G1和G2,未知節(jié)點計算過程參照2.1。
2.4 一圓不與另外兩圓相交
測距誤差導(dǎo)致錨節(jié)點圓中出現(xiàn)有一圓不與另外兩圓相交,該情況可假設(shè)不與另外兩圓相交的錨節(jié)點圓測距出現(xiàn)較大誤差,三邊定位算法失效。本研究對三邊定位算法進行優(yōu)化,采用修正補償該錨節(jié)點圓半徑使其與另外兩個錨節(jié)點圓相交,修正補償因子k取該圓與另外兩圓圓心距和半徑和比值中較大的數(shù)值,錨節(jié)點圓及算法示意如圖6所示。
假設(shè)錨節(jié)點圓B與A、C不相交,AB兩圓的圓心距為dAB,BC兩圓的圓心距為dBC,擴大倍數(shù)記為k,擴大后B錨節(jié)點圓半徑為ρ21。修正補償計算如下
補償后的三圓兩兩相交或交于公共區(qū)域,A和C、A和B、B和C交點分別為E1和E2、F1和F2、G1和G2,未知節(jié)點計算過程參照2.1。
2.5 三圓均相離
測距誤差過大時會導(dǎo)致3個錨節(jié)點圓相離,常見方法是采用加權(quán)質(zhì)心定位算法求解未知節(jié)點坐標(biāo),但在錨節(jié)點數(shù)目較少時定位誤差大,本研究提出修正補償3個錨節(jié)點圓半徑,修正補償因子為每兩圓圓心距和該兩圓半徑和的比值中較大的數(shù)值,錨節(jié)點圓及算法示意如圖7所示。
假設(shè)錨節(jié)點圓A、B、C互不相交,AB兩圓的圓心距為dAB,BC兩圓的圓心距為dBC,AC兩圓的圓心距為dAC,擴大倍數(shù)記為k,擴大后A、B、C3錨節(jié)點圓半徑分別為ρ11、ρ21、ρ31。修正補償計算如下
補償后的三圓兩兩相交或交于公共區(qū)域,A和C、A和B、B和C交點分別為E1和E2、F1和F2、G1和G2,未知節(jié)點計算過程參照2.1。
3 仿真結(jié)果與分析
3.1 仿真環(huán)境
試驗仿真環(huán)境為MatlabR2018b,操作系統(tǒng)為Windows10(64位),AMDRyzen75800H處理器,NVIDIARTX3060顯卡。Matlab作為數(shù)據(jù)分析、無線通信仿真的專業(yè)軟件,它的基本數(shù)據(jù)單位是矩陣,所以在行矩陣運算、數(shù)據(jù)處理上和實現(xiàn)算法上較之其他語言更加簡捷,是一款強大的數(shù)學(xué)軟件,滿足第2節(jié)中算法的設(shè)計要求。
3.2 算法代碼設(shè)計流程
定位算法優(yōu)化流程如圖8所示。
3.3 結(jié)果與分析
3.3.1 錨節(jié)點數(shù)目與定位誤差關(guān)系仿真
通過未改進的三邊定位算法仿真計算,改變錨節(jié)點數(shù)目(3~7),每個錨節(jié)點數(shù)目計算10次誤差值,取該節(jié)點數(shù)目下的均值,分別繪制節(jié)點數(shù)目與誤差值和節(jié)點數(shù)目與誤差均值之間的關(guān)系曲線,如圖9所示。隨著錨節(jié)點的數(shù)目增多,定位誤差逐漸減小,二維平面定位最少的錨節(jié)點個數(shù)為3,當(dāng)錨節(jié)點數(shù)目≥5時,誤差的優(yōu)化空間比較小,所以在現(xiàn)實使用中,采用3~5個錨節(jié)點做定位計算誤差較小,降低成本。
3.3.2 錨節(jié)點和未知節(jié)點位置關(guān)系與定位誤差
由圖10可知,通過改變錨節(jié)點與未知節(jié)點的相對位置關(guān)系,仿真計算時,錨節(jié)點隨機生成,當(dāng)3個錨節(jié)點與未知節(jié)點處于同一直線時,無法進行定位計算,反之,當(dāng)未知節(jié)點處在3個錨節(jié)點中心時,定位誤差較小[25]。
3.3.3 修正補償三邊定位算法仿真結(jié)果
在優(yōu)化三邊定位算法中,取3個錨節(jié)點,分別為A(0,0),B(0,1500),C(750,1500),未知節(jié)點D(700,700),設(shè)置在3個錨節(jié)點中心區(qū)域,LoRa無線通信距離設(shè)0~2000m,定位范圍1500m×1500m,未知節(jié)點到3個錨節(jié)點的實際平均距離953.33m。
3個錨節(jié)點圓交于公共區(qū)域定位算法仿真結(jié)果如圖11所示,本研究采用三圓公共區(qū)域的質(zhì)心坐標(biāo)代替未知節(jié)點坐標(biāo),仿真計算結(jié)果顯示定位誤差為17.3661m,由于測距過程誤差較小,算法定位精度較高。
3個錨節(jié)點圓兩兩相交定位算法仿真結(jié)果如圖12所示,本研究采用分別取2個錨節(jié)點圓相交點中離另一個圓的距離小的3個點組成區(qū)域的質(zhì)心坐標(biāo)代替未知節(jié)點坐標(biāo),仿真計算結(jié)果顯示定位誤差46.4837m,由于測距誤差較第1種情況較大,定位精度有所下降。
3個錨節(jié)點圓兩圓不相交定位算法仿真結(jié)果如圖13所示,出現(xiàn)這種情況,可以判定兩不相交錨節(jié)點圓測距誤差較大,三邊定位算法失效。本研究通過計算不相交兩圓的圓心距和錨節(jié)點圓半徑和,提出修正補償因子k,修正補償不相交圓半徑,仿真計算結(jié)果顯示定位誤差93.0843m,由于測距誤差較之前兩種情況有所增大,導(dǎo)致定位精度下降。
3個錨節(jié)點圓中一圓與另外兩圓不相交定位算法仿真結(jié)果如圖14所示,出現(xiàn)該種情況,可以判定相離錨節(jié)點圓測距出現(xiàn)較大誤差,三邊定位算法失效。本研究通過分別計算相離錨節(jié)點圓與另外兩圓的圓心距和錨節(jié)點圓半徑和,計算其比值,提出修正補償因子k,修正補償相離錨節(jié)點圓半徑,仿真計算結(jié)果顯示定位誤差132.7002m,由于其中1個錨節(jié)點圓測距誤差大,也只修正補償一個圓半徑,導(dǎo)致定位精度下降。
3個錨節(jié)點圓互不相交定位算法仿真結(jié)果如圖15所示,出現(xiàn)該種情況,可以判定3個錨節(jié)點圓測距均出現(xiàn)較大誤差,三邊定位算法失效。本研究通過分別計算錨節(jié)點圓之間圓心距和錨節(jié)點圓半徑和,計算其比值,取最大值為修正補償因子k,修正補償3個錨節(jié)點圓半徑,仿真計算結(jié)果顯示定位誤差114.0167m,由于3個錨節(jié)點圓互不相交,使用質(zhì)心算法計算未知節(jié)點坐標(biāo)定位誤差206.1553m,優(yōu)化后,定位精度提升。
上述5種情況分別統(tǒng)計10次定位誤差曲線如圖16所示,定位算法仿真計算的平均定位誤差率分別為2.8206%、5.1061%、13.6478%、10.8293%和13.9917%,定位算法仿真計算的平均定位誤差率基本穩(wěn)定控制在15%以內(nèi),定位精度滿足使用要求。
4 結(jié)束語
(1)本研究針對基于LoRa無線通信的RSSI三邊定位算法進行優(yōu)化,提出了一種修正補償三邊定位算法(MCTPA)。算法拓展了三邊算法的使用范圍,考慮了實際使用中定位精度、節(jié)點功耗及算法復(fù)雜度之間的關(guān)系,未知節(jié)點發(fā)送次數(shù)較少的定位數(shù)據(jù)包給錨節(jié)點,通過判定以錨節(jié)點坐標(biāo)為圓心、RSSI測量所得錨節(jié)點與未知節(jié)點間測量距離值為半徑的3個錨節(jié)點圓間的位置關(guān)系,分為5種情況,提出了對應(yīng)5種節(jié)點坐標(biāo)計算方法,其算法未知節(jié)點無須多次發(fā)送定位數(shù)據(jù)包向錨節(jié)點,降低了終端節(jié)點功耗,僅使用修正補償測量距離,相比濾波降低測距誤差算法,降低了定位算法復(fù)雜度。
(2)通過仿真試驗驗證算法可行性及定位精度,仿真結(jié)果表明,在不進行修正補償時,錨節(jié)點隨機布置,定位誤差隨錨節(jié)點數(shù)目增多而減小,錨節(jié)點數(shù)目為3、4、5、6和7時,定位精度分別為21.0227%、16.7651%、16.4717%、15.237%和9.0411%,人為布置錨節(jié)點時,錨節(jié)點的共線度越高,定位精度越低??紤]到實際生活中,錨節(jié)點可以人為布置且成本等因素,將修正補償三邊定位算法的3個錨節(jié)點布置在3個不共線的點上,分別對5種情況進行仿真,試驗結(jié)果表明,3個錨節(jié)點圓交于公共區(qū)域、錨節(jié)點圓兩兩相交、1個錨節(jié)點圓不與另外兩圓中任意一圓相交、1個錨節(jié)點圓與另外兩圓不相交、三圓均相離的情況經(jīng)修正補償三邊定位算法計算,定位誤差分別為2.8206%、5.1061%、13.6478%、10.8293%和13.9917%,定位誤差均lt;15%,相比沒優(yōu)化之前的三邊定位算法,算法適用范圍擴大,定位精度提升,滿足使用要求。