1、学习RSSI测距的原理
2、学习多边定位法对RSSI定位的实现
3、用仿真实现RSSI定位
RSSI测距方法是无线传感器网络中比较常用的一种测距方法。当无线信号在大气中传播时,由于各种因素的干扰,信号强度会随着距离的增大而衰减,这表明在信号强度变化与传播距离之间存在某种数学关系,利用这种关系建立起的数学模型就可以求出发射节点和接收节点之间的距离。在RSSI定位过程中,未知节点根据接收到的信号强度值来计算在传输过程中信号的损耗,根据建立的数学模型将传输损耗转换为距离,进而再根据多边定位法等定位方法来计算未知节点的位置。(使用的是Log-Normal信号衰减模型[1])RSSI算法的计算公式如下所示:
P L ( d ) = P L ( d 0 ) − 10 n l g d d 0 − N 0 PL(d)=PL(d_0)-10nlg \frac{d}{d_0} -N_0 PL(d)=PL(d0)−10nlgd0d−N0
公式中各参数含义如下:
符号 | 含义 |
---|---|
d d d | 节点之间的距离 |
n n n | 信号衰减指数,常取值为2~4 |
d 0 d_0 d0 | 参考距离 |
P L ( d ) PL(d) PL(d) | 距离发送节点d处的信号强度,单位dBm |
N 0 N_0 N0 | 均值为0,标准差为 σ 的高斯随机噪声变量 |
P L ( d 0 ) PL(d_0) PL(d0) | 距离发送节点 d 0 d_0 d0 处的信号强度,一般从经验或硬件说明定义中得到 |
在实际情况下测距是存在误差的,简单利用三边定位往往无法获得未知节点的准确位置。多边定位法是指根据多个锚节点(>3)和相应的测距结果,寻找一个使测距误差对定位精度影响最小的点,并以该点作为未知节点的位置。假设锚节点数量为n,其坐标分布为 X i = ( x i , y i ) , i = 1 , 2 , … , n X_i=(x_i,y_i ),i=1,2,…,n Xi=(xi,yi),i=1,2,…,n,并且这些锚节点与未知节点 X = ( x , y ) X=(x,y) X=(x,y) 间的距离分别为 r i , i = 1 , 2 , … , n r_i,i=1,2,…,n ri,i=1,2,…,n,则可以建立如下方程组:
从第一个方程开始分布减去最后一个方程,这样就可以消去方程组中未知节点坐标的平方项,获得如下n-1维线性方程方程组:
此方程组的矩阵表示形式为:
A X = B AX=B AX=B
其中系数矩阵A 和右边值向量B 为:
未知节点 X X X 为:
x = [ x y ] x= \left[ \begin{array}{cc} x \\ y \end{array}\right] x=[xy]
由于测量误差的存在,实际的线性方程组应表示为: A X + N = B AX+N=B AX+N=B ,其中 N N N为 n − 1 n-1 n−1维随机误差向量。对于该线性方程组,可以利用最小二乘法原理使随机误差向量N=B-AX模的平方最小,即 ‖ N ‖ 2 = ‖ B − A X ‖ 2 ‖N‖^2=‖B-AX‖^2 ‖N‖2=‖B−AX‖2最小,从而保证测距误差对定位结果的影响最小。
‖ B − A X ‖ 2 = ( B − A X ) T ( B − A X ) = B T B − B T A X − X T A T B + X T A T A X ‖B-AX‖^2=(B-AX)^T (B-AX)=B^T B-B^T AX-X^T A^T B+X^T A^T AX ‖B−AX‖2=(B−AX)T(B−AX)=BTB−BTAX−XTATB+XTATAX
把上式当作X 的函数并对其求导数,令导数等于零后得到:
A T A X − A T B = 0 A^T AX-A^T B=0 ATAX−ATB=0
该式被称为线性最小二乘问题的正则方程。在矩阵A 是满秩的条件下,该方程有唯一的解 X = ( A T A ) − 1 A T B X=(A^T A)^{-1} A^T B X=(ATA)−1ATB ,否则最小二乘法将不再适用。
实验使用 python 模拟RSSI采集,得到目标节点和锚节点的距离,再利用多边定位法,预测出目标节点的坐标。
1、 Python 仿真结果
从误差曲线图可以看出,随着锚节点数量的增多,定位误差呈下降趋势。
定位误差还与锚节点的分布有关,相同数量的锚节点,分布越分散,误差就越小。由于每一次运行的锚节点都是随机生成,所以误差曲线会有波动。
1、RSSI定位算法对锚节点数量有要求,二维定位至少需要三个锚节点,三维定位至少需要四个锚节点。
2、随着锚节点数增多,定位误差呈下降趋势。
3、定位误差与锚节点分布有关,锚节点分布越分散,定位误差越小。
RSSI算法中,因传感器节点本身就具有无线通信能力,所以这是一种低功率、廉价的测距技术,对硬件要求低且易于实现。但信号强度很容易受到周围环境的影响,如天气、障碍物等不利因素都会对信号强度产生不同程度的影响,会产生-150%~+150%的测距误差。可以通过建立合适的噪声差模型来有效地补偿环境产生的误差。
RSSI算法定位的误差结果还与锚节点的数量和分布有关,我们应该选取合适的锚节点数量,尽量让锚节点分散,减小误差。
完整代码已上传Github和Gitee:
https://github.com/hua-zi/wireless-sensor-network
https://gitee.com/huazi-j/wireless-sensor-network
https://www.bilibili.com/video/BV1jS4y1B7w9?share_source=copy_web
[1]《无线传感器网络理论及应用》(孙利民)P429