DV-Hop算法的定位步骤如下:
(1)各锚节点向通信范围内的邻居节点广播自身的位置信息。接收节点则记录到每个锚节点的最小跳数,同时忽略来自同一个锚节点的较大的跳数信息,而后将跳数值加1转发给邻居节点。
(2)每个锚节点根据所记录的其他锚节点的坐标信息和跳数,通过式(1)估算网络平均跳距距离。
H
o
p
S
i
z
e
i
=
∑
j
≠
i
(
x
i
−
x
j
)
2
+
(
y
i
−
y
j
)
2
∑
j
≠
i
h
o
p
S
i
j
(1)
HopSize_i=\frac{\sum_{j\neq i}\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}}{\sum_{j\neq i }hopS_{ij}}\tag{1}
HopSizei=∑j=ihopSij∑j=i(xi−xj)2+(yi−yj)2
(1)
式中,
j
j
j为锚节点
i
i
i数据表中的其他锚节点号,
h
o
p
S
i
j
hopS_{ij}
hopSij 为锚节点
i
i
i和
j
j
j之间的跳数。
锚节点将所计算的平均跳距广播至整个网络后,未知节点仅记录所收到的第一个平均跳距,并向邻居节点转发,未知节点接收到平均跳距后,跟据所记录的跳数信息,按式(2)估算未知节点 i 到某个锚节点的距离:
L
i
=
S
i
∗
H
o
p
S
i
z
e
(2)
L_i=S_i*HopSize \tag{2}
Li=Si∗HopSize(2)
(3)设
P
1
(
x
1
,
y
1
)
,
.
.
.
,
P
n
(
x
n
,
y
n
)
P_1(x_1,y_1),...,P_n(x_n,y_n)
P1(x1,y1),...,Pn(xn,yn)表示
n
n
n个锚节点的坐标位置,待定位节点D的位置为
(
x
,
y
)
(x,y)
(x,y) ,其与标节点估计距离分别为
d
1
,
d
2
,
.
.
.
,
d
n
−
1
d_1,d_2,...,d_{n-1}
d1,d2,...,dn−1 ,可以建立式(3)的方程。
{
(
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
(3)
\begin{cases} (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 \end{cases}\tag{3}
⎩⎪⎪⎪⎨⎪⎪⎪⎧(x1−x)2+(y1−y)2=d12(x2−x)2+(y2−y)2=d22...(xn−x)2+(yn−y)2=dn2(3)
第一个方程组减去第后一个方程后,到得:
{
2
(
x
1
−
x
n
)
x
+
2
(
y
1
−
y
n
)
y
=
x
1
2
−
x
n
2
+
y
1
2
−
y
n
2
−
d
1
2
+
d
n
2
2
(
x
2
−
x
n
)
x
+
2
(
y
2
−
y
n
)
y
=
x
2
2
−
x
n
2
+
y
2
2
−
y
n
2
−
d
2
2
+
d
n
2
.
.
.
2
(
x
n
−
1
−
x
n
)
x
+
2
(
y
n
−
1
−
y
n
)
y
=
x
n
−
1
2
−
x
n
2
+
y
n
−
1
2
−
y
n
2
−
d
n
−
1
2
+
d
n
2
(4)
\begin{cases} 2(x_1-x_n)x+2(y_1-y_n)y=x_1^2-x_n^2+y_1^2-y_n^2-d_1^2+d_n^2\\ 2(x_2-x_n)x+2(y_2-y_n)y=x_2^2-x_n^2+y_2^2-y_n^2-d_2^2+d_n^2\\ ...\\ 2(x_{n-1}-x_n)x+2(y_{n-1}-y_n)y=x_{n-1}^2-x_n^2+y_{n-1}^2-y_n^2-d_{n-1}^2+d_n^2\\ \end{cases}\tag{4}
⎩⎪⎪⎪⎨⎪⎪⎪⎧2(x1−xn)x+2(y1−yn)y=x12−xn2+y12−yn2−d12+dn22(x2−xn)x+2(y2−yn)y=x22−xn2+y22−yn2−d22+dn2...2(xn−1−xn)x+2(yn−1−yn)y=xn−12−xn2+yn−12−yn2−dn−12+dn2(4)
用线性方程组表示为
A
L
=
b
AL = b
AL=b,其中,
A
=
[
2
(
x
1
−
x
n
)
2
(
y
1
,
y
n
)
.
.
.
.
.
.
2
(
x
n
−
1
−
x
n
)
2
(
y
n
−
1
−
y
n
)
]
(5)
A=\left[\begin{matrix} 2(x_1-x_n)&2(y_1,y_n)\\ ...&...\\ 2(x_{n-1}-x_n)&2(y_{n-1}-y_n) \end{matrix}\right]\tag{5}
A=⎣⎡2(x1−xn)...2(xn−1−xn)2(y1,yn)...2(yn−1−yn)⎦⎤(5)
L = [ x y ] (6) L=\left[\begin{matrix} x\\ y\end{matrix}\right]\tag{6} L=[xy](6)
b = [ x 1 2 − x n 2 + y 1 2 − y n 2 + d n 2 − d 1 2 . . . x n − 1 2 − x n 2 + y n − 1 2 − y n 2 + d n 2 − d n − 1 2 ] (7) b=\left[\begin{matrix} x_1^2-x_n^2+y_1^2-y_n^2+d_n^2-d_1^2\\ ...\\ x_{n-1}^2-x_n^2+y_{n-1}^2-y_n^2+d_n^2-d_{n-1}^2 \end{matrix}\right]\tag{7} b=⎣⎡x12−xn2+y12−yn2+dn2−d12...xn−12−xn2+yn−12−yn2+dn2−dn−12⎦⎤(7)
采用最小二乘法得到方程组的解为:
L
=
(
A
T
A
)
−
1
A
T
b
L=(A^TA)^-1A^Tb
L=(ATA)−1ATb
设定节点覆盖范围为200x200,总节点数为:200,信标节点数20,通信半径为30,未知节点数为180。采用归一化平均定位误差作为评价指标:
e
r
r
o
r
=
∑
i
=
1
m
(
x
i
−
x
i
∗
)
2
+
(
y
i
−
y
i
∗
)
2
k
∗
m
∗
r
(8)
error = \frac{\sum_{i=1}^m\sqrt{(x_i-x_i^*)^2+(y_i-y_i^*)^2}}{k*m*r}\tag{8}
error=k∗m∗r∑i=1m(xi−xi∗)2+(yi−yi∗)2
(8)
式中,
m
m
m为未知节点的数目;
k
k
k为实验次数;
r
r
r为节点的通信半径;
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)为未知节点的估计坐标;
(
x
i
∗
,
y
i
∗
)
(x_i^*,y_i^*)
(xi∗,yi∗)为该未知节点的真实坐标。
基础DV-hop的归一化定位误差:0.5384
[1]吴曦德,方杰,杨世杰,周庆标.基于GPSO-DVHop的传感器节点定位方法[J].计算机工程与应用,2013,49(22):95-99.
[1]张恒. 无线传感器节点定位方法的研究与实现[D].华南理工大学,2012.