====== Datenübertragung mit Schall ====== ===== 1. Entstehung des Projekts ===== ==== 1.1 Die Idee ===== Die Idee zu diesem Projekt entstand als ich einen [[http://www.golem.de/news/google-tone-chrome-piept-urls-1505-114178.html|Artikel]] über die Chrome-Erweiterung [[http://g.co/tone|Google Tone]] gelesen habe. Diese Erweiterung ermöglicht es Links mit anderen Computern in Hörweite zu teilen. So weit so unspektakulär, allerdings nutzt Google Tone zur Übertragung akustische Signale und das ist in der Datenübertragung eher ungewöhnlich. Ich war allerdings fasziniert von dieser ungewöhnlichen Art der Kommunikation von Computern untereinander, die sonst eher der menschlichen Verständigung durch Sprache ähnelt. Mein Interesse war also geweckt und ich fand auch schnell ebenso begeisterte Mitstreiter für mein Projekt. Besonders interessant ist auch wo akustische Datenübertragung sonst noch angewendet wird, z.B. unter Wasser und angeblich auch in dem Supertrojaner [[https://en.wikipedia.org/wiki/BadBIOS|BadBIOS]]. ==== 1.2 Quellen, Literatur, Vorbilder ==== * Google Tone - Google Chrome-Erweiterung zur Übertragung von URLs per Tonsignal an Computer in Hörweite * http://googleresearch.blogspot.de/2015/05/tone-experimental-chrome-extension-for.html * https://www.reddit.com/r/AskEngineers/comments/374876/lets_talk_about_google_tone/ * Datenübertragung unter Wasser (z.B. Tsunamiwarnsysteme) * http://www.biokon.de/bionik/best-practices/detail/?tx_nenews_uid=1621&cHash=f21cc162defdba14fa1b47c79c231bd2 * Studie des Frauenhofer-Instituts zur Möglichkeit eines akustischen Netzwerkes (Machbarkeit "BadBIOS") 2013 * http://www.heise.de/security/meldung/Supertrojaner-BadBIOS-Unwahrscheinlich-aber-moeglich-2043114.html * https://www.fkie.fraunhofer.de/de/presse/pressemitteilungen-2013/versteckte-audiouebertragung.html * http://arxiv.org/pdf/1406.1213v1.pdf * Chirp - eine App zur Datenübertragung per Schall zwischen Smartphones * http://chirp.io/technology/ ==== 1.3 Benötigte Soft- und Hardware ==== * mind. 2 Computer mit Mikrofonen und Lautsprechern * Python Distribution * Pyaudio * es empfiehlt sich alle Audio-Effekte bei der Wiedergabe als auch bei der Aufnahme zu deaktivieren um eine Verfälschung des Signals zu vermeiden ===== 2. Ziel des Projekts ===== ==== 2.1 Hauptziel ==== Entwicklung eines Programmes, dass es ermöglicht Daten (URLs etc.) per Schall von einem Computer zu einem anderen zu übertragen. ==== 2.2 Etappenziele ==== === Erledigt === * Installation von Pyaudio und erstes Verständnis der Funktionen (insbesondere schallwerkzeuge.py) * Testen der Machbarkeit anhand eines "Prototyps": abschnittsweise Fourier-Transformation * Entwicklung einer Methode mit Taktrückgewinnung: Herausfiltern der Takt-Frequenz, Hüllkurve durch Hilbert-Transformation * Fehlerkorrektur durch Hamming-Code === Noch zu machen === * Realisierung einer kontinuierlichen Aufnahme und Auswertung mithilfe einer queue-Klasse * Optimierung (bessere Reichweite, geringere Störanfälligkeit etc.), angenehmere Töne * Übersetzung von Dateien (Text, Bilder, ...) in Bit-Listen und zurück * evtl. Übertragung auf Smartphone-App ===== 3. Code ===== ==== 3.1 Überblick ==== {{ :ss15:overview1.jpeg?direct&500 |Programm-Übersicht}} ==== 3.2 Komponenten ==== * [[Schallwerkzeuge]] * [[Der Prototyp]] * [[Tonerzeugung]] * [[Tonverarbeitung]] * [[Hamming-Code]] ==== 3.3 Tips zum Testen des Codes ==== Wir fanden es sehr hilfreich für das eigene Verständnis und zum Debuggen unseren Code oft zu testen. Besonders anschaulich geht das grafisch mit [[http://matplotlib.org/api/pyplot_api.html|matplotlib.pyplot]]. Damit wir ein Signal nicht immer wieder neu aufzunehmen brauchen hat uns Stefan das Modul ''pickle'' gezeigt. Damit lassen sich Daten abspeichern und wieder einlesen. Hier ist ein Grundgerüst zum aufnehmen und wieder einlesen von Ton. Über ''AUFNEHMEN'' lässt sich steuern ob neu aufgenommen werden soll oder eine alte Aufnahme verwendet wird. from pickle import Pickler, Unpickler AUFNEHMEN=True if AUFNEHMEN: y = sw.recordsnd(None, 5) with open("beispielaufnahme.dump","wb") as f: p=Pickler(f) p.dump(y) else: with open("beispielaufnahme.dump","rb") as f: p=Unpickler(f) y=p.load() ===== Sonstiges ===== === Danksagung === Wir möchten uns herzlich bei Stefan für seine tolle Unterstützung bedanken! Wir hatten eine spannende und lehrreiche Zeit im MATHESIS-Labor. === Teilnehmer === * Moritz Schramm * Clara Hummel * Kevin Stegemann == Protokoll 28/05 == * Erzeugung von Sinustönen * Aufnahme von Tönen, Widergabe und graphische Darstellung (beides mit Stefans "schallwerkzeuge.py") * Kurzeinführung in Fourieranalyse - Darstellung der Frequenz eines Tons in Graphik == Protokoll 04/06 == * Möglichkeiten der Decodierung * Umsetzen der Decodierung mit feinerer Abtastung als Länge eines 1 Bit-Signals == Protokoll 11/06 == * Testen der Übertragung zwischen verschiedenen Laptops * Variante des Programms für Windows-Computer mit concatenate * Vorstellen der Projekte untereinander * Absprache über die weiteren Ziele == Protokoll 18/06 == * Erstellung von Planskizzen * Analyse der Problemstellen * Recherchearbeiten zu möglichen Hardwareproblemen * Umsetzung eines 4 Frequenzen-Systems (Frequenzwechsel als Markierung zum Erhalten der nützlichen Zeitpunkte) == Protokoll 25/06 == * Verwerfung des 4 Frequenzen-Systems * neues System: Takt-Frequenz einbinden (mitlaufender Ein-Aus-Takt zum Erhalt der nützlichen Zeitpunkte) * Einarbeitung in "clock_recovery" == Protokoll 02/06 == * Umsetzung des Takt-Systems