近年来,随着城域无线基础网络的发展,热点(AP)的覆盖率大幅度提高,由于定位服务需求的增加以及WiFi应用领域的扩大,WiFi定位成为一种有效的定位方式。GPS卫星定位是最主要的定位方式,它需要在相对空旷、高层建筑不密集的地方获得较准确的定位,当人们处在室内或高楼林立的市区,定位精度明显降低甚至不能定位。此时,利用无处不在的WiFi网络将能够弥补GPS定位的不足。目前大多数的WiFi无线定位算法主要为:基于到达时间、到达角度、到达时间差的模型定位及基于接受信号强度(RSSI)的位置指纹定位算法,由于位置指纹算法的无线定位方式不需要已知AP的位置信息及准确的信道模型,该算法在定位性能以及可用性上具有更大的优势。因此,本文首先设计了整体的系统框架,通过研究分析了该算法目前存在的问题,提出了改进方案,并在Android平台上实现完整的定位系统。
1 系统整体设计
本系统的设计目标是在Android智能终端上实现实时WiFi定位系统,该系统包括客户端、数据服务器以及定位服务器。为了使定位过程和服务器通信过程相对独立,分别设置了专门用于定位的AP热点和客户端与服务器之间的通信AP热点,可有效降低系统环境搭建的初期成本。本方案的系统框架如图1所示。其中的通信AP热点需要与局域网相连,保证定位区域内WiFi信号良好,确保数据传输及处理的及时性。客户端和服务器端通过TCP连接实现可靠传输。
2 系统实现
2.1 客户端模块设计
本系统采用客户端/服务器(c/s)的网络架构,客户端的定位过程主要包括WiFi无线信号扫描、数据传输、界面显示等,该过程的流程图如图2所示。
WiFi信号扫描是利用Android API提供的WiFiManager类实现。首先,判断WiFi是否开启;其次取得WiFiManager及WmInf0对象,通过startScan()、getScanResuits()等方法开始扫描并得到扫描结果mScanResult;最后,将数据传递给服务器端进行定位计算。Android平台为用户提供丰富的界面显示控件,本设计使用ListView显示服务器返回的定位位置信息。
2.2 服务器端模块设计
服务器端首先需要不断监听指定端口,当监听到客户端的请求时,创建新进程,该进程负责处理客户端的请求,其处理过程如图3所示。监听数据,如果接收到该数据,则进行CRC校验并结束链接帧,根据请求内容查询数据库并进行定位运算,最后返回定位结果,通过数据传输反馈给客户端界面显示定位信息。
3 定位算法设计
在室内或室外环境下,由于信号传播途中受地形、障碍物的影响和人体的阻挡,将引起无线信号的折射、衍射等多径传播、多址传播,以不同的时间到达终端,造成传播信号在幅度、频率和相位上的改变。其使得在同一位置,不同时间采集到的RSS值很不确定,即使在同一时间相同位置使用不同的定位设备采集到的RSS大小也会不同,会影响定位的精确性,无线信号传播的衰减模型难以良好地表征距离和信号强度间的映射关系。因此本文采用基于位置指纹的定位算法,同时针对造成定位误差的主要原因,提出了改进的定位算法以提高定位鲁棒性。
3.1 位置指纹定位算法
位置指纹定位是根据不同位置接收到的信号强度向量,建立相应的位置指纹数据库,通过实时采集的信号强度与数据库信号空间中储存的信号向量,根据一定的匹配算法实现定位。该算法能够在一定程度上减少多径效应的影响,增强抗干扰能力。目前,基于位置指纹的定位算法主要分为确定型和概率型,前者的计算效率较高,后者的定位精度较高,但是计算量较大,为了快速定位,采用确定型的位置指纹定位算法。
位置指纹定位过程一般分两个阶段实现:离线采样阶段和在线定位阶段。离线采样阶段主要目的是建立位置指纹数据库,根据定位环境设计较为合理的采样分布图,遍历待定位区域内的所有采样点,将相应的信号强度、MAC地址以及位置信息等记录在指纹数据库中。数据库中数据的准确性决定了定位的精确程度,数据越精确,定位效果越好。在线定位阶段是利用Android手机在待定位点测得AP的信号强度和物理地址,然后通过相应的匹配算法,在数据库中搜索与测量点相匹配的数据,从而估计用户的实际位置。位置指纹的定位过程如图4所示。
3.2 匹配算法
通常的匹配算法有K最近邻匹配算法(KNN),该算法能够有效提高定位精度且应用成熟。本文采用了该匹配算法,K最近邻匹配算法的实质是计算待测点采集到的RSS向量和数据库中已记录的RSS向量之间的距离。假设待测区域有n个AP,m 个参考点,则距离的表达式如下:
其中,q为正整数,当q=1时称为曼哈顿距离,q=2,称为欧式距离;L代表向量在空间中的距离。本文使用q=2进行计算,当取得n个最小欧式距离的位置点后,求取n个坐标点的质心为待测点位置坐标。
3.3 改进的位置指纹定位算法
理论研究表明:由于室内环境复杂,无线信号会因为时间的变化、人体的随机晃动及环境等因素的影响使信号强度值呈现一定的波动。为了保证信号数据本身的稳定性,在实验室环境下进行如下实验:在同一位置的不同时间分别采集数据,上午和下午两个时间段每隔1 S共采集300次WiFi信号。发现无线信号随时间变化不大,基本存在2 dB左右误差,对定位结果影响较小。
但在多次测试过程中发现,无线信号强度在某位置下会出现如图5所示的波动情况,多数信号强度值保持在一定范围内,但中间会存在抖动的数据,该种现象会对离线数据的准确性及在线定位的准确性产生较大影响。直接求均值的方式并不能表征该位置的信号特征,应该对采集的无线信号强度值进行平滑,选取有效点。
对无线信号的平滑提出如下改进方案:
① 每隔1 S采集一次所有的信号组,假设其中一组的信号强度值是level,再连续间隔采集二次;
②如果连续采集三次的信号强度值均介于[1evel - 1,level+1]时,将该数据插入数据库,否则舍去前面的所有信号值,重新返回步骤① ;
③ 将步骤② 获取的多组无线信号强度值再求均值,存入离线数据库。
利用改进的方案将图5平滑处理后,改进前的信号强度值RSS=1.597 1,而改进后的RSSI=-46.I47 1,可见本方案能够去除一定的抖动信号,得到较为理想的离线数据库。该方法不仅用于离线数据采样阶段,而且应用于在线定位阶段实时采集当前无线信号强度,可避免单次采集的不确定性。
针对设备差异对无线信号的影响,首先在同一位置用华为两款不同型号手机对WiFi信号采集300次,无线信号分布情况如图6所示。C8812型号手机采集信号强度保持在一65~66 dB,P6型号手机信号强度保持在一45dB,不同型号手机可能造成的误差达2O dB,若按此进行定位将产生较大定位误差,因此本文将在实时定位之前加上无线信号校正阶段,能有效提高定位精度。
为解决设备差异对WiFi定位造成的影响,Ekahau提出一种自动校正的方法。它是通过分析跟踪设备在一些易于检测的区域时的信号变化,自动学习跟踪建立相应的映射关系,该方法的缺点是设备不易进入易检测区,系统很难获得充足的数据建立映射关系。Haeberlen的研究显示,校正设备与测试设备之间的信号强度之间存在某种线性关系。本文经过大量实验,统计获得数据并通过函数拟合的方法,推导出校正设备及测试设备的关系,可以看作y=ax+b的线性关系,参数a、b将由实际的数据获得。
4 实验结果与分析
实验区域为10 m×16 m,每隔1.5 m设定为一个采样点,AP分布在该区域的四周如图7黑色圆点位置,每个采样点分别采集200次经过平滑处理后存入离线数据库。为比较定位结果的精确性,选定如下5个点为测试点:A位于出口处附近,B位于区域的中心位置,C、D、E点位于区域的边界处。
改进前和改进后分别进行4O次测试,实验结果分析如表1所列。应用改进后的算法各测试点的平均误差均有所下降,A点位于出口处,可能会受其他因素影响,定位效果不明显;B、D点,受外界影响较小,定位效果较好,定位精度提高2 m左右。