C实现iBeacon蓝牙测距

您所在的位置:网站首页 蓝牙作用距离 C实现iBeacon蓝牙测距

C实现iBeacon蓝牙测距

2024-07-12 11:10| 来源: 网络整理| 查看: 265

测距原理:

        实际的测距原理相当简单,iBeacon在发布广播信号时,会提供两个重要信息(广播包解析自行学习):

一、iBeacon蓝牙会发送一个信号强度,接收者在收到广播时,能解析出该信号,且信号具有距离越近值越大的特点;既接收者和发送者距离越近,该值越大且越接近0(该值为负数),该值名为rssi;

二、iBeacon本身会设置1米的参照的rssi信号,指定该iBeacon设备距离接收者1m时,接收者收到的rssi的参考值;

通过这两个值,按照固定公式即可算出距离。公式有两个,详情如下:

公式一:

公式里的三个变量 A、B、C 都是经验值,需要根据硬件精确调校,具体的调校就比较费时间了,需要进行大量的测试,没有数据储备的前提下这个公式会很难用。rssi就是前面提到的rssi,tx为1米参照rssi值;

公式代码实现:

float_t ibeacon_calculate_accuracy(int32_t tx, int32_t rssi) {

    const int a = 0.89973, b = 7.7096, c = 0.111;

    return a * pow(rssi / tx, b) + c; }

公式二:

公式里面rssi就是前面提到的rssi,tx为1米参照rssi值,n为经验值同样需要调校;

公式代码实现:

float_t ibeacon_calculate_accuracy(int32_t tx, int32_t rssi) {

    const int n = 4;     float_t step1 = ((float)abs(rssi - tx)) / (10 * n);     return pow(10, step1); }

两个公式相较来说,公式二更容易调校,我用的也是公式二;

rssi和1m参考值进一步解释:

        在实际应用中,相同距离时,无视rssi抖动的情况下,rssi的值也是不固定的,而是跟发射功率成正比,发射功率越强,相同距离接收到的rssi值也就越大。功率越大,接收范围越大,rssi值随着距离衰减越小;功率越小,接收范围越小,rssi值随着距离衰减越大;换句话说,如果要测定的距离较近应相应调小发射功率,如果要测定的距离较远应相应调大发射功率,这样才能精确测距。

        同理,当发射功率发生变化时,1米的参考rssi值也应该相应修改,才能准确计算距离;

        有必要提一下,从包中解析出来的rssi值和1米的参考rssi值都是正数且大于0x80的值,但其实际为负值,应执行下rssi - 0x100,得到实际值。

     



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3