WiFi機器の電波の強度のRSSIの値が、対数の場合と0~100%の場合があって紛らわしい。
Windows 10で、ノートPCなどのWiFi機能を内蔵している場合、コマンドラインから
netsh wlan show all
と入力することで、WiFiの状態を調べることができ、周囲にあるWiFiのアクセスポイントの情報も得ることができる。
この場合、それぞれのアクセスポイントの電波の強度がパーセント表示されている。
このように周囲のWiFiのアクセスポイントを情報を調べた場合、電波の強度はRSSIという値として得られる。
RSSIとして表示される値というのは実装によって異なるらしい。基本的には数字が大きい方が強い電波の受信強度を表すようになっているものらしい。
→ RSSIについて – IBS Japan
機器によって電波の受信強度に、強度0%~100%の値を使う場合と、電波強度のワット数からdBm(== dBmW)を使う場合とがあって紛らわしい。Mac OSなどだとRSSIはdBmの値が使われている。
ちなみにdBmは、このように定義されている。
→ dBm – Wikipedia
WiFiの無線の電波の受信強度は普通は-30dBm~-60dBmくらいの数字になるらしい。(上記のWikipediaだと無線の送信の電波強度が書いてあるのがちょっと紛らわしい。)
最近、WiFiのアクセスポイントの情報から位置情報を求めるというソフトを書き直ししてたりする。
位置情報取得用のGoogle Maps Geolocation APIだと、RSSIはdBmの値を渡すようになっている。
しかし、Windows10のWiFiのデータ取得コマンドのシグナル強度(=RSSI?)は100%までの数字になっている。
これをdBmに変換してAPIを叩きたいのだが、変換方法が分からない。
1%を0.01として、99%を0.99とする0~1までの値を基準の電力の1mWと対数で比較して数値化してみたが、これだと元のパーセントの数字が1桁か2桁しか変化しないので変換後の数字が1とか2しか変化しなくて使い物にならない。
変換の数式はどのようにするのがよいのだろうか?
—
FlashAirを使った場合も、同じように周囲のWiFiのアクセスポイントを情報を調べた場合に電波強度がRSSIという値として得られる。
2桁の正の数字が得られるので、最初はてっきり0%~100%の強度の数字なのだと勘違いしていた。
しかし、0に近い数字の方が電波強度が強いという仕様になっているようだ。
おそらくdBmの値の符号を反転させたものか、あるいはそれに近い仕様になっているらしい。
なのでFlashAirの場合は、単に符号を反転させる数式でdBmにとして使うことができるっぽい。
FlashAirで取得できる電波強度を調べた話
iSDIOレジスタのSignal Strengthは0〜100で表され、大きいほど電波が強い。(iSDIO規格)
fa.scaninfo()で取得できるRSSI値は小さいほど電波が強い。距離減衰の挙動から単位はdB。
なお、fa.scaninfo()の引数は、
0〜count-1で強い順に並んでいる。— 蒼さや (@La_zlo) March 1, 2019
—
結局、FlashAirの場合には符号反転の計算値をGoogle Geolocation APIに渡した。
Windowsの場合には、パーセント値をdBmに変換するのをあきらめて、-55dBmの固定値を決め打ちでGeolocation APIに渡した。
結果として得られる精度は、
(1)ちゃんとdBmの値を渡す
(2)決め打ちで-55dBmという値を渡す
(3)SignalStrengthの指定を省略して渡す
という順に(1)の方が精度が良かった。ただし、(1)と(2)の差はあまり大きくない。