点击:室内定位主页目录+一维实战+二维实战+安卓惯性导航基础
前言
继上篇文章,由于信号的严重衰减和多径效应,使得三点定位算法得到的坐标精准度太差。尝试使用其他的算法提高精准度。这里我使用室内定位指纹法
指纹法介绍
指纹法将环境的位置与特定的指纹联系起来,指纹中存储一种或多种特征,当实际定位中,通过实际获得的多个特征与指纹中的特征匹配,从而获得适配的指纹的坐标从而定位,在室内定位中,用得最多的特征也就是RSSI定位。
指纹定位分为两个阶段:离线阶段和在线阶段。离线阶段将每个位置的坐标记录以及保存特征(RSSI),最后收集完所有指纹得到指纹库。在线阶段则通过实际的特征查询指纹库获得定位。当然,实际的特征中不可能刚好和指纹库中特征相同,这时就需要一定的算法得到最佳适配的指纹。
指纹法的算法
1确定性的算法
确定性算法即在指纹库的N个指纹中,与实际测量的特征进行欧几里得度量计算,得到N个欧式距离,从中选择距离最小的指纹当做定位。假设位置指纹是N维的,也就是说有N个可见的AP,M个网格点,这样指纹库里面有M个指纹。r和ρ的欧氏距离为:
2概率性的算法
概率性的算法认为实际的rssi值应该是一个分布 简单地使用RSS的边缘分布的乘积作为联合分布。假设观测到的RSS向量为r=[r1,r2,r3,⋅⋅⋅,rN],估计位置时将选择一个网格点,这个网格点上有最大的概率可能产生这个r。对于给定的r,可以使用贝叶斯准则来估计移动设备的位置,某个网格点上能产生r的概率可以这样计算:
指纹实现–KNN最近邻算法
knn属于一种确定型算法,也是最简单的机器学习算法,正好适合我这种菜鸟使用。
knn是给定一个训练数据集。对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是K个邻居)。这K个实例的多数属于某个类,就把该输入实例分类到这个类中。但用于定位中需要的是某个特定的位置而不是分类。故将k=1,当做找最近邻居使用。
在下篇文章中,将用指纹法的knn来实现室内定位。