Русская Википедия:Манчестерское кодирование
Манче́стерское коди́рование[1], код Манчестер-II[2], абсолютный биимпульсный код[3] (иногда применяются синонимы: линейное кодирование[3][4], физическое кодирование, манипуляция сигнала, модуляция, импульсно-кодовая модуляция[3]) — один из способов кодирования двоичным цифровым сигналом исходных двоичных данных для передачи по одному двухуровневому каналу связи или записи на носитель информации.
Сигнал, закодированный манчестерским кодом, является самосинхронизирующимся, то есть для передачи данных не требуется дополнительная линия передачи тактовых импульсов за счет того, что за время передачи одного бита данных, независимо от того, 1 это или 0, обеспечивается один переход с одного уровня на другой, что позволяет приемнику синхронизировать свой внутренний тактовый генератор или таймер с тактовым генератором (таймером) передатчика.
Сигнал, закодированный в соответствии с манчестерским кодом, не имеет постоянной составляющей даже в случае передачи длинных последовательностей из нулей и единиц, поэтому передающие сигнал электрические соединения могут быть гальванически развязаны, например, с помощью трансформатора[5].
Название кодирования происходит из университета Манчестера, где такое кодирование было впервые использовано для хранения данных на магнитном барабане компьютера Манчестерский Марк I.
Описание
Соглашения о кодировании битов
- Каждый бит исходных данных передается за фиксированное время («период передачи бита»), информационным является переход от низкого уровня сигнала к высокому или наоборот в середине каждого периода. Длительность передачи одного бита называют периодом кодирования, или просто периодом <math>T_c,</math> величина, обратная периоду, — число периодов в 1 секунду - называют скоростью передачи в бодах <math>f_c</math> или битрейтом.
- Изменение уровня в начале периода является неинформационным и не передаёт данные.
Существуют разные соглашения для кодирования отдельных битов манчестерским кодом:
- Первое было впервые опубликовано Г. Е. Томасом в 1949 году и этого соглашения придерживаются многие авторы (например, Эндрю Таненбаум[1]). Для бита '0' уровень сигнала имеет перепад от низкого к высокому — с низким уровнем в первой половине интервала бита и высоким уровнем во второй половине. Для сигнала '1' бит перепад уровней будет от высокого к низкому[1].
- Другое соглашение, которого тоже придерживаются авторы (например, Уильям Сталлингс), а также по стандарт IEEE 802.4 (шина с маркерным доступом) стандарт IEEE 802.3 (Ethernet). В этом соглашении логический '0' представлен перепадом сигнала от высокого к низкому, а логическая '1' представлена последовательностью перепада сигнала от низкого к высокому. Вариант инверсный к варианту Томаса и преобразуется в вариант Томаса логической инверсией уровней в коде и обратное преобразование из стандарта IEEE в соглашение по Томасу[3][2].
- Если сигнал, кодированный манчестерским кодом, инвертируется в сообщении, он преобразуется из одного соглашения в другое. Эту неоднозначность можно преодолеть с помощью дифференциального манчестерского кодирования.
Уровень тактового импульса |
Бит данных |
Уровень манчестерского кода по IEEE 802.3[6] |
Уровень манчестерского кода по Томасу |
---|---|---|---|
Шаблон:Center | Шаблон:Center | Шаблон:Center | Шаблон:Center |
Шаблон:Center | Шаблон:Center | Шаблон:Center | |
Шаблон:Center | Шаблон:Center | Шаблон:Center | 0 |
Шаблон:Center | Шаблон:Center | 1
|
Принцип кодирования
Кодирование манчестерского кода относительно простое — производится логической операцией «ИСКЛЮЧАЮЩЕЕ ИЛИ» (сложение по модулю два, XOR) над текущим кодируемым битом и битом тактового генератора, в случае кодирования по IEEE 802.3 (примеры на псевдокоде):
Выход := Бит_данных XOR Тактовый_генератор;
или с инвертированием при кодировании по Томасу:
Выход := NOT(Бит_данных XOR Тактовый_генератор);
Возможна как аппаратная, так и программная реализация кодировщика.
При аппаратной реализации используется тактовый генератор со скважностью 2 и периодом повторения, равным периоду кодирования, регистр сдвига из которого на каждом периоде выталкивается кодируемый бит данных и логического элемента «ИСКЛЮЧАЮЩЕЕ ИЛИ».
При программной реализации создаётся виртуальный тактовый генератор с помощью программного таймера с длительностью выдержки, равной половине периода:
ЕСЛИ таймер_половина_периода сработал, ТО перезапустить таймер; Тактовый_генератор := Тактовый_генератор XOR 1; КОНЕЦ ЕСЛИ;
Возможна и предпочтительнее реализация тактового генератора по прерываниям аппаратного таймера.
Далее для формирования окончательного выходного кода производится операция «ИСКЛЮЧАЮЩЕЕ ИЛИ» с битом данных, например, выдвинутом из регистра, где находится текущее кодируемое слово.
Принцип декодирования
При декодировании возможны два варианта:
- на приёмном конце (декодировщику) известна длительность периода кодирования;
- и второй — декодировщику не известен период кодирования.
Далее все уровни и фронты описаны применительно к соглашению о кодировании по IEEE 802.3, при соглашении по Г. Е. Томасу все уровни и фронты заменяются на инверсные.
При известном периоде кодирования
В первом случае при декодировании вначале производится битовая синхронизация — определяется середина периода. Для этого декодировщик следит за фронтами и спадами сигнала, два соседних перепада разного направления, разделенные 1 периодом, являются признаком последовательно идущих 0 и 1 или 1 и 0 в потоке данных, причём, если первый из этих перепадов нарастающий (фронт), а второй — падающий (спад), то это означает, что в потоке данных это комбинация двух битов 1 и 0 или 0, 1 в случае спада-фронта, также, второй из этих перепадов указывает на середину периода кодирования. В битовый поток декодированных данных записывается комбинация из двух этих битов. Далее декодировщик выжидает время, примерно равное 3/4 периода, и начинает следить за возникновением перепада, при появлении перепада, если это спад, это означает, что очередной бит данных 0, и 1 — фронтеШаблон:Что?. Одновременно по этому же перепаду перезапускается таймер выдержки 3/4 периода и далее процесс повторяется.
Начало проверки прихода перепада через 3/4 периода выбрано из соображений помехоустойчивости, так например, в результате джиттера и/или расплывания (удлинения) перепадов, аддитивных помех в линиях передачи моменты возникновения перепадов колеблются относительно идеализированного случая, с другой стороны, при соседних одинаковых битах в потоке данных перепады происходят на границе между двумя периодами передачи одинаковых битов и проверка возникновения перепада должна производиться после моментов границ тактов.
Также, по приходе каждого информационного перепада имеется возможность измерить длительность периода вспомогательным таймером и подстроить, при необходимости, длительность выдержки таймера в 3/4 периода. Это позволяет отследить медленные изменения периода кодировщика, например, колебания скорости протяжки магнитной ленты при считывании с накопителей на магнитной ленте или разную скорость протяжки рукой человека карточки с магнитной полоской.
Для облегчения битовой синхронизации блоки данных в манчестерском коде, особенно при хранении их на магнитных носителях, обычно предваряются достаточно длинной синхропоследовательностью 1010101…
Определение начала информационного блока
Достижение битовой синхронизации недостаточно для приёма потока информационных битов, так как во многих случаях неизвестно начало информационного блока в потоке неразличимых битов, например, при считывании данных с магнитного дискового накопителя. Поэтому дополнительно применяют синхронизацию по слову синхронизации.
Кодировщик при кодировании в начале информационного блока вставляет двоичное слово синхронизации или сигнатуру синхронизации, которая должна быть известна декодировщику. Для начала синхронизации блока декодировщик постоянно сравнивает последовательность битов в сдвиговом регистре после каждого сдвига, длина этого регистра равна длине сигнатуры, в который на каждом периоде вдвигается очередной бит, с заданным словом синхронизации. Совпадение слова в регистре сдвига и сигнатуры или её инверсии является признаком начала информационного блока и далее декодировщик интерпретирует поток битов как информационные. Длина слова синхронизации в разных системах различна, но обычно не менее 2 байтов, в протоколе Ethernet, например, длина сигнатуры принята равной 56 битов.
В информационном потоке не должно встречаться слово синхронизации, или, по крайней мере, вероятность такого появления должна быть пренебрежимо малой. Чем длиннее сигнатура, тем меньше вероятность её существования в информационном потоке. С другой стороны, сигнатура не несёт полезной информации и длинная сигнатура снижает скорость передачи информации. Если сигнатура короткая, то информационный поток перед кодированием проверяется на случайное присутствие последовательности битов, совпадающей с сигнатурой, и при необходимости информационный блок перекодируется для исключения сигнатуры, либо после достижения синхронизации по началу блока данных декодировщик игнорирует попадающиеся сигнатуры в блоке данных до окончания приёма всего блока.
Также используется вариант синхронизации информационного блока с помощью заведомо невозможного в манчестерском коде длительностей низкого и высокого уровней (0 и 1). В «правильном» коде эта длительность не может быть более периода, если в начале блока вставить, например, два периода низкого уровня и два периода высокого уровня, то такое событие не вводит постоянную составляющую в сигнал и указывает на начало информационного блока. По ГОСТ 52070-2003 синхронизация блока производится в течение 3 периодов — первые 1,5 периода на линии удерживается высокий уровень и остальные 1,5 периода — низкий. Возможны и другие варианты синхронизации, например, сигналом по линии сброса и др.
В многих случаях заранее неизвестно, сколько раз полученный кодированный сигнал подвергался логической инверсии при передаче, например, в сетях Ethernet кодированный сигнал может проходить через многочисленные узлы с оборудованием различных изготовителей, которое может в любой момент заменяться, или в случае чтения одной и той же магнитной ленты с данными на разных моделях накопителей на магнитной ленте. Поэтому при синхронизации начала блока данных по сигнатуре почти всегда проверяется совпадение потока данных с сигнатурой и её побитовой инверсией. Если найдена инверсная сигнатура, то все последующие принятые биты данных инвертируются, и оставляются без изменений в случае нахождения неинвертированной сигнатуры. Отсюда следует, что при такой синхронизации непринципиально по какому соглашению исходно была произведена кодировка — по Томасу или по IEEE 802.3.
Декодирование при заранее неизвестном периоде
При априори неизвестном периоде кодирования декодировщик первоначально измеряет этот период измерением времени между соседними перепадами. Так как моменты перепадов реальных сигналов колеблются во времени из-за джиттера, помех, нерегулярных программных задержек в программном кодировщике и т. д. недостаточно измерить только несколько пар соседних перепадов. Поэтому при измерении периода и половины периода по потоку данных обычно накапливают некоторую статистику.
В правильном коде с не слишком большим джиттером гистограмма измерений будет состоять из двух групп выборок (рисунок 4), причём чем меньше джиттер, тем у́же будут группы на гистограмме. Первая группа отвечает длительности 1/2 периода, вторая — целому периоду. По результатам статистической обработки полученной гистограммы определяется период и его значению настраивается внутренний тактовый генератор декодировщика или его интервальный таймер.
Вычисление оценки периода по результатам измерений периодов <math> T_{cp}</math> и при необходимости половины периода <math> T_{cp 1/2}</math> производится по формуле среднего арифметического взвешенного.
- <math>T_{cp} = \frac{ \sum\limits_{i=1}^K (T_{min} + i \Delta T) \cdot n_i}{N},</math>
- где <math>K</math> — число интервалов по времени выборок интервалов гистограммы (карманов),
- <math>\Delta T</math> — ширина интервала,
- <math>N</math> — общее число выборок
- <math>n_i</math> — число выборок попавшее в <math>i</math>-й интервал.
<math>K</math> и <math>\Delta T</math> выбираются так, чтобы <math>T_{min} + K \Delta T = T_{max},</math> например, по рисунку <math>T_{min} = 30\ </math> мкс и <math>T_{max} = 50\ </math> мкс.
По аналогичному методу определяется усреднённое по статистической совокупности значение половины периода <math> T_{cp 1/2}.</math>
После определения периода дальнейшее декодирование не отличается от описанного выше декодирования с заранее известным периодом.
Реализации
Программная
В первых бытовых компьютерах, например, Sinclair ZX80, «Электроника БК-0010», ZX Spectrum в качестве внешнего накопителя использовались бытовые магнитофоны. В этих компьютерах кодирование и декодирование манчестерского кода при обмене с магнитофоном производилось программно.
В современных системах программное кодирование и декодирование применяется редко, и эти функции возлагаются на специализированные микросхемы или фунциональные блоки в составе других микросхем, например, в микроконтроллерах, микропроцессорах.
Аппаратная
Выпускается ряд специализированных микросхем для кодирования и декодирования манчестерского кода, например:
- 5862ИН1Н4 — кодер-декодер манчестерского кода[7]
- К588ВГ3, К588ВГ6 — КМОП кодер-декодер манчестерского кода, созданные ещё в конце 80-х годов[8]
- DS8102 — независимый двухканальный дельта-сигма модулятор, который преобразовывает измерения двух входных дифференциальных пар аналоговых сигналов в манчестерский код на выходе; MAXQ3108 — двухъядерный микроконтроллер, который включает декодер манчестерского кода[9]
- 3D7501, ACT-15530, HI-15530, HD-15530, HD-15531, СТ-10894 — монолитные кодеры-декодеры манчестерского кода и другие[8].
Спектр манчестерского кода
Так как на каждый бит данных происходит по две смены уровня сигнала, это приводит к тому, что спектр манчестерского кода занимает вдвое бо́льшую полосу частот по сравнению, например, с кодом NZR (Non-zero return, переход без возврата к нулю).
Сравнение спектров манчестерского кода и NZR приведено на рисунке. Так как манчестерский код не имеет постоянной составляющей (в случае его кодирования разнополярными равными по модулю уровнями), спектральная плотность мощности манчестерского кода равна нулю на нулевой частоте, в отличие от кода NZR, всегда при любых уровнях имеющего постоянную составляющую, и его спектр имеет конечную спектральную мощность на нулевой частоте.
Максимум спектральной мощности манчестерского кодирования приходится на частоту, равную частоте битрейта.
Манчестерское кодирование как фазовая манипуляция
Манчестерское кодирование можно рассматривать как частный случай двоичной фазовой манипуляции (ФМ), в которой данные управляют фазой прямоугольной волны несущей, частота которых является битрейтом.
Преимущества и недостатки
Достоинства
- Самосинхронизация
Наличие двух гарантированных переходов при передаче 1 бита позволяет сигналу быть самосинхронизирующимся, что позволяет приемнику (декодеру) правильно настроиться на скорость передачи. Для передачи не требуется дополнительная линия для передачи синхросигнала. Также в поток битов данных не нужно вставлять стартовые и стоповые биты, как например, в протоколах RS-232 и RS-485, из-за чего плотность данных в общем потоке битов кода приближается к 100 % (например, для кода NRZ 1-8-0 она равна 80 %).
- Отсутствие постоянной составляющей
Независимо от конкретного потока битов сигнал манчестерского кодирования не содержит постоянной составляющей, если значения верхнего и нижнего уровней равны по модулю. Это облегчает построение гальванической развязки с помощью трансформатора[5] и чтение-запись на магнитные носители.
Недостатки
- Полоса частот
Для передачи манчестерского кода требуется вдвое большая полоса пропускания канала (ширина канала), по сравнению, например, NRZ-кодированием.
- Требования к джиттеру
Предъявляет повышенные требования к стабильности фронтов во времени — низкому джиттеру. Существуют другие способы кодирования, например, код 8B/10B имеет более узкую полосу частот, но более требователен к уменьшению джиттера.
Области применения манчестерского кодирования
Манчестерское кодирование применяется:
- В технологии Ethernet (IEEE 802.3). Так, например, код манчестер-2 применяется в стандартах сетевых протоколах Ethernet, Token Ring, MIL-STD-1553B (ГОСТ 52070-2003), MIL-STD-1760 и многих других[11].
- В технологии 10BASE-T.
- Протоколы управления различными устройствами по инфракрасному каналу.
- В RFID-метках.
- В NFC-устройствах.
Примечания
Литература
- Forster R. (2000). «Manchester encoding: Opposing definitions resolved». Engineering Science & Education Journal. 9 (6): 278. doi:10.1049/esej:20000609.
- Tanenbaum, Andrew, S. (2002). Computer Networks (4th Edition). Prentice Hall. pp. 274—275. ISBN 0-13-066102-3
- Stallings, William (2004). Data and Computer Communications (7th ed.). Prentice Hall. pp. 137—138. ISBN 0-13-100681-9.
- Гольдштейн Б. С. Протоколы сети доступа. — БХВ-Петербург. — 2005.
- Сухман С. М., Бернов А. В., Шевкопляс Б. В. Синхронизация в телекоммуникационных системах: Анализ инженерных решений. — М.: Эко-Тренз, — 2003, 272 с. ISBN 5-88405-046-1
Ссылки
- Манчестерский код для чайников.
- Применение триггеров, манчестерское кодирование.
- ГОСТ Р 52070-2003. Интерфейс магистральный последовательный системы электронных модулей. Общие требования.
- ГОСТ Р 50779.10-2000 (ИСО 3534-1-93) Статистические методы. Вероятность и основы статистики. Термины и определения.
- ↑ 1,0 1,1 1,2 1,3 1,4 1,5 1,6 Ошибка цитирования Неверный тег
<ref>
; для сносок:1
не указан текст - ↑ 2,0 2,1 2,2 Ошибка цитирования Неверный тег
<ref>
; для сносок:3
не указан текст - ↑ 3,0 3,1 3,2 3,3 3,4 Ошибка цитирования Неверный тег
<ref>
; для сносок:0
не указан текст - ↑ Ошибка цитирования Неверный тег
<ref>
; для сносокАбилов
не указан текст - ↑ 5,0 5,1 Ошибка цитирования Неверный тег
<ref>
; для сносок:2
не указан текст - ↑ Ошибка цитирования Неверный тег
<ref>
; для сносокМанчестерское кодирование
не указан текст - ↑ Ошибка цитирования Неверный тег
<ref>
; для сносок5862ИН1Н4
не указан текст - ↑ 8,0 8,1 Ошибка цитирования Неверный тег
<ref>
; для сносокК588ВГ3
не указан текст - ↑ Ошибка цитирования Неверный тег
<ref>
; для сносокMAXQ3108
не указан текст - ↑ Шаблон:Cite web
- ↑ Ошибка цитирования Неверный тег
<ref>
; для сносокпротоколы
не указан текст
- Русская Википедия
- Страницы с неработающими файловыми ссылками
- Теория кодирования
- Передача данных
- Информационные технологии
- Цифровая обработка сигналов
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Википедия
- Статья из Википедии
- Статья из Русской Википедии
- Страницы с ошибками в примечаниях