Как мне интерпретировать закодированные аудио двоичные данные?

Я построил небольшую программу, которая кодирует двоичные данные в звук. Например, следующий двоичный вход:

00101101

будет звучать так:

################..S.SS.S################

где каждый символ представляет постоянную единицу времени. # обозначает синусоидальный сигнал 880 Гц, который используется для определения начала и конца передачи, . обозначает молчание, представляя нули, и S обозначает синусоидальную волну 440 Гц, представляющую их. Очевидно, что часть в середине намного дольше на практике.

Суть моего вопроса: как я могу инвертировать эту операцию?

Звуковой файл передается получателю посредством простого воспроизведения и записи звука. Это означает, что я не пытаюсь декодировать оригинальный звуковой файл, что было бы легко.

Очевидно, я должен проанализировать записанные данные по частоте. Но как? Я немного читал о преобразовании Фурье, но я совершенно заблудился здесь.

Я не уверен, с чего начать, но я знаю, что это не тривиально и, вероятно, требует определенных знаний об обработке сигналов. Может ли кто-нибудь указать мне правильное направление?

Кстати, я делаю это в Ruby (я знаю, это медленно - это просто подтверждение концепции), но сама проблема не зависит от языка программирования, поэтому любые ответы очень приветствуются.

2 ответа

Решение

Ваша проблема явно пытается демодулировать FSK-модулированный сигнал. Я бы порекомендовал реализовать банк корреляции, настроенный на каждую частоту, это намного быстрее, чем FFT, если скорость является одной из ваших проблем

Если вы знаете частоты и частоту модуляции, вы можете попробовать использовать 2 скользящих фильтра Гертцеля для демодуляции FSK.

Другие вопросы по тегам