目次
ビーコンを借りて受信強度(RSSI)の変化を計測してみました
ビーコン(Beacon)はBlueTooth通信でデータを定期間隔で一斉送信(アドバタイズといいます)する小さな端末で、その電波をビーコン受信機がひろうことで、何かしらの処理を行います。
ビーコンは電波の受信で距離が計測できる?
ビーコンは受信した電波の強度で距離が推定できるといわれてます。
実際、「iBeacon ハンドブック」にも「ビーコンまでの距離推定」について記載があって、ビーコンが発信する電波の強さ(発信強度:TxPower)とビーコン発信機から受信機間の距離(distance)から電波を受信したときの強度(受信強度:RSSI)を計算する説明なんかが載っています。
それらによると、距離(distance)と発信強度(TxPower)から、受信強度(RSSI)を計算する式は以下のようになるようです。
RSSI = TxPower - 10 * n * lg(distance)
上記の「lg」 は常用対数を示します。
nは係数で。
- n = 2.0 : 障害物のない理想空間
- n < 2.0 : 電波が反射しながら伝搬する空間
- n > 2.0 : 障害物に吸収され減衰しながら伝搬する空間
というような意味です。
なるほどなあ・・と思うのですが、実際にビーコンを扱った人の話では、そんな理屈通りにはいかないよ・・という声をよく聞きますし、かなりモヤっとした感じです。
発信強度・受信強度の単位
そんな折り、ひょんなことからビーコンと受信機を借りることができました。
いい機会なので、実際に計測させてもらおうと思います。
ビーコンの発信強度・受信強度の単位は「dbm(デシベルミリワット)」です。
これは「1ミリワットの電力を単位としたときのデシベル」で、デシベル(db)というのは「基準となる量「0」との相対比を常用対数によって表したもの」です。
お借りしたビーコンの発信強度は「0」でした。
相対比なのでゼロ=発信しないではなく、「0dbm」というのは「クラス3の発信強度である」という程度の意味らしいです。
基準となる発信強度が「0」で、そこから距離に応じて減衰していくので受信強度(RSSI)は「-40」みたいにマイナスの値になり、マイナスなので「-40」のほうが「-80」よりも大きい=強い・・とまあ、そんな感じになります。
とりあえず計測してみた
ビーコンとビーコン受信機は約1メートル離してテーブルの上におきました。
床からの高さは、ちょうど人の腰のあたりです。
これで計測してみると、受信強度(RSSI)はだいたい「-60」から「-62」の間くらいでした。
前記の計算式で「TxPower=0」「distance=1メートル(1000ミリ)」で計算したRSSIが「-60」なので、ほぼ障害物のない理想空間に近い感じですかね。
ためしに、ビーコンとビーコン受信機の間に立ってみました。
こんな感じです。
すると、受信強度(RSSI)は「-78」から「-80」くらいになりました。
電波が人間の体を透過するときに減衰しているみたいです。
約1メートルの距離でこの数値になるよう、前記の計算式を調整してみるとパラメータ「n」の値が「2.6」くらいに相当します。
なるほど。
これが「障害物に吸収され減衰しながら伝搬する空間」の意味だと理解できました。
見えないけどBlueToothの電波はとびまわってる?
上記で結果だけ書くと簡単にやったように見えますが、実は、てこずりました。
ビーコンは1個しかないのに、正体不明の電波を受信機がいっぱい拾ってしまい、どれが計測対象のビーコンなのかがわからず、最初のうちは途方にくれました。
詳しいかたに尋ねたところ、最近はビーコンのように定期的にBlueTooth電波を発信している機器が結構あるそうです。
例えば、スマホとつながるタイプの自販機とかもそうらしいです。
今回、その正体不明の電波の出元を突き止めるところまではやらなかったのですが、見ていると一定時間ごとにアドレスを変えて発信するタイプみたいで、放っておくとゴミ受信データがどんどん増えていきます。
お借りしたビーコンは固定アドレスだったので、それで絞り込む簡単なプログラムを作ってなんとかなりましたが、てこずりました。
なお、BlueToothのアドレスがころころ変わる件については、こちらで整理していますので、あえて繰り返しません。
ビーコンを仕事で使うなら色々工夫が必要だと思う
今回のようにちょっと試すならいいですけど、ビーコンを使った位置測定とか、エリア内にいるいないの判定をするとかをシビアにやるのは相当に難しいなと思いました。
ビーコンとビーコン受信機を固定でおいていても、僕ともう一人の人間が動き回るのに影響されてRSSI値が結構な幅で動きました。
ビーコンをもってうろうろしてみると、ビーコンをポケットにいれたり、手の中に握ったりの持ち方でRSSIの値はふらふらと動きます。
手のひらの上にビーコンをのせるだけにしていても、受信機にたいする体の向きが変わるだけでも、同じようにRSSIの値は変化します。
例えば、前のほうで約1メートルの距離ではかった「-60」が人が間にたつと「-78」になったと書きました。
前のほうでは計算式「RSSI = TxPower - 10 * n * lg(distance)」の「n」の値が「2.0」から「2.6」に相当すると書きましたが、この「-78」って数字を「n」の値を変更せずに、距離換算すると概算「8メートル」くらいに相当します。
こんな感じなので、受信強度(RSSI)だけ見て「人が間にあった1メートル」の結果なのか、障害物のない「8メートル」の結果なのかを判定して位置測定やエリア判定なんかしようとすると非常に厳しいのはわかります。
しかも、室内で使う場合は、壁や設備の素材によって電波が反射する場合もあれば、透過して減衰する場合もあるし・・考慮しなければいけないパラメータが多すぎます。
まあ、不可能ではないんだろうけど・・・簡単ではないですね。
仕事としてはあまりしたくないかも(笑)・・です。
でも、勉強になりました。
ではでは。