Физическое кодирование с использованием манчестерского кода конспект

Обновлено: 05.07.2024

В цифровых каналах примитивами, составляющими последовательность информации, являются 0 и 1, независимо от того, находится ли он в ЦП, DSP, MCU или даже в цифровом счетчике, информация, которую может обработать цифровая схема, составляет только 0 и 1, а для любой внешней информации , Компьютер можно описать двумя величинами, то есть 0 и 1. Для цифровой связи, если вы хотите использовать 0 и 1 для передачи информации, которую вы хотите передать, вы должны синхронизировать с помощью специального соглашения, которое заключается в кодировании. Если два устройства хотят осуществлять проводную связь, они в конечном итоге преобразуют информацию, которую они хотят передать, в последовательность битовых потоков, а затем передают их по линии передачи. Обычная цифровая связь имеет форму линии данных + линия синхронизации, однако для высокоскоростных сигналов небольшое отклонение длины линии синхронизации и линии данных приведет к тому, что приемник не сможет соответствовать времени установления выборки данных, что приведет к ошибкам данных. Наилучшим способом является передача тактового сигнала и сигнала данных на одной и той же линии, поэтому появляются некоторые специальные коды, и часы и данные можно объединить. Далее в основном обсуждаются 5 наиболее часто используемых методов кодирования:

Код RZ также становится кодом возврата к нулю. Характеристика кода возврата к нулю заключается в передаче битов данных в двоичном виде в течение цикла. После окончания импульса битов данных его необходимо поддерживать на низком уровне в течение некоторого периода времени. Дайте легенду:

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

Хотя этот метод кодирования может передавать тактовые сигналы и сигналы данных одновременно, поскольку для обнуления требуется часть полосы пропускания, эффективность передачи также ограничена. Предполагая, что время передачи данных составляет t, время цикла равно T, тогда эта эффективность передачи η = t / T.

NRZ

Кодирование NRZ также стало кодированием без возврата к нулю, что также является нашим наиболее распространенным кодированием, то есть положительный уровень указывает 1, а низкий уровень указывает 0. Разница между ним и кодом RZ заключается в том, что ему не нужно возвращаться к нулю, то есть один цикл можно использовать для передачи данных, чтобы можно было полностью использовать полосу пропускания передачи. Обычно в общих протоколах передачи с тактовыми линиями используется кодирование NRZ или дифференциальное кодирование NRZ. Следовательно, если вы хотите передавать высокоскоростные синхронные данные с использованием кодирования NRZ, вам, в основном, необходимо иметь тактовую линию, потому что само кодирование NRZ не может передавать тактовый сигнал. Однако при низкоскоростной асинхронной передаче может отсутствовать линия синхронизации, но перед обменом данными оба устройства должны согласовать скорость передачи данных, такую ​​как UART.
___

Полное название кодирования NRZI - обратное кодирование без возврата к нулю.Этот метод кодирования объединяет преимущества первых двух кодировок, то есть он может не только передавать тактовые сигналы, но и пытаться не терять пропускную способность системы. Метод кодирования для связи USB2.0 - кодирование NRZI. Фактически, способ кодирования NRZI очень прост, то есть изменение уровня сигнала указывает на 0, а уровень сигнала без изменений указывает на 1. Например, если вы хотите представить 00100010 (B), форма сигнала будет такой, как показано на рисунке ниже:

Как видно из рисунка, при изменении состояния уровня представленные данные равны 0. В передаваемых данных редко встречается состояние всех единиц, поэтому принимающая сторона может определить тактовую частоту дискретизации в соответствии с изменением уровня передающей стороны. Однако иногда данные все еще находятся в состоянии всех 1, то есть сигнальная линия находится в состоянии. В это время тактовый сигнал не может быть передан, и приемник не может синхронизировать тактовый сигнал. Как решить эту проблему? Решение состоит в том, чтобы принудительно вставить 0 после определенного числа 1, то есть, если состояние сигнальной линии продолжалось в течение некоторого периода времени, отправитель принудительно изменяет состояние сигнальной линии, и получателю нужно только игнорировать это изменение. , В протоколе USB2.0 предусмотрено, что передаются 7 единиц, а в данные вставляется 0. Например, есть часть данных: 1111 1111 (B) для отправки, тогда состояние уровня всей линии передачи выглядит следующим образом:
___


Манчестерское кодирование очень похоже на кодирование NRZI, за исключением того, что оно использует направление перехода сигнала для определения данных. В середине бита сигнал переходит от высокого к низкому значению для указания данных 0, а сигнал переходит от низкого к высокому значению для указания данных 1. Например, если вы хотите представить данные 1001 1010 (B), диаграмма формы сигнала будет такой, как показано ниже:

Метод манчестерского кодирования также является таким, как упомянуто выше. Хотя тактовый сигнал передается, он также теряет часть полосы пропускания, что в основном отражается в тех же смежных данных. Однако для высокоскоростных данных этот метод кодирования, несомненно, является лучшим среди этих методов кодирования.По сравнению с кодированием NRZI, манчестерское кодирование не имеет долговременного состояния сигнала, вызванного потерей тактового сигнала, поэтому в этом виде Метод кодирования очень часто используется в связи Ethernet.
Суммирует вышеупомянутые несколько методов кодирования, на самом деле, окончательное проявление является проблемой, то есть, как для передачи тактового сигнала, для любой цифровой связи, тактовый сигнал должен рассматриваться первым Проблема заключается в том, что синхронная связь использует тактовый сигнал, отправленный отправляющей стороной, в качестве эталонного источника выборки при выборке данных на приемной стороне. Только когда передаются высококачественный сигнал данных и тактовый сигнал, конечная выборка может быть гарантирована. Выборка в метастабильной области приводит к ошибкам данных.

Манчестерский Код - это самосинхронизирующийся двоичный код без постоянной составляющей, в котором значение каждого передаваемого бита определяется направлением смены логического уровня в середине обусловленного заранее временного интервала. Поскольку логических уровней у самой маленькой единицы информации (бит) на данный момент известно всего два (1 и 0), вариантов тут немного: либо смена 1 => 0 либо 0 => 1. Согласно общепринятым стандартам для Манчестерского кода переход от нуля к единице считается 1, а если наоборот, то 0. На самом деле последнее утверждение - это просто формальность - вопрос в том, с какой стороны посмотреть ;-) Главное, чтобы и приёмник и передатчик смотрели на жизнь одинаково.

Код Манчестер

Введите число и нажмите "Encode Manchester!":

Теперь давайте внимательно посмотрим на картинку и попробуем проанализировать и перечислить основные преимущества и недостатки преобразования данных в Манчестерский Код:

Pазмер данных увеличивается вдвое - это негативно сказывается на скорости передачи

Kоличество логических нулей всегда равно количеству логических единиц, соответственно у такого сигнала не будет постоянной составляющей - это крайне важно для электрических цепей и радиоволн

Комбинация логических уровней 11 однозначно говорит о последнем принятом 0, а комбинация 00, соответственно, говорит о 1. Таким образом после одной из них приёмник синхронизируется

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

В начале данных и в конце не может быть двух одинаковых логических уровней - только 10 или 01

Сначала пишем тест

О пользе тестов можно почитать тут. В контексте решения текущей задачи будет использоваться техника Mock-объектов, поэтому для тестирования используется связка gtest (Google Test) + gmock (Google Mocking Framework). Всё это добро поставляются в исходниках, поэтому единственное требование к системе - совместимый C / C++ компилятор, например gcc g++ для Linux или Visual Studio C++ для Windows. Так выглядит простое консольное приложение, которое будет собираться вместе с тестами и запускать их:

Теперь сами тесты. Более простой задачей является преобразование данных в Манчестерский Код (encode), поэтому с неё, пожалуй, и начнём:

Все тесты помещены в макрос TEST_F() . В начале теста с помощью EXPECT_CALL() необходимо установить ожидаемое поведение. В процессе преобразования 0 => 1010101010101010 и при условии, что старший бит идёт первым (MSB), ожидается последовательный вызов методов On_Man_Encode_One() и On_Man_Encode_Zero() и так восемь раз. После того, как ожидаемое поведение описано, необходимо вызвать проверяемый метод Man_Encode() . Если реальное поведение отличается от ожидаемого, в процессе выполнения тестов будет сообщено об ошибке. В конце каждого теста также выполняется проверка условия, что количество нулей равно количеству единиц.

Преобразовать данные в Манчестерский Код очень легко:

Реализация обратной задачи - декодирования данных из Манчестерского Кода в оригинальный несколько сложнее. Перед началом передачи данных необходимо синхронизироваться с приёмником сиигнала. В реализации тестов нас особо не интересует как именно приёмник синхронизируется и в какой последовательности будут вызваны(если вообще будут) On_Man_Decode_Add_1() и On_Man_Decode_Add_0() - для этой цели обозначим предварительные ожидания как testing::AtMost(1) . После синхронизации процесс декодирования можно точно спрогнозировать и описать соответствующие ожидания с помощью EXPECT_CALL() . Также как и в предыдущем случае в конце каждого теста проверяется отсутствие постоянной составляющей (количество нулей и единиц должно совпадать).

Предположительная реализация процесса декодирования Манчестерского кода:

Сборка и запуск тестов

Если Вы работаете в связке Windows + Visual Studio, необходимо выполнить следующее:

Windows Скриншот

При использовании Linux + gcc g++:

Linux Скриншот

Тестов много не бывает. Например, было бы неплохо добавить проверку для последовательности из двух байт и более, или проверку условия отсутствия невозможных для Манчестерского Кода комбинаций - например 111 или 000. Чем больше терпения и выдержки на этом этапе разработки - тем крепче будет сон после её сдачи в эксплуатацию.

Практика

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

Манче́стерское коди́рование [1] , код Манчестер-II [2] , абсолютный биимпульсный код [3] (иногда применяются синонимы: линейное кодирование [3] [4] , физическое кодирование, манипуляция сигнала, модуляция, импульсно-кодовая модуляция [3] ) — один из способов кодирования двоичным цифровым сигналом исходных двоичных данных для передачи по одному двухуровневому каналу связи или записи на носитель информации.

Сигнал закодированный манчестерским кодом является самосинхронизирующимся, то есть для передачи данных не требуется дополнительная линия передачи тактовых импульсов, за счет того, что за время передачи одного бита данных, независимо от того, это 1 или 0 обеспечивается один переход с одного уровня на другой, что позволяет приемнику синхронизировать свой внутренний тактовый генератор или таймер с тактовым генератором (таймером) передатчика.

Сигнал, закодированный в соответствии с манчестерским кодом, не имеет постоянной составляющей даже в случае передачи длинных последовательностей из нулей и единиц, поэтому передающие сигнал электрические соединения, могут быть гальванически развязаны, например, с помощью трансформатора [5] .

Название кодирования происходит из университета Манчестера, где такое кодирование было впервые использовано для хранения данных на магнитном барабане компьютера Манчестерский Марк I.

Манчестерский код: что это такое и зачем его использовать

При передаче данных внедряются различные методы кодирования для обеспечения безопасности данных и быстрой передачи. Манчестерское кодирование является одним из таких цифровых способов кодирования. Оно сильно отличается от других методов, поскольку по умолчанию каждая длина бит данных фиксируется. Состояние бит определяется в соответствии с направлением перехода. Различные системы представляют бит-статус по-разному, но большинство систем представляют 1 бит против перехода от низкого к высокому и 0 бит для перехода с высоким и низким.

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

манчестерский код

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

Все виды кодирования по Манчестеру имеют следующие характеристики:

  • Каждый бит передается в фиксированное время.
  • "1" отмечается, когда происходит переход от высокого к низкому; "0" выражается, когда выполняется переход от низкого до высокого.
  • Переход, который используется для примечания 1 или 0, точно встречается в середине периода.

Кодирование в общем понимании — это процесс преобразования данных в формат, необходимый для удовлетворения потребностей в обработке информации, в том числе:

  • Компиляция и исполнение программы.
  • Передача данных, хранение и сжатие (декомпрессия).
  • Обработка данных приложений, таких как преобразование файлов.

Все виды кодов могут иметь два значения:

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

Немного истории

Манчестерский код (впервые опубликован в 1949 году) представляет собой синхронную технологию кодирования часов, используемую физическим уровнем для кодирования тактового сигнала и данных синхронного потока бит. В этом методе фактические двоичные данные, которые должны передаваться по кабелю, не отправляются как последовательность логических единиц и нолей (известные технически как Non Return to Zero или NRZ). Вместо этого биты преобразуются в несколько иной формат, который имеет ряд преимуществ перед использованием прямого двоичного кодирования.

единица и ноль

Манчестерский код содержит частые переходы уровня, которые позволяют приемнику извлекать синхронизирующий сигнал с помощью цифровой фазовой блокированной петли (DPLL) и правильно декодировать значение и синхронизацию каждого бита. Чтобы обеспечить надежную работу с использованием DPLL, передаваемый бит-поток должен содержать высокую плотность бит-переходов. Все виды кодов гарантируют это, позволяя принимающему DPLL правильно извлекать тактовый сигнал.

Техническое описание

Двухфазный манчестерский код может потреблять примерно вдвое большую ширину полосы исходного сигнала (20 МГц). Это штраф за введение частых переходов. Для локальной сети 10 Мбит/с спектр сигналов лежит между 5 и 20 МГц. Манчестерское кодирование используется в качестве физического уровня локальной сети Ethernet, где дополнительная пропускная способность не является существенной проблемой для передачи коаксиального кабеля. Ограниченная пропускная способность кабеля CAT5e потребовала более эффективного метода кодирования для передачи 100 Мбит/с с использованием кода MLT 4b/5b. Это использует три уровня сигнала (вместо двух уровней, используемых в манчестерском кодировании), и следовательно, сигнал 100 Мбит/с занимает только полосу пропускания 31 МГц. Gigabit Ethernet использует пять уровней и кодирование 8b/10b, чтобы обеспечить еще более эффективное использование ограниченной пропускной способности кабеля, передавая 1 Гбит/с в полосе пропускания 100 МГц.

Определение понятия

При передаче данных манчестерский код представляет собой форму цифрового кодирования, в котором биты данных представлены переходами из одного логического состояния в другое. Это отличается от более распространенного метода, в котором бит представлен либо высоким состоянием, например, +5 вольт, либо низким состоянием, например 0 вольт.

виды кодирования

Когда используется код Манчестера II, длина каждого бита данных устанавливается по умолчанию. Это делает сигнал самосинхронизирующимся. Состояние бит определяется в соответствии с направлением перехода. В некоторых системах переход от низкого к высокому представляет логику 1, а переход от высокой к низкой представляет логику 0. В других системах переход от низкого к высокому представляет логику ноля и единицы (как переход от высокой к низкой).

Хорошо, но не идеально. Плюсы и минусы технологии

Главным преимуществом манчестерского кодирования является тот факт, что сигнал синхронизируется. Это минимизирует частоту ошибок и оптимизирует надежность. Основным недостатком является тот факт, что сигнал, закодированный в Манчестере, требует передачи большего количества бит, чем в исходном сигнале.

Несмотря на непреодолимые преимущества стандартной цифровой связи по сравнению с аналоговой сигнализацией, существуют некоторые общие ограничения технологии.

Одно из них — проблема синхронизации: приемник должен знать, когда именно передается информация для отбора входящих данных. Обратите внимание, что эта синхронизация не нужна для аналоговой аудиопередачи. Демодулированный аудиосигнал может быть доставлен в динамик без явной интерпретации данных на стороне приемника.

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

Решение проблем ограничений

Манчестерское кодирование предлагает средство для устранения этих двух ограничений. Это простая цифровая схема модуляции, которая выполняет две функции:

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

способы кодирования

Способы кодирования

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

В других ситуациях отдельный тактовый сигнал просто не является вариантом. Например, было бы крайне неэффективно включать два отдельных радиочастотных передатчика и приемника (то есть один для данных и один для часов) в сложной беспроводной линии передачи данных.

Ограничения интерфейсов

В случае с интерфейсом UART вместо внешних часов, передаваемых передатчиком и приемником, можно использовать внутренние синхронизирующие сигналы. Но эта стратегия приносит существенные ограничения:

  • Не устойчива к частотным изменениям, которые становятся более проблематичными, когда передатчик и приемник находятся в разных условиях.
  • Не обладает гибкостью, поскольку требует, чтобы устройства Tx и Rx были явно предварительно сконфигурированы для одной и той же скорости передачи данных.
  • Обычно приемнику требуется внутренняя тактовая частота, которая значительно выше, чем скорость передачи данных, и это может привести к жестким ограничениям на максимальную скорость передачи данных.

виды кодов

Избегание постоянного тока

Сложные системы, особенно с высоким напряжением, не всегда способны обеспечить синфазное напряжение передаваемого сигнала совместимо с допустимым диапазоном общего режима приемника. Еще одна проблема - токи повреждения. Постоянное соединение не защищает от опасных долгосрочных токов, возникающих в результате короткого замыкания.

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

Технология линейного кодирования используется в стандартных сетях Ethernet, специфицированная — в стандарте IEEE 802.3. Линейное кодирование — это процесс, посредством которого цифровая информация в двоичном битовом потоке преобразуется в электрические сигналы для передачи.

Как это работает

код манчестер ii

Положительные стороны процесса

Манчестерское кодирование имеет то преимущество, что позволяет передавать данные без необходимости в дополнительном тактирующем сигнале. Это возможно, потому что переходы напряжения происходят в середине каждого интервала передачи бит, который устанавливает шаблон синхронизации. Таким образом, изменение среднего интервала позволяет приемным станциям поддерживать надлежащую синхронизацию друг с другом, чтобы обеспечить целостность передачи. Из-за дополнительного перехода на бит, который используется для целей синхронизации, кодировка Манчестера эффективна только на 50 %. Например, для получения скорости передачи данных 10 Мбит/с требуется полоса пропускания 20 МГц.

манчестерское кодирование

Другая версия, называемая дифференциальным манчестерским кодированием, представляет собой двоичный код нуля путем перехода напряжения в начале битового интервала и двоичный код единицы без перехода в начале битового интервала. В обоих случаях переход происходит в середине интервала для целей синхронизации. Дифференциальная манчестерская кодировка используется для сетей Token Ring IEEE 802.5.

Читайте также: