Манчестерский код -- он по сути является фазовой манипуляцией (BPSK). Принимать, соответственно, точно так же, как и фазовую модуляцию: восстановить несущую (из модулированного сигнала), перемножить на собственно сигнал (отфильтрованный полосовым фильтром), отфильтровать фильтром НЧ (полоса пропускания порядка битовой скорости) -- вот тебе и результат. Это называется когерентный способ приёма. Есть разные варианты, типа перемножения на сигнал с задержкой (равной битовому интервалу). Это некогерентный способ и он даёт худшую чувствительность приёмника, но проще. И здесь встаёт вопрос о начальной синхронизации, чтоб понять где начинается битовый интервал, и какая фаза сигнала является логическим нулём (а обратная -- единицей). Для синхронизации перед информационным пакетом может посылаться немодулированный пилот-тон, или же в информационных пакетах могут быть специальные синхропоследовательности отмечающие начало блока. К сожалению манчестерский код не является относительной фазовой манипуляцией (DPBSK) -- в последней фазу нуля (и единицы) знать не нужно, просто факт (не)поворота фазы говорит о значении следующего бита, что упрощает синхронизацию. Но в случае манчестерского кода данные идут сразу, нет способа синхронизации -- и это сильно всё усложняет. Для когерентного приёма используется или т.н. "петля костаса" (см. google) со своим генератором, который входит в синхронизм с несущей, условно говоря, что не может произойти моментально, т.е. нам не подходит. Или входной сигнал может быть возведён в квадрат, далее выделена удвоенная несущая, опять же ФАПЧ (далее поделена на два -- для когерентного приёма), опять же у нас на это нет времени. Некогерентный способ подойдёт лучше (перемножаем сигнал на задержанную, на длину битового интервала, копию). Но ему нужны какие-то исходные данные в момент принятия первого информационного бита. Да и вообще как мы поймём, что этот бит первый, и где граница бита? Опять упираемся в синхронизацию, я не вижу прямого решения.
Подойдём с другого конца, что если у нас есть всё же некий способ выделения несущей (а она нам так же пригодится для выделения границ битовых интервалов, у нас один бит -- один период несущей). Который синхронизируется не за один бит конечно, но быстрей, чем за минимальный пакет передаваемых данных. Тогда мы могли бы накапливать данные в недемодулированном виде (с частотой дискретизации на ~порядок более высокой, чем несущая). И далее, когда мы получаем информацию о том, что фаза сигнала захвачена -- начинаем демодулировать (включая ранее накопленные данные). Это может сработать. Но требует относительно больших объёмов памяти и производительности CPU.
Да, большое проблемой будет, если на выходе не поддерживается стабильная частота, и скорость плавает от бита к биту (сигнал формируется программно).
Впорчем, я догадываюсь, автору это всё не нужно. Достаточно только отсеять низкочастотную компоненту, а далее картинка сама сложится в читаемую глазами. Вот если не сложится, тогда есть над чем думать. Запиши файл через звуковую карту и покажи здесь.
[ZX]
-
- Спасибо. Есть в пакете преамбула. Барбос(892 знак., 05.12.2015 16:44)