节点定位方法
1. 节点定位的计算
在 WSNs 的定位中,未知节点通过一定的技术和方法能够获得定位自身所需的坐标、角度或距离信息,从而利用节点位置的计算方法计算自身位置。下面我们将介绍几种较为典型的位置计算方法:三边测量法、三角测量法、极大似然估计法、最小二乘法等。
1.1 三边测量法
在二维空间位置计算中,当未知节点获得三个 BS 节点的位置和距离信息时,可通过三边测量方法计算 MS 位置。
如图所示,未知节点 D,其坐标 ( x , y ) (x,y) (x,y) 未知;通信半径内有三个 BS 节点 A、B、C,三个 BS 节点的位置已知,分别为 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1,y1),(x2,y2),(x3,y3),通过一定的方法估测出未知节点与 BS 节点之间的距离为 d 1 , d 2 , d 3 d_1,d_2,d_3 d1,d2,d3。由此可得
( x − x i ) 2 + ( y − y i ) 2 = d i 2 ⇓ x 2 + y 2 + x i 2 + y i 2 − 2 x i x − 2 y i y = d i 2 , i = 1 , 2 , 3. (x-x_i)^2+(y-y_i)^2 = d_i^2 \\ \Downarrow \\ x^2+y^2+x_i^2+y_i^2-2x_ix-2y_iy = d_i^2,\quad i=1,2,3. (x−xi)2+(y−yi)2=di2⇓x2+y2+xi2+yi2−2xix−2yiy=di2,i=1,2,3.
未知参数除了 x , y x,y x,y 还有 x 2 + y 2 x^2+y^2 x2+y2,于是采用高斯消元法可得
d 3 2 − d 1 2 = 2 ( x 1 − x 3 ) x + 2 ( y 1 − y 3 ) y + x 3 2 − x 1 2 + y 3 2 − y 1 2 d 3 2 − d 2 2 = 2 ( x 2 − x 3 ) x + 2 ( y 2 − y 3 ) y + x 3 2 − x 2 2 + y 3 2 − y 2 2 \begin{aligned} d_3^2-d_1^2 &= 2(x_1-x_3)x+2(y_1-y_3)y+x_3^2-x_1^2+y_3^2-y_1^2 \\ d_3^2-d_2^2 &= 2(x_2-x_3)x+2(y_2-y_3)y+x_3^2-x_2^2+y_3^2-y_2^2 \end{aligned} d32−d12d32−d22=2(x1−x3)x+2(y1−y3)y+x32−x12+y32−y12=2(x2−x3)x+2(y2−y3)y+x32−x22+y32−y22
现在转化为只含有两个未知数得方程组,因此可利用求逆得到解。
[ d 3 2 − d 1 2 − x 3 2 + x 1 2 − y 3 2 + y 1 2 d 3 2 − d 2 2 − x 3 2 + x 2 2 − y 3 2 + y 2 2 ] = [ 2 ( x 1 − x 3 ) 2 ( y 1 − y 3 ) 2 ( x 2 − x 3 ) 2 ( y 2 − y 3 ) ] [ x y ] \begin{bmatrix} d_3^2-d_1^2-x_3^2+x_1^2-y_3^2+y_1^2 \\ d_3^2-d_2^2-x_3^2+x_2^2-y_3^2+y_2^2 \end{bmatrix} = \begin{bmatrix} 2(x_1-x_3)&2(y_1-y_3) \\ 2(x_2-x_3)&2(y_2-y_3) \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} [d32−d12−x32+x12−y32+y12d32−d22−x32+x22−y32+y22]=[2(x1−x3)2(x2−x3)2(y1−y3)2(y2−y3)][xy]
1.2 三角测量法
三角测量法利用 BS 节点与未知节点 MS 之间的角度信息,通过几何关系列出方程组,从而转化为三边测量计算方法的问题。
三角测量术常用到基于 AOA 方法的测距中, 它根据三个已知坐标的节点到未知节点的相对角度来确定节点坐标。三个 BS 节点 A、B、C 坐标分别为 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1,y1),(x2,y2),(x3,y3),假设节点 D 的坐标为 ( x , y ) (x,y) (x,y),如图所示。
未知节点 D 到节点 A、B、C 之间的夹角分别为 ∠ A D B , ∠ A D C , ∠ B D C ∠ADB,∠ADC,∠BDC ∠ADB,∠ADC,∠BDC 已知。
通过节点 A、C 的坐标信息和角度 ∠ A D C \angle ADC ∠ADC 可唯一确定以 O 1 O_1 O1 为圆心, d 1 d_1 d1 为半径的圆。则圆心为 ( x O 1 , y O 1 ) (x_{O1},y_{O1}) (xO1,yO1),设 α = ∠ A O 1 C = 2 ( 18 0 ∘ − ∠ A D C ) \alpha=\angle AO_1C = 2(180^{\circ}-\angle ADC) α=∠AO1C=2(180∘−∠ADC)。存在下列公式:
( x O 1 − x 1 ) 2 + ( y O 1 − y 1 ) 2 = d 1 2 ( x O 1 − x 3 ) 2 + ( y O 1 − y 3 ) 2 = d 1 2 ( x 1 − x 3 ) 2 + ( y 1 − y 3 ) 2 = 2 d 1 2 − 2 d 1 2 cos α \begin{aligned} (x_{O1}-x_1)^2+(y_{O1}-y_1)^2 &= d_1^2 \\ (x_{O1}-x_3)^2+(y_{O1}-y_3)^2 &= d_1^2 \\ (x_{1}-x_3)^2+(y_{1}-y_3)^2 &= 2d_1^2-2d_1^2\cos \alpha \end{aligned} (xO1−x1)2+(yO1−y1)2(xO1−x3)2+(yO1−y3)2(x1−x3)2+(y1−y3)2=d12=d12=2d12−2d12cosα
由以上三式能够确定圆心 O 1 O_1 O1 的坐标和半径
d 1 2 = ( x 1 − x 3 ) 2 + ( y 1 − y 3 ) 2 2 ( 1 − cos α ) d_1^2 = \frac{(x_{1}-x_3)^2+(y_{1}-y_3)^2}{2(1-\cos \alpha)} d12=2(1−cosα)(x1−x3)2+(y1−y3)2
同理可对 A、B、D 和 B、C、D 分别确定相应的圆心和半径,最后利用三边测量确定 D 的坐标。
1.3 极大似然估计法
该方法所运用的是求解最小误差点的原理,即存在一个点使得所有方程的误差最小。在极大似然估计法中,求解的是距离误差最小点。
如图所示,未知节点的通信范围内有 n n n 个 BS,且已知所有 BS 节点坐标,分别为 ( x 1 , y 1 ) , ⋯   , ( x n , y n ) (x_1,y_1),\cdots,(x_n,y_n) (x1,y1),⋯,(xn,yn)。通过某种方法获得了与各 BS 节点之间的距离 d 1 , d 2 , ⋯   , d n d_1,d_2,\cdots,d_n d1,d2,⋯,dn。假设未知节点 A 的坐标为 ( x , y ) (x,y) (x,y)。由此可知
( x 1 − x ) 2 + ( y 1 − y ) 2 = d 1 2 ( x 2 − x ) 2 + ( y 2 − y ) 2 = d 2 2 ⋮ ( x n − x ) 2 + ( y n − y ) 2 = d n 2 \begin{aligned} (x_{1}-x)^2+(y_{1}-y)^2 &= d_1^2 \\ (x_{2}-x)^2+(y_{2}-y)^2 &= d_2^2 \\ \vdots \\ (x_{n}-x)^2+(y_{n}-y)^2 &= d_n^2 \end{aligned} (x1−x)2+(y1−y)2(x2−x)2+(y2−y)2⋮(xn−x)2+(yn−y)2=d12=d22=dn2
将方程组中的前 n − 1 n-1 n−1 个方程减去第 n n n 个方程得
x 1 2 − x n 2 + y 1 2 − y n 2 − d 1 2 + d n 2 = 2 ( x 1 − x n ) x + 2 ( y 1 − y n ) y x 2 2 − x n 2 + y 2 2 − y n 2 − d 2 2 + d n 2 = 2 ( x 2 − x n ) x + 2 ( y 2 − y n ) y ⋮ x n − 1 2 − x n 2 + y n − 1 2 − y n 2 − d n − 1 2 + d n 2 = 2 ( x n − 1 − x n ) x + 2 ( y n − 1 − y n ) y \begin{aligned} x_1^2-x_n^2+y_1^2-y_n^2-d_1^2+d_n^2 &= 2(x_1-x_n)x+2(y_1-y_n)y \\ x_2^2-x_n^2+y_2^2-y_n^2-d_2^2+d_n^2 &= 2(x_2-x_n)x+2(y_2-y_n)y \\ \vdots \\ x_{n-1}^2-x_n^2+y_{n-1}^2-y_n^2-d_{n-1}^2+d_n^2 &= 2(x_{n-1}-x_n)x+2(y_{n-1}-y_n)y \end{aligned} x12−xn2+y12−yn2−d12+dn2x22−xn2+y22−yn2−d22+dn2⋮xn−12−xn2+yn−12−yn2−dn−12+dn2=2(x1−xn)x+2(y1−yn)y=2(x2−xn)x+2(y2−yn)y=2(xn−1−xn)x+2(yn−1−yn)y
即
[ x 1 2 − x n 2 + y 1 2 − y n 2 − d 1 2 + d n 2 x 2 2 − x n 2 + y 2 2 − y n 2 − d 2 2 + d n 2 ⋮ x n − 1 2 − x n 2 + y n − 1 2 − y n 2 − d n − 1 2 + d n 2 ] = [ 2 ( x 1 − x n ) 2 ( y 1 − y n ) 2 ( x 2 − x n ) 2 ( y 2 − y n ) ⋮ 2 ( x n − 1 − x n ) 2 ( y n − 1 − y n ) ] [ x y ] \begin{bmatrix} x_1^2-x_n^2+y_1^2-y_n^2-d_1^2+d_n^2 \\ x_2^2-x_n^2+y_2^2-y_n^2-d_2^2+d_n^2 \\ \vdots \\ x_{n-1}^2-x_n^2+y_{n-1}^2-y_n^2-d_{n-1}^2+d_n^2 \end{bmatrix} = \begin{bmatrix} 2(x_1-x_n)&2(y_1-y_n) \\ 2(x_2-x_n)&2(y_2-y_n) \\ \vdots \\ 2(x_{n-1}-x_n)&2(y_{n-1}-y_n) \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} ⎣⎢⎢⎢⎡x12−xn2+y12−yn2−d12+dn2x22−xn2+y22−yn2−d22+dn2⋮xn−12−xn2+yn−12−yn2−dn−12+dn2⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡2(x1−xn)2(x2−xn)⋮2(xn−1−xn)2(y1−yn)2(y2−yn)2(yn−1−yn)⎦⎥⎥⎥⎤[xy]
因此得到 D = K X D = KX D=KX。此时利用 LS 来解。