2016-04-04 12 views
9

Sorununla ilgili yığın akışında çok soru olduğunu biliyorum, ancak RSSI'den tam uzaklığı elde etmek için herhangi bir yol olup olmadığını bilmek istiyorum.RSSI'den hesaplama BLE android

this link ve diğer git library methods for distance calculation ile birlikte bu tutorial'u izledim. Ama doğru çözümü alamıyorum.

Bu

mesafeyi ölçmek için kullanıyorum budur: Bu yöntemi çağırmak zaman standard geçmesi

protected double calculateDistance(float txPower, double rssi) { 

    if (rssi == 0) { 
     return -1.0; // if we cannot determine distance, return -1. 
    } 

    double ratio = rssi * 1.0/txPower; 

    if (ratio < 1.0) { 
     return Math.pow(ratio, 10); 
    } else { 
     double accuracy = (0.89976) * Math.pow(ratio, 7.7095) + 0.111; 
     return accuracy; 
    } 
} 

ve benim mLeScanCallBack() elde ettiğimi RSSI

private BluetoothAdapter.LeScanCallback mLeScanCallback = 
     new BluetoothAdapter.LeScanCallback() { 

      @Override 
      public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) { 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 

         BluetoothDeviceModel bluetoothDeviceModel = new BluetoothDeviceModel(device, rssi); 

         mLeDeviceListAdapter.addDevice(bluetoothDeviceModel, rssi, bluetoothDeviceModel.device.getAddress()); 
         mLeDeviceListAdapter.notifyDataSetChanged(); 

         if (mapBluetooth != null) { 
          mapBluetooth.put(bluetoothDeviceModel.getDevice().getAddress(), bluetoothDeviceModel); 
          mLeDeviceListAdapter.refresh(mapBluetooth); 
         } 
        } 
       }); 
      } 
     }; 

Hangi Sorunla karşı karşıyayım?

Yukarıdaki kodda bir sorun yok. Bana mesafe veriyor ama bununla yetinmiyorum çünkü doğru mesafe değil. Yani, yukarıdaki yöntemle tam mesafeyi elde etmek mümkün olup olmadığını veya başka bir yol olup olmadığını bana söyleyebilir mi?

+1

çevreye birçok faktör vardır çünkü, RSSI sinyalleri mükemmel değildir gibi ben aynı durumda değilim Bu sinyalleri manyetizma ve sinyalleri etkileyen diğer şeyler gibi çarpıtır. Gürültü sinyallerini "Kalman Filtresi" veya "Parçacık Filtresi" olarak kaldıran birkaç filtre var ama bir RSSI sinyali sinyalinin olduğu zaman bunu nasıl uygulayacağımı bulamadım, eğer bir yol bulursanız lütfen bana söyleyin! –

+0

herhangi bir çözüm buldunuz mu? – Araf

+0

Bu hesap için doğru çözümü bulamadığım için üzgünüm. –

cevap

1

Aynı şey üzerinde çalışıyorum. Bu yöntemle mesafeyi hesaplayabilirsiniz ancak bu mesafe sık sık değişmektedir. Bunun nedeni RSSI değerinin de sık sık değişmesidir. Yapmanız gereken şey

senin sonucunu düzeltmek için olduğunu ve bunun için Kalman ya da (doğrusal kuadratik tahmini) Filtre uygulamak zorunda. Kalman filtresine yapışmak istiyorsanız buradan başlayın. Beacon Tracking

Yine de projem için Kalman Filtresinin daha iyi uygulanmasını arıyorum. Alternatif olarak, RSSI değeri kadar pürüzsüz olabilir

h = * + (1 -) * -1

son değerdir ve -1 önceki kadar ortalama değeridir.

Kaynak [= 0.75 düşünün] 0 ile 1 arasında değişir: - RSSI Smoothing