2016-04-04 9 views
9

Ich weiß, es gibt viele Fragen zu Stackoverflow im Zusammenhang mit meiner Frage, aber ich würde gerne wissen, ob es eine Möglichkeit gibt, die genaue Entfernung von RSSI zu erhalten.Entfernung Berechnung von RSSI BLE Android

Ich habe this link und einige andere git library methods for distance calculation sowie diese tutorial gefolgt. Aber ich kann nicht die richtige Lösung finden.

Dies ist, was ich bin mit dem Abstand messen:

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; 
    } 
} 

Wenn ich diese Methode, die ich die standard passieren nennen und RSSI, was ich von meinem mLeScanCallBack bekommen()

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); 
         } 
        } 
       }); 
      } 
     }; 

Welches Problem ich gegenüberstelle?

Es ist nichts falsch mit dem obigen Code. Es gibt mir die Distanz, aber ich bin damit nicht zufrieden, weil es nicht die richtige Entfernung ist. Kann mir jemand sagen, ob es möglich ist, die genaue Entfernung mit der oben genannten Methode zu erreichen oder ob es anders geht?

+1

Ich bin in der gleichen Situation wie Sie, die RSSI-Signale nicht perfekt sind, weil auf die Umwelt gibt es viele Faktoren gibt, Diese verzerren die Signale als Magnetismus und andere Dinge, die die Signale beeinflussen. Es gibt mehrere Filter, die Rauschsignale als "Kalman-Filter" oder "Partikelfilter" entfernen, aber ich habe nicht gefunden, wie man es anwendet, wenn Sie ein RSSI-Signalfeld haben, wenn Sie einen Weg finden, sagen Sie mir bitte! –

+0

hast du irgendwelche lösungen bekommen? – Araf

+0

Niemand tut mir leid, bis ich keine genaue Lösung für diese Berechnung bekommen habe –

Antwort

1

Ich arbeite auch an der gleichen Sache. Mit dieser Methode können Sie die Entfernung berechnen, aber die Entfernung ändert sich häufig. Dies liegt daran, dass sich der RSSI-Wert ebenfalls häufig ändert.

Was Sie tun müssen, ist Ihr Ergebnis zu glätten und dafür haben Sie Kalman Filter oder (lineare quadratische Schätzung) anzuwenden. Wenn Sie mit dem Kalman Filter bleiben möchten, beginnen Sie hier. Beacon Tracking

Noch bin ich auf der Suche nach einer besseren Umsetzung von Kalman Filter für mein Projekt. Alternativ können Sie Ihren RSSI-Wert

h = * + glatt nach oben (1 -) * -1

ist der jüngste Wert und -1 ist der Mittelwert bis vorherigen.

variiert von 0 bis 1 [betrachten = 0,75]

Quelle: - RSSI Smoothing

Verwandte Themen