2012-01-06 1 views
2

Проект, над которым я работаю, создает любопытную техническую проблему.Как передать двоичную информацию через одну форму волны

Цифровое устройство должно передавать данные на iPhone через разъем для подключения микрофона.

Мне нужно закодировать интерфейс как с микроконтроллера, так и с конца iPhone.

Есть ли установленный протокол для этой конкретной проблемы? У меня нет роскоши двойных часов и линии передачи данных (протокол ala PS/2 https://en.wikipedia.org/wiki/PS/2_connector).

Я знаю F2F (https://en.wikipedia.org/wiki/Biphase_mark_code), но это королевская PITA для декодирования.

Существует также проблема оптимизации полосы пропускания (с некоторым разумным балансом между эффективностью и алгоритмической сложностью). Образцы iPhone на частоте 44,1 кГц; теоретически каждый образец мог передавать по крайней мере один бит в зависимости от того, является ли он высоким или низким (т. е. какая сторона нуля - теоретически, конечно, каждый образец составляет 16 бит, но попытка действительно оптимизировать пропускную способность до теоретического максимума будет ... что это слово ... безумное?), реалистично мне, возможно, потребуется использовать 3 длины выборки для каждого бита, чтобы убедиться, что все получилось, а бит не падает между двумя последовательными образцами.

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

ответ

1

AFAIK, аналогичный подход используется в приложениях, которые декодируют сигналы с ИК-приемника с помощью микрофона. В любом случае, если на сайте микроконтроллера есть ЦАП, вы можете легко сформировать импульсы, которые могут быть декодированы таким программным обеспечением. Вы можете посмотреть WinLIRC: http://winlirc.sourceforge.net/audioreciever.html.

2

Из-за моего понимания и опыта работы с модемами, достигая эффективности (как в случае с приличной скоростью передачи данных с приемлемым BER) и имея низкую алгоритмическую сложность/стоимость, представляет собой не что иное, как сон трубы.

Вот несколько вещей, которые вы собираетесь столкнуться в той или иной форме при передаче данных:

  • Канал (например, номер) шума. Он искажает сигнал и способствует ошибкам декодирования. Здесь наиболее важна информация, закодированная с амплитудной модуляцией.
  • Несколько сигнальных путей. Приемник (микрофон) будет отображать отражения сигнала от объектов в помещении. Сигнал будет далее ухудшаться.
  • Изменение канала связи/сигнальных путей. Если устройства не неподвижны и/или другие вещи перемещаются в комнате, сигнал будет менять свои свойства с течением времени и будет еще более трудно декодировать (время от времени невозможно).
  • Осцилляторы, используемые в передатчике и приемнике, будут работать в несколько разных пределах. Более того, их частоты будут меняться со временем. Это требует дополнительной синхронизации при высоких скоростях передачи данных/длинных пакетах данных.
  • Искажения, особенно нелинейные, в аппаратном и программном обеспечении, особенно на стороне iPhone, серьезно затрудняющие любую высокоскоростную передачу данных по его аудиоканалу. iPhone не был предназначен для работы в качестве модема и не отвечал всем типичным требованиям для модема. Вы можете столкнуться с тем, что микрофон очень нелинейный, а его частотный диапазон довольно узкий, что время от времени звуковые фрагменты теряются или появляются из воздуха, что есть заметные пробелы в звуке между блоками отправленных или полученных выборок , и т. д.

Я лично рекомендую изучить что-то чрезвычайно простое и малоскоростное. Внедрите 2-FSK-модем, аналогичный описанному в рекомендациях МСЭ-Т V.21 и V.23. Используйте одну частоту для передачи 0 и другой для передачи 1.

Сначала попробуйте работать со скоростью не более 1200 бит/с в программном обеспечении, прежде чем интегрироваться в устройства. Получите его для полной работы с программным обеспечением с добавленным белым шумом, и когда частота дискретизации кодировщика и декодера несколько отличается (подсказка: здесь вам понадобится преобразователь частоты дискретизации, но некоторые аудиоредакторы могут перепрограммировать волновые файлы, и вы можете сделать это рукой).

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

Кстати, это может быть неплохо задать этот вопрос на dsp.stackexchange.com.

EDIT: См. my answer to a different question and code in it. Хотя это не впечатляюще быстро, здесь может работать простой модем емкостью 1200 бит/с в формате V.23. С некоторыми настройками это может быть сделано для поддержки более высоких скоростей передачи данных. Код передатчика FSK достаточно прост для подключения к микроконтроллеру.

3

Ваша теоретическая скорость передачи данных будет ограничена издержками синхронизации, различными типами искажений и отношением сигнал/шум. В противном случае было бы возможно приблизиться к 16 * 44100 бит/с.

Более реалистично вы можете захотеть найти радиостанцию ​​RTTY или PSK радиолокатора, так как известно, что эти протоколы работают по каналам ширины звука с шумом.