如何使用蓝牙信号强度计算Android设备之间的距离?

时间:2017-02-14 05:18:08

标签: android bluetooth

double getDistance(int rssi, int txPower) {
    return Math.pow(10d, ((double) txPower - rssi) / (10 * 2));
}

我尝试使用上面的等式计算蓝牙设备之间的距离。但它会返回错误的结果。结果的格式为" 3.4565216E9"。但结果不同于" 3.4565216E9"到" 9.9645352E9"随机。有人可以提出不同的方法

2 个答案:

答案 0 :(得分:0)

即使在理想条件下,无线电信号强度指示(RSSI)的等高线图大致是枫叶形状。您所看到的变化几乎肯定是您是否处于高信号和手指之间或之间的结果。叶子。

要获得有用的结果,您必须使用旋转天线并计算RMS信号强度(想想WW2战列舰雷达)或多极天线和相位技巧以获得相同的结果。

在你开始工作后,你将不得不进行信号处理以拒绝反射,当你 要稳定地工作时,你将不得不进行全面的现场测试来处理跌倒 - 从传感器垂直方向以15度间隔关闭轮廓,这样您就可以将RSSI转换为范围。

由于我不认为商用BT硬件会让您接受这些选项,我建议您不要尝试使用RSSI进行测距。

如果这是一个大学项目,那么为了练习的目的,您需要将应答器和天线的位置和方向固定在可以用极坐标标记的空间中,并绘制轮廓图。单调又费时?是。

答案 1 :(得分:0)

使用RSSI测量距离并不容易。可以测量距离与RSSI的关系,然后为其构建数学规则。然而,对于手机内的每个不同的蓝牙芯片,情况都会有所不同。

有一个名为Android Beacon Library的库:https://altbeacon.github.io/android-beacon-library/

这些家伙正试图建立一个人们进行实验并找到这些读数的社区,但仍然没有注册过很多模型。尽管如此,您可以使用它来获得一般的距离感。默认情况下,它使用Nexus 5测量值,除非您指定其他测量值。

可以输出距离,如下面的示例代码所示:

        beaconManager.addRangeNotifier(new RangeNotifier() {
            @Override 
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                if (beacons.size() > 0) {
                    Log.i(TAG, "The first beacon I see is about "+beacons.iterator().next().getDistance()+" meters away.");        
                }
            }
        });