建物内のモバイルデバイスの正確な位置を計算したい(GPSアクセスなし)
少なくとも3つの固定WiFi信号の信号強度(dBm)を使用してこれを実行したい(位置がわかっている3つの固定ルーター)
Googleはすでにそれを行っており、このデータに基づいて正確な位置をどのように把握しているかを知りたい
詳細については、この記事を確認してください: http://www.codeproject.com/Articles/63747/Exploring-GoogleGears-Wi-Fi-Geo-Locator-Secrets
FSPLは2つのパラメーターに依存します。1つ目は無線信号の周波数、2つ目は無線伝送距離です。次の式は、それらの間の関係を反映できます。
FSPL (dB) = 20log10(d) + 20log10(f) + K
d = distance
f = frequency
K= constant that depends on the units used for d and f
If d is measured in kilometers, f in MHz, the formula is:
FSPL (dB) = 20log10(d)+ 20log10(f) + 32.44
フェードマージンの方程式から、次の方程式を使用して自由空間経路損失を計算できます。
自由空間パス損失= Tx電力-Txケーブル損失+ Txアンテナゲイン+ Rxアンテナゲイン-Rxケーブル損失-Rx感度-フェードマージン
上記の2つの自由空間経路損失方程式を使用すると、距離(km)を見つけることができます。
Distance (km) = 10(Free Space Path Loss – 32.44 – 20log10(f))/20
フレネルゾーンは、電波がアンテナを出た後に広がる視覚的な視線の周りの領域です。特に2.4GHzワイヤレスシステムの場合、強度を維持するために明確な見通し線が必要です。これは、2.4GHzの波が木にある水のように水に吸収されるためです。経験則では、フレネルゾーンの60%に障害物がないようにする必要があります。通常、20%のフレネルゾーンの閉塞は、リンクへの信号損失をほとんど引き起こしません。 40%を超えると、信号損失が大きくなります。
FSPLr=17.32*√(d/4f)
d = distance [km]
f = frequency [GHz]
r = radius [m]
距離を計算するには、信号強度と信号の周波数が必要です。 Javaコードは次のとおりです。
public double calculateDistance(double signalLevelInDb, double freqInMHz) {
double exp = (27.55 - (20 * Math.log10(freqInMHz)) + Math.abs(signalLevelInDb)) / 20.0;
return Math.pow(10.0, exp);
}
使用される式は次のとおりです。
距離= 10 ^((27.55 20 * log10(周波数))+ signalLevel)/ 20)
例:周波数= 2412MHz、signalLevel = -57dbm、結果= 7.000397427391188m
この式は、---(自由空間経路損失(FSPL) 式の変換された形式です。ここで、距離はメートルで、周波数はメガヘルツで測定されます。他のメジャーについては、異なる定数(27.55)を使用する必要があります。定数 here を読み取ります。
詳細については、 こちら を参照してください。
K = 32.44
FSPL = Ptx - CLtx + AGtx + AGrx - CLrx - Prx - FM
d = 10 ^ (( FSPL - K - 20 log10( f )) / 20 )
ここに:
K
-定数(MHzでf
、kmでd
の場合、32.44、MHzでf
、mでd
の場合-27.55に変更)FSPL
-空きスペースパスの損失Ptx
-送信機パワー、dBm(最大20 dBm(100mW))CLtx
、CLrx
-トランスミッターとレシーバーでのケーブル損失、dB(ケーブルがない場合は0)AGtx
、AGrx
-送信機と受信機のアンテナゲイン、dBiPrx
-レシーバー感度、dBm(-100 dBm(0.1pW)まで)FM
-フェードマージン、dB(14 dB以上(通常)または22 dB以上(良好))f
-信号周波数、MHzd
-距離、mまたはkm(Kの値に依存)注:TP-Linkサポートサイトの式にエラーがあります(^
がありません)。
Prx
を受信信号強度に置き換えて、WiFi APからの距離を取得します。
例:Ptx = 16 dBm、AGtx = 2 dBi、AGrx = 0、Prx = -51 dBm(受信信号強度)、CLtx = 0、CLrx = 0、f = 2442 MHz(7番目の802.11bgnチャネル)、FM =22。結果:FSPL = 47 dB、d = 2.1865 m
注:FM(フェードマージン)はここでは無関係のようですが、元の式のために残しています
あなたはアカウントの壁を考慮する必要があります、表 http://www.liveport.com/wifi-signal-attenuation .
例:(以前のデータ)+ 1つの木製の壁(表から5 dB)。結果:FSPL = FSPL-5 dB = 44 dB、d = 1.548 m
また、アンテナのゲインは電力を追加しないことに注意してください-放射パターンのshapeを記述します(無指向性アンテナの場合はドーナツ、指向性アンテナなど)。
これはいずれも信号の反射を考慮していません(これを行う方法がわかりません)。おそらくノイズもありません。したがって、この計算は、大まかな距離の推定にのみ適しています。
あなたの質問に対する簡単な答えは三角測量でしょう。これは基本的にすべてのGPSデバイスの概念です。この記事を読んで、Googleがこれをどのように行っているかについて詳しく学んでください。 http://www.computerworld.com/s/article/9127462/FAQ_How_Google_Latitude_locates_you_?taxonomyId = 15&pageNumber = 2 。
私の理解では、彼らは Skyhook に似たサービスを使用しています。これは、wifi /携帯電話の信号に基づいて位置を特定する位置ソフトウェアです。これらのサービスには、正確さを実現するために、これらのセルタワーとWi-Fiアクセスポイントの位置情報を保存するデータベースの大規模なサーバーがあります。同様のことを実現するには、Skyhookのようなサービスを使用する必要があると想定します。SDK( http://www.skyhookwireless.com/location- technology / )。
ただし、内部で何かをしたい場合(独自のルーターの場所を使用するなど)-おそらく、三角測量を模倣するアルゴリズムを作成する必要があります。デバイスのsignal_strength
およびmac_address
を取得し、その情報をルーターの場所とともに使用して場所を特定する方法を見つける必要があります。おそらく、これに似た方法でルーターに接続されたデバイスに関する情報を取得できます( http://www.makeuseof.com/tag/check-stealing-wifi/ )。
距離(km)= 10 ^((自由空間経路損失– 92.45 – 20log10(f))/ 20)
一般的に、これは マルチパス干渉 のために物事を行うのに本当に悪い方法です。これは間違いなく、コーディングよりもRFエンジニアリングの問題です。
Tl; dr、wifi RFエネルギーは、壁、人、床などに跳ね返った後、さまざまな方向に散らばります。 WiFiビーコンを正確に正しい場所に配置します。
Googleは、Androidユーザー(サービスにオプトインする)が範囲内に入ったときに、基本的にすべてのwifi SSIDがGPSロケーションにマッピングされるため、これを回避できます。そうすれば、ユーザーが次に完璧なGPS信号がなくてもそこを歩いたときに、グーグルの母船はあなたがどこにいるかを知ることができます。通常、彼らはくだらないGPS信号と組み合わせて使用します。
私が見たのは、ZigbeeまたはBTLEデバイスのグリッドです。これらがどこに配置されているかがわかっている場合は、結合されたRSSを使用して、最も近いものを比較的把握し、そこから進むことができます。