一种针对室内信号源部署方案筛选的指纹定位快速实现方法与流程

文档序号:20010462发布日期:2020-02-22 04:03阅读:230来源:国知局
一种针对室内信号源部署方案筛选的指纹定位快速实现方法与流程

本发明属于计算机应用技术与室内定位技术领域,主要是将simd指令、多核或多gpu并行、以及哈希查找算法进行耦合,形成一种针对室内信号源部署方案筛选的指纹定位快速实现方法。



背景技术:

目前,全球定位系统gps已经被应用到人们生活中的各个方面。虽然gps在户外世界中广泛活跃着,但到了室内,由于室内复杂的环境以及众多的障碍物,gps的信号衰减十分严重,难以精确定位,因此室内定位就成为了目前人们研究的热门问题。

室内定位技术可采用多种信号进行定位,例如wifi定位技术,蓝牙定位技术,红外线定位技术,zigbee定位技术等等。以广泛应用wifi定位技术为例,目前大多数室内布设了多个wifi设备,作为无线访问接入点ap。每一个ap都有一个独一无二的mac地址。许多移动终端如手机,平板等,可扫描收集周围ap信号。移动终端收集到各个ap信号后,将ap所对应的mac地址,以及ap信号强度,通过某种算法确定移动终端位置。

室内定位方法可划分为四大类:传播模型、区域单元、指纹法和多边形方法。其中又以指纹法最为广泛应用。指纹法顾名思义,就是根据每个人的指纹有着独一无二的特征,将指纹与室内的某个位置关联起来。某个位置接收或者发送信号,那么这个信号的特征可以作为该位置的指纹。具体来说指纹法分为离线建库阶段以及在线定位阶段。离线建库阶段主要是:在已知具体位置的参考点记录该点所收到各个ap的信号值,这些信号值将组成该参考点的指纹,可用rss表示。所有参考点的rss将组成一个指纹库。在线定位阶段主要是:利用移动设备在不同的测试点记录该点的rss,并到指纹库中搜索与之最相近的rss。算法根据最近rss对应的参考点位置,便可以推测出测试点的具体位置。

在实际应用过程,人们通常希望以较少成本获取较高的精度定位。因此,指纹算法会用于测试不同成本部署方案的定位误差。然而,部署方案成百上千,因此对应也需要频繁运行指纹算法。这将会耗费巨大的时间,拖延评价选取方案进度。基于上述原因,本发明提出一种针对室内信号源部署方案筛选的指纹定位快速实现方法。

由于指纹法的在线定位阶段需要进行高维向量计算,因此本发明采用simd技术进行加速优化。simd是英文singleinstructionmultipledata的缩写,指的是单指令处理多数据技术,可以同时对多个数据执行相同操作,以此达到空间上的并行性。将simd运用到高维向量运算后,程序从原本一次计算指令只能操作一个维度的数值,提升到了两个或四个维度。

参考点与测试点rss都是事先采集记录好的,数据之间无操作关联性。因此,在筛选信号源部署方案中,某些操作可以并行操作,如对所有测试点定位确定部署方案定位误差。本发明采用多核或多gpu并行编程技术实现并行加速。多核并行编程技术,就是将程序中的可并行的线程交托给多个核心处理,从而提高程序的运行速度

由于在测试点定位过程中,需要调用查找算法,根据匹配rss的序号确定对应的参考点id,进而获取参考点位置坐标。但是,普通查找算法如顺序查找,二分查找等,时间复杂度偏高。因此,本发明采用哈希查找算法,利用空间换时间的思想,实现时间复杂度为o(1)的查找。



技术实现要素:

针对上述存在的技术问题,本发明的目的是提供一种针对室内信号源部署方案筛选的指纹定位快速实现方法,以便于快速测评并确定最终部署方案。

为了达到上述目的,本发明的技术方案如下:

步骤1生成部署方案对应的子指纹库,其中生成子指纹库时调用多核并行嵌套哈希查找的多层级加速方法。

步骤2定位所有测试点位置并确定部署方案定位误差,定位过程中调用多核并行嵌套哈希查找+simd组合的多层级加速方法。

步骤3从所有的信号源部署方案中筛选得到最优方案。

所述步骤1生成每个部署方案对应的子指纹库,包含以下子步骤:

步骤1.1首先采集相关数据并生成总指纹库。在室内部署n个ap,作为部署方案的选择范围。每个ap都有唯一的id标识。接着,取这n个ap位置作为测试点和参考点。其中,在每个测试点收集n个ap信号值作为该测试点的rsst,写作(r1,r2,…rn)行向量形式;每个参考点收集n个ap信号值,作为该参考点的rssr,写作(r1,r2,…rn)的行向量形式,并汇集成大小为n*n的总指纹库。总指纹库具体形式如下:

步骤1.2确定某个部署方案。在n个ap里选取m个ap作为部署方案(m≤n),并记录这m个ap的id。

步骤1.3针对确定的部署方案,利用多核或多gpu并行加速遍历总指纹库中每行,并行加工多个rssr,得到部署方案对应的子指纹库。以下子步骤针对一个rssr工作。

步骤1.3.1利用哈希查找算法优化加速rssr加工。根据部署方案中ap成员的id,查找对应的m个ap信号值。为了加速ap信号值ri的查找,根据id与rssr中对应元素下标i映射关系,确定哈希函数hash(key),构造哈希表。其中,取id值为key值,hash(id)输出的是id对应的元素下标i。这样,便可以直接将id代入到哈希表中,实现时间复杂度为o(1)的查找。

步骤1.3.2根据上一步依次查找出来m个ri,按照下标i递增顺序组成部署方案下的参考点rssr′,写作(r′1,r′2,…r′m)行向量形式。

步骤1.3.3所有的rss′r汇集成大小为n*m的子指纹库。子指纹库具体形式如下:

其中r′ij表示第i个参考点接收到第j个ap的信号值。

所述步骤2定位所有测试点位置并确定部署方案定位误差,包括以下子步骤:

步骤2.1利用多核并行加速遍历每个测试点,并行多个测试点位置定位。以下子步骤针对一个测试点工作。

步骤2.1.1读取测试点rsst。

步骤2.1.2利用哈希查找算法优化加速rsst加工。同子指纹库建立一样,rsst需要筛选出部署方案中m个对应ap信号值。这里的过程与步骤3.1.1,3.1.2一致,不进行多余讲解。最后构建部署方案下的测试点rss′t,写作(r′1,r′2,…r′m)行向量形式。

步骤2.1.3遍历子指纹库,将rss′t与库中每行rss′r与进行距离计算。其中距离记为distancerow,row为rss′r在子指纹库的行号。以下子步骤针对一行rss′r与该rss′t距离计算工作。

步骤(1)利用simd加速rss′r与rss′t距离计算。距离计算公式具体定义为根据avx指令集,利用三个256位通用寄存器x,y,z。其中前两个寄存器分别存储4个下标连续的r′i和r′i(r′i和r′i的数据类型设为double,占64位),第三个寄存器存储结果,初始存储值为0。对于rss′r与rss′t中前维的元素有如下子步骤,其中子步骤针对一组4个连续维度的元素工作。

①从rss′r与rss′t分别加载4个连续维度的元素到x,y。

②使用_mm256_sub_pd计算xy的数据差值,并存入256位寄存器temp。

③使用_mm256_mul_pd计算temp的平方值,并将结果再次存入temp。

④使用_mm256_add_pd计算temp与z的和,并将结果存入z。

步骤(2)将z中256位数据平分4个64位长的子数据,这些子数据转为double类型后相加得到结果result1。

步骤(3)若m为4的倍数,那么上一步的结果result1设为distance值。否则,将不被整除的部分按照普通方式计算,得到结果result2。那么distance值为result1与result2之和。

步骤2.1.4找出子指纹库中的k个最近距离的distancerow。

步骤2.1.5利用哈希查找算法根据最近距离加速查找对应参考点位置。由于参考点位置取ap位置,所以参考点位置需要所取的ap的id来确定。因此需要依次遍历上一步k个distancerow,依据其中行号下标row与id的映射关系,查找出对应id才能获取位置信息。依据映射关系,确定哈希函数hash(key),建立对应的哈希表。其中,取行号下标row值为key值,hash(row)输出的是row对应的id。这样,便可以直接将行号row代入到哈希表中,实现时间复杂度为o(1)的查找。

步骤2.1.6从k个参考点位置综合计算出测试点位置。

步骤2.1.7计算预测的位置与实际位置的误差。并将误差存入误差数组rate。

步骤2.2将误差数组rate中所有元素相加求和再求平均,得到该部署方案的平均定位误差。

所述步骤3以部署方案平均定位误差为评价标准,对所有信号源部署方案进行筛选,得到最优方案。

本发明具有以下优点和积极效果:

(1)本发明运用simd技术,在rss距离计算过程中实现多数据并行计算,提升了定位速度。

(2)本发明运用多核或多gpu技术,并行处理多个参考点rss以及多个测试点定位,大大提升了计算速度。

(3)本发明运用哈希查找算法,解决指纹库数组下标查找信号源id标识时由于频繁查找导致耗时过久的问题。

(4)本发明在线程层次采用多核或多gpu并行编程技术,在线程内部核心代码层次采用哈希查找算法快速查找,以及simd技术进行多数据并行计算,实现多层次并行,大大提升了计算速度。

附图说明

图1是本发明具体实验的场景。

图2是本发明的算法流程图。

图3是哈希查找算法示意图。

图4是本发明的逻辑加速示意图。

具体实施方式

以下结合图1中的停车场为例对本发明作进一步说明:

步骤1生成部署方案对应的子指纹库,其中生成子指纹库时调用多核并行嵌套哈希查找的多层级加速方法。

步骤2定位所有测试点位置并确定部署方案定位误差,定位过程中调用多核并行嵌套哈希查找+simd组合的多层级加速方法。

步骤3从所有的信号源部署方案中筛选得到最优方案。

所述步骤1生成每个部署方案对应的子指纹库,包含以下子步骤:

步骤1.1首先采集相关数据并生成总指纹库。在室内部署107个ap,作为部署方案的选择范围。每个ap都有唯一的id标识,其中id范围为100-213。接着,取这n个ap位置作为“测试点”和“参考点”。其中,在每个测试点收集107个ap信号值作为该测试点的rsst,写作(r1,r2,…r107)行向量形式;每个参考点收集107个ap信号值,作为该参考点的rssr,写作(r1,r2,…r107)的行向量形式,并汇集成大小为107*107的总指纹库。总指纹库具体形式如下:

其中rij表示第i个参考点接收到第j个ap的信号值。

步骤1.2确定某个部署方案(这里随机举例4个ap组成的方案)。在107个ap里选取4个ap作为部署方案(4≤107),并记录这4个ap的id(分别为100,102,213,212)。

步骤1.3针对确定的部署方案,利用多核并行加速遍历总指纹库中每行,并行加工多个rssr。在图2中第一组嵌套虚线框的最外层代表的for循环,添加声明#pragmaompparallelforschedule(dynamic,20),提示编译器接下来的for循环进行多线程并行,其中线程任务调度采用动态的方式,线程的任务分配粒度为20。以下子步骤针对一个rssr工作。

步骤1.3.1利用哈希查找算法优化加速rssr加工。根据部署方案中ap成员的id,查找对应的m个ap信号值。为了加速ap信号值ri的查找,根据id与rssr中对应元素下标i映射关系,确定哈希函数hash(key),构造哈希表。其中,取id值为key值,hash(id)输出的是id对应的元素下标i。结合图3,hash(100)=1,hash(102)=3,hash(212)=106,hash(213)=107,那么分别取这样r1,r3,r106,r107。

步骤1.3.2根据上一步依次查找出来4个r1,r3,r106,r107,按照下标递增顺序组成部署方案下的参考点rss′r,写作(r′1,r′2,r′3,r′4)行向量形式。

步骤1.3.3所有的rss′r汇集成大小为107*3的子指纹库。子指纹库具体形式如下:

其中r′ij表示第i个参考点接收到第j个ap的信号值。

所述步骤2定位所有测试点位置并确定部署方案定位误差,包含以下子步骤:

步骤2.1利用多核并行加速遍历每个测试点,并行多个测试点位置预测。结合图2中第二组嵌套虚线框,在其最外层虚线框代表的for循环,添加声明#pragmaompparallelforschedule(dynamic,1),提示编译器接下来的for循环进行多线程并行,其中线程任务调度采用动态的方式,线程的任务分配粒度为1。以下子步骤针对一个测试点工作。

步骤2.1.1读取测试点rsst。

步骤2.1.2利用哈希查找算法优化加速rsst加工。同子指纹库建立一样,rsst需要筛选部署方案中3个对应ap信号值。这里的过程与步骤3.1.1,3.1.2一致,不进行多余讲解。最后构建部署方案下的测试点rss′t,写作(r′1,r′2,r′3)行向量形式。

步骤2.1.3遍历子指纹库,将rss′t库中rss′r进行距离计算。其中距离记为distancerow,row为rss′r在子指纹库的行号。以下子步骤针对一行rss′r与该rss′t距离计算工作。

步骤(1)利用simd加速rss′r与rss′t距离计算。距离计算公式具体定义为根据avx指令集,利用三个256位通用寄存器x,y,z。其中前两个寄存器分别存储4个下标连续的r′i和r′i(r′i和r′i的数据类型设为double,占64位),第三个寄存器存储结果,初始存储值为0。对于rss′r与rss′t中前维的元素(也就是前4维),有如下子步骤,其中子步骤针对一组4个连续维度的元素工作。

①对于rss′r与rss′t中刚好4维元素,可分别一次性加载4个连续维度的元素到x,y。

②使用_mm256_sub_pd计算xy的数据差值,并存入256位寄存器temp。

③使用_mm256_mul_pd计算temp的平方值,并将结果再次存入temp。

④使用_mm256_add_pd计算temp与z的和,并将结果存入z。

步骤(2)将z中256位数据平分4个64位长的子数据,这些子数据转为double类型后相加得到结果result1。

步骤(3)由于在该部署方案下测试点rss′r与参考点rss′t都是4维,是4的倍数,因此上一步的结果result1设为distance值。

步骤2.1.4找出子指纹库中的3个最近距离的distancerow。

步骤2.1.5利用哈希查找算法根据最近距离加速查找对应参考点位置。由于参考点位置取ap位置,所以参考点位置需要所取的ap的id来确定。因此需要依次遍历上一步k个distancerow,依据其中行号下标row与id的映射关系,查找出对应id才能获取位置信息。依据映射关系,确定哈希函数hash(key),建立对应的哈希表。其中,取行号下标row值为key值,hash(row)输出的是row对应的id。结合图3,例如,最近距离的参考点位于子指纹库中第1行,那么row=1,因此hash[1]=213,取id为213的对应位置。

步骤2.1.6从3个参考点位置(x1,y1),(x2,y2),(x3,y3),以及这些参考点分别在上述步骤算出的与该测试点rss′r距离distancerow1,distancerow2,distancerow3(也就是上述3个最近距离的distancerow),综合计算出测试点位置。其中计算该公式如下:

步骤2.1.7计算预测的位置与实际位置的误差。并将误差存入误差数组rate。

步骤2.2将误差数组rate中所有元素相加求和再求平均,得到该部署方案的平均定位误差。

所述步骤3以部署方案平均定位误差为评价标准,对所有信号源部署方案进行筛选,得到最优方案。

以上实施例仅供说明本发明之用,而非对本发明的限制,有关技术领域的技术人员,在不脱离本发明的精神和范围的情况下,还可以作出各种变换或变型,因此所有等同的技术方案,都落入本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1