使用Kontakt SDK,我已经实现了一个简单的应用程序来监控和调整我所在地区的Kontakt信标。我已经注意到,所报告的信标的报告距离发生了很大的波动(例如,信标确实在10米处,但它会以2米的速度返回,并且可能在距离上相当显着地跳跃),即使信标不是那么遥远。我已经浏览了文档并使用了信标硬件方面的所有不同变量(tx功率/频率),SDK方面(扫描模式和相关)并尝试了多个设备 - 我似乎无法提高准确性。只是想知道是否有人能指出我可能成为问题的正确方向。
我知道根据环境的许多因素和接收设备本身的硬件,信标信号可能会发生很大变化。但是,当我似乎无法获得一致的距离信息时,我很遗憾如何创建一种基于与信标准确接近的用户体验?
非常感谢任何类型的指导,输入或建议。感谢。
答案 0 :(得分:5)
如果你在Android中实现,你会遇到这个沉重的波动问题,因为android中没有降噪算法。但同样你可以检查IOS,结果更好,因为IOS支持降噪算法。现在根据接收到的信标的RSSI /距离值,您可以做三件事 -
a)为您的应用自行实施降噪算法。 (我认为这很难。)
b)对您收到的值实施高斯滤波器。我的意思是将您从信标中收到的所有RSSI /距离值存储在一个arraylist中,每10个值,按升序排序,排除3个最小值和3个最大值,剩下的4个值计算平均值和平均值这将是你的最终价值。 (这很容易解决并且可靠。)
c)为您收到的值实施卡尔曼滤波器。这是迄今为止最好的过滤器。然而,实现它比高斯滤波器非常难,但是这个滤波器的结果是最好的。
您可以从上面选择任何解决方案:)
答案 1 :(得分:2)
除了davidgyoung已经说过的话: BLE目前还不是衡量距离的有效方法。即使仅通过跳频,计算出的距离在使用原始数据时也会跳跃到实际距离的2-3倍左右。请在此处查看我的问答:Bluetooth-Low-Energy RSSI changes periodically on Android devices
这取决于您的要求:您是否希望用户在不移动或旋转设备一分钟的情况下静止不动?用户还可以避开任何移动障碍物,附近的Wi-Fi信号源或其他干扰吗?设备温度也起着重要作用。然后你可以通过取中位数或均值得到相当稳定的数值。另一个好的选择是卡尔曼滤波器。从那里使用对数法线阴影模型,您可以计算距离:
d=d0*10^((RSSI0-RSSI)/10n)
距离d以米为单位,n在自由空间中为2,在实际条件下为2。必须针对每种环境进行校准。 RSSI0是在距离d0处测量的RSSI值。
如果用户应该移动,请忘记距离。至少在我花了数周时间讨论这个话题之后,我才得出结论。
答案 2 :(得分:1)
一些提示:
正确设定您的期望。与信标的距离估计仅是估计。它们非常容易受到不同手机型号上的反射,障碍物,无线电噪声和变化的接收器天线的影响。后者是Android设备上的一个特殊问题。
设置尽可能高的转换器功率以最大化信噪比。
校准信标以获取新的发射机功率级别。
将广告频率设置为尽可能高(最好是10 Hz或更高),以提供尽可能多的RSSI统计样本。这样可以减少不同的距离估计值。
确保您的信标未处于可连接模式。连接时,某些Android设备每个扫描周期只能读取一个样本,通常每秒一次。
尝试使用现成的扫描仪应用程序Locate,看看它是否能提供更好的估算值。如果是,您可以尝试使用它所基于的开源Android Beacon Library。
在完成所有这些操作后,您仍会看到变化和不准确,但您将最大化可能的结果。当几个信标可见时,距离估计对于确定哪个信标最接近是最有用的。它们对于测量绝对距离不太有用。