基于位置指纹匹配的定位算法
写在前面:毕业设计做的 基于WAF模型的位置指纹室内定位系统研发,用到了KNN、WKNN、EWKNN算法用于 在线定位阶段
算法相关原理及计算方法
加权K近邻算法(WKNN)
加权K近邻算法(WKNN)是在K近邻算法上的进一步优化,它引入权重,使得在计算定位结果时需要考虑得到的K个最相似指纹数据在估计定位结果时的一个贡献大小。通常来说,距离越大,说明这个位置指纹点离定位点越远,那么它对于定位结果的贡献应该越小。
在此基础上,采用基于权重的方式,处理最后的K个最相似指纹数据的位置坐标,这样计算出来的定位结果比直接取平均值得到的定位结果会更加符合实际,所以定位精度也会较高。WKNN的计算思路如下:
首先,同KNN算法一样,需要计算定位点的指纹数据和位置指纹点的指纹数据之间的欧氏距离,然后根据欧氏距离的大小,对数据进行从小到大排序。排序完成后,选取K个最相近的位置指纹用于定位点坐标的计算。最后,定位点的坐标是根据K个位置指纹的相似程度给予一定的权值计算结果,计算公式如下:
( x , y ) = ∑ i = 1 k 1 D i + ε ∑ i = 1 k 1 D i + ε ( x i , y i ) (\mathrm{x}, y)=\sum_{i=1}^{k} \frac{\frac{1}{D_{i}+\varepsilon}}{\sum_{i=1}^{k} \frac{1}{D_{i}+\varepsilon}}\left(x_{i}, y_{i}\right) (x,y)=i=1∑k∑i=1kDi+ε1Di+ε1(xi,yi)
其中, 表示定位点的坐标,即定位结果。 表示K个最相近的位置指纹数据的坐标, 表示欧氏距离, 代表一个很小的正整数,可以根据需要自行定义,作用是避免取距离的倒数时出现分母为零的情况。
WKNN算法的流程如下表所示。
Step1: | 计算每个位置指纹数据与定位点数据之间的欧氏距离,计算公式如下: D = ∑ i = 1 n ( r s s i i − r s s i ‾ i ) 2 D=\sqrt{\sum_{i=1}^{n}\left(r s s i_{i}-\overline{r s s i}_{i}\right)^{2}} D=i=1∑n(rssii−rssii)2 其中, 表示定位点上采集到的第i个AP的RSSI值, 表示位置指纹数据中第i个AP多次采集的RSSI平均值。 |
---|---|
Step2: | 对欧氏距离进行从小到大排序。 |
Step3: | 选取距离最近的K个位置指纹数据,取距离的倒数进行加权,计算定位点的位置坐标。 |
增强加权K近邻算法(EWKNN)
以上算法的不足之处是K为固定值。如果将K值固定来进行计算,会将距离偏离待定位点较远的参考点也计入计算权重。EWKNN通过加入阈值R0进行筛选的过程。
在WKNN的基础上,选取出Di值小于阈值R0的参考点,假设个数为G,将G个欧式距离值Di值由小到大排序,定义Li等于D1和Ds(s=2,3,…,G)的差值,那么Li的平均值为:
E
(
L
)
=
L
2
+
L
3
+
…
+
L
G
G
−
1
E(L)=\frac{L_{2}+L_{3}+\ldots+L_{G}}{G-1}
E(L)=G−1L2+L3+…+LG
将Li和E(L)进行比较,把Li中大于平均值E(L)的剔除,剩余的参考点个数为K,将这K个参考点运用WKNN算法解算出待定位点的位置坐标。即可实现了动态的选择K值即参考点的个数。若匹配的不同参考点的APs信号强度与待定位点的APs信号强度欧式距离Di均小于阈值,则EWKNN即为WKNN。
EWKNN算法的流程如下表所示:
Step1: | 计算每个位置指纹数据与定位点数据之间的欧氏距离,计算公式如下: D = ∑ i = 1 n ( r s s i i − r s s i ‾ i ) 2 D=\sqrt{\sum_{i=1}^{n}\left(r s s i_{i}-\overline{r s s i}_{i}\right)^{2}} D=i=1∑n(rssii−rssii)2 其中, 表示定位点上采集到的第i个AP的RSSI值, 表示位置指纹数据中第i个AP多次采集的RSSI平均值。 |
---|---|
Step2: | 选择阈值R0,得到距离小于R0的集合。 |
Step3: | 排序,求平均距离,保留参考点的距离小于平均距离的最终集合。 |
Step3: | 选取最终集合中的位置指纹数据,取距离的倒数进行加权,计算定位点的位置坐标。 |
算法举例
KNN:算欧氏距离,找出其中K个较小的值,如D1,D2,D5,D6
得到坐标:
X
=
X
1
+
X
2
+
X
5
+
X
6
4
X=\frac{X_{1}+X_{2}+X_{5}+X_{6}}{4}
X=4X1+X2+X5+X6
Y
=
Y
1
+
Y
2
+
Y
5
+
Y
6
4
Y=\frac{Y_{1}+Y_{2}+Y_{5}+Y_{6}}{4}
Y=4Y1+Y2+Y5+Y6
WKNN:算欧氏距离,找出其中K个较小的值,如D1,D2,D5,D6
计算权重:
w
1
=
1
D
1
1
D
1
+
1
D
2
+
1
D
5
+
1
D
6
w_{1}=\frac{\frac{1}{D_{1}}}{\frac{1}{D_{1}}+\frac{1}{D_{2}}+\frac{1}{D_{5}}+\frac{1}{D_{6}}}
w1=D11+D21+D51+D61D11
w
2
=
1
D
2
1
D
1
+
1
D
2
+
1
D
5
+
1
D
6
w_{2}=\frac{\frac{1}{D_{2}}}{\frac{1}{D_{1}}+\frac{1}{D_{2}}+\frac{1}{D_{5}}+\frac{1}{D_{6}}}
w2=D11+D21+D51+D61D21
得到坐标:
X
=
X
1
∗
W
1
+
X
2
∗
w
2
+
X
5
∗
w
5
+
X
6
∗
w
6
X=X_{1^{*} W_{1}}+X_{2^{*}} w_{2}+X_{5^{*}} w_{5}+X_{6^{*}} w_{6}
X=X1∗W1+X2∗w2+X5∗w5+X6∗w6
Y
=
Y
1
∗
W
1
+
Y
2
∗
w
2
+
Y
5
∗
w
5
+
Y
6
∗
w
6
Y=Y_{1^{*} W_{1}}+Y_{2^{*}} w_{2}+Y_{5^{*}} w_{5}+Y_{6^{*}} w_{6}
Y=Y1∗W1+Y2∗w2+Y5∗w5+Y6∗w6
EWKNN:算欧氏距离,选择阈值D,将大于D的参考点去掉,如去除D3,D4,D7,D8
计算平均距离:
E
1
=
D
2
−
D
1
,
E
2
=
D
5
−
D
1
,
E
3
=
D
6
−
D
1
E_{1}=D_{2}-D_{1},E_{2}=D_{5}-D_{1},E_{3}=D_{6}-D_{1}
E1=D2−D1,E2=D5−D1,E3=D6−D1
E
(
D
)
=
E
1
+
E
2
+
E
3
4
−
1
E(D)=\frac{E_{1}+E_{2}+E_{3}}{4-1}
E(D)=4−1E1+E2+E3
去除大于E(D)的值D6,对D1,D2,D5进行计算。
计算权重:
w
1
=
1
D
1
1
D
1
+
1
D
2
+
1
D
5
+
1
D
6
w_{1}=\frac{\frac{1}{D_{1}}}{\frac{1}{D_{1}}+\frac{1}{D_{2}}+\frac{1}{D_{5}}+\frac{1}{D_{6}}}
w1=D11+D21+D51+D61D11
w
2
=
1
D
2
1
D
1
+
1
D
2
+
1
D
5
+
1
D
6
w_{2}=\frac{\frac{1}{D_{2}}}{\frac{1}{D_{1}}+\frac{1}{D_{2}}+\frac{1}{D_{5}}+\frac{1}{D_{6}}}
w2=D11+D21+D51+D61D21
得到坐标:
X
=
X
1
+
X
2
+
X
5
+
X
6
4
X=\frac{X_{1}+X_{2}+X_{5}+X_{6}}{4}
X=4X1+X2+X5+X6
Y
=
Y
1
+
Y
2
+
Y
5
+
Y
6
4
Y=\frac{Y_{1}+Y_{2}+Y_{5}+Y_{6}}{4}
Y=4Y1+Y2+Y5+Y6
在KNN、WKNN、EWKNN三种算法中,EWKNN算法性能是最好的;指纹间距越小,定位精度越高,同时工作量也越大。AP点个数在两个以上定位误差的变化不大,可根据室内环境大小选择,同时WiFi接入点的安装位置应避免使室内环境形成一个完全对称的网络环境。