党小超,李彩霞,郝占军*
(1.西北师范大学计算机科学与工程学院,兰州 730070;2.甘肃省物联网工程研究中心,兰州 730070)
随着Wi-Fi技术的逐渐成熟与普及,基于Wi-Fi的室内定位技术已成为研究的热点[1-3],尤其是基于位置指纹的定位方法,该方法因其成本低廉、方法简易的优势逐渐成为室内定位的主流,主要包括两个阶段:离线训练阶段和在线定位阶段[4]。离线阶段,主要收集和预处理目标区域参考点位置的指纹信息,然后建立指纹数据库,由于原始数据中通常含有噪音,所以为了减小定位误差,一般利用最近邻算法[5]、神经网络[6]和支持向量机[7]等机器学习方法来提取和存储Wi-Fi信号的主要特征,将原始数据进行处理得到更加准确的指纹信息,从而可以取得更好的定位效果;在线阶段,在测试点采集指纹信息,通过和指纹库中存储的指纹信息匹配,利用概率估计法或加权平均法来估计目标位置。
由于RSS易于测量,不需要额外硬件支持,成本效益高,并且可与多种技术结合使用,所以经典的基于Wi-Fi指纹的定位系统大多采用RSS作为定位特征[8-9]。Radar是第1个基于RSS的指纹定位系统,它利用k最近邻算法来估计移动用户的位置,采用的是具有确定性的位置估计方法[10]。为了提高定位精度,Horus采用基于RSS值的概率估计方法实现了比Radar更好的定位精度[11]。在传统的基于RSS的室内定位方法中,使用来自不同AP的RSS矢量作为指纹库来估计目标位置,或者采集待测点的RSS与至少3个参考点之间的绝对距离,然后对待测点应用基本的几何法或三角测量法来获得其位置。但是单一的基于RSS的方法有两个主要缺点,第一,由于阴影衰落和多径效应,RSS值是高度随机的,并且与传播距离的相关性是松散的;第二,RSS值是通过平均所有输入信号的幅度而获得的粗略信息,并不使用来自不同子载波的信道信息。
RSS的测量结果是信号多径传播的叠加效果,并没有逐一区分多径信号,这是制约RSS稳定性和可靠性的根本原因。为了刻画多径传播,通过修改设备驱动程序[12],从一些先进的Wi-Fi网卡(如Intel Wi-Fi Link 5300 NIC)中使用正交频分复用(OFDM)和多输入多输出(MIMO)技术获取信道状态信息(CSI)。CSI是指特定频带中的信道特性,描述了信号如何从发射机传播到接收机,提供了子载波级别的信道测量,这对提高室内指纹定位精度有很大帮助,FIFS利用多个天线的CSI值加权平均来改善基于RSS的室内指纹识别方法的性能[13];DeepFi系统利用来自3个天线的大量CSI幅度数据进行室内定位[14]。但在某些情况下,CSI比RSS更容易受到动态环境的影响,所以传统的基于CSI或RSS的室内定位系统很难在现实环境中取得比较高的定位精度,相对而言,融合CSI 和RSS的定位方法能够取得较好的定位效果[15-16]。
针对以上问题,本文提出了一种RSS和CSI融合的二阶段室内定位方法。本文的主要思想是利用Wi-Fi信号特征的互补优势,同时避免它们的缺点,不是简单地使用CSI代替RSS,而是以智能的方式融合RSS和CSI来改善位置性能。离线阶段,在每一个参考点处收集指纹特征,为了减小定位误差,将每个参考点处的CSI幅度和RSS进行预处理,其中用卡尔曼滤波对CSI幅度进行处理以减少由于多径效应和噪声引起的动态变化,同时对每个参考点的RSS值做平均处理以减少冗余,然后构建指纹库;在线阶段,采集测试点的RSS和CSI并进行预处理,然后利用RSS和改进的k最近邻算法进行粗略定位,根据粗略定位结果筛选参考点构建子指纹库,最后,利用高斯核函数改进的k最近邻算法精确估计待测点位置。
基于接收信号强度(RSS)的方法由于简单易测的优势在室内定位中得到了广泛应用。RSS是接收机接收到的实际信号功率强度,通常以分贝毫瓦(dBm)或毫瓦(mW)来度量。RSS可用于估计发射机和接收机设备之间的距离;RSS值越高,接收机和发射机之间的距离就越小。由于发射功率或参考点的功率是已知的,所以可以使用多个不同的信号传播模型来估计距离。RSSI(经常与RSS混淆)是RSS指标,它是RSS的一种相对测量,计算方式如:
RSSI=-10log10d+A
(1)
式中,n是路径损耗指数,在自由空间中从2变化到室内环境中的4,A是距离接收机的参考距离处的RSSI值。
采用802.11n传输协议的Wi-Fi信号可以使用正交频分复用(OFDM)的调制方式,将信号调制到各个子信道上进行传输,以便提取每个信道上的CSI,使用OFDM传输的信号,经过多径传输后的接收信号可表示为:
Y=HX+N
(2)
式中,Y与X分别表示接收端与发射端的信号向量,H与X分别是信道状态信息矩阵与高斯白噪声,每个子载波的CSI可以表示为:
H=Y/X
(3)
Intel5300网卡可以提供用于OFDM系统的子载波级信道测量,可以把测量值转换成更丰富的多路径信息,提供更稳定的测量值和更高的定位精度,物理层的CSI包含了更细粒度的特征,比如信道中各个子载波的振幅和相位等信号特性,因此CSI更好的描述了信号从发射端到接收端的变化信息。图1(a)和图1(b)分别表示的是在同一环境中两个不同位置的CSI幅度值,从图中可以看出,不同位置的CSI幅度值区分显著,这表明使用CSI定位是可行的。
图1 CSI幅度图
卡尔曼滤波是一种根据系统以前输入值和输出值对系统的作用来估计系统最优状态,然后结合后续输入来确定系统所有活动的算法,具有较强容错能力,通过对观测值和含有信号噪音的测量值比较分析得到误差最小的估计值,从而可以检测和剔除异常值,主要实现方法是建立滤波过程的状态空间模型[17],滤波主要过程如下:
在一个样本所在的特征空间中,如果与它最相邻的k个样本大多数是同一类别的,那么这个样本也是这个类别的,并且具有这类样本的属性,这就是kNN算法的主要思想。该算法的分类结果只依据最邻近的一个或者几个样本的类别来决定,结果很大程度上依赖于k的选择,主要实现方式是将目标对象之间的距离作为对象之间的非相似性指标,避免了对象之间的匹配问题,距离计算方式一般使用欧氏距离或曼哈顿距离,两种计算公式分别如下:
欧式距离:
曼哈顿距离:
本文提出一种RSS和CSI融合的二阶段室内定位方法,离线阶段在每个参考点收集RSS和CSI数据,为了提高定位精度,分别对原始数据进行预处理:CSI原始数据采用卡尔曼滤波算法检测并剔除异常数据,同时对每条链路的RSS原始数据做平均处理,然后将经过预处理的数据存入指纹库;在线阶段,采集待测点的信号特征进行与离线阶段相同的预处理,首先根据待测点的RSS值利用改进的kNN算法进行测试点位置粗略估计,然后根据粗略定位结果筛选参考点构建子指纹库,最后融合CSI和RSS利用高斯核函数改进的kNN算法进行精确的位置坐标估计,本文提出方法的定位流程图如图 2所示。
图2 定位流程图
在实验过程中,本文采用的是1x3链路,即一根发射天线和三根接收天线,每根天线可以接收30个子载波的CSI值和1个RSS值,离线阶段需要在每个参考点处收集信号数据,将第i个参考位置的RSS平均值和CSI幅度值分别记为rssi和csii,用ξi={csii,rssi}表示第i个位置的指纹特征,所以第i个位置的指纹就表示为fi={(xi,yi),ξi},其中(xi,yi)表示第i个位置的坐标,指纹库就建立为F={f1,f2,…,fn}。
离线阶段采集参考点数据,图3(a)是根据提取出来的CSI幅度用MATLAB解析出的图像,从中可以看出,CSI幅度包含了很多噪音,这些噪音可能导致定位精度下降,所以在预处理阶段将CSI幅度进行卡尔曼滤波处理,同时为了减少数据冗余,在同一参考点取多组RSS值做平均处理。
图3 CSI幅度预处理
图3(a)显示的是参考点1处一条信道的幅度,从图中可以观察到有许多异常值存在,为了达到更高的定位精度,需要将这些异常值剔除。同时为了保留信号特征的完整性,采用滤波来检测并处理这些异常值,通过对常见滤波的比较分析,本文采用卡尔曼滤波算法对CSI原始数据中的异常值进行检测并处理。在处理过程中,卡尔曼滤波首先根据前一个子载波的值来估计后一个子载波的值,然后利用估计值和测量值来确定实际值,将卡尔曼滤波的5个重要步骤具体应用到CSI数据预处理的过程如下:
Step 1 根据第k-1个子载波的幅度值csik-1去估计第k个子载波的幅度值csik;
Step 2 根据第k-1个子载波的估计值和测量值分别计算估计值的高斯噪音和测量值的高斯噪音;
Step 3 根据上一步求出来的估计值和测量值的高斯噪音计算第k-1个子载波幅度的误差协方差,确定卡尔曼增益;
Step 4 结合卡尔曼增益,利用前面的步骤对第k个子载波的幅度值进行矫正更新;
Step 5 最后使用k时刻的最优值进行迭代操作来估计k+1时刻的最优值。
这就是卡尔曼滤波的5个重要步骤在CSI数据处理中的利用,通过这5个步骤对每一个子载波的原始幅度进行滤波处理。图3(b)就是图3(a)经过卡尔曼滤波处理得到的,比较两个图可以看出原始数据中的异常值已被改善。
在线阶段首先在测试点处采集RSS和CSI数据,然后对原始数据进行和离线阶段一样的预处理,记为ξt={csit,rsst}。为了更好地实现定位效果,本文将离线阶段分为两步进行:粗略定位和精确定位。在粗略定位阶段,根据改进的kNN算法和加权相加的定位方法筛选参考点构建子指纹库;在精确定位阶段,对子指纹库利用高斯核函数改进的kNN算法和加权平均的定位方法实现精确位置估计。
2.2.1 粗略定位
基于指纹的定位方法可以很容易地利用kNN来实现,实验中共有n个参考点时测试点位置采集到的RSS与每个参考点i的欧式距离可表示为:
(4)
式中,rsst表示测试点的RSS,将计算出来的距离按照大小进行递增排序,选出距离最小的k个参考点,然后将这k个点筛选出来作为子指纹库,这就是利用传统的kNN算法来实现子指纹库建立的过程。但是该方法容易受到样本分布不均匀的影响,样本分布密集或稀疏都容易导致分类结果的偏移。
方差反映了样本数据分布的离散程度,方差大则分散,方差小则密集,所以用RSS方差描述样本数据分布的离散程度。为了避免上述的kNN算法问题,本文引入方差计算每个参考点的权重来改进kNN算法,以方差的倒数作为系数,并对所有参考点的系数做归一化处理,每个参考点的权重计算方式如下:
(5)
则欧式距离就表示为:
(6)
然后按照传统的kNN算法的步骤进行,将所选取的前k个参考点的已知坐标进行加权相加,得到位置粗估计结果表示为:
(7)
利用粗略定位结果确定待测点的大致范围,通过该范围可实现对原始指纹库的筛选,以粗估计位置坐标为圆心,设定一个半径R进行范围扩展,根据实验场地的大小和参考点布置的间隔,本文在实验过程中取R=3 m,并且用实验验证了该取值是最佳选择,然后将处于该范围内的m个参考点作为备选样本,构建子指纹库F′,减小了原始指纹库的规模,具体构建过程如下:
Step 1 计算参考点RSS方差和权重改进kNN算法;
Step 2 用改进的kNN计算每个参考点到测试点的欧式距离di,将di由小到大排列;
Step 4 分别计算粗略估计位置与参考点的欧式距离d:
(8)
Step 5 将d由小到大排列,以粗略估计的位置坐标为圆心,按照R进行位置扩展,将处于该范围内的m个参考点筛选出来构建子指纹库F′。
2.2.2 精确定位
建立子指纹库后,使用核方法进行精确定位。虽然kNN算法复杂度较低并且易于实现,但是kNN容易受到各种因素的影响,为了克服这个问题,在精确定位阶段使用了一种高斯核函数改进的kNN算法。将CSI和RSS进行特征融合,将内核与每个Wi-Fi信号特征相关联,方法如下:
φ=μφ1(csit,csii)+(1-μ)φ2(rsst,rssi)
(9)
在这个混合内核函数公式中,
σ1和σ2分别表示用经验方式估计的平滑因子,由于RSS的空间辨别能力低于CSI,所以σ2小于σ1,μ是指在离线阶段通过双交叉验证方法估计的融合参数,详细分析见3.2节参数优化分析。本文利用混合内核函数计算测试点指纹测量值与子指纹库之间相似度,根据相似度计算权重,计算公式如下:
(10)
式中,wk是根据混合内核函数计算的权重,Q(p)表示的是子指纹库中与测试点指纹最相似的参考点集合,p指Q(p)中的参考点的个数,φ(ξt,ξi)指计算参照指纹和查询指纹相似度的高斯核函数。本文最终采用加权平均法来估计参考点位置,表示为:
(11)
指纹定位方法主要有两个阶段:离线训练阶段和在线定位阶段,所有的过程最终都是以算法来实现,本文算法描述如下:
Step 1 采集各个参考点的坐标及Wi-Fi信号特征值,分别进行预处理,然后建立指纹库F={f1,f2,…,fN},每个参考点的指纹表示为fi={(xi,yi),ξi},每个参考点的指纹特征表示为ξi={csii,rssi};
Step 2 采集测试点的指纹特征ξt={csit,rsst},结合指纹库中的RSS利用kNN算法进行位置粗略估计;
Step 3 粗略估计测试点位置的坐标,然后根据粗略估计结果计算该坐标与其他参考点的欧氏距离,将距离从小到大排列按照设定的半径选出m个参考点;
Step 4 将根据粗略估计的结果筛选出来的参考点构建成子指纹库;
Step 5 根据经验估计和实验验证确定RSS和CSI的融合权重μ;
Step 6 计算相似度,结合测试点指纹、子指纹库以及相似度计算权重,计算方法如式(10)所示;
Step 7 根据以上步骤估计测试点的最终坐标,估计方法如式(11)所示。
图4 实验场景图
实验设备包含一个路由器和一台电脑,分别作为发射机和接收机,型号为TL-WR740N的路由器作为发射机,安装了Intel 5300网卡的联想台式机作为接收机,其操作系统为Ubuntu10.04LTS。为了验证本文提出方法的性能,分别在两个实验场地进行了实验。
一个实验场地是9 m×8 m的会议室,如图 4(a)所示,布局比较空旷;另一个试验场地是12 m×8 m的实验室,如图4(b)所示,相比会议室,该场地内有较多的实验设备,容易产生多径效应。
会议室布局如图 5(a)所示,在会议室设施和实验设备之外的空地上分别以相等的间距设了73个参考点,间隔约为0.7 m,图中用空心圆表示,在测试过程中随机在非参考点位置处设60个测试点进行实验;实验室布局如图 5(b)所示,实验室设备比较密集,同样以相等的间距在空地上设了126个参考点,测试阶段在非参考点处设90个测试点。
图5 实验场景分布图
在两种不同的实验环境中分别设计部署了参考点和测试点验证了本文提出的定位方法,同时实现了两种比较经典的定位方法,一种是基于RSS的经典算法Horus方法,另一种是基于CSI的DeepFi方法,然后与本文提出的kNN+核函数的方法进行比较。在数据采集过程中,让一位测试者分别静立在每个参考点处采集1 000包数据,将每个参考点处收集到的数据经过预处理后存入指纹库。在实验过程中保持所有实验设备静止不动、所有测试点和参考点都在一个水平面上,所以在定位阶段就不需要在测试点处采集大量数据包进行分析,这样既可以减少成本又可以降低计算复杂度。
本文提出的定位方法中的参数μ,即RSS和CSI的融合参数,在整个定位过程中起着至关重要的作用,μ的取值直接影响着定位误差和定位精度,在实验中对不同取值的μ分别在两种环境中进行了实验分析。使用累积分布函数CDF(Cumulative Distribution Function)解析实验结果,对于不同的μ值在不同的环境中的定位误差累积函数分布图如下:
图6所示是参数μ的不同取值对定位效果的影响,同样在两个环境中进行测试,不同的μ值在两个环境中对定位误差均有不同的影响,图6(a)是在会议室中进行测试的结果,图6(b)是在实验室中进行测试的结果。从图中可以看出,不同的μ值在两种环境中对定位误差的影响大体相同,随着μ值的不断增大,定位误差在逐渐减小,但是定位误差减小的幅度并不一样。μ值从0增加到0.5的过程中,定位误差减小的幅度较大,从0.5增大到1的过程中定位误差减小的幅度很微小。
图6 参数μ对定位误差的影响
μ是CSI的融合系数,其值大小代表的是CSI在定位特征中的贡献率,因为CSI是更细粒度的信号特征,所以μ值不断增大时定位误差会不断减小,但是由于CSI本身是一个比较复杂的复数矩阵,若μ的取值较大,即CSI在定位特征中的贡献较大,在这种情况下计算量就会增大,算法的执行时间也随之变长,但是定位精度的提高并不明显。因此,通过上述实验对比分析,将μ=0.5作为实验验证的最佳μ值,在后续对比实验中采用μ=0.5作为融合参数的取值。
在定位误差分析中,使用CDF、标准差、平均误差和定位精度来分析定位方法的性能,为了验证本文提出的方法的性能,在两种不同的环境下进行实验验证,同时在本文的环境中实现DeepFi和Horus方法,然后在相同的环境条件下将本文提出的方法与两种经典的定位方法进行比较。
图7是在会议室中进行实验得出的CDF图,从图中可以看出本文提出的方法定位误差在1.5 m内的概率达到了60%,相比DeepFi提高了约33.33%,相比Horus提高了51.24%。为了更进一步验证本文提出的方法,在人员较多、布满实验设备的实验室进行了相同的实验。
图7 会议室定位误差CDF图
图8是在实验室中进行实验的CDF图,与图 7相比准确率明显降低了,说明环境确实影响了实验的准确性,但是从图8可以看出本文提出的方法定位准确率还是高于DeepFi和Horus方法,定位误差在1.5 m以内的概率为50%,比DeepFi提高了约21.95%,比Horus提高了56.25%。
图8 实验室定位误差CDF图
最后在两种实验环境中分别借助平均误差、标准差和定位精度对本文提出的方法、DeepFi和Horus方法进行了比较,结果如表1所示。
表1 定位方法误差比较
从表中可以看出:就定位平均误差而言,本文提出的方法在设备和人员比较密集的环境中约为1.81 m,相比DeepFi提高了约22.32%,相比Horus提高约30.65%;在比较空旷的实验场景中,本文提出的方法约为1.54 m,相比DeepFi和Horus分别提高了约28.71%和33.62%。
通过这两组实验对比,可以得出结论:本文提出的方法在提高定位准确率方面是可行的。本文提出的定位方法能够有效地提高定位精度包含三方面原因:第一,指纹库中的指纹融合了RSS和CSI两种指纹特征,不是单一的基于CSI或RSS;第二,离线阶段对采集的指纹特征进行了有效地预处理,并且保留了数据的完整性;第三,在定位阶段使用了二阶段定位方法,减小了定位误差。此外,本文提出的方法在线定位阶段使用的核函数减小了计算量,与DeepFi和Horus相比降低了时间复杂度。
本文针对RSS不稳定而且空间分辨能力低、CSI对环境变化敏感等问题提出了一种CSI和RSS融合的二阶段室内定位方法,改善了单一的基于RSS或CSI某一特征的方法定位精度低的问题。提出的方法在定位阶段采用二阶段定位方法:第1阶段根据RSS和改进的kNN算法进行位置粗略估计;第2阶段结合基于RSS和CSI改进的高斯核函数进行精确定位,不仅提高了定位精度,还减少了时间开销。最后,用实验的方式将本文提出的方法与现有的经典定位方法进行比较,实验结果表明,本文提出的方法能够有效地减小定位误差,提高定位精度。