2017-02-14 1 views
0
double getDistance(int rssi, int txPower) { 
    return Math.pow(10d, ((double) txPower - rssi)/(10 * 2)); 
} 

上記の式を使ってBluetoothデバイス間の距離を計算しようとしました。しかし、それは間違った結果を返します。結果は "3.4565216E9"の形式になります。しかし、結果はランダムに "3.4565216E9"から "9.9645352E9"まで変化する。誰かが別の方法を提案することができますBluetooth信号強度を使用してAndroidデバイス間の距離を計算するにはどうすればよいですか?

+0

計算する方法がない。

距離は、このサンプルコードとして出力することができます。あなたが得た結果は、Bluetoothにとってうまくいきます。 RSSIは安定しておらず、距離を与えることはできません。より正確な結果を得るには、得られる値の中央値を計算するしかありません。だから基本的には3メートルから20メートルまでの結果を得ることはOKです。それをより正確にする方法はありません –

答えて

0

理想的な条件であっても電波信号強度表示(RSSI)の等高線プロットはおおよそメープルリーフです。あなたが見ているバリエーションは、あなたが葉の高信号「指」の中にいるかどうかの結果であることがほぼ確実です。

有用な結果を得るには、回転アンテナを使用してRMS信号強度(WW2戦艦レーダーと考える)またはマルチポールアンテナと位相トリッキーを計算して同じ結果を得る必要があります。

あなたが取得した後それはあなたが反射を拒絶するように信号処理を行う必要があります動作するように、あなたがことが安定的に仕事を得るときあなたは15で脱落プロファイルを仕事にフルスケールのフィールドテストを実施する必要がありますRSSIを範囲に変換することができるように、センサーの垂直からの度合いの間隔を指定します。

市販のBTハードウェアではこれらのオプションを楽しむことができないと思うので、私はレンジングにRSSIを使用しないことをお勧めします。

これが大学のプロジェクトの場合、演習の目的のために、極座標でマークアップできるスペースにトランスポンダとアンテナの位置と向きを固定し、輪郭をマッピングする必要があります。退屈で時間がかかる?はい。

+0

RSSI以外の信頼できる方法を試しましたか? –

+0

レーザーレンジファインダー。基本的には、距離の線形関数である反射の位相変化を測定します。 –

0

RSSIを使用して距離を簡単に測定する方法はありません。 RSSIに対する距離の測定を行い、それに対する数学的ルールを構築することができる。しかし、それは携帯電話内のすべての異なるBluetoothチップのために異なります。これらの人がコミュニティを持っている人の実験およびこれらの測定値を見つけようとしているが、それでも多くのモデルが登録されていないhttps://altbeacon.github.io/android-beacon-library/

アンドロイドビーコンライブラリと呼ばれるライブラリがあります。それにもかかわらず、あなたは一般的な距離感を得るためにそれを使うことができます。デフォルトでは、他の測定値を指定しない限り、Nexus 5測定値を使用します。

 beaconManager.addRangeNotifier(new RangeNotifier() { 
      @Override 
      public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
       if (beacons.size() > 0) { 
        Log.i(TAG, "The first beacon I see is about "+beacons.iterator().next().getDistance()+" meters away.");   
       } 
      } 
     }); 
関連する問題