Задача
Дизайн мо dulator / дем odulator пара точно передавать данные как можно быстрее через моделируются обычная старая телефонная связь (POTS) .
меры
- Создайте несколько случайных (
/dev/random
или аналогичных) данных, для передачи которых потребуется 3-4 секунды. - Модулируйте данные с помощью вашего модулятора для создания аудиофайла.
- Передайте аудиофайл через симулятор POTS . Если у вас нет Python / Scipy, вы можете загрузить файл с формой или сделать запрос JSON API.
- Демодулируйте аудиофайл обратно в двоичные данные
- Подтвердите, что вход и выход равны ish * (ограничение 1 из каждых 1000 битов может быть повреждено)
- Оценка - это количество переданных битов, деленное на длину аудиофайла (бит / с)
правила
- Входной файл должен быть 3-4 секунды, 44,1 кГц, моно.
- Запустите симулятор с SNR 30 дБ (по умолчанию)
- Демодулятор должен восстанавливать передаваемые данные с частотой ошибок по битам не более 10 -3 (1 на тысячу битов).
- Цифровое сжатие не допускается (т.е. архивирование данных. Это выходит за рамки задачи).
- Не пытайтесь засунуть данные на частоты выше 4 кГц. (Мои фильтры не идеальны, но они достаточно похожи на POTS с относительно небольшим количеством нажатий.)
- Если вашему протоколу модема требуется короткая преамбула (не более 1 секунды) для синхронизации / калибровки приемника, он не штрафуется.
- Если возможно, пожалуйста, разместите аудиофайл в доступном месте, чтобы мы могли прослушать какофонию звуковых сигналов и сигналов.
пример
Вот пример записной книжки, которая демонстрирует модуляцию / демодуляцию с помощью простого «включения-выключения» (включая аудио образцы!).
Это будет оценка 100 (бит / сек). Обратите внимание, что он передает с намного худшим SNR 5 дБ.
code-challenge
audio
Ник Т
источник
источник
wget wikipedia.org/Special:Random | grep title | texttospeech audio.wav
speechtotext POTSaudio.wav | wget wikipedia/wiki/$text
Ответы:
MATLAB, 1960 бит / с
Вот моя обновленная попытка:
С моей первой попытки я немного поиграл. В начале есть небольшая преамбула (18-битные периоды, но может быть короче), которая содержит только косинусную волну. Я извлек это и воспроизвел его, чтобы создать правильно фазированные носители синуса и косинуса для демодуляции - поскольку это очень короткая преамбула, я не учел это в скорости передачи данных согласно вашим инструкциям.
Также с первой попытки я теперь использую созвездие QAM8 для получения 3 битов на символ вместо 2. Это эффективно удваивает скорость передачи. Так что с несущей ~ 2,4 кГц я сейчас достигаю 1960 бит / с.
Я также улучшил обнаружение символов, так что на усреднение не влияют медленные времена нарастания, вызванные фильтрацией - в основном только вторая половина каждого битового периода усредняется, чтобы устранить влияние времен нарастания.
До сих пор далеко от теоретической пропускной способности канала 40 кбит / с из теории Шеннона-Хартли (при условии SNR 30 дБ)
Только для тех, кто любит ужасные звуки, это новая запись:
И в случае, если кому-то интересно, это предыдущая запись 960bps
источник