Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss15:datenuebertragung_mit_schall

Datenübertragung mit Schall

1. Entstehung des Projekts

1.1 Die Idee

Die Idee zu diesem Projekt entstand als ich einen Artikel über die Chrome-Erweiterung 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 BadBIOS.

1.2 Quellen, Literatur, Vorbilder

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

Programm-Übersicht

3.2 Komponenten

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 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
ss15/datenuebertragung_mit_schall.txt · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)