距離の計測

電波による距離計測は、距離の2乗に比例して減衰する という電波の特性を使って、 受信した電波の強さ (強弱) を 元にして 距離を 求めることになる。
フリスの伝達公式 を使えば、理想空間における距離を 求めることができる。

基本的に 任意の距離を求める用途には向かず、特定の距離を 基準に その 内側か 外側か という 領域判定を おこなうのに 向いている。
ビーコンとの 距離を推測する上で、色々なファクターが 要因になり、正しい距離を求められなくなることも多い。 大概は、送信デバイスではなく、周辺環境や 受信デバイスの 問題であることが 多いけど。

判定の方法

受信デバイスで ビーコンとの距離を求めるためには 受信信号強度 (RSSI, Received Signal Strength Indication ) を 用いる。
RSSI は、 送信デバイスの 送信電波出力 (TX power ) が 強ければ 大きくなり、弱ければ 小さくなる。 また、距離が 離れれば 小さくなり、近ければ 大きくなる。 ざっくり この2つのファクターがあるので、TX power が 決まらなければ、 距離を推測することはできない。

ビーコンのデータには 距離の判定に利用するパラメータが 含まれており、 下記のように、ビーコンの仕様で、どちらかを 利用するのか 決められている。

  ビーコンのデータに含まれる 距離判定のパラメータ
iBeacon MEASURED POWER 送信デバイスから 1メートル 離れた場所で、受信デバイスで 計測した RSSI の 値
AltBeacon REFERENCE RSSI
IPS TX power 送信デバイスの TX power の 値
Eddystone TX power

受信デバイスで 取得した RSSI の値と、上記のパラメータを 用いて、距離を 推測する ことになる。

たとえば、iBeacon では、RSSI と 基準値 ( MEASURED POWER ) を比較して、下記の判定をおこなっている。

▸  基準値より 小さい  ⇒  IMMEDIATE ( 至近距離 )
▸  基準値と ほぼ等しい  ⇒  NEAR ( 近い )
▸  基準値より 大きい  ⇒  FAR ( 遠い )

なので、iBeaconAltBeacon は、判定基準値が示す 送信デバイスから1メートルの距離を検出することを目的としていることになる。
また、送信デバイス側が 距離判定の 基準値を示すので、TX power を 気にする必要はない。

EddystoneIPS では、TX power しかないので、 そのままでは 距離を推測することはできない。
まずは、受信デバイスで、検出したい距離の RSSITX power 毎に 実測 で求めて 基準値とする。 そして、受信したビーコンのデータに記述されているTX power から 判定基準を選択して、 距離の判定をおこなうことになる。

ということで、送信デバイスの 送信電波出力 TX power は、距離の計測に 直接的には関係ない。

電波の減衰

受信した電波の強さから 距離を推測するので、当たり前だけど、送信デバイスの 電波出力が 強いほど、精度が良くなる。
送信電波が 弱ければ、すぐに減衰してしまうので、本来の電波の強弱よりも、誤差や揺れの方が大きく成り、 電波の強弱の区別が付かなくなり、距離を推測できなくなる。


上記は、ある環境で 距離毎に 実測で求めたRSSI値を元に作成した グラフです。

電波は 距離の2乗に比例して減衰する ので、距離に対する 電波の減衰が ハッキリと 区別できる範囲を使って 測距する必要があり、 遠い距離 (電波の減衰が小さいところ) を 推測することはできない。

電波が 届くかどうかの境界域は、相対的に 誤差/揺れ が 極大化しているので、 それ (電波が届くこと) を基準に 何かを判定/処理をおこなうのは 誤差が大きいので オススメできない。

BLEの 最大電波出力の 100 mW (+20 dBm) であれば、 それなりに 広い範囲の 距離を推測できるかもしれないが、 一般的な 1 mW (0 dBm) では、周辺の電波環境が良くても 単体では 3メートル以上の 距離を推測するのは 難しいと思う。
なお、Bluetooth 4.2 までの BLE では、10 mW (+10dBm) が 最大電波出力でした。

平均値を使う

BLEの電波は、送信デバイスから 放射される段階で、 最大で 6 dbm の誤差/揺れが あるので、 ある程度の継続した時間の間に 受信した電波の RSSIの平均をとってから、 基準値と 比較することになる。
少なくとも、6 dbm の誤差/揺れを ある程度は吸収できる 受信数/時間 の分の 平均を取る必要があり、ビーコンの アドバタイズ・インターバルが 長いと、 RSSI を平準化できずに 距離の推測が 不正確に なりやすくなる。

インターバル

BLEの無線通信は、送信側も受信側も 間欠動作になっているので、 両方のデバイスの無線回路が 動作するタイミングが 一致したとき 以外は、電波は まったく届かない。


   上記の図で、白い四角は インターバル で、その中の 黒い四角が 実際に無線回路が 動作してる時間 になる。

スキャニングの window ÷ intervalDuty比 にもよるが、 基本的に アドバタイズ・インターバルが 長いほど、受信性能が 悪化する。
Duty比 が 低いスキャニングでは、そもそも受信できるアドバタイズの数が 少ない状況になっている。
そのうえ、アドバタイズのインターバルも 長いとなると、 送信タイミングと 受信タイミングが ズレまくり、なかなか受信できないということになりかねない。

スマホなどでは、アプリが フォアグラウンドでは無いときには、OS が スキャンの Duty比 を落とすので、 ビーコンの受信性は低下する。
アドバタイズ・インターバルが 長いと、このときに、送受信のタイミングが 合わなく成り、スカり続けて、 使い物にならない という結果を招くことになる。

周辺の環境

BLEは、2.4GHz帯の ISM バンドなので、いろいろな電波が飛び交っている。 Wi-Fi, Bluetooth BR/EDR/LE, Thread, ZigBee などの データ通信とか、 コードレス電話とか、アマチュア無線とか、電子レンジとか、干渉要因は とても多い。

周辺の 壁や ドアや 窓などの 構造物とか、人間 や ペット等とかも 電波の放射に 影響を与える。
直進性の高い電波の進む先に、何かがあれば 遮蔽してしまうし、そして、それが 電波を反射させるものであれば 乱反射しながら 減衰せずに 広がることもある。

ビーコンを設置する際には、 周辺の電波環境を 実測 で確認しながら、RSSI の判定基準を調整する必要がある。

デバイスの差異

送信電波の強さは、電波が アンテナを経由して、筐体の外にでるまでは、減衰値 (パスロス) が 個体毎に 異なる。 また、複数種類のビーコンを混ぜて使うと、放射される電波の強さは その種類ごとに 大きく異なる可能性が 高い。 この差異は、電波の送信出力が 弱いほど、相対的に大きくなる。

送信側だけでなく、受信デバイスが 異なれば、各デバイスで受信する RSSI の値は それぞれ異なるので、RSSI から 距離を推測する際には、 受信デバイスの 機種に応じた 差異を吸収する 必要もある。

意外と 忘れがちなのは、端末のケースなど、端末ユーザが 端末に付けてしまうもの。 デコ系のケースは意外に電波の悪影響になるものもある。 こればかりは対処するのは難しいけど。