0

Ich kann sehen, dass die Android Bacon Library zwei Algorithmen zur Entfernungsmessung bietet: den laufenden Durchschnittsfilter und den ARMA-Filter.Theorie hinter ARMA und Running Average Filter und gibt es alternative Algorithmen zur Berechnung der Entfernung von RSSI von Signal?

Wie hängen diese mit der Implementierung der Bibliothek zusammen (abgesehen von der Verwendung der Formel des Filters)? Wo finde ich Hintergrundinformationen über diese, die die Theorie dahinter erklären? Gibt es bekannte alternative Algorithmen, die untersucht und ausprobiert werden können, um die Entfernung zu messen?

Antwort

3

Es gibt zwei grundlegende Schritte, um eine Entfernungsschätzung für BLE-Beacons zu geben.

  1. Collect RSSI Proben

  2. Convert RSSI Proben zu einer Entfernung Schätzung.

Beide dieser Schritte haben verschiedene mögliche Algorithmen. Die ARMA- und Running Average-Filter sind zwei verschiedene Algorithmen, die zum Sammeln der RSSI-Abtastwerte verwendet werden.

Verstehen Sie, dass Beacon Pakete mit einer periodischen Rate, in der Regel 1-10 Mal pro Sekunde senden. Jedes dieser Pakete wird, wenn es vom Telefon empfangen wird, eine eigene Signalpegelmessung haben, die als RSSI bezeichnet wird. Aufgrund von Funkrauschen und Messfehlern gibt es eine große Varianz bei jedem RSSI-Abtastwert, was zu großen Schwankungen bei den Entfernungsschätzungen führen kann. In der Regel möchten Sie eine Anzahl von RSSI-Samples nehmen und diese zusammen gemittelt haben, um diesen Fehler zu reduzieren.

Der laufende Durchschnittsalgorithmus dauert einfach 20 Sekunden Stichproben (standardmäßig ist der Zeitraum konfigurierbar), wirft die oberen und unteren 10 Prozent der RSSI-Messwerte und nimmt den Mittelwert des Rests. Dies ist vergleichbar mit dem Durchschnitt von Samples in iOS. Aus plattformübergreifenden Gründen ist dies der Standardalgorithmus für die Bibliothek. Aber es hat den Nachteil, dass die Distanz Schätzung hinter, sagt Ihnen, wo das Telefon relativ zum Beacon im Durchschnitt von 10 Sekunden ist. Dies kann für Anwendungsfälle ungeeignet sein, in denen sich das Telefon relativ zum Beacon bewegt.

Die ARMA (Autoregressive Moving Average) -Algorithmus statistisch gewichtet die neueren Proben stärker dass die älteren Proben, die zu weniger Verzögerung in den Abstandsschätzungen. Aber sein Verhalten kann ein wenig unbestimmt sein und ist abhängig von unterschiedlicher Leistung in verschiedenen Funkbedingungen.

Welcher Algorithmus für Sie geeignet ist, hängt von Ihrem Anwendungsfall ab. Testen Sie beide, um zu sehen, welche besser für Sie ist, ist in der Regel der beste Ansatz. Während es andere mögliche Algorithmen für die Datenerfassung gibt, sind dies die einzigen, die in die Bibliothek eingebaut sind. Da es sich um Open Source handelt, können Sie gerne Ihre eigenen erstellen und sie als Pull-Anfrage senden.

Für Schritt 2 gibt es auch eine Reihe von möglichen Algorithmen. Die beiden am häufigsten verwendeten sind eine Kurvenangepasste Formel und eine Pfadverlustformel. Die Kurvenanpassungsformel ist der Bibliothekstandard und die Pfadverlustalternative ist nur in einer Verzweigung der Bibliothek verfügbar, die gerade entwickelt wird. Sie können das letztere gerne verwenden, aber Sie müssen die Bibliothek aus der Quelle erstellen. Auch hier sind Sie als Open-Source-Bibliothek willkommen und aufgefordert, eigene alternative Algorithmen zu entwickeln.

+0

Wie kann ich die Bibliothek aus der Quelle erstellen, um auf die Pfadverlustformel zuzugreifen? Wie kann ich auf die Code-Implementierung für diesen Algorithmus zugreifen (es scheint nicht auf Github zu sein)? Vielen Dank für Ihre Antworten. – user3001845

+1

Wenn Sie Android Studio und/oder Gradle eingerichtet haben, können Sie diesen Zweig der Bibliothek erstellen mit: 'git clone [email protected]: AltBeacon/android-beacon-library.git; CD android-Beacon-Bibliothek; git checkout Pfad-Verlust-Distanz-Berechnungen; ./gradlew build' – davidgyoung

+0

Ich habe all dies getan und ich versuche die lokale Bibliothek zu meinem Projekt hinzuzufügen, aber ich bekomme immer Fehler: Konfiguration mit dem Namen 'default' nicht gefunden. Ich habe eine Reihe von verschiedenen Methoden ausprobiert, um die Bibliothek an das Projekt zu binden, aber ich bekomme immer den gleichen Fehler. Irgendwelche Ideen? – user3001845