Binäre Phase Shift Keying in Python

Ich arbeite derzeit an einem Code, um Nachrichten / Dateien / und andere Daten über Laser mit Audio-Transformation zu übertragen. Mein aktueller Code verwendet die Hexlify-Funktion aus dem binascii-Modul in python, um die Daten in Binärdatei umzuwandeln und gibt dann einen Ton für einen 1 und einen anderen Ton für eine 0 aus. Dies in der Theorie funktioniert, wenn auch nicht der schnellste Weg zum Codieren / Decodieren , Aber bei der Prüfung gibt es einige Fehler.

  1. Die erzeugten Töne sind nicht vor Ort, dh: Das Ausgeben von 150Hz kann sich auf dem Empfangsende auf 145-155 Hz auswirken, das ist kein großes Problem, da ich die Grenzen auf dem empfangenden Ende niedriger oder höher einstellen kann.

  2. Das eigentliche Problem ist, dass, wenn ich einen Ton aussenden, und es gespielt wird, kann der Computer auf dem empfangenden Ende es mehrmals lesen oder gar nicht lesen, auf der Grundlage der Rate, die es das eingehende Audio abtastet. Ich habe versucht, die Töne mit der gleichen Geschwindigkeit zu spielen, die es probiert, aber das ist sehr einfach.

Immerhin habe ich ein paar erfolgreiche Läufe mit kurzen Nachrichten gehabt, aber das ist sehr unzuverlässig und ungenau wegen der oben genannten Probleme.

Ich habe in diese weiter hineingesehen und eine Lösung für diese sieht aus wie es könnte BPSK oder Binary Phase Shift Keying beinhalten, obwohl ich nicht sicher bin, wie dies zu implementieren. Irgendwelche Vorschläge oder Codeproben würden geschätzt!

Mein Code für das Projekt finden Sie hier, aber die Hauptdateien, an denen ich arbeite, sind für binäre Decodierung und Codierung, die hier und hier ist . Ich bin kein Experte in Python, also bitte verzeihen Sie mir, wenn etwas, was ich gesagt habe, falsch ist, ist mein Code nicht der Beste, oder wenn ich etwas Basic übersehen habe.

Vielen Dank! 🙂

2 Solutions collect form web for “Binäre Phase Shift Keying in Python”

Werfen Sie einen Blick auf GNU Radio!

http://gnuradio.org/redmine/projects/gnuradio/wiki

GNU Radio ist ein Projekt zu tun, in Software, so viel möglich von Funksignalübertragung oder Empfang. Da das Radio bereits eine Phase-Shift-Keying verwendet, haben die GNU-Radio-Jungs das Problem schon für Sie gelöst und GNU Radio ist bereits ein Python-Projekt! Und das komplizierte DSP-Zeug ist in C ++ für Geschwindigkeit geschrieben, aber für den Einsatz in Python gewickelt.

Hier ist eine Seite, die ein Projekt mit Differential Binary Phase Shift Keying (DBPSK) / Differential Quadratur Phase Shift Keying (DQPSK) zur Übertragung von binären Daten (im Beispiel ein JPEG-Bild) diskutiert. Python Quellcode steht zum Download zur Verfügung.

http://www.wu.ece.ufl.edu/projects/softwareRadio/

Ich sehe, dass Ihr Projekt unter der MIT-Lizenz steht. GNU Radio ist unter GPL3, was ein Problem für Sie sein kann. Sie müssen herausfinden, ob Sie GNU Radio verwenden können, ohne dass Sie Ihr Projekt zu einer abgeleiteten Arbeit machen müssen, so dass Sie Ihre Lizenz ändern können. Es sollte möglich sein, einen eigenständigen "Sende-Daemon" und einen eigenständigen "Empfangs-Daemon" zu machen, deren Quellcode GPL3 wäre und dann dein MIT-Code mit ihnen über einen Sockel oder etwas verbunden ist.

Übrigens fand eine meiner Recherchen diese sehr deutliche Erklärung dafür, wie BPSK arbeitet:

http://cnx.org/content/m10280/latest/

Viel Glück!

Als Antwort auf die erste Frage bezüglich der Häufigkeit:

Wenn du deinen Decoder ansiehst, sehe ich, dass deine Sample-Rate 44100 ist und deine Chunk-Größe 2048 ist. Wenn ich das richtig lese, bedeutet das, dass deine FFT-Größe 2048 ist. Das würde deine FFT-Bin-Größe auf ~ 21hz setzen. Hast du versucht, deine FFT auf Null zu stellen? Zero-padding die FFT wird nicht die Frequenz ändern, sondern wird Ihnen eine bessere Auflösung. Ich sehe, Sie verwenden eine quadratische Interpolation, um Ihre Häufigkeitsschätzung zu verbessern. Ich habe diese Technik nicht benutzt, also bin ich nicht vertraut mit der Verbesserung, die du bekommst. Vielleicht wird ein Gleichgewicht zwischen Null-Padding und eine quadratische Interpolation erhalten Sie eine bessere Frequenz Genauigkeit.

Auch abhängig von der Hardware, die das Senden und Empfangen durchführt, kann der Frequenzfehler ein Ergebnis verschiedener Taktgeber sein, die das A / D-One treiben oder beide Takte nicht genau 44100 Hz betragen. Etwas ähnliches könnte die Häufigkeit beeinflussen, die Sie auf Ihrer FFT-Ausgabe sehen.

  • Wie man stxetx Daten in python entpackt
  • Konvertieren Sie String in binär in python
  • Lesen von Binärdateien und Looping über jedes Byte
  • Regularer Ausdruck, der eine Binärdatei analysiert?
  • HTTP-POST-Binärdateien mit Python: prägnante Non-Pycurl-Beispiele?
  • Python, Pairwise 'Distanz', brauchen einen schnellen Weg, es zu tun
  • Wie lese ich Bits aus einer Datei?
  • Python PIL Bytes zum Bild
  • Eine effiziente Möglichkeit, Daten aus einer großen Binärdatei zu lesen?
  • Holen Sie sich den ROI von zwei Binärbildern und finden Sie den Unterschied der mittleren Bild-Intesitäten zwischen 2 ROI in Python
  • Warum dieser binäre Vergleich in Python falsch?
  • Python ist die beste Programmiersprache der Welt.