主权项 |
大型室内空间中的多热点信号指纹地图的存储和匹配方法,该方法包括建立指纹地图的内存数据结构和信号强度矢量在指纹地图的匹配两部分,其特征在于: (1)建立指纹地图的内存数据结构: 所述的指纹地图的内存数据结构主体为二维稀疏链表,两个维度均采用哈希表,分别为AP哈希表和测量点哈希表; 所述的AP哈希表中的每一行表示某个AP在不同测量点的测量记录,组织成链表的形式,所述的AP为无线接入点;AP哈希表结构根据AP的mac地址获得该AP的数据结构ap,在该AP的数据结构ap中获得该AP的编号及该AP的所有测量记录;每一列表示某一个测量点上不同AP的测量记录,同样组织成链表的形式,这一列上所有的测量记录可以组成该测量点的信号强度矢量records;所述的测量记录用来记录一个测量点上测得的某一AP信号强度,其数据结构表示为record; 所述的测量点哈希表根据测量点的全局编号获得该测量点的数据结构point,从point中能够获得该测量点的时间戳timestamp以及测量记录链表;所述的时间戳timestamp是point用来保存这一测量点最后一次参与的定位计算所发生的时间,采用时钟周期作为时间戳timestamp的单位; (2)信号强度矢量在指纹地图的匹配方法具体是: 指纹地图内存数据结构建立之后,开始定位;定位过程首先测量到当前位置的信号强度矢量V[k],然后将V[k]在指纹地图中进行匹配,其中k为当前定位设备测到信号的数量,V[k]为一个数组,该数组中一个元素的结构为:V[]{char[]ap_mac;int rss;}; 设{AP<sub>1</sub>,AP<sub>2</sub>,...AP<sub>m</sub>}为定位系统中所有AP的集合;m≥i≥1,则AP<sub>i</sub>为定位系统中第i个AP的编号; 采用如下方法计算V[k]与某一测量点的信号强度矢量records之间的矢量距离: <img file="2014104445771100001dest_path_image001.GIF" wi="608" he="49" /> .......(公式1) 其中 <img file="2014104445771100001dest_path_image002.GIF" wi="487" he="56" /><img file="2014104445771100001dest_path_image003.GIF" wi="635" he="56" />匹配方法具体包含如下步骤:1.设与当前位置具有最小矢量距离的测量点编号min_p=‑1,该最小矢量距离S<sub>min</sub>=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哈希表中获得ap<sub>j</sub>; 3‑3.设定record为ap<sub>j</sub>的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)<S<sub>min</sub>,表示找到了一个矢量距离更小 的测量点,设置S<sub>min</sub>为S(V[k],point.records),然后设置min_p为测量点point的编号point.point_id; 3‑3‑6.设置record为ap<sub>j</sub>的records中下一个测量记录,并跳转至步骤3‑3‑1; 3‑4.设置i=i+1,并跳转至步骤3‑1; 4.输出min_p为定位结果;如果min_p>0,则表示当前所在的位置在编号为min_p的测量点附近;如果min_p<0,则表示没有有效的定位结果。 |