@ -185,15 +185,7 @@ d = A \cdot \left( \cfrac{P_{R_{x}}}{sxPower} \right)^{B} + C
\end{aligned}
\end{equation}
## Messung, Fehler-Quellen und Korrekturen
!!! Draft !!!
- physikalische Eigenschaften von Bluetooth,
- wie funktioniert die Übertragung von Bluetooth konkret,
- Übertragungsgeschwindigkeiten
- wie könnte eine Fehlerrechnung, Fehlerfortpflanzung, etc. aussehen,
- Beschreibung und Betrachtung der physikalischen Eigenschaften einer Messkette + Signalverarbeitung
## Messung, Fehler-Quellen und Korrekturen [draft]
In der Regel ist jede Messung fehlerbehaftet, auch wenn sie präzise durchgeführt wird. Zum Beispiel kann es schon beim Ablesen von Messdaten zu Fehlern kommen, aber auch das Einbringen eines Messgeräts kann die zu messenden Werte in einem System verändern. Aus diesem Grund ist die Beurteilung und Klassifikation von Messfehlern ein wichtiger Teil bei der Betrachtung einer Messkette. [@Lerch_2006_BOOK, S. 89]. In den folgenden Abschnitten werden die notwendigen Begriffe zur Beurteilung von Fehlern eingeführt und weiter die Fehlerkorrekturmöglichkeiten betrachtet.
@ -205,6 +197,8 @@ Messfehler werden in systemische und zufällige Fehler unterschieden:
**Zufällige Messfehler** lassen sich hingegen nicht unmittelbar erfassen. Die Abweichungen vom wahren Wert kann nur in Form von Wahrscheinlichkeitsaussagen beschrieben werden. Um diesen Fehlertyp zu beurteilen, müssen möglichst viele Messungen durchgeführt werden. Dabei ergibt sich eine Normalverteilung nach Gauß. Das Normalverteilungsgesetz für zufällige Fehler ist dabei wie folgt charakterisiert: positive und negative Abweichungen treten gleich häufig auf, die Wahrscheinlichkeit des Auftretens einer Abweichung nimmt mit zunehmender Größe der Abweichung ab [@Lerch_2006_BOOK, S. 91].
Nachfolgend sollen Beispiele für die beiden Fehlerarten genannt und beschrieben werden. Tabelle \ref{tab:error} gibt eine Übersicht über die verschiedenen Fehler.
#### Beispiele systemische Fehler {-}
- **Hindernisse**: Wände, Möbel, Pflanzen, Menschen und andere Objekte beeinflussen die Ausbreitung von Funkwellen. Der Einfluss äußert sich in Reflektionen oder Abschwächung des Signals. Bei Reflektionen kann es zum mehrfachen Empfang ein und des selben Signals kommen. Dabei hat das Reflektierte Signal meist einen weiteren Weg hinter sich und ist daher schwächer. Die zusätzliche Abschwächung des Signals durch Objekte zwischen Sender und Empfänger, führt zu einem schwächeren Signal am Empfänger und beeinflusst so die Entfernungsmessung mithilfe der Signalstärke.
@ -212,33 +206,58 @@ Messfehler werden in systemische und zufällige Fehler unterschieden:
- **Smartphone-Gehäuse**: Wie die Hindernisse wirkt sich auch das Smartphone-Gehäuse sowie die verbauten Sensoren im Smartphone auf die Signalstärke aus. Auch eine Smartphone-Hülle die vom Nutzer angebracht wird, beeinflusst die Signalstärke. Da die meisten Hüllen aus Plastik bestehen, ist dieser Effekt jedoch als gering an zu sehen.
- **Antennenanordnung**: Auch die Orientierung und Position der Antenne beeinflusst die Qualität des empfangen Signals. Liegt die Antenne beispielsweise auf der linken Seite des Smartphones, so werden Signale die von rechts kommen stärker gedämpft.
- **RSSI Sensor**: Die Signalmessung wird durch den Bluetooth Chip durchgeführt. Er nutzt einen 8-bit analog zu digital Wandler um einen Wert zwischen 0 und 255 zu erhalten. Das stärkste Signal wird durch den Wert 255 abgebildet. Bei der Umrechnung dieses Wertes in \ac{dbm} muss für gute Ergebnisse ein angepasster Code verwendet werden. Ob und wie gut diese Anpassung geschieht, hängt allein bei den Herstellern.
- **Versuchsaufbau**: Auch der Aufbau des Versuchs kann zu Fehlern im System führen. Dieser systemische Fehler kann meist nur durch die Wiederholung der Versuche korrigiert werden.
#### Beispiele zufälliger Fehler {-}
- **Funkrauschen**: \ac{ble} verwendet den selben Frequenzbereich wie \ac{wifi} und viele weitere Funktechnologien für den Konsumerbereich. Auch andere Signale von unterschiedlichen Frequenzbereichen strahlen teilweise in diesen Frequenzbereich ein [ QUELLE ]. Dabei kann diese starke Auslastung dazu führen das Pakete nicht Empfangen werden oder die Empfangsstärke beeinflusst wird.
- **Bluetooth Channel Rotation**: \ac{ble} nutzt drei verschiedene Kanäle, mit unterschiedlichen Frequenzen, für das Advertising. Die Antennen sind jedoch auf eine bestimmte Frequenz optimiert. Daher kommt es zu Abweichungen beim RSSI je nach verwendeten Advertising Kanal [@Paterna_2017]. Dies ist prinzipiell ein systemischer Fehler der Korrigierbar wäre. Unter Android gibt es derzeit jedoch keine Möglichkeit den Kanal aus zu lesen, weswegen der Fehler damit zufällig auftritt.
| Bluetooth Channel Rotation | Implementierung | systemisch/zufällig |
: Übersicht der Fehler, Fehlerarten und Auslöser \label{tab:error}
### Genauigkeit einer Messung
Die Genauigkeit einer Messung wird durch die Richtigkeit und die Präzision beschrieben. Dabei hat ein Messwert eine hohe Genauigkeit, wenn sowohl eine hohe Richtigkeit, als auch eine hohe Präzision vorliegt.
Die Richtigkeit lässt eine Aussage über die Nähe von Einzelmesswerte zum tatsächlichen Messwert zu. Bei einer guten Richtigkeit stimmen die gemessenen Werte im Mittel mit dem tatsächlichen Messwert nahezu überein. Mathematisch wird die Richtigkeit durch die Differenz aus dem Mittelwert $\overline{x}$ und Referenzwert $x_{Ref}$ beschrieben:
Die Richtigkeit lässt eine Aussage über die Nähe von Einzelmesswerte zum tatsächlichen Messwert zu. Bei einer guten Richtigkeit stimmen die gemessenen Werte im Mittel mit dem tatsächlichen Messwert nahezu überein. In Formel \ref{eq:richtigkeit} wird die Richtigkeit Mathematisch beschrieben. Sie wird dabei durch den Betrag der Differenz aus dem Mittelwert $\overline{x}$ und dem Referenzwert $x_{Ref}$ ermittelt.
\begin{equation}\label{eq:richtigkeit}
\text{Richtigkeit}=|\overline{x}-x_{Ref}|
\end{equation}
Die Präzision beschreibt die Streuung der Messwerte um den Mittelwert. Je näher die Messwerte beieinander liegen, desto höher die Präzision. Die Streuung wird dabei durch zufällige Fehler ausgelöst und kann durch die relative Standardabweichung ausgedrückt werden.
Die Präzision beschreibt die Streuung der Messwerte um den Mittelwert. Je näher die Messwerte beieinander liegen, desto höher die Präzision. Die Streuung wird dabei durch zufällige Fehler ausgelöst und kann durch die relative Standardabweichung ausgedrückt werden.
Die Abhängigkeit von Präzision und Richtigkeit wird in Abbildung \ref{fig:genauigkeit} verdeutlicht. Dabei liegt der tatsächliche Wert jeweils im Zentrum der Kreise. Nur das Szenario rechts oben in der Abbildung hat eine hohe Genauigkeit, da es sowohl eine hohe Präzision, als auch eine hohe Richtigkeit aufweist. Alle anderen Szenarien haben eine geringe Genauigkeit, können jedoch eine hohe Präzision oder eine hohe Richtigkeit oder keins von beidem (unten links) aufweisen.
![Zusammenhang zwischen Richtigkeit und Präzision \label{fig:genauigkeit}](../static/genauigkeit.pdf)
### Fehlerbewertung
Um Messungen beurteilen zu können wird ein Maß für den auftretenden Fehler benötigt.
### Filter
Die unverarbeiteten Messwerte werden als Rohdaten bezeichnet. Aufgrund der zuvor erwähnten Messfehler, sind diese Messwerte in den meisten Fällen nicht zur Anzeige geeignet. Zunächst müssen die Messwerte vor verarbeitet werden. Hierzu werden zuerst die systemischen Fehler korrigiert. Zur Minimierung der zufälligen Fehler kommen im nächsten Schritt ein oder mehrere Filter zum Einsatz.
#### Gaußfilter
#### Gewichteter Filter
#### Kallman-Filter
### Kalibrierung
- Filterverfahren in Tabelle, Erklärung was Filter machen.
Nicht alle müssen angewandt werden.
@ -267,18 +286,65 @@ In den folgenden Abschnitten wird die verwendete Hardware sowie die Umsetzung be
## Beacon
Als Bluetooth-Beacon kommen Puck.js\footnote{https://www.puck-js.com/} von der Firma Espruino\footnote{http://www.espruino.com/} zum Einsatz. Diese bieten auf ihrer offenen Plattform neben Bluetooth noch weitere Sensoren wie: ein Magnetometer zur Messung von Magnetfeldern, ein Accelerometer zur Messung von Beschleunigungen, ein Gyroscope zur Messung der Winkelgeschwindigkeit, einen Temperatursensor und vieles mehr. Durch diese Sensoren kann der Beacon auch für weitere Anwendungen eingesetzt werden, was jedoch nicht Bestandteil dieser Arbeit sein soll.
Als Bluetooth-Beacon kommen Puck.js\footnote{https://www.puck-js.com/}, Abbildung \ref{fig:puck}, von der Firma Espruino\footnote{http://www.espruino.com/} zum Einsatz. Diese bieten, auf ihrer offenen Plattform, neben Bluetooth noch weitere Sensoren wie: ein Magnetometer zur Messung von Magnetfeldern, ein Accelerometer zur Messung von Beschleunigungen, ein Gyroscope zur Messung der Winkelgeschwindigkeit, einen Temperatursensor und vieles mehr. Durch diese Sensoren kann der Beacon auch für weitere Anwendungen eingesetzt werden, was jedoch nicht Bestandteil dieser Arbeit sein soll.
Durch eine Programmierschnittstelle lässt sich der Beacon mit Hilfe von Javascript Programmieren. Beim Einstieg hilft eine Datenbank mit Beispielprogrammen sowie ein ausführlich dokumentiertes \ac{api} [@Ltd_2017]. Die Programmierung wird mit Hilfe einer \ac{ide}, Abbildung \ref{fig:ide}, im Browser vorgenommen und macht das Experimentieren mit den Bluetooth-Beacon sehr einfach.
Zur Identifikation der Beacon wird eine Einzigartige Universelle Identifikation benötigt. Espruino bietet eine Reservierte 16 bit \ac{uuid} ``0x0590`` für die Entwicklung von Anwendung mit ihrer Hardware. Diese \ac{uuid} wird zur Filterung der Advertising-Pakete im Scanner verwendet.
Durch eine Programmierschnittstelle lässt sich der Beacon mit Hilfe von Javascript Programmieren. Beim Einstieg hilft eine Datenbank mit Beispielprogrammen sowie ein ausführlich dokumentiertes \ac{api} [@Ltd_2017]. Zur Programmierung verbindet man den Beacon mittels Bluetooth zu einer \ac{ide} im Browser. Abbildung \ref{fig:ide} zeigt die \ac{ide}: links befindet sich die Konsole über die Befehle direkt auf dem Beacon ausgeführt werden können, rechts ist der Editor in dem man Programme einfügen oder schreiben kann. Der Programmcode kann sowohl Temporär, zum Testen, auf den Beacon geladen werden als auch nach dem Test im Flash des Beacon gespeichert werden. Bei der temporären Ausführung ist der Code nach einem Batteriewechsel nicht mehr auf dem Beacon. Diese Art der Entwicklung macht das Experimentieren mit den Bluetooth-Beacon sehr einfach.
Zur Umsetzung eines Selbst korrigierenden Systems müssen die Bluetooth-Beacon sowohl als Scanner wie auch als Beacon fungieren. Beacon 1 sendet dabei ein Advertising-Paket welches Beacon 2 und 3 empfängt und verarbeitet. Dabei wird die $txPower$, also der \ac{rssi}-Wert des Beacon beim Empfänger ausgelesen und in das Advertising-Paket geschrieben. Nun steht im Advertising-Paket von Beacon 2 und 3 jeweils die $scPower$, also der \ac{rssi}-Wert auf \SI{1}{\meter} Entfernung von Beacon 1. Dieser Wert wird nun von Beacon 2 und 3 Advertised und beim Empfang neuer Pakete von Beacon 1 aktualisiert. Der Ablaufplan In Abbildung \ref{fig:selfkorrekting-ablauf} verdeutlicht die Funktionsweise eines Beacon.
![Screenshot der Espruino \ac{ide} im Chrome Browser. \label{fig:ide}](../static/espruino_ide.png)
Ein Advertisingpaket der Beacons ist 5 byte groß. Es setzt sich aus der 16 bit langen \ac{uuid} ``0x0590`` und 3 byte für die Übertragung der $scPower$ zusammen. Die $scPower$ wird dabei in einer festen Reihenfolge abgespeichert und Übertragen. Für einen produktiven Einsatz sollten diese Werte jedoch gekennzeichnet werden. Hierfür sind weitere 26 byte in dem Advertising-Paket frei.
### Modi
Während der Versuche mit den Beacon wird ein hohes Advertising-Intervall benötigt. Dies sorgt für eine kürzere Batterielebensdauer. Um die Batterie nicht zu stark zu belasten wurden zwei Modi Programmiert. Durch den integrierten Button, kann zwischen dem Versuchsmodus und dem Programmiermodus gewechselt werden. Zur Visualisierung in welchem Modus sich der Beacon befindet wird die eingebaute grüne und rote LED verwendet. Beim Wechsel vom Programmiermodus in den Versuchsmodus leuchtet die grüne LED auf und blinkt dann alle \SI{10}{\second}. Wird der Beacon erneut gedrückt, so zeigt die rote LED das beenden des Versuchsmodus an und der Beacon wechselt in den Programmiermodus zurück.
### Identifizierung
Jeder Beacon verfügt über eine einzigartige Hardware-Adresse, \ac{mac}-Adresse genannt. Zur einfachen Identifizierung werden die letzten zwei Byte der \ac{mac}-Adresse in Kleinbuchstaben als Kurzname der Beacon verwendet. Für das Advertising wird der vor den Kurznamen ein BLE für \acl{ble} gesetzt. Tabelle \ref{tab:devices} listet die \ac{mac}-Adresse sowie den dazugehörigen Advertising Namen und Kurznamen der Beacon auf. Im Versuchsmodus wird der Advertising Name nicht mit ausgesendet, mehr dazu im Kapitel \ref{advertising}.
| \ac{mac}-Adresse | Advertising Name | Kurzname |
| ---------------- | --------- | -------- |
| C6:13:E8:3F:69:0F | BLE 690f | 690f |
| CD:10:9A:4C:9D:31 | BLE 9d31 | 9d31 |
| D6:7C:70:1C:5B:5B | BLE 5b5b | 5b5b |
: Übersicht der \ac{mac}-Adressen und zugehörigen Namen der verwendeten Beacon. \label{tab:devices}
Um die Advertising-Pakete zuordnen zu können wird ein universeller Identifikator benötigt. Espruino bietet hierzu eine Reservierte 16 bit \ac{uuid} ``0x0590`` für die Entwicklung von Anwendung mit ihrer Hardware. Diese \ac{uuid} wird zur Filterung der Advertising-Pakete im Scanner verwendet.
### Advertising
Für das Advertising stehen 31 Byte für Benutzerdefinierte Daten zur Verfügung. Davon werden 5 byte im Versuchsmodus benötigt. Das Advertising-Paket im Versuchsmodus setzt sich aus der 16 bit langen \ac{uuid} ``0x0590`` und 3 Byte zur Übertragung der $scPower$ zusammen. Die $scPower$ wird in einer festen Reihenfolge abgespeichert und übertragen. Für einen produktiven Einsatz sollten diese Werte gekennzeichnet werden. Hierfür sind weitere 26 byte in dem Advertising-Paket frei.
Für den Versuchsmodus wird der Beacon auf in den Advertising-\ac{pdu} ``ADV_NONCONN_IND`` gesetzt. Dadurch ergibt sich ein Maximales Advertisingintervall von \SI{100}{\milli\second} welches für den gewählten Versuchsaufbau ausreichend ist. Der Advertising Name des Beacon wird im Versuchsmodus nicht ausgesendet.
Im Programmiermodus wird der Beacon auf den Advertising-\ac{pdu} ``ADV_IND`` zurück gesetzt. Auch der Advertising Name des Beacon wird nun wieder mit ausgesendet. So kann man den Beacon mit der \ac{ide} verbinden und neu Programmieren.
### scPower
Zur Umsetzung eines selbst korrigierenden Systems müssen die Bluetooth-Beacon sowohl als Scanner wie auch als Advertiser fungieren. Im Versuchsmodus Scannen die Beacon hierzu, parallel zum aussenden der Advertising Pakete, auf solche von den anderen beiden Beacon. Abbildung \ref{fig:selfkorrekting} zeigt den Ablauf des selbst korrigierenden Systems bei dem Beacon 5b5b ein Advertising Paket aussendet, welches von den Beacon 690f und 9d31 empfangen und verarbeitet wird. Die Beacon 690f und 9d31 speichern den \ac{rssi}-Wert des Empfangenen Pakets von Beacon 5b5b als $scPower$ in ihre Advertising-Pakete und strahlen dieses aus. Bei jedem erneuten Empfang eines Advertising-Pakets von Beacon 5b5b wird die $scPower$ aktualisiert.
## Smartphone
Als Smartphone für die Messungen kommt ein OnePlus 7t mit Android-Betriebssystem in der Version 11 zum Einsatz. Für die Anwendungsentwicklung wird die \ac{ide} Android Studio verwendet. Als Programmiersprache wurde Kotlin gewählt und die Smartphone Anwendung als Bluetooth-Scanner umgesetzt. Über die Benutzeroberfläche, zu sehen in Abbildung \ref{fig:appfrontend}, müssen 4 Eingabefelder vor dem Versuchsstart durch den Anwender ausgefüllt werden. Der Test Name dient dazu, die Testdaten bei der Auswertung zu identifizieren. In den weiteren drei Feldern wird die, für den Versuch gemessene Distanz zwischen Smartphone und dem jeweiligen Beacon notiert. Sollte ein oder mehrere Beacon nicht im Einsatz sein, so muss hier eine 0 eingetragen werden. Über den Start/Stop-Button am unteren Bildschirmrand der Anwendung wird die Aufzeichnung gestartet. Nach dem Start können die Empfangenen Daten im oberen Bildschirmbereich zur Funktionsüberprüfung eingesehen werden. Diese Daten Aktualisieren sich automatisch mit jedem empfangenen Advertising-Paket.
![Screenshot der Smartphone-Testanwendung: Bluetooth Advertising Logger. \label{fig:appfrontend}](../static/appfrontend.jpg){ height=600px }
Beim Empfang eines Advertising-Pakets wird geprüft, ob das Paket von einem der Beacon versendet wurde. Trifft dies zu, so werden die Daten des Advertising-Pakets in einer Textdatei, mit dem Test Namen als Dateinamen, auf dem Smartphone abgelegt. Die Daten liegen dort \ac{csv}-Format vor, dabei sind die einzelnen Spalten mit Hilfe eines Kommas voneinander getrennt. In Tabelle \ref{tab:datastore} werden die Spalten aufgelistet und ihr Inhalt kurz erläutert.
| Spalte | Beschreibung |
| --------- | ----------------------- |
| Time | Empfangszeitpunkt als Unix Zeitstempel |
| Test | Benutzerdefinierter Name des durchgeführten Tests |
| Device | \ac{mac}-Adresse des Beacon |
| RSSI | Vom Smartphone ermittelter \ac{rssi}-Wert |
| 5b5b_dist | Benzuterdefinierte, gemessene Distanz des Beacon 5b5b |
| 5b5b_rssi | Ermittelte $scPower$ des Beacon 5b5b |
| 690f_dist | Benzuterdefinierte, gemessene Distanz des Beacon 690f |
| 690f_rssi | Ermittelte $scPower$ des Beacon 690f |
| 9d31_dist | Benzuterdefinierte, gemessene Distanz des Beacon 9d31 |
| 9d31_rssi | Ermittelte $scPower$ des Beacon 9d31 |
: Spaltenübersicht der gespeicherten \ac{csv}-Datei bei aktiver Messung. \label{tab:datastore}