Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 理解ibeacon距离_Ios_Objective C_Bluetooth_Bluetooth Lowenergy_Ibeacon - Fatal编程技术网

Ios 理解ibeacon距离

Ios 理解ibeacon距离,ios,objective-c,bluetooth,bluetooth-lowenergy,ibeacon,Ios,Objective C,Bluetooth,Bluetooth Lowenergy,Ibeacon,试图掌握使用ibeacon(信标/蓝牙低能量/BLE)进行远距离通信的基本概念。是否有关于ibeacon可以精确测量多远的真实文档。假设我在300英尺外……ibeacon有可能检测到这一点吗 专门针对v4&。v5和iOS,但通常为任何可扩展设备 蓝牙频率和吞吐量如何影响这一点?信标设备是否可以增强或限制距离/改善潜在的可扩展性 即 |范围|频率| T/sec |地形| |–—–––––––––––|–—––––––––––|–—––––––––––|–—––––––––––| 蓝牙v2.1 |高

试图掌握使用ibeacon(信标/蓝牙低能量/BLE)进行远距离通信的基本概念。是否有关于ibeacon可以精确测量多远的真实文档。假设我在300英尺外……ibeacon有可能检测到这一点吗

专门针对v4&。v5和iOS,但通常为任何可扩展设备

蓝牙频率和吞吐量如何影响这一点?信标设备是否可以增强或限制距离/改善潜在的可扩展性

|范围|频率| T/sec |地形|
|–—–––––––––––|–—––––––––––|–—––––––––––|–—––––––––––|
蓝牙v2.1 |高达100米|<2.481ghz |<2.1mbit |散射网|
|-------------|------------|------------|------------|
蓝牙v4 |?|<2.481ghz |<305kbit |网格|
|-------------|------------|------------|------------|
蓝牙v5 |?|<2.481ghz |<1306kbit |网格|

这是可能的,但这取决于您接收的信标的功率输出、附近的其他射频源、障碍物和其他环境因素。最好的办法是在您感兴趣的环境中试用。

iBeacon使用蓝牙低能量(LE)来了解位置,蓝牙LE的距离/范围为160英尺().

根据通过将测量的接收信号强度与声称的发射功率(发射机应在广告数据中进行编码)进行比较而计算的信号路径衰减,估计到iBeacon格式广告包源的距离

像这样的基于路径损耗的方案只是近似的,并且会随着天线角度、中间物体以及可能的嘈杂射频环境等因素而变化。相比之下,真正设计用于距离测量的系统(GPS、雷达等)依赖于精确的传播时间测量,在同样的情况下,甚至可以检查信号的相位


正如Jiaru指出的,160英尺可能超出预期范围,但这并不一定意味着数据包永远无法通过,只是人们不应该期望它在该距离上工作。

iOS提供的距离估计是基于信标信号强度(rssi)与校准发射机功率的比率(txPower)。txPower是在1米之外以rssi表示的已知测量信号强度。必须使用该txPower值校准每个信标,以实现精确的距离估计

虽然距离估计值很有用,但它们并不完美,需要您控制其他变量。在误用此值之前,请务必确认。

当我们构建Android iBeacon库时,我们必须提出自己的独立算法,因为iOS CoreLocation源代码不可用。我们在已知距离测量了一系列rssi测量值,然后做了一条最佳拟合曲线来匹配我们的数据点。我们提出的算法如以下Java代码所示

请注意,这里的术语“准确度”是指iOS以米为单位表示的距离。这个公式并不完美,但它大致近似于iOS的计算结果

protected static double calculateAccuracy(int txPower, double rssi) {
  if (rssi == 0) {
    return -1.0; // if we cannot determine accuracy, return -1.
  }

  double ratio = rssi*1.0/txPower;
  if (ratio < 1.0) {
    return Math.pow(ratio,10);
  }
  else {
    double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;    
    return accuracy;
  }
}   
受保护的静态双精度计算(int-txPower,双rssi){
如果(rssi==0){
return-1.0;//如果无法确定准确性,则返回-1。
}
倍率=rssi*1.0/txPower;
如果(比率<1.0){
返回数学功率(比率,10);
}
否则{
双精度=(0.89976)*数学功率(比,7.7095)+0.111;
返回精度;
}
}   
注意:值0.89976、7.7095和0.111是在求解与我们测量数据点的最佳拟合曲线时计算的三个常数。YMMV


iBeacon的输出功率是在1米的距离处测量(校准)的。让我们假设这是-59 dBm(只是一个例子)。iBeacon将包括这个数字作为其LE广告的一部分

监听设备(iPhone等)将测量设备的RSSI。例如,让我们假设这是,-72 dBm

由于这些数字以dBm为单位,因此功率比实际上是以dB为单位的差值。因此:

ratio_dB = txCalibratedPower - RSSI
要将其转换为线性比率,我们使用dB的标准公式:

ratio_linear = 10 ^ (ratio_dB / 10)
如果我们假设能量守恒,那么信号强度必须下降为1/r^2。因此:

power=power\u在1米/r^2处。求解r,我们得到:

r = sqrt(ratio_linear)
在Javascript中,代码如下所示:

function getRange(txCalibratedPower, rssi) {
    var ratio_db = txCalibratedPower - rssi;
    var ratio_linear = Math.pow(10, ratio_db / 10);

    var r = Math.sqrt(ratio_linear);
    return r;
}

请注意,如果您在钢结构建筑内,可能会有内部反射,使信号衰减速度低于1/r^2。如果信号通过人体(水)然后信号会衰减。很可能天线在各个方向的增益都不相等。房间里的金属物体可能会产生奇怪的干扰图案。等等……YMMV。

由于多个电话和信标位于同一位置,很难以任何高精度测量接近度。尝试使用Android“b和l bluetooth le scanner”应用程序,可视化多个信标的信号强度(距离)变化,您将很快发现,可能需要复杂的自适应算法来提供任何形式的一致接近测量


您将看到许多解决方案,只是简单地指示用户“请将手机放在这里”,以减少客户的沮丧情绪。

我正在与iBeacons彻底调查准确性/rssi/approxity的问题,我真的认为互联网上的所有资源(博客、StackOverflow中的帖子)都弄错了

davidgyoung(接受答案,>100票)说:

请注意,这里的术语“精度”是指以米为单位的距离

事实上,大多数人都这么说,但我
function getRange(txCalibratedPower, rssi) {
    var ratio_db = txCalibratedPower - rssi;
    var ratio_linear = Math.pow(10, ratio_db / 10);

    var r = Math.sqrt(ratio_linear);
    return r;
}