Cel
Zaprojektować MO dulator / dem odulator parę precyzyjnie przekazywać dane tak szybko, jak to możliwe na symulowane Plain Old Telephone Service (POTS) .
Kroki
- Wygeneruj losowe (
/dev/random
lub tym podobne) dane, których przesłanie zajmie 3-4 sekundy - Zmoduluj dane za pomocą modulatora, aby utworzyć plik audio
- Prześlij plik audio przez symulator POTS . Jeśli nie masz języka Python / Scipy, możesz przesłać plik za pomocą formularza lub wykonać żądanie interfejsu API JSON.
- Demoduluj plik audio z powrotem do danych binarnych
- Sprawdź, czy dane wejściowe i wyjściowe są równe * (limit 1 na 1000 bitów może zostać uszkodzony)
- Wynik to liczba przesłanych bitów podzielona przez długość pliku audio (bitów / sekundę)
Zasady
- Plik wejściowy musi wynosić 3-4 sekundy, 44,1 kHz, mono.
- Uruchom symulator z SNR 30 dB (jest to ustawienie domyślne)
- Demodulator musi zrekonstruować przesyłane dane z bitowym współczynnikiem błędów nie większym niż 10-3 (1 na tysiąc bitów).
- Kompresja cyfrowa nie jest dozwolona (tzn. Kompresowanie danych. Jest to poza zakresem wyzwania).
- Bez próby wpychania danych na częstotliwości powyżej 4 kHz. (Moje filtry nie są idealne, ale są względnie podobne do POTS przy stosunkowo niewielkiej liczbie dotknięć).
- Jeśli twój protokół modemu wymaga krótkiej preambuły (nie dłuższej niż 1 sekunda) do synchronizacji / kalibracji odbiornika, nie jest karany.
- Jeśli to możliwe, umieść plik audio w dostępnym miejscu, abyśmy mogli posłuchać kakofonii dźwięków i dźwięków.
Przykład
Oto przykładowy notatnik, który demonstruje modulację / demodulację za pomocą prostego „kluczowania on-off” (dołączone próbki audio!).
Dałoby to 100 (bitów / sekundę). Zauważ, że transmituje ze znacznie gorszym SNR 5 dB.
code-challenge
audio
Nick T.
źródło
źródło
wget wikipedia.org/Special:Random | grep title | texttospeech audio.wav
speechtotext POTSaudio.wav | wget wikipedia/wiki/$text
Odpowiedzi:
MATLAB, 1960 bps
Oto moja zaktualizowana próba:
Od mojej pierwszej próby grałem trochę. Na początku jest teraz mała preambuła (18 bitów, ale może być krótsza), która zawiera tylko falę cosinus. Wyodrębniłem to i zreplikowałem, aby utworzyć poprawnie fazowane nośniki sinusoidalne i cosinusowe do demodulacji - ponieważ jest to bardzo krótka preambuła, nie policzyłem jej w przepływności zgodnie z twoimi instrukcjami.
Również od pierwszej próby używam teraz konstelacji QAM8, aby osiągnąć 3 bity na symbol zamiast 2. To skutecznie podwaja szybkość transferu. Tak więc z nośnikiem ~ 2,4 kHz osiągam teraz 1960bps.
Poprawiłem także wykrywanie symboli, aby na uśrednianie nie wpływały powolne czasy narastania spowodowane przez filtrowanie - w zasadzie tylko druga połowa każdego okresu bitowego jest uśredniana, aby usunąć wpływ czasów narastania.
Nadal nigdzie w pobliżu teoretycznej przepustowości kanału 40 kb / s według teorii Shannona-Hartleya (przy założeniu 30 dB SNR)
Dla tych, którzy lubią okropne dźwięki, oto nowy wpis:
A jeśli ktoś jest zainteresowany, jest to poprzedni wpis 960bps
źródło