4

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

00101101 

будет производить звук «», как это:

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

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

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

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

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

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

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

+3

Вы описываете [Audio Shift Keying.] (Http://en.wikipedia.org)./wiki/Frequency-shift_keying # Audio_FSK) –

+1

http://stackoverflow.com/questions/3714321/open-source-fsk-decoder-library –

+0

ah great, почему бы не изобретать велосипед? :) спасибо за подсказки! –

ответ

2

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

+1

Спасибо, что указали это. На самом деле это подход, который я использовал. Я также выбрал 1200 и 2200 Гц, которые являются частотами, используемыми Packet Radio. –

+1

Добро пожаловать! Вы действительно передаете данные через звук, путешествующий по воздуху (от динамика до микрофона)? Я внедрил 8fsk, способный передавать 200 бит/с на расстоянии 1 м. Im использует один динамик от Creative T6300 (система 5.1) и несколько смартфонов. – VMMF

+0

Да, это было частью моей диссертации бакалавра. Я создал приложение iphone для передачи файлов через микрофон/динамик. Теперь я вспоминаю, что я увеличил скорость передачи еще больше до 2400 бод, поэтому мне нужно было переключиться на 2400/4400 Гц. Вот вам видео готового приложения, если вам интересно: https: // vimeo.com/48487024 –

1

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

+0

Это был указатель, который мне нужен, спасибо! –