Zielsetzung
Entwerfen Sie ein mo dulator / DM odulator Paar genau zu übertragen Daten so schnell wie möglich über simulierte Plain Old Telephone Service (POTS) .
Schritte
- Zufälliges generieren (
/dev/random
oder ähnliche) Daten, deren Übertragung 3-4 Sekunden dauert - Modulieren Sie die Daten mit Ihrem Modulator, um eine Audiodatei zu erstellen
- Leiten Sie die Audiodatei durch den POTS-Simulator . Wenn Sie nicht über Python / Scipy verfügen, können Sie eine Datei mit dem Formular hochladen oder eine JSON-API-Anforderung ausführen.
- Demodulieren Sie die Audiodatei wieder in Binärdaten
- Vergewissern Sie sich, dass Eingabe und Ausgabe gleich sind. * (Maximal 1 von 1000 Bits kann beschädigt werden.)
- Score ist die Anzahl der übertragenen Bits geteilt durch die Länge der Audiodatei (Bits / Sekunde)
Regeln
- Die Eingabedatei muss 3-4 Sekunden lang, 44,1 kHz, mono sein.
- Starten Sie den Simulator mit einem SNR von 30 dB (Standardeinstellung)
- Der Demodulator muss die übertragenen Daten mit einer Bitfehlerrate von nicht mehr als 10 -3 (1 pro tausend Bits) rekonstruieren .
- Es ist keine digitale Komprimierung zulässig (dh das Komprimieren der Daten liegt außerhalb des Bereichs der Herausforderung).
- Kein Versuch, Daten in Frequenzen über 4 kHz zu verschieben. (Meine Filter sind nicht perfekt, aber mit einer relativ geringen Anzahl von Taps einigermaßen POTS-artig.)
- Wenn Ihr Modemprotokoll eine kurze Präambel (nicht länger als 1 Sekunde) zum Synchronisieren / Kalibrieren des Empfängers benötigt, wird dies nicht bestraft.
- Wenn möglich, hosten Sie die Audiodatei an einem zugänglichen Ort, damit wir eine Kakophonie von Signaltönen und Signaltönen hören können.
Beispiel
Hier ist ein Beispielnotizbuch , das die Modulation / Demodulation durch einfaches "On-Off-Keying" demonstriert (inklusive Hörproben!).
Es würde 100 (Bits / Sekunde) erzielen. Beachten Sie, dass es mit einem viel schlechteren 5-dB-SNR sendet.
code-challenge
audio
Nick T
quelle
quelle
wget wikipedia.org/Special:Random | grep title | texttospeech audio.wav
speechtotext POTSaudio.wav | wget wikipedia/wiki/$text
Antworten:
MATLAB, 1960 bps
Hier ist mein aktualisierter Versuch:
Seit meinem ersten Versuch habe ich ein bisschen rumgespielt. Es gibt jetzt eine kleine Präambel am Anfang (18-Bit-Perioden, die aber kürzer sein könnte), die nur eine Kosinuswelle enthält. Ich extrahiere dies und repliziere es, um korrekt phasengesteuerte Sinus- und Cosinus-Träger für die Demodulation zu erstellen. Da es sich um eine sehr kurze Präambel handelt, habe ich sie nicht gemäß Ihren Anweisungen in der Bitrate gezählt.
Auch seit dem ersten Versuch verwende ich jetzt eine QAM8-Konstellation, um 3 Bits pro Symbol anstelle von 2 zu erzielen. Dies verdoppelt effektiv die Übertragungsrate. Mit einem Träger mit ~ 2,4 kHz erreiche ich jetzt 1960 Bit / s.
Ich habe auch die Symbolerkennung verbessert, damit die Mittelwertbildung nicht durch langsame Anstiegszeiten beeinträchtigt wird, die durch die Filterung verursacht werden. Im Grunde wird nur die zweite Hälfte jeder Bitperiode gemittelt, um den Einfluss von Anstiegszeiten zu beseitigen.
Noch lange nicht annähernd die theoretische Kanalbandbreite von 40kbps von der Shannon-Hartley-Theorie (unter der Annahme des 30-dB-SNR)
Nur für diejenigen, die schreckliche Klänge mögen , ist dies der neue Eintrag:
Und falls jemand interessiert ist, ist dies der vorherige Eintrag mit 960 Bit / s
quelle