Декодирование двухфазной метки Манчестера в программном обеспечении (представляющее аудиопоток временного кода SMPTE) - PullRequest
1 голос
/ 16 ноября 2009

Раньше мне никогда не приходилось сталкиваться с кодированием или декодированием сигналов / потоков, по крайней мере, не выходя за рамки довольно простых протоколов, таких как HTTP, так что простите, если я делаю это сложнее, чем следовало бы.

Некоторые системы, которые мы используем на работе, используют для работы временный код SMPTE, систему двухфазных меток Манчестера, занимающую 1 кГц ширины полосы от 1 кГц до 2 кГц.

Поскольку это правильно в звуковом спектре и на линейном уровне, его можно подключить прямо к линейному входу звуковой карты, доступной с помощью аудио API по вашему выбору (я планирую использовать Core Audio на Mac).

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

Мой текущий план состоит в том, чтобы после обнаружения сигнала в течение короткого периода времени (1 секунда или 24-30 кадров) измерять максимальное и минимальное количество выборок между уровнями пересечения нуля (используя фильтр скользящей средней для предотвращения пики / выпадения, влияющие на декодирование) и максимальное и минимальное записанные напряжения для определения точки пересечения нуля (уровень постоянного тока).

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

Спасибо

1 Ответ

2 голосов
/ 16 ноября 2009

Ваша звуковая карта почти наверняка подключена к сети переменного тока. Поэтому вы не должны получать смещение по постоянному току.

интересное разбор входов звуковой карты здесь

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

Ваши пересечения нуля, вероятно, будут близки к нулю. Вы также можете размывать данные при 4 кГц (2 * 2 кОм) [он же фильтр нижних частот при 4 кГц], а затем определять края, чтобы получить пересечение нуля.

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

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

...