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

我試着用上面的公式計算藍牙設備之間的距離。但它返回錯誤的結果。結果格式爲「3.4565216E9」。但結果隨機地從「3.4565216E9」到「9.9645352E9」變化。有人可以提出一種不同的方法如何使用藍牙信號強度來計算Android設備之間的距離?

+0

沒有辦法來計算。你得到的結果對藍牙來說很好。它的RSSI是不穩定的,不能給你距離。只有獲得更準確結果的方法是計算得到的值的中位數。所以基本上從3到20米*獲得結果是正常的,沒有辦法讓它更準確 –

回答

0

甚至在理想條件下,無線電信號強度指示(RSSI)的等高線圖大致爲楓葉形。你所看到的變化幾乎肯定是你是否處於葉子的高信號「手指」之中或之間的結果。要得到一個有用的結果,你必須使用一個旋轉天線並計算RMS信號強度(想想WW2戰列艦雷達)或者多極天線和相位技巧以得到相同的結果。

後你得到工作,你將不得不做信號處理,拒絕思考,當你得到穩定地工作,你將不得不進行全面大規模現場測試在15至工作了脫落的個人資料距離垂直傳感器的距離,因此您可以將RSSI轉換爲距離。

因爲我不認爲商業BT硬件將允許您接受這些選項,所以我建議您不要嘗試使用RSSI進行測距。

如果這是一個大學項目,那麼爲了練習的目的,您需要在一個空間中固定應答器和天線的位置和方向,您可以用極座標標記並繪製等高線。乏味且耗時?是。

+0

您是否嘗試過任何可靠的方法,而不是使用RSSI? –

+0

激光測距儀。基本上他們測量反射的相位變化,這是距離的線性函數。 –

0

有沒有簡單的方法來測量使用RSSI的距離。可以測量距離與RSSI的距離,然後爲其構建數學規則。但是,對於手機內部的每個不同的藍牙芯片,情況都會有所不同。

有一個名爲Android的信標庫庫: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.");   
       } 
      } 
     }); 
相關問題