我可以看到Android Bacon Library具有两种测量距离的算法:运行平均值滤波器和ARMA滤波器。
这些与库的实现有何关联(除了使用过滤器的公式)?我在哪里可以找到一些关于这些的背景信息来解释其背后的理论?有没有已知的替代算法可以研究和尝试用于测量距离?
在BLE信标上进行距离估计有两个基本步骤。
-
收集RSSI样本
-
将RSSI样本转换为距离估计。
这两个步骤都有不同的可能算法。ARMA和运行平均滤波器是用于收集RSSI样本的两种不同算法。
要理解,信标以周期性的速率发送数据包,通常为每秒1-10次。当手机接收到这些数据包时,每个数据包都会有自己的信号电平测量,称为RSSI。由于无线电噪声和测量误差,每个RSSI样本都有很大的方差,这可能导致距离估计的大幅度波动。因此,通常情况下,您需要获取多个RSSI样本,并将它们平均在一起,以减少此错误。
运行平均算法只需要20秒的样本(默认情况下,时间段是可配置的),抛出RSSI读数的顶部和底部10%,并取其余部分的平均值这类似于iOS对样本的平均值,因此出于跨平台兼容性的原因,它是库的默认算法。但它的缺点是距离估计滞后于,平均10秒前就会告诉你手机相对于信标的位置。这可能不适合手机相对于信标移动的使用情况。
ARMA(自回归移动平均)算法在统计上对最近样本的加权比旧样本更重,从而使距离估计的滞后性更小。但它的行为可能有点不确定,并且在不同的无线电条件下,性能会发生更大的变化。
哪种算法适合您取决于您的用例。测试两者,看看哪一个对你来说更好,通常是最好的方法。虽然还有其他可能的数据收集算法,但这是库中仅有的两种内置算法。由于它是开源的,欢迎您创建自己的并将其作为拉取请求提交。
对于步骤2,还有许多可能的算法。最常见的两种是曲线拟合公式和路径损耗公式。曲线拟合公式是库默认值,路径损耗替代方案仅在正在开发的库的分支中可用。欢迎您使用后者,但它需要从源代码构建库。同样,作为一个开源库,我们欢迎并鼓励您开发自己的替代算法。