基于移动群智感知的网络信号图谱构建系统关键技术研究

一.自适应数据上传频率调整

​ 最直接的数据上传采用固定时间间隔周期性地发送数据给服务端,但是如果数据采集者长时间不产生移动,不去采集其他地理位置的数据,那么这种数据上传方式给服务器势必会带来过多的能量损耗,且会给服务器堆积大量的无意义数据。此外,如果数据采集者突然提高移动速度,原始的数据上传频率不能保证数据的及时上传,这可能会导致感知数据的空间覆盖率过低,降低网络信号图谱的质量。

因此,本课题设计了一种自适应的数据上传机制,让移动感知终端上传数据到服务端的频率能够随着数据采集者的运动状态动态调整,保证感知数据能够合理上传,既降低能耗又保证感知质量。设计思路就是计算连续t时间内数据采集者的行走步数,如果连续两段t时间采集者的行走步数先后为S1和S2,且S1大于S2,那么说明后一段t时间内用户放慢了移动速度,这样就适度降低数据上传频率,反之则说明用户加快了移动速度,那么就适度地提高数据上传频率。

基于以上的数据上传频率动态调整思想,具体的数据上传频率调整机制设计如下: 先初始化固定时间间隔t为1分钟,上一段t时间行走步数lastIntervalstep初始化为0,因为传感器获取到的行走步数数据是累计步数数据,所以初始化本次t时间间隔测量开始时的步数laststep为当前系统保存的累计步数。

延迟t时间采集步数stepCount,用stepCount减去laststep得到本段t时间内数据采集者的行走步数thisStep,由于本次采集是自适应数据上传机制刚启动的第一次采集,所以上一段t时间行走步数为0,但是这不能认定数据采集者在本段t时间内加快了移动速度,所以,保持数据上传频率不变。

重复上一步的数据采集过程,得到本次t时间内的行走步数S’,已知上一段t时间内的行走步数为S,则有如下的采集时间间隔调整策略:

如果S’不为0,计算连续两次t时间间隔内的行走步数之比x

\[x = {S \over S^{'}} \quad\quad\quad (1)\]

那么可以让连续两次上传数据到服务端的时间间隔T调整为

\[T^{'}=x*T \quad\quad\quad (2)\]

T’为调整后的数据上传时间间隔,称x为调整系数,因此数据上传频率发生了改变。如果本次t段时间内的步数S’大于上次t段时间内的步数S,则可以认定数据采集者加快了移动速度,因此通过公式(1)计算出的x为小于1的值,在公式(2)中T被缩小为T’,连续两次上传数据到服务端的时间间隔变短,也就提高了数据上传频率。反之,如果S’小于S,则可以认定数据采集者减缓了移动速度,T被放大为T’,也就降低了数据上传频率。

如果S’为0,也就是说本次t时间内数据采集者并没有移动,因为分母不能为0,所以不能根据公式(1)计算x,而且为了“惩罚”数据采集者本次t时间静止的行为,令x为1.6代入公式(2)计算。

然而,这样设置数据上传频率调整规则具有如下三个问题:

问题1:上一次t段时间内数据采集者的运动步数可能过小甚至为0,如果为0,计算出的x值以及T’都为0,这显然不合理。如果过小,也会导致x的值非常小,那么经过公式(2)计算后得到的连续两次上传数据到服务端的时间间隔T’也会变得非常小,使数据上传过于频繁,大量增加系统能耗和数据库数据冗余。

因此要给调整系数x设定一个阈值,让其平缓地波动来适度调整数据上传频率,既不能过高导致能耗过大和数据冗余,也不能过低导致感知质量下降。当S’大于S时,x值小于1,规定当x大于等于0.6时,用公式(2)来更新数据上传频率,如果低于0.6,则统一令x为0.6。同理当S’小于S时,规定当x小于等于1.4时,用公式(2)来更新数据上传频率,如果大于1.4,则统一令x为1.4。

问题2:先后两段t时间内的行走步数都很少,数据采集者一直处于“消极怠工”的状态,但是又不是完全静止,那么即使本次t时间内该数据采集者的行走步数多于上一次,也没有必要提高数据上传频率,本课题规定如果在连续两段t时间内行走步数都小于10步,认定为“消极怠工”状态,此时不改变数据上传频率。

问题3:在问题1中,解决了一次调整中,调整系数x过大或者过小可能产生数据上传频率剧烈波动的问题,但是经过数轮动态调整,数据上传频率可能被逐渐缩放地过高或者过低,因此需要给数据上传频率也规定阈值,本课题规定两次数据上传的时间间隔不小于3s且不超过1分钟。如果经过以上的计算规则得出的数据上传时间间隔超出了这个区间,低于3s的就修正为3s,高于1分钟的就修正为1分钟,经过以上规则的设定就把数据上传频率规定在了一个合理的区间,且动态调整的幅度也因为对调整系数x的限制而得到约束。

二.基于指数滑动平均法的异常值检测

​ 在采集蜂窝网络信号强度的过程中,由于客观因素的影响,可能会产生部分异常值,这些异常数据降低了网络信号图谱的准确性。为了构建高质量的网络信号图谱,必须对异常值的产生设计有效的检测机制和处理机制,首先需要判定什么样的数值为异常值,如果采集到的数值超过了网络信号强度rsrp这个物理量的取值范围,必然为异常值。此外,如果数据采集者在连续时间且相近距离(如小于10m)或小范围空间内采集到的信号强度数据有大幅度的波动,则可以认定必然有异常数据产生。针对此问题,本课题采用了指数滑动平均法来对网络信号强度异常值进行检测。

1.指数滑动平均法

指数滑动平均法也称指数平滑法,常用于连续时间序列的数值预测,就是利用上一次的数值和本次的数值,对它们进行不同的加权分配,计算出一个指数平滑值,作为下一次的预测值。公式为:

\[X_t = α*S_{t-1}+(1-α)*X_{t-1} \quad\quad (0<α<1) \quad\quad\quad (3)\]

公式中\(X_t\)为第t次的预测值,\(S_{t-1}\)为上一次的实际数值,\(X_{t-1}\)为上一次的预测值,α为加权系数。指数滑动平均法可以减少计算过程中的数据储存量,同时还考虑到不同时刻的数据所起到的不同影响。α值的确定是该算法的关键。通常,α值的大小介于0到1之间,如果α偏大,说明上一次的数据占更高的权重,算法的响应速度较慢。如果数值变化速度快,较大的权重可能导致平滑后的数值滞后于实际变化,无法及时捕捉到快速变化的趋势。如果α偏小,则算法对最近的数值更加敏感,平滑效果较弱,可能会导致平滑后的数值波动较大,不够稳定。

2.异常值检测算法设计

由于指数滑动平均法是基于时间序列的数值预测,预测的值也是每一周期预测一次,而在本课题中,认为小范围空间内连续时间的采集值发生大幅度波动为产生异常值的标志,实际上也属于基于时间序列的数值预测问题。在时间周期的选取上,本课题把每一次数据上传的时刻作为预测时机,预测下一次上传时的网络信号强度数值,但是由于需要小范围空间的限制,必须要在数据上传频率足够高的情况下才运行该异常值检测算法。上文提到,在数据上传频率的设计中,采用了自适应的数据上传频率动态调整策略,数据上传的频率会根据数据采集者的移动状态的改变而发生变化。基于该策略,本课题规定在两次数据上传间隔时间小于10s时,运行该异常值检测算法。

由于指数滑动平均法的本质是做出对下一次数值的预测,那么可以认为如果下一次上传的网络信号强度相对于算法预测值偏移量较大,或者超出某一规定范围,则可以认为该网络信号强度值为异常值,放弃上传。

因此可以寻求一个偏移量,基于每一次采用指数滑动平均法对下一时间的网络信号强度的预测值构建出一个阈值。也就是下次采集到的网络信号强度的合理范围,如果下一次的采集值超出这个范围,可以认定为异常值,放弃上传;如果在这个合理范围之内,则参与到指数滑动平均法的计算中,与上一次的上传数值一起对下一次要上传的网络信号强度值做出预测,之后,把已经被认定为合理的且本次要上传的信号强度值发送到服务端。

偏移量的选择直接影响到异常值的判定,该偏移量要能反映出在最近一段时空范围内网络信号强度的合理波动性,以此来判断最新要上传的网络信号强度值相对于最近数值的波动是否超出了合理的范围,因此要收集并储存最近一段时空范围内的网络信号强度值来探求信号强度的波动趋势。

本课题选择了滑动窗口机制来对最近的网络信号强度值做储存并判断波动范围。滑动窗口是数据处理和信号处理中常用的技术,常用作对连续数据序列做出处理和分析,可以在各类数据集中挖掘数据的变化趋势,在网络流量控制、计算机视觉、机器学习等领域都有较多的应用。如果要对该滑动窗口内数值做出波动性评估,实质上就是评估该滑动窗口内数据的离散程度,这可以通过计算窗口内所有数值的标准差或者极差来实现。标准差是衡量数据集合内部的离散程度的重要指标。通过计算滑动窗口内所有网络信号强度的标准差,可以评估在最近时空范围内信号强度的波动性。较大的标准差表示网络信号强度之间的差异较大,存在较大的波动性,那么对下一次要上传的信号强度值的波动范围的容忍程度就大。同理,较小的标准差表示数据值之间的差异较小,波动性较小。对异常值的容忍程度就小。假设滑动窗口的大小为N,标准差S的计算公式如下:

\[S = \sqrt{\frac{\sum_{i=1}^{N}(R_i - \bar{R})^2}{N-1}} \quad\quad\quad (4)\]

​ 其中\(R_i\)为网络信号强度,\(\bar{R}\)为滑动窗口中所有网络信号强度值的平均值。极差则代表滑动窗口内最大值和最小值之间的差值,对波动的容忍程度要大于标准差,因为本文认定发生剧烈波动的网络信号强度值为异常值,经过测试,选用极差构建网络信号强度合理区间要好于标准差。

​ 滑动窗口可以用队列来实现,算法起始时,先装满滑动窗口,在此过程中不做异常值检测,待滑动窗口装满后,计算窗口内的均值\(\bar{R}\)和极差r,以[R-r,R+r]来作为阈值,判断下一个要上传的信号强度值\(R_{new}\)是否是异常值,如果是,则丢弃。如果不是,和之前计算出的均值R一起用公式(5)求出下一次上传时的预测值R’:

\[R^{'}=α*R_{new}+(1-α)*R \quad\quad\quad(0<α<1) \quad\quad\quad(5)\]

在公式(5)中,设定α为0.3。删除队列首元素,加入新的信号强度值进入尾部,再次计算标准差S,则[R’-S,R’+S]就是新的阈值,用作判断下一个要上传的信号强度值是否异常,而新计算出的预测值R’则作为下次计算的旧值R,以此类推,动态地对异常值做出检测。

三.基于加权质心定位算法的蜂窝基站位置估测

​ 由于蜂窝网络提供商的商业利益,蜂窝基站的位置不公开。很多时候,运营商会提供夸张的覆盖图,这可能会误导公众。对蜂窝基站位置的预测也有助于灾难时的通信和公共安全。相比于现场询问等需要大量经济成本和人力资源的基站定位方法,基于移动群智感知获取大量的感知数据,可以为蜂窝基站位置的预测提供丰富的信息,同时也具有低成本的优势。

1.加权质心定位算法

加权质心定位算法是由质心定位发展而来的,在无线传感器网络领域常用作定位,利用传感器节点的位置和接收到的信号强度来估计目标节点的位置。在质心定位算法的基础上,加权质心定位算法考虑到在某一位置接收到的网络信号强度的大小与和目标节点的距离之间存在联系,因此根据各个已知节点位置接收到的信号强度值的不同,引入了权重,比传统质心定位算法更科学地估计目标节点的位置。在应用当中计算方便,适用于位置的简单估测。

2. 定位算法设计

在本课题中,经过移动群智感知,收集到了分布在众多地理位置的网络信息,包括网络信号强度rsrp,网络信号质量rsrq,网络信号信噪比rssnr,以及在该地理位置连接上的蜂窝基站编号。有了蜂窝基站的编号,就可以得出哪些采集点的数据是来自同一个蜂窝基站。通常,移动感知终端距离蜂窝基站越近,接收到的网络信号强度越强,网络信号质量越好,网络信号的信噪比越高。因此可以建立起移动感知终端与蜂窝基站间的距离和三对网络信息物理量之间的对应关系。首先利用网络信号强度值做一次加权质心定位,假设有m个采集点获取的数据来自同一基站,Rsrp~i~是任意一个点的网络信号强度,则每个采集点的权重计算如下:

\[W_i = {Rsrp_i \over {\sum}_{i=1}^m Rsrp_i} \quad\quad\quad(6)\]

计算出每个采集点的权重之后,开始对所有采集点的经纬度坐标进行加权质心计算:

\[(x_{wc},y_{wc})=\sum_{i=1}^m W_i * (x_i,y_i) \quad\quad\quad(7)\]

最后计算出的坐标(\(x_{wc}\),\(y_{wc}\))就是采用网络信号强度作为权重参考经过加权质心计算得出的蜂窝基站位置估测值。同理,可以利用另外两个网络信息rsrq和rssnr以同样方式进行加权质心定位,计算方式一样,不做赘述。其中rssnr的处理有一些特别,因为rssnr的数值范围是从 -20dB~30dB,所以在计算所有采集点的rssnr数值之和时,可能会出现恰巧等于0这种情况,而计算权重时是用所有采集点的rssnr数值之和作为分母,这无法计算。如果能让rssnr的数值都是正值或都是负值,那么就可以正常计算了,所以在计算权重时,为每一个采集点的rssnr值都加上21,这样所有的rssnr就都变为正值,也就是采用统一加上固定偏移量的方法解决,并不会破坏权重的计算。

经过rsrp,rsrq,rssnr的三次计算之后,得到三个估测的经纬度坐标值,此时再对这三个坐标值进行一次质心定位计算,也就是经纬度分别取一次平均值,如公式(8)、(9)所示:

\[x_{latitude}={x_{Rsrp}+x_{Rsrq}+x_{rssnr}\over3} \quad\quad\quad(8)\] \[y_{longitude}={y_{Rsrp}+y_{Rsrq}+y_{rssnr}\over3} \quad\quad\quad(9)\]

计算得出的经纬度坐标(\(x_{latitude}\),\(y_{longitude}\))就是对蜂窝基站的最终估测位置。

​ 根据该算法,随着群智感知采集到的数据越来越多地进入数据库,参与加权质心定位的数据也越来越多,基站的位置会越来越准确。

3.定位结果分析

经过移动群智感知对蜂窝网络信息的采集,共捕获到116个蜂窝基站的编号,并根据加权质心定位算法估测了基站的大概位置。由于基站的真实位置并不公开,所以只能在互联网上公开的数据集中去检索基站大概的位置,根据全球开放基站信息数据库OpenCellID的数据,只提供了中国矿业大学南湖校区内10个蜂窝基站的位置,由于该数据库也是依靠群智感知来获取蜂窝基站信息,所以基站数据已经滞后。但是在这10个基站中,依靠比对基站的编号,依然找到了两个基站与本课题捕捉到的基站中的两个编号相同,如图展示了编号为90744085的蜂窝基站在本项目中的地理位置和开源数据库地理位置的对比:

根据算法计算得出该基站的经纬度坐标为(117.14650416821809,34.21728826380371),OpenCellID数据库中给出的该基站的经纬度坐标为(117.1464788767487,34.217138155037574),距离十分接近。