Die zunehmende Popularität von Routern mit W-Lan Funktion hat dazu geführt, dass besonders im Urbanen Umfeld innerhalb eines Gebäudes mehrere W-Lan Netzwerke aufgespürt werden können. Jedes dieser Netzwerke hat eine einzigartige ID (die MAC Adresse) anhand der es identifiziert werden kann. Die Signalstärke dieser Netzwerke schwankt — basierend auf einigen Umweltfaktoren wie z.B. die Entfernung zur Basisstation, die Anzahl und Beschaffenheit der Wände die zwischen dem Computer und der Basisstation liegen (besonders Feuchtigkeit spielt eine Rolle) etc.
Das führt dazu, dass die Anzahl und die Signalstärke der W-Lan Netzwerke in jedem Raum unterschiedliche Charakteristika aufweist anhand derer jeder Raum erkannt werden kann. So kann man ohne zusätzliches Equipment (eine W-Lan Karte vorausgesetzt) eine erstaunlich gute Raumbestimmung realisieren, die sich auf die Funkabdeckung per W-Lan stützt.
Diese Anwendung umzusetzen hatte ich Zeit nach meinem Abitur im Juni.
Die Unterscheidung der Räume erfolgt über ein feed forward Multilayer Perceptron mit der Architektur (AnzahlBekannterNetzwerke)-15-5-2. Das MLP hat für jedes bekannte Funknetzwerk ein Eingabeneuron, welches immer mit der aktuellen Signalstärke gefüttert wird. Sollte ein Netzwerk temporär nicht verfügbar sein (manche Netzwerke mit schwacher Signalstärke sind z.B. nur einzelnen Räumen zu empfangen), wird das entsprechende Eingabeneuron mit der geringstmöglichen Signalstärke versorgt. Wie vielleicht schon aufgefallen ist hat das MLP nur zwei Ausgangsneurone. Das hängt damit zusammen, dass ein MLP immer nur zwischen zwei Räumen unterscheiden kann. An dem Versucht einem MLP mehr als zwei Räume beizubringen bin ich leider gescheitert. Deshalb verwende ich mehrere MLP’s, die im KO-System entscheiden um welchen Raum es sich handelt.
25 Trainingsbeispiele pro kartografiertem Raum haben Sich als ideal erwiesen. Bei der doppelten Menge wurden die MLP’s nicht ordentlich Trainiert. Konkret bin ich mit meinem Laptop durch die zu kartografierenden Räume gegangen und habe sie einzeln „gescannt“. Dabei beeinflusst das „wie“ sehr stark die spätere Erkennungsrate der Räume. Die schlechtesten Ergebnisse habe ich erhalten als ich durch die Räume gelaufen bin um auch in wirklich jedem Winkel die Netzwerke zu erfassen. Anfangs dachte ich zwar, dass so die Räume besser voneinander abgegrenzt werden können aber letztlich wurden wahrscheinlich dadurch die Trainingseingaben für einen Raum so unterschiedlich, dass sie für das MLP schwer zu erlernen waren. Daraufhin habe ich das ganz gegenteilige Extrem ausprobiert (in der Hoffnung, dass einfachere Trainingsdaten besser gelernt werden) indem ich für den Scan für 25 Trainingsbeispiele das Laptop einfach in die Mitte des Raumes gehalten habe. Damit waren schon wesentlich bessere Erkennungsraten möglich; das System war aber noch lange nicht zufriedenstellend. Erst eine Mischung aus beiden Methoden hat gute Erkennungsraten ermöglicht. Dafür habe ich mich in einem Radius von ca. 2m um das Zentrum des jeweiligen Raumes bewegt. Dadurch waren die Trainingsdaten weder vollkommen Einseitig noch allzu komplex. Links abgebildet ist die Erkennungsqualität an Verschiedenen Orten in den kartografierten Räumen (ein Klick macht es größer). Ich habe an jedem Punkt 5 Messungen gemacht und jeweils die Anzahl der erfolgreichen Messungen eingetragen. Das ist zwar nur eine sehr grobe Messsicherheit, aber ich hatte nicht mehr Zeit und auch nicht mehr Lust (irgendwann wird so ein Laptop auch schwer). An den Türen und in der Nähe des Bücherregals sinkt die Genauigkeit leicht, bleibt aber stets über 50%iger Genauigkeit. Insgesamt bin ich mit der Genauigkeit von ca. 89,4% recht zufrieden.
Ein Sonderfall entsteht, wenn man das Laptop auf dem Boden und nicht (so wie auch bei den Scans vorher aufgezeichnet) in Brusthöhe versucht zu lokalisieren. Teilweise bleiben die Messwerte gleich; teilweise (wie z.B. oben links im Raum) sinkt aber die Erkennungsrate stark. Anscheinend spielt die Höhe eine recht große Rolle.
Zu überprüfen bleibt jetzt noch wie sich das System mit noch mehr als nur vier Räumen verhält.
Die Software habe ich in Java geschrieben, für die Neuronalen Netze habe ich die einfach zu bedienende und recht flotte Bibliothek „Snipe“ von David Kriesel benutzt. Um an die W-Lan Daten zu kommen habe ich (da ich ein Macbook benutze) den Befehl „airport -s“ mit dem ProcessBuilder verwendet weil Java diese Funktion leider nicht zur Verfügung stellt. Deshalb ist die Software auch noch nicht platformunabhängig. Da sie auch noch nicht ganz für den Endbenutzer fertig ist stelle ich sie hier nicht zum Download bereit. An Interessierte verschicke ich sie gerne samt Quellcode per Email. Vielleicht entsteht dann ja auch eine Version für Linux & Windows. Bei vielen Interessierten werde ich sie auf jeden fall bequemer zu bedienen machen.