Как передать двоичный сигнал через одну форму волны - PullRequest
2 голосов
/ 06 января 2012

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

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

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

Есть ли установленный протокол для этой конкретной проблемы? У меня нет такой роскоши, как двойные часы и линия передачи данных (протокол 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 длины выборки для каждого бита, просто чтобы убедиться, что все получено и бит не попадает между 2 последовательными выборками.

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

Ответы [ 3 ]

3 голосов
/ 07 января 2012

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

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

2 голосов
/ 07 января 2012

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

Вот несколько моментов, с которыми вы так или иначе столкнетесь при передаче данных:

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

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

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

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

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

РЕДАКТИРОВАТЬ : См. мой ответ на другой вопрос и код в нем .Хотя и не впечатляюще быстро, здесь может работать простой V.23-подобный модем 1200 бит / сек.С некоторыми изменениями это может быть сделано для поддержки более высоких скоростей передачи данных.Код передатчика FSK достаточно прост для переноса на микроконтроллер.

1 голос
/ 06 января 2012

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

...