118

ibeacon (beacon/ Bluetooth-lowenergy/BLE) を使用して距離を保つ方法の基本概念を把握しようとしています。ibeacon が測定できる正確な距離に関する真のドキュメントはありますか。私が 300 フィート離れているとしましょう... ibeacon がこれを検出することは可能ですか?

特にv4&。v5 および iOS を使用しますが、通常はすべての BLE デバイスです。

Bluetooth の周波数とスループットはこれにどのように影響しますか? ビーコン デバイスは、距離を強化または制限できますか、または基礎となる BLE を改善できますか?

すなわち

               | Range       | Freq       | T/sec      | Topo       |      
               |–—–––––––––––|–—––––––––––|–—––––––––––|–—––––––––––|
Bluetooth v2.1 | Up to 100 m | < 2.481ghz | < 2.1mbit  | scatternet |
               |-------------|------------|------------|------------|
Bluetooth v4   |     ?       | < 2.481ghz | < 305kbit  | mesh       |
               |-------------|------------|------------|------------|
Bluetooth v5   |     ?       | < 2.481ghz | < 1306kbit | mesh       |
4

7 に答える 7

231

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;
  }
}   

注:値 0.89976、7.7095、および 0.111 は、測定データ ポイントに最適な曲線を求めるときに計算される 3 つの定数です。YMMV

于 2013-12-06T21:37:52.790 に答える
66

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_at_1_meter / 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.

于 2014-02-07T01:24:08.323 に答える
3

iBeacon 形式のアドバタイズ パケットの送信元までの距離は、測定された受信信号強度と、送信機がアドバタイズ データでエンコードすることになっている主張された送信電力とを比較することによって計算された信号経路の減衰から 推定されます。

このような経路損失ベースのスキームは概算であり、アンテナの角度、介在する物体、およびおそらくノイズの多い RF 環境などによる変動の影響を受けます。対照的に、実際に距離測定用に設計されたシステム (GPS、レーダーなど) は、伝播時間の正確な測定に依存しており、同じ場合は信号の位相を調べることさえあります。

Jiaru が指摘しているように、160 フィートはおそらく意図した範囲を超えていますが、それは必ずしもパケットが通過しないことを意味するわけではありません。

于 2013-12-06T15:33:30.440 に答える