Как мне интерпретировать закодированные аудио двоичные данные?
Я построил небольшую программу, которая кодирует двоичные данные в звук. Например, следующий двоичный вход:
00101101
будет звучать так:
################..S.SS.S################
где каждый символ представляет постоянную единицу времени. #
обозначает синусоидальный сигнал 880 Гц, который используется для определения начала и конца передачи, .
обозначает молчание, представляя нули, и S
обозначает синусоидальную волну 440 Гц, представляющую их. Очевидно, что часть в середине намного дольше на практике.
Суть моего вопроса: как я могу инвертировать эту операцию?
Звуковой файл передается получателю посредством простого воспроизведения и записи звука. Это означает, что я не пытаюсь декодировать оригинальный звуковой файл, что было бы легко.
Очевидно, я должен проанализировать записанные данные по частоте. Но как? Я немного читал о преобразовании Фурье, но я совершенно заблудился здесь.
Я не уверен, с чего начать, но я знаю, что это не тривиально и, вероятно, требует определенных знаний об обработке сигналов. Может ли кто-нибудь указать мне правильное направление?
Кстати, я делаю это в Ruby (я знаю, это медленно - это просто подтверждение концепции), но сама проблема не зависит от языка программирования, поэтому любые ответы очень приветствуются.
2 ответа
Ваша проблема явно пытается демодулировать FSK-модулированный сигнал. Я бы порекомендовал реализовать банк корреляции, настроенный на каждую частоту, это намного быстрее, чем FFT, если скорость является одной из ваших проблем
Если вы знаете частоты и частоту модуляции, вы можете попробовать использовать 2 скользящих фильтра Гертцеля для демодуляции FSK.