任曉奎, 于百川, 李 巖
(遼寧工程技術(shù)大學(xué)葫蘆島校區(qū) 電子與信息學(xué)院, 遼寧 葫蘆島 125105)
到目前為止,無線傳感器網(wǎng)絡(luò)(wireless sensor networks,WSNs)的定位問題也越來越受人們的關(guān)注,由于環(huán)境的復(fù)雜性和不確定性,極大影響了無線定位的精度。目前的無線定位技術(shù)主要分為基于測距的定位算法和基于非測距的定位算法[1]。測距的算法包括接收信號強(qiáng)度指示(received signal strength indication,RSSI)算法、到達(dá)時間(time of arrival,TOA)算法、到達(dá)時間差(time difference of arrival,TDOA)算法、到達(dá)角(angle of arrival,AOA)算法;非測距包括DV-Hop算法[2]、近似三角形內(nèi)點測試(APIT)算法、質(zhì)心定位算法、凸規(guī)劃定位算法。其中,最常用的是RSSI算法來估計錨節(jié)點(又稱參考節(jié)點)與未知節(jié)點(測量節(jié)點),RSSI測量靈活方便,成本低,但是基于RSSI的定位算法因為錨節(jié)點與未知節(jié)點之間的通信信道復(fù)雜多變,使得測距誤差較大,所以不同的環(huán)境應(yīng)對應(yīng)不同的信號傳輸模型及參數(shù)。文獻(xiàn)[3]對加權(quán)質(zhì)心算法存在的不合理因素進(jìn)行改進(jìn),采用測試距離倒數(shù)之和代替距離和的倒數(shù)作為權(quán)重,提高了定位精度。劉運(yùn)杰等人[4]采用了加權(quán)質(zhì)心算法,在文獻(xiàn)[3]的基礎(chǔ)上,提出了修正系數(shù)的概念,但忽略了三圓不相交的情況。文獻(xiàn)[5]對文獻(xiàn)[3]進(jìn)行了改進(jìn),對權(quán)值的選擇上加入了指數(shù)進(jìn)行修正,但其指數(shù)劃分過于粗糙,在圓不相交的情況下,直接取下一組錨節(jié)點進(jìn)行補(bǔ)位,舍棄了較大的RSSI值,加大了精度誤差。文獻(xiàn)[6]使用了距離比例來解決圓不相交的問題,但仍然使用傳統(tǒng)的加權(quán)質(zhì)心算法。文獻(xiàn)[7]通過對三圓中的任意兩圓半徑進(jìn)行延長修正,雖然使圓相交,但在延長圓半徑過程中仍會造成較大誤差。文獻(xiàn)[8]采用四圓相交產(chǎn)生的四邊形公共區(qū)域,通過求取四個三角形的質(zhì)心作為初始值來求解待測點坐標(biāo)。但四圓相交會出現(xiàn)不同情況,需要對參與定位的圓進(jìn)行選擇,會丟失一些較大RSSI值的點,造成誤差。
針對以上問題,提出了一種基于RSSI的測距質(zhì)心算法和加權(quán)質(zhì)心定位算法相結(jié)合(RSSI-based ranging centroid and weighted centroid,RSSI-RCWC)的定位算法,提高了定位精度。
在室內(nèi)定位中,通常采用更合理的對數(shù)常態(tài)分布模型[5]數(shù)學(xué)表達(dá)式,如式(1)
式中PL(d)為經(jīng)過距離d后的路徑損耗,dBm;PL(d0)為單位距離之后的路徑損耗;n為損耗因子;d為發(fā)射節(jié)點到接收節(jié)點的距離,m;d0為單位距離,通常取1 m;X0為均值為0的高斯分布隨機(jī)數(shù)。接收節(jié)點的RSSI值表達(dá)式為式(2)
RSSI=Pt-PL(d)
(2)
設(shè)d0處的信號強(qiáng)度為A,則式(2)為
PL(d0)=Pt-A
(3)
由于通常d0取1 m,X0為均值為0,所以,將式(3)代入式(1)中可以化簡為下式
PL(d0)=Pt-A+10nlg(d)
(4)
將式(4)代入式(2)可得
RSSI=A-10nlg(d)
(5)
式中A為距離為1 m處的RSSI值,n為路徑損耗因子,隨著定位節(jié)點的移動,n為變化的,不同的環(huán)境對應(yīng)著的參數(shù)也是不同的,所以選擇合適的A和n值對定位精度的準(zhǔn)確有著關(guān)鍵的意義,本文n取3。
在實際應(yīng)用當(dāng)中,由于室內(nèi)環(huán)境的復(fù)雜性和隨機(jī)性,會導(dǎo)致所采集到的信號強(qiáng)度存在較大的誤差,所以要先對RSSI值進(jìn)行濾波,常用的濾波算法有均值濾波、高斯濾波和卡爾曼濾波。文獻(xiàn)[9]通過使用卡爾曼濾波對RSSI進(jìn)行循環(huán)濾波處理,實驗表明算法明顯減少了測距誤差,但帶來了大量的通信開銷和計算數(shù)據(jù),且循環(huán)隨機(jī)性增加了算法的不確定性。均值濾波是對采集到的RSSI值求取平均值作為估計值,忽略了復(fù)雜的環(huán)境因素變化,在運(yùn)算過程中產(chǎn)生了奇異值,從而導(dǎo)致了較大的誤差。文獻(xiàn)[10]采用了多重濾波算法,對采集到的RSSI進(jìn)行數(shù)據(jù)濾波處理,提高了一定的定位精度。程遠(yuǎn)國和朱明輝等人[11,12]通過使用高斯模型對采集到的RSSI值進(jìn)行篩選,濾除了短暫的擾動和突發(fā)干擾造成較大偏差的值,使得測距誤差下降。所以,本文采用一個高斯濾波器來平滑RSSI的值,假設(shè)在實驗區(qū)的某個參考點采集到n個RSSI值,分別為Xn={x1,x2,…,xn-1,xn},其中每一個對應(yīng)的概率P為Pn={p1,p2,…,pn-1,pn},均值和方差為μ和δ2,則高斯濾波模型為
通過設(shè)定高概率最小值應(yīng)大于0.6的范圍,減少了小概率事件對于采集的RSSI值的影響,如式(9)所示
0.15δ+μ≤x≤3.09δ+μ
(9)
通過式(7)和式(8)得出μ和δ2,代入式(9)確定出RSSI的范圍。為了消除誤差,選取式(9)得出的值通過式(10)進(jìn)行均值優(yōu)化,得到RSSI信號的優(yōu)化值
加權(quán)質(zhì)心算法中假設(shè)已知三個錨節(jié)點的坐標(biāo)為A(x1,y1),B(x2,y2),C(x3,y3),未知節(jié)點為O(x,y),該點到各個錨節(jié)點的距離分別為d1,d2,d3,就可以通過方程組(11)計算出未知節(jié)點的坐標(biāo),式(11)如下所示
通過式(11)可得,未知節(jié)點O(x,y)為
(12)
但在實際應(yīng)用當(dāng)中,受到各種復(fù)雜環(huán)境變化的影響路徑損耗往往比理論數(shù)值大,通過RSSI距離轉(zhuǎn)化公式得到的半徑大于實際距離,會導(dǎo)致錨節(jié)點構(gòu)成的三個圓相交于一個區(qū)域,所求出的未知節(jié)點會有一定的偏差,如圖1所示。
圖1 三點定位算法
首先計算出三個圓的公共區(qū)域的頂點坐標(biāo),通過式(11)可以算出頂點坐標(biāo)D(xD,yD),E(xE,yE),F(xiàn)(xF,yF),通過式(13)的加權(quán)質(zhì)心算法可以得出未知節(jié)點(xi,yi)。
在質(zhì)心定位過程中,需要錨節(jié)點圓相交來推測未知節(jié)點的區(qū)域,在錨節(jié)點圓不相交的情況下,選擇取下一組錨節(jié)點進(jìn)行補(bǔ)位[4~6],直到出現(xiàn)三圓相交時再進(jìn)行定位,這樣會丟失一些數(shù)值比較大的RSSI的點,不斷選用下一組錨節(jié)點進(jìn)行補(bǔ)位會造成累積誤差,最終使定位精度與原有精度相差較大。本文選用距離比例模型,解決了因圓不相交造成的式(13)的無解情況。
當(dāng)圓不相交時,如圖2所示,連接三圓的圓心,就F點為例,當(dāng)圓的半徑越大時,距離未知節(jié)點越遠(yuǎn),誤差越大, 所以應(yīng)使F點靠近半徑較小的A點,使得圓A發(fā)揮更大的作用,則F點的位置應(yīng)為AF/CF=d1/d3,根據(jù)式(14)可求得F(xF,xF)
圖2 距離比例模型
同理可以求出E(xE,xE)和D(xD,xD),的坐標(biāo)。通過求得的D點,E點和F點,構(gòu)成一個新的三角形區(qū)域,對D,E,F(xiàn)點構(gòu)成的三角形求質(zhì)心,求得質(zhì)心O。
傳統(tǒng)的三角形質(zhì)心定位算法[13,14]并沒有考慮未知節(jié)點和錨節(jié)點距離的遠(yuǎn)近對于定位的影響,式(13)中的三角加權(quán)質(zhì)心定位算法雖然考慮到了距離的不同對定位精度造成的影響,但是在權(quán)值的選擇上仍有不足之處。本文提出了RSSI-RCWC定位算法,前期通過接收到的RSSI值進(jìn)行從大到小的排列,選出前4個點其中任意3個進(jìn)行排列組合,如圖2所示,通過距離比例模型得到D,E,F(xiàn)坐標(biāo)點,以這三個點為頂點構(gòu)成一個三角形,求出這個三角形的質(zhì)心O1(xo1,yo1),其中,xo1=(xD+xE+xF)/3,Yo1=(yD+yE+yF)/3,質(zhì)心O1的權(quán)值為1/(d1+d2+d3)。同理可以求得其他三個排列組合,其質(zhì)心和權(quán)值分別為O2(xo2,yo2),O3(xo3,yo3),O4(xo4,yo4),1/(d1+d2+d4),1/(d1+d3+d4),1/(d2+d3+d4),則未知節(jié)點的坐標(biāo)為O(x,y)
對式(15)中的權(quán)值增加冪值,來進(jìn)一步提高定位精度,使權(quán)值由原來的1/(d1+d2+d3)變?yōu)?/(d1+d2+d3)n修正后的算法公式為式(16)
RSSI-DSW定位算法的具體步驟如下:1)錨節(jié)點周期性地向周圍發(fā)送自身信息,包括節(jié)點ID和自身位置信息。2)未知節(jié)點接收到一定的坐標(biāo)信息后,不再接收新的信息,對接收到的信息進(jìn)行高斯濾波,并將接收到的RSSI值根據(jù)式(1)~式(5)轉(zhuǎn)換成對應(yīng)的距離值。3)根據(jù)得到的距離值進(jìn)行從小到大排列,取前4個錨節(jié)點。4)使用距離比例模型,對4個錨節(jié)點中隨機(jī)3個進(jìn)行排列組合求出相對應(yīng)的三角形質(zhì)心O1,O2,O3和O4坐標(biāo)。5)根據(jù)RSSI-RCWC定位算法,根據(jù)得到的質(zhì)心坐標(biāo)計算出未知節(jié)點坐標(biāo)O(x,y)。6)計算未知節(jié)點誤差如式(17)所示
在空曠的室內(nèi)場地,選取10 m×10 m的矩形區(qū)域進(jìn)行實驗,在頂點位置以及該區(qū)域的中心,共設(shè)置9個錨節(jié)點,無線信號載頻為2.4 GHz,使用相同型號的路由器斐訊FWR—706,未知節(jié)點通過隨機(jī)生成函數(shù)來生成,權(quán)值n取5,按照上述的步驟進(jìn)行仿真定位,得到接收到的信號強(qiáng)度再利用MATLAB R2018a對算法進(jìn)行仿真實驗。
在實際測試中,選用普通質(zhì)心算法和加權(quán)質(zhì)心算法進(jìn)行比較,隨機(jī)選用15個點位,實驗的定位精度誤差仿真結(jié)果如圖3(a)所示。從圖3(a)可以看出,普通質(zhì)心算法存在較大的誤差,效果較差,RSSI-RCWC算法誤差減小效果明顯,從整體效果看,RSSI-RCWC算法定位誤差也明顯要優(yōu)于其他兩種算法,存在較大的優(yōu)勢。
通過取不同的權(quán)值n進(jìn)行仿真實驗,實驗進(jìn)行100次,取其平均值,畫出平均定位誤差曲線,如圖3(b)所示。根據(jù)圖3(b)的結(jié)果,選取權(quán)值n為6,對隨機(jī)抽取的15個點進(jìn)行定位,實驗進(jìn)行100次,求取平均定位誤差,對以上三種方法的定位及其誤差仿真結(jié)果如圖3(c)所示。
圖3 仿真實驗結(jié)果
實驗結(jié)果表明,相對于傳統(tǒng)的質(zhì)心算法,改進(jìn)算法的最小誤差減少了0.40 m,最大誤差減少了0.47 m,平均誤差減少了0.37 m,提高了56.06 %;相對于加權(quán)質(zhì)心算法,改進(jìn)算法的最小誤差減少了0.12 m,最大誤差減少了0.05 m,平均誤差減少了0.088 m,精度提高了23.16 %。
表1 誤差計算
針對無線傳感器網(wǎng)絡(luò)中RSSI測距誤差的問題,對加權(quán)質(zhì)心算法存在的不合理因素進(jìn)行改進(jìn),提出了RSSI-RCWC定位算法。RSSI-RCWC定位算法解決了錨節(jié)點圓不相交狀態(tài)下,選取其他錨節(jié)點進(jìn)行補(bǔ)位造成RSSI獲取精度誤差增大的問題,提出的改進(jìn)的加權(quán)質(zhì)心算法,是一種更精確的距離倒數(shù)和權(quán)重的比例公式。實驗結(jié)果表明:與傳統(tǒng)的算法相比,RSSI-RCWC定位算法的定位精度提高了56.06 %,比加權(quán)質(zhì)心算法提高了23.16 %,提高了定位精度,具有較高的實際應(yīng)用價值。