大型室内空间中的多热点信号指纹地图的存储和匹配方法
技术领域
本发明属于无线通信技术领域,具体涉及一种大型室内空间中的多热点信号指纹地图的存储和匹配方法。
背景技术
随着无线网络技术的飞速发展和人们对定位服务需求的日益增多,无线定位技术得到越来越多的关注。GPS(Global Position System,全球定位***)是20世纪70年代由美国研制的以为陆、海、空三大领域提供实时、全天候和全球性的导航服务为目的的空间卫星导航定位***。对于信号到达较为容易的开阔的室外环境,GPS可以提供高精度的定位信息。而对于室内环境,由于建筑物本身的遮挡以及建筑物内部结构包括墙壁、门窗、各种摆设和实时变化的人员走动,使得在室内环境中接收到的GPS信号极其微弱,无法从中获得定位所需的有效信息,因此需要考虑建立一种室内的定位***,为日益增长的室内定位需求提供可靠的定位信息。
目前,业界大多是在现有的无线通信网络设施的基础之上构建无线定位技术。室内的无线通信网络设施主要是WLAN,WLAN通过WiFi信号进行通信,AP(Access Point,无线接入点)即WiFi热点,是WLAN的核心设备,它负责无线网络的管理,通告自己的存在以及当前无线网络信息,让终端用户经过扫描匹配后能够与之关联,并控制通信过程。WLAN的广泛应用源于它的众多优点:WLAN的网络布局简单,并具有较高的通信速度,符合现代社会对于移动通信、移动办公以及移动娱乐等要求。并且无线局域网的容量大、用户多、覆盖广等特点使得其应用更加广泛。WLAN主要的应用环境是室内环境和人们活动的热点地区。
WLAN中AP所发出的WiFi信号也可以用作定位。基于WiFi的室内定位原理如图1所示。在室内空间内部署无线接入点A和B之后,在测量点1的位置可以测量到A的信号强度为-69,B的信号强度为-82。同样,在测量点2的位置分别测量到A和B的强度为-74和-72。对图中所有的测量点上对A和B的信号强度进行测量,便生成了该区域的信号指纹地图。用户所持手机在当前位置测到的A和B的信号强度分别为-73和-75,设sqr()为开平方函数,则根据矢量距离计算 公式得到其与A点的信号矢量距离为:
S(测量点1)=sqr((-73+74)2+(-75+72)2)=3.16
S(测量点2)=sqr((-73+69)2+(-75+82)2)=8.06
由此可知,用户当前所在的位置更接近于测量点1。由此可知,在定位时将实际测量得到的信号强度与整个指纹地图进行匹配,找到与之最为相似的测量点,即为当前所在的近似位置。
将当前位置的信号强度矢量和指纹地图的匹配,是室内定位的关键技术之一。其涉及的主要问题包括:
1.指纹地图的存储空间。在一个大型的室内空间内,AP的部署量可以达到几百甚至上千个,而测量点的数量可以达到数万个,一些高精度的指纹地图中,测量点的数量甚至可以达到数十万。在这种情况下,指纹地图在定位***运行时所占用的存储空间较大,其空间复杂度为O(m×n),其中m为AP的个数,n为测量点数量。这使得手机等手持定位***难以在内存中保存完整的指纹地图,而需要在实时定位时访问磁盘或者SD卡上的数据进行匹配,这将使定位的延迟变得非常大,无法达到实时定位的效果。
2.指纹地图的访问效率。简化的,定位时获取的信号矢量与指纹地图进行匹配时,需要计算该矢量与数万甚至数十万个测量点的信号矢量距离;在每一次计算信号矢量距离时,也需要遍历每一个AP。因此,指纹地图匹配的时间复杂度为O(m×n)。这同样会使定位的延迟加大。
目前室内定位***处于实验室成果向商业应用过渡的阶段,因此其研究的主流是如何提高定位精度和减少人工参与的指纹地图构建工作,而对指纹地图的存储结构通常简单的采用数据库或者二维线性表,匹配方法也是以数据库或者二维线性表的遍历为基础进行改进。这在小面积演示或应用时不会对定位***产生影响,但是一旦对大型和超大型室内空间进行部署时,测量点和AP数量大幅增加,这些方法就会导致***无法正常运行。因此设计合理的信号指纹地图存储和匹配方法,是构造高精度的室内定位***亟待解决的重要问题。
发明内容
本发明的目的就是为了解决测量点和无线接入点(AP,Access Point)数量大引起的定位延迟问题,提供一种大型室内空间中的多热点信号指纹地图的存储和匹配方法。
本发明具体方法包括:(1)建立指纹地图的内存数据结构;(2)信号强度矢量 在指纹地图的匹配。
(1)建立指纹地图的内存数据结构:
所述的指纹地图的内存数据结构主体为二维稀疏链表,两个维度均采用哈希表,分别为AP哈希表和测量点哈希表;
所述的AP哈希表中的每一行表示某个无线接入点(AP,Access Point)在不同测量点的测量记录,组织成链表的形式;AP哈希表结构根据AP的mac地址获得该AP的数据结构ap,在该AP的数据结构ap中获得该AP的编号及该AP的所有测量记录;每一列表示某一个测量点上不同AP的测量记录,同样组织成链表的形式,这一列上所有的测量记录可以组成该测量点的信号强度矢量records;所述的测量记录用来记录一个测量点上测得的某一AP信号强度,其数据结构表示为record。
所述的测量点哈希表根据测量点的全局编号获得该测量点的数据结构point,从point中能够获得该测量点的时间戳(timestamp)以及测量记录链表;所述的时间戳(timestamp)是point用来保存这一测量点最后一次参与的定位计算所发生的时间,采用时钟周期作为时间戳(timestamp)的单位。
所述的AP数据类型为:ap{char[]mac;char[]ssid;int ap_id;record*records;};
所述测量点的数据结构point的数据类型为:point{int point_id;long timestamp;record*records;};
所述测量记录的数据结构record的数据类型为:record{int ap_id;int point_id;int rss;record*left;record*down;}。
(2)信号强度矢量在指纹地图的匹配方法具体是:
指纹地图内存数据结构建立之后,开始定位。定位过程首先测量到当前位置的信号强度矢量V[k],然后将V[k]在指纹地图中进行匹配,其中k为当前定位设备测到信号的数量,V[k]为一个数组,该数组中一个元素的结构为:V[]{char[]ap_mac;int rss;};
设{AP1,AP2,...APm}为定位***中所有AP的集合;m≥i≥1,则APi为定位***中第i个AP的编号。
采用如下方法计算V[k]与某一测量点的信号强度矢量records之间的矢量距离:
.......(公式1)
其中
匹配方法具体包含如下步骤:
1.设与当前位置具有最小矢量距离的测量点编号min_p=-1,该最小矢量距离Smin=q,其中q为矢量距离的阈值;
2.设定time为从开机到当前的cpu运行的时钟周期数,用来记录本次定位发生的时间;
3.设定i=0,i为V[k]中元素的变量序号,对V[k]进行以下操作,:
3-1.如果i≥k,则直接跳转到步骤4;
3-2.根据V[i]中的ap_mac从AP哈希表中获得apj;
3-3.设定record为apj的records中第一个测量记录,执行以下操作:
3-3-1.如果测量记录record不存在,则跳转到步骤3-4。
3-3-2.根据测量记录record的测量点编号point_id,从测量点哈希表中获得该测量点point;
3-3-3.如果point的时间戳point.timestamp等于本次定位发生的时间time,表明这一测量点在本次定位中已经计算过矢量距离,不需要再重复计算,直接跳转到步骤3-2-5;
3-3-4.使用公式1计算当前位置的信号强度矢量V[k]和测量点point的信号强度矢量point.records之间的矢量距离S(V[k],point.records);设置测量点point的时间戳point.timestamp等于本次定位发生的时间time,用来标记该测量点在本次匹配中已经计算过矢量距离;
3-3-5.如果S(V[k],point.records)<Smin,表示找到了一个矢量距离更小的测量点,设置Smin为S(V[k],point.records),然后设置min_p为测量点point的编号point.point_id;
3-3-6.设置record为apj的records中下一个测量记录,并跳转至步骤3-3-1。
3-4.设置i=i+1,并跳转至步骤3-1。
4.输出min_p为定位结果。如果min_p>0,则表示当前所在的位置在编号为min_p的测量点附近。如果min_p<0,则表示没有有效的定位结果。
本发明方法针对室内定位***中指纹地图的存储和匹配操作的特点,提出了一种改进的二维链表结构用来存储指纹地图,并在此基础上提出一种信号强度矢量在指纹地图中的匹配算法。传统的二维链表结构适合进行稀疏矩阵的存储,但是不适合进行信号强度矢量的快速匹配。本发明在二维链表两个维度的索引分别使用哈希表,并增加了匹配时间戳避免冗余的匹配计算,达到了以下效果:
首先,使用本发明的方法存储指纹地图的空间复杂度为O(u×n),远小于使用二维数组存储指纹地图的空间复杂度O(m×n),其中u为指纹地图中平均每个测量点能测到的AP信号个数,m为AP的数量,n为指纹地图中所有测量点的个数。较小的空间复杂度可以使整个指纹地图在内存空间维护,无需进行磁盘或SD卡等外部设备的访问,从而提高了匹配计算的速度。
其次,使用本发明方法完成信号强度矢量在指纹地图中匹配的时间复杂度为O(u×w),远小于使用二维数组的匹配算法的时间复杂度O(m×n),其中w为指纹地图中平均每个AP能够覆盖到的测量点数量。
因此,本发明解决了在大型室内空间中的多热点信号指纹地图匹配引起的定位延迟问题。
附图说明
图1为基于无线指纹地图的定位技术原理图;
图2为指纹地图内存数据结构示意图;
图3为信号强度矢量在指纹地图中的匹配方法示意图。
具体实施方式
一种大型室内空间中的多热点信号指纹地图的存储和匹配方法,该方法包括:(1)建立指纹地图的内存数据结构;(2)信号强度矢量在指纹地图的匹配方法。
建立指纹地图的内存数据结构:
如图2,指纹地图的内存数据结构主体为二维稀疏链表,两个维度均采用哈希表,分别为AP哈希表和测量点哈希表。其主体是一个改进后的二维稀疏链表。其与传统的二维链表结构的主要区别在于(1)两个维度分别采用哈希表,来进 一步避免稀疏的AP名称空间和稀疏的测量点编号空间引起的存储空间过大的问题。(2)增加了timestamp(时间戳)来避免冗余匹配。
AP哈希表中的每一行表示某个AP(Access Point,无线接入点)在不同测量点位置的record,组织成链表的形式;AP哈希表结构根据AP的mac地址获得指向该AP数据结构的指针,在AP数据结构中获得该AP的编号以及record行链表首指针;每一列表示某一个测量点上不同AP的record,同样组织成链表的形式,该链表即为该测量点的信号强度矢量;所述的record为记录信号强度的结构。
测量点哈希表的结构根据测量点的全局编号,获得指向该测量点数据结构point的指针,从point中能够获得该测量点的timestamp(匹配时间戳)以及record列链表首指针;所述的timestamp为匹配时间戳,用来保存上一次该point参与匹配计算所发生的时间,采用计算机的最小时间单位时钟周期作为timestamp的单位。
其中,AP数据类型为:ap{char[]mac;char[]ssid;int ap_id;record*records;};
point数据类型为:point{int point_id;long timestamp;record*records;}
record数据类型为:record{int ap_id;int point_id;int rss;record*left;record*down;}。
信号强度矢量在指纹地图的匹配方法具体是:
指纹地图内存数据结构建立之后,开始定位,将测量到的信号强度矢量V[k]在指纹地图中进行匹配,其中k为当前定位设备测到信号的数量,V[k]为一个数组,该数组中一个元素的结构为:V[]{char[]ap_mac;int rss;};
设{AP1,AP2,...APm}为定位***中所有AP的集合;设m≥i≥1,则APi为定位***中第i个AP的编号。
采用如下方法计算V[k]与某一测量点的信号强度矢量records之间的矢量距离S:
.......(公式1)
其中
如图3,匹配方法具体包含如下步骤:
1.设与当前位置具有最小矢量距离的测量点编号min_p=-1,该最小矢量距离Smin=q,其中q为矢量距离的阈值;
2.设定time为从开机到当前的cpu运行的时钟周期数,用来记录本次定位发生的时间;
3.设定i=0,对V[k]进行以下操作:
3-1.如果i≥k,则直接跳转到步骤4;
3-2.根据V[i]中的ap_mac从AP哈希表中获得apj;
3-3.设定record为apj的records中第一个测量记录,执行以下操作:
3-3-1.如果测量记录record不存在,则跳转到步骤3-4。
3-3-2.根据测量记录record的测量点编号point_id,从测量点哈希表中获得该测量点point;
3-3-3.如果point的时间戳point.timestamp等于本次定位发生的时间time,表明这一测量点在本次定位中已经计算过矢量距离,不需要再重复计算,直接跳转到步骤3-2-5;
3-3-4.使用公式1计算当前位置的信号强度矢量V[k]和测量点point的信号强度矢量point.records之间的矢量距离S(V[k],point.records);设置测量点point的时间戳point.timestamp等于本次定位发生的时间time,用来标记该测量点在本次匹配中已经计算过矢量距离;
3-3-5.如果S(V[k],point.records)<Smin,表示找到了一个矢量距离更小的测量点,设置Smin为S(V[k],point.records),然后设置min_p为测量点point的编号point.point_id;
3-3-6.设置record为apj的records中下一个测量记录,并跳转至步骤3-3-1。
3-4.设置i=i+1,并跳转至步骤3-1。
4.输出min_p为定位结果。如果min_p>0,则表示当前所在的位置在编号为min_p的测量点附近。如果min_p<0,则表示没有有效的定位结果。