манчестерский код для чайников
🏠 Интернет Всего 🚗
Введите число и нажмите «Encode Manchester!«:
Теперь давайте внимательно посмотрим на картинку и попробуем проанализировать и перечислить основные преимущества и недостатки преобразования данных в Манчестерский Код:
Комбинация логических уровней 11 однозначно говорит о последнем принятом 0, а комбинация 00, соответственно, говорит о 1. Таким образом после одной из них приёмник синхронизируется
Не может идти последовательно более двух одинаковых логических уровней, т.е. комбинация типа 111 или 000 невозможна
Сначала пишем тест
Теперь сами тесты. Более простой задачей является преобразование данных в Манчестерский Код (encode), поэтому с неё, пожалуй, и начнём:
Преобразовать данные в Манчестерский Код очень легко:
Предположительная реализация процесса декодирования Манчестерского кода:
Сборка и запуск тестов
Если Вы работаете в связке Windows + Visual Studio, необходимо выполнить следующее:
При использовании Linux + gcc g++:
Практика
Манчестерский код. Синхронизация, приём и декодирование
Итак, для начала поговорим о том, что представляет собой «манчестерское» кодирование.
В «манчестерском» коде единица кодируется переходом сигнала в середине битового интервала из состояния «OFF» в состояние «ON», а ноль — наоборот, переходом сигнала в середине
битового интервала из состояния «ON» в состояние «OFF».
Что такое состояния «ON» и «OFF»?
Состояния сигнала «ON» и «OFF» — это логические состояния. В общем случае «OFF» — это неактивное состояние, такое же, как при отсутствии какого-либо обмена вообще, а «ON» — это активное состояние, то есть такое, которое как-либо отличается от неактивного. Поэтому, несмотря на то, что на картинке справа состояние сигнала «ON» показано высоким уровнем сигнала, а состояние «OFF» показано низким уровнем, это не нужно понимать буквально (просто с высоким и низким уровнем картинка привычнее и нагляднее). На самом деле состояния «ON» и «OFF» могут быть закодированы совершенно по-разному. Например, ИК-пульты кодируют эти состояния наличием или отсутствием импульсов на определённой частоте, интегральные фотоприёмники (у которых чаще всего неактивным является высокий уровень сигнала на выходе) выдают код, в котором «ON» закодировано низким уровнем, а «OFF» — высоким и т.д.
Длительность нуля и единицы в манчестерском кодировании одинаковая, то есть длина сообщения не зависит от того, сколько в сообщении нулей или единиц, а зависит только от общего количества бит.
Ключевым свойством «манчестерского» кодирования является то, что при передаче каждого бита обязательно присутствуют оба состояния сигнала: «ON» и «OFF» (ещё раз смотрим на рисунок вверху). То есть, во время передачи каждого бита сигнал должен хотя бы раз изменить своё состояние. То есть «манчестерский» код может состоять только из интервалов одинарной, если соседние биты одинаковые, и двойной, если соседние биты отличаются, длительности (это продемонстрировано на рисунке слева).
Описанное свойство позволяет дополнительно синхронизировать приёмник с передатчиком при приёме каждого бита, определять — может ли вообще принимаемый код быть «манчестерским», диагностировать конец сообщения или «потерю» сигнала передатчика.
Скажем, если предположить, что частота передатчика не может скачком измениться более чем в 1,5 раза, то отсутствие изменения состояния сигнала в течении 3-х полубит можно смело трактовать как конец сообщения или «потерю» сигнала передатчика (если мы заранее знаем длину сообщения). Или, например, при исследовании какого-то неизвестного кода, если мы видим, что в коде присутствует более двух вариантов интервалов между состояниями «ON» и «OFF», то можно однозначно сделать заключение о том, что исследуемый код не «манчестерский».
Надеюсь, с тем, что такое «манчестерский» код, всё более или менее понятно, поэтому переходим к следующему вопросу — как этот код принимать и декодировать.
Ну, очевидно, что определить начало передачи данных можно по изменению состояния сигнала, воспринимаемого приёмником, с «OFF» на «ON». Однако тут есть один нюанс. Поскольку передача единицы тоже начинается с состояния «OFF», то при первом изменении сигнала из «OFF» в «ON» мы совершенно никак не сможем диагностировать что это — середина передачи единицы или начало передачи нуля. Единственное, что тут можно сделать — это заранее условиться, какой бит должен передаваться первым (то есть ввести специальный старт-бит, значение которого будет всегда строго определено).
Всё, теперь, если мы знаем с какого бита посылка начинается, знаем длительности интервалов состояний «ON» и «OFF», наш приёмник обладает точным, стабильным генератором и мы
точно знаем сколько хотим принять бит, то можно составить первый простейший алгоритм восстановления исходной, закодированной «манчестерским» кодом посылки:
Вариант второй. Мы знаем с какого бита посылка начинается, знаем длительности интервалов «ON» и «OFF», наш приёмник обладает стабильным генератором, но мы ничего не знаем о длине сообщения. В этом случае можно воспользоваться тем свойством манчестерского кода, что сигнал не может оставаться постоянным в течении 3-х и более полубит. То есть, момент, когда сигнал в течении 3-х полубит остаётся в состоянии «OFF» можно считать концом сообщения. Алгоритм восстановления исходного кода в этом случае может выглядеть так:
Вариант третий. Мы знаем с какого бита посылка начинается, но не знаем длительности интервалов, в течении которых сигнал находится в состоянии «ON» и «OFF». Что нам делать в
этом случае? Если вы по счастливой случайности знаете значение не только первого бита, но и второго, — значит вам точно известно, через какие интервалы (через целый бит или через половину)
произойдут первые 2 переключения и вы с лёгкостью можете необходимые интервалы засечь или, научно выражаясь, — синхронизировать приёмник с передатчиком.
(Ага, вот мы и раскусили зачем у RC-5 целых 2 стартовых бита. Кстати, в сетях ethernet, где тоже используется «манчестерское» кодирование, для начальной синхронизации используется целая 56-битная преамбула).
Далее можно легко воспользоваться первым или вторым из приведённых выше алгоритмов.
Ну и, предположим, ещё один вариант. Мы знаем первые два бита посылки, но наш генератор — полное говно, хотя и работает (или, говоря научными терминами, мы можем гарантировать, что за время, равное длительности полубита, частота генератора не может измениться в 1,5 раза и более). Тут-то как быть?
Да просто надо по каждому новому фронту заново вычислять значения длительности полубита и целого бита. То есть, другими словами, нужно синхронизировать приёмник с передатчиком не один раз в самом начале, а по каждому новому фронту (под фронтом будем понимать переключения между состояниями «ON»/»OFF»), благо при манчестерском кодировании у нас новый фронт присутствует в каждом передаваемом бите.
Короче говоря, рассматривать разные комбинации можно долго, запомните главное преимущество, за которое «манчестерский» код всем так полюбился: при передаче каждого бита существует изменение состояния «ON»/»OFF», которое даёт возможность синхронизировать передатчик и приёмник.
Кроме описанного выше, существует ещё, так называемое, «разностное» или «дифференциальное» «манчестерское» кодирование. В данном случае при передаче нуля битовый интервал начинается с изменения состояния сигнала на противоположное, а при передаче единицы — состояние сигнала в начале битового интервала не изменяется. В остальном всё так же, как и в обычном «манчестерском» кодировании — в середине битового интервала состояние сигнала обязательно меняется на противоположное (смотрим рисунок слева).
Самодельные ИК-пульты и приёмники сигналов дистанционного управления
Манчестерский код. Часть 2. Декодирование данных.
Закодировав данные манчестерским кодом следуем по наиболее логичному пути, который ведет нас к процессу декодирования ) Поставим задачу взять непосредственно те самые данные, которые были сгенерированы в предыдущей статье, подать их на декодер и сверить полученный результат с исходной последовательностью.
За основу возьмем проект из уже упомянутой статьи и добавим в него функции для декодирования манчестерского кода. Сигнал генерируется на PA3, возьмем другой пин, и на него подадим этот сигнал физически замкнув ножки. Пусть будет PA4, почему бы нет:
Выбранный вывод настраиваем на генерацию прерываний при изменении уровня сигнала, по обоим фронтам сигнала, потому что нам нужны будут и передний и задний фронты для работы:
Помимо этого в CubeMx ничего добавлять или менять не потребуется, таймер будем использовать тот же, насколько я помню — TIM2.
Декодирование манчестерского кода.
Для начала пройдемся по физической сути процесса декодирования. Я его разбил на несколько этапов, что нам добавит наглядности и прозрачности в рассмотрении протекающих явлений. Итак, список такой:
Синхронизация по фронтам.
Берем рассмотренный нами манчестерский код:
Нижний сигнал мы будем принимать на входе контроллера. И, в целом, все просто — если передний фронт (переход от низкого уровня к высокому, 0 => 1), то это должно декодироваться в бит «1». Если задний фронт (переход от высокого уровня к низкому, 1 => 0), то это закодированный бит «0».
Но из графика очевидно, что нам нужно брать не все фронты, а вполне определенные, они помечены зеленой меткой. Напротив, изменения сигнала с красными метками мы должны пропускать.
Не проблема — зная период кодирования можно отфильтровать «ненужные» перепады, поскольку время между значимыми пепепадами гарантированно соответствует этому периоду. Поскольку в реальном мире все неидеально, длительности могут плавать, поэтому зададим величину в 75% от периода кодирования. Если время между фронтами больше, то работаем, если время меньше, пропускаем фронт.
Осталось определить отправную точку. То есть для того, чтобы использовать эту логику с длительностями и периодами, необходимо знать хотя бы один значимый фронт (с зеленой меткой), чтобы относительно него уже вести отсчет. Для этой цели послужит следующий механизм…
Опять же из графика можно заметить, что два перепада разного(!) направления, разделенные периодом кодирования, гарантированно являются значимыми. И не важно, передний ли это фронт после заднего или задний после переднего. В этих случаях получаем:
В итоге процесс, названный мной синхронизацией по фронтам, заключается в комбинации этих двух механизмов. Сначала ищем соседние фронты, разделенные периодом, и с разным направлением перепада. Затем относительно этих «верных» фронтов берем следующие, также разделенные временем, равным (в реальном мире примерно равным) периоду кодирования.
Синхронизация по данным.
Переходим ко второму этапу — синхронизации по данным. Снова отсылка к статье про манчестерское кодирование, где мы специально добавили к передаваемым данным байты синхрополя. Они необходимы для того, что определить, где начинаются информационные байты.
Здесь реализация будет заключаться в следующем. Возьмем 16-битную переменную, в которую будем последовательно, бит за битом, сохранять декодированные значения. Выглядит это все так:
После каждого нового бита сохраняем его в переменную, сдвигая принятые ранее биты. В результате, в определенный момент времени значение в этой переменной будет равно значению синхрополя. Именно этот момент нам и требуется отловить, чтобы в дальнейшем относительно него считывать последующие биты.
Синхронизировавшись таким образом по данным, начинаем третий этап, собственно, сохранение и анализ информационных, то есть полезных, данных.
Декодирование данных.
Здесь механизм все тот же — смотрим на фронты, разделенные периодом кодирования. Разница только в том, что сохранять их будем не в переменную со сдвигом, а в массив. Физически суть все та же, так что переходим к практической реализации.
Декодирование манчестерского кода на STM32.
Вход для данных мы активировали, поэтому сразу к делу. Работаем в тех же файлах:
По той же схеме, начинаем с добавления констант:
Я привожу здесь только то, что добавляется относительно текущего проекта с манчестерским кодированием. Полный код будет под спойлерами в конце статьи. Там же и ссылка на полный проект для STM32F103C8.
Итак, таймер у нас тот же, значит и период его такой же — 10 мкс. Рассчитываем по аналогии MANCH_DECODE_TIMER_MAX — это период кодирования, он же — длительность передачи одного бита. Кроме того, задаем порог, который мы обсудили, равный 75% от периода кодирования:
Объявляем возможные состояния декодера и, для удобства, фронтов сигнала:
Структура для хранения данных остается неизменной:
По поводу состояний декодера:
Теперь в файле manchester_code.c объявляем переменные (я опять же привожу только отличия относительно исходного проекта):
Все, в принципе, понятно из названий:
Следующий шаг, вспомогательные функции. Определение уровня на входе PA4:
Далее по аналогии с GetDataBit(), которую мы использовали при кодировании, создаем функцию SetDataBit(), выполняющую обратную операцию, то есть установку нужного бита в массиве данных data[] в структуре:
В callback’е по переполнению таймера пока добавляем только инкрементирование счетчика:
Весь основной функционал будет в прерывании по изменению уровня сигнала на PA4. Рассмотрим полный код, затем пройдемся по нему подробно:
Для начала определяем уровень сигнала на входе, что позволяет нам судить о фронте импульса:
На выходе из функции обновляем значение для предыдущего фронта:
Остальной функционал в switch (decodeState) и подчиняется тем алгоритмам и явлениям, которые мы обсудили в начале статьи:
В исходном состоянии запускаем процесс декодирования через флаг decodeData.active, что по сути приводит к тому, что в прерывании по таймеру начинается процесс инкрементирования счетчика decodeTimerCnt.
Ищем соседние фронты с разными перепадами, разделенные периодом кодирования. Для этого сравниваем счетчик с величиной порога MANCH_DECODE_TIMER_THRESHOLD. Если находим последовательные перепады передний фронт-задний фронт, то это означает, что декодированы биты «1» и «0», которые помещаем в decodeData.bitStream:
После выполнения этих операций:
Это соответствует тому, что сначала мы декодировали «1», затем «0». Аналогично при противоположных фронтах, только с другим значением:
На этом декодер готов перейти в следующее состояние:
Начинаем синхронизацию по данным. Для этого продолжаем заполнять decodeData.bitStream битами. Если обнаружили «1», то выставляем в «1» старший бит:
В случае «0» ничего не делаем, за счет сдвига получим требуемое значение:
Вот и все! Спокойно и непринужденно анализируем декодированные биты в ожидании совпадения со значением синхрополя:
В случае совпадения закидываем байты в decodeData.data[], обнуляем счетчики битов и байт, и переводим декодер в состояние DATA_SYNC.
После чего продолжаем делать то же самое, за исключением того, что биты записываем не в decodeData.bitStream, а в массив decodeData.data[] при помощи SetDataBit(). Естественно, этому сопутствует увеличение индексов текущих битов и байт.
Логика такая же, при декодировании бита «1» — выставляем его в массиве — SetDataBit(&decodeData, 1). Если «0», то ничего не требуется, нужный «0» окажется на своем месте за счет увеличения индекса текущего бита.
Когда количество декодированных байт равно максимальному количеству (MANCH_DATA_BYTES_NUM + MANCH_SYNC_BYTES_NUM), заданному в хэдере, останавливаем процесс:
В этом тестовом проекте у меня задано 10 байт — 8 информационных + 2 байта синхрополя.
По окончании декодирования вызываем callback MANCH_DataReadyCallback(), объявленный в этом же файле чуть выше:
Работает как и с колбэками из HAL, то есть эту функцию можно переопределить в другом файле и вставить свой код. Например, я добавил в main.c:
Вызывается еще одна вспомогательная функция из manchester_code.c, которая лишь переводит декодер в исходное состояние:
Осталось учесть один немаловажный нюанс. В данной форме процесс декодирования завершится только тогда, когда принято MANCH_BYTES_NUM байт. Если исходная посылка будет короче, то произойдет коллапс, данные перепутаются. Поэтому добавим еще одно условие, по которому декодирование признается завершенным. Если в течение некоторого интервала времени, гарантированно превышающего длительность кодирования, не было обнаружено изменений уровня на входе, то останавливаем работу. Я возьму время, равное 3-м периодам кодирования. Обновляем код прерывания по таймеру:
Теперь все в норме, тестируем. В main() у нас по-прежнему осуществляется манчестерское кодирование:
Для проверки декодирования встаем брейкпинтом на callback в main.c:
В результате в полученных данных получаем полное соответствие исходным данным 👍
И на этом заканчиваем работу с кодом Манчестер-II, надеюсь, все было понятно, тем не менее вопросы на форуме или в комментариях категорически приветствуются )
P. S. Да, кстати, здесь при декодировании мы использовали информацию о периоде кодирования, но эта величина не всегда известна. Если будет спрос и интерес, опишу как провести аналогичную деятельность по декодированию при отсутствии априорной информации о длительности передачи бита.
Подключение линий связи и коды передачи информации
Код RZ
Код RZ (Return to Zero – с возвратом к нулю) – этот трехуровневый код получил такое название потому, что после значащего уровня сигнала в первой половине битового интервала следует возврат к некоему «нулевому», среднему уровню (например, к нулевому потенциалу). Переход к нему происходит в середине каждого битового интервала. Логическому нулю, таким образом, соответствует положительный импульс, логической единице – отрицательный (или наоборот) в первой половине битового интервала.
Еще одно важное достоинство кода RZ – простая временная привязка приема, как к началу последовательности, так и к ее концу. Приемник просто должен анализировать, есть изменение уровня сигнала в течение битового интервала или нет. Первый битовый интервал без изменения уровня сигнала соответствует окончанию принимаемой последовательности бит (рис. 3.12). Поэтому в коде RZ можно использовать передачу последовательностями переменной длины.
Недостаток кода RZ состоит в том, что для него требуется вдвое большая полоса пропускания канала при той же скорости передачи по сравнению с NRZ (так как здесь на один битовый интервал приходится два изменения уровня сигнала). Например, для скорости передачи информации 10 Мбит/с требуется пропускная способность линии связи 10 МГц, а не 5 МГц, как при коде NRZ (рис. 3.13).
Другой важный недостаток – наличие трех уровней, что всегда усложняет аппаратуру как передатчика, так и приемника.
Код RZ применяется не только в сетях на основе электрического кабеля, но и в оптоволоконных сетях. Правда, в них не существует положительных и отрицательных уровней сигнала, поэтому используется три следующих уровня: отсутствие света, «средний» свет, «сильный» свет. Это очень удобно: даже когда нет передачи информации, свет все равно присутствует, что позволяет легко определить целостность оптоволоконной линии связи без дополнительных мер (рис. 3.14).
Манчестерский код
Как и в RZ, обязательное наличие перехода в центре бита позволяет приемнику манчестерского кода легко выделить из пришедшего сигнала синхросигнал и передать информацию сколь угодно большими последовательностями без потерь из-за рассинхронизации. Допустимое расхождение часов приемника и передатчика может достигать 25%.
Манчестерский код используется как в электрических, так и в оптоволоконных кабелях (в последнем случае один уровень соответствует отсутствию света, а другой – его наличию).
Основное достоинство манчестерского кода – постоянная составляющая в сигнале (половину времени сигнал имеет высокий уровень, другую половину – низкий). Постоянная составляющая равна среднему значению между двумя уровнями сигнала.
Если же один из уровней сигнала в манчестерском коде нулевой (как, например, в сети Ethernet), то величина постоянной составляющей в течение передачи будет равна примерно половине амплитуды сигнала. Это позволяет легко фиксировать столкновения пакетов в сети (конфликт, коллизию) по отклонению величины постоянной составляющей за установленные пределы.
От тактовой частоты до информационной магистрали
Информационные системы локальных сетей иногда сравнивают с транспортной инфраструктурой. Кабели — это магистрали, разъемы — стыки дорог, сетевые карты и устройства — терминалы. Сетевые протоколы вызывают ассоциацию с правилами движения, которые к тому же определяют тип, конструкцию и характеристики транспортных средств.
Стандарты открытых кабельных систем, называемых также структурированными, определяют параметры и правила построения среды для передачи сигналов. Среда передачи — это электропроводные и оптоволоконные кабели, соединенные в каналы с помощью разъемов. При беспроводной связи передача сигналов осуществляется посредством радиоволн, в том числе, инфракрасных. Однако свободное пространство пока не рассматривается в качестве среды для локальных сетей.
Стандарты определяют частотный и динамический диапазоны элементов — кабелей, разъемов, линий и каналов.
Другая группа стандартов, разрабатываемая организациями стандартизации, в частности, Институтом инженеров электротехники и электроники (IEEE), и общественными организациями, например, ATM Forum и Gigabit Ethernet Alliance, определяет параметры физического уровня сетевых протоколов. К ним относятся тактовая частота, метод кодирования, схема передачи и спектр сигнала.
Открытая система обмена информацией OSI (Open System Interconnect), определяющая стандарты связи и передачи данных в любых сетях, разбивает все функции взаимодействия систем на семь уровней.
Нижний или физический уровень обеспечивает преобразование данных в электромагнитные сигналы, предназначенные для определенной среды передачи, и наоборот. Сигналы, передаваемые с физического уровня на второй или канальный уровень, не зависят от среды передачи. Сетевые протоколы, работающие на первом и втором уровнях, задают параметры сигналов, отправляемых по магистралям.
Некоторые аналогии, приводимые в статье, позволяют лучше понять взаимосвязь тактовой частоты, спектра сигнала и скорости передачи данных.
Если представить себе, что тактовая частота — это обороты двигателя автомобиля, то скорость передачи данных — это скорость движения. Преобразование одного в другое обеспечивается кодированием или коробкой передач.
Механизм кодирования
Цифровая передача данных требует выполнения нескольких обязательных операций:
Рассмотрим взаимосвязь тактовой частоты и битовой последовательности. Битовый поток передается со скоростью, определяемой числом бит в единицу времени. Другими словами биты в секунду — это число дискретных изменений сигнала в единицу времени. Тактовая частота, измеряемая в герцах, это число синусоидальных изменений сигнала в единицу времени.
Данное очевидное соответствие породило ошибочное представление об адекватности значений герц и бит в секунду. На практике все сложнее. Скорость передачи данных, как правило, выше тактовой частоты. Для увеличения скорости передачи сигнал может идти параллельно по нескольким парам. Данные могут передаваться битами или байтами. Кодированный сигнал может иметь два, три, пять и более уровней. Некоторые методы кодирования сигналов требуют дополнительного кодирования данных или синхронизации, которые уменьшают скорость передачи информационных сигналов.
Как видно из таблицы, однозначного соответствия МГц и Мбит/с не существует.
Категория канала | 3 | 4 | 5 | 5е | 6 |
---|---|---|---|---|---|
Диапазон частот, МГц | 16 | 20 | 100 | 125 | 200 |
Максимальная скорость передачи данных, Мбит/с | 100 | 100 | 155/1000 | 1000 | Нет протоколов |
Таблица 1. Соотношение между категорией канала, диапазоном частот и максимальной скоростью передачи данных
Каждый протокол требует определенную ширину спектра или, если хотите, ширину информационной магистрали. Схемы кодирования усложняют для того, чтобы эффективнее использовать информационные магистрали. Как и в аналогии с двигателем, совсем необязательно раскручивать его до максимальных оборотов, целесообразнее включить передачу.
Первая передача — коды RZ и Манчестер-II
Код RZ
RZ — это трехуровневый код, обеспечивающий возврат к нулевому уровню после передачи каждого бита информации. Его так и называют кодирование с возвратом к нулю (Return to Zero). Логическому нулю соответствует положительный импульс, логической единице — отрицательный.
Информационный переход осуществляется в начале бита, возврат к нулевому уровню — в середине бита. Особенностью кода RZ является то, что в центре бита всегда есть переход (положительный или отрицательный). Следовательно, каждый бит обозначен. Приемник может выделить синхроимпульс (строб), имеющий частоту следования импульсов, из самого сигнала. Привязка производится к каждому биту, что обеспечивает синхронизацию приемника с передатчиком. Такие коды, несущие в себе строб, называются самосинхронизирующимися.
Недостаток кода RZ состоит в том, что он не дает выигрыша в скорости передачи данных. Для передачи со скоростью 10 Мбит/с требуется частота несущей 10 МГц. Кроме того, для различения трех уровней необходимо лучшее соотношение сигнал / шум на входе в приемник, чем для двухуровневых кодов.
Наиболее часто код RZ используется в оптоволоконных сетях. При передаче света не существует положительных и отрицательных сигналов, поэтому используют три уровня мощности световых импульсов.
Код Манчестер-II
Код Манчестер-II или манчестерский код получил наибольшее распространение в локальных сетях. Он также относится к самосинхронизирующимся кодам, но в отличие от кода RZ имеет не три, а только два уровня, что обеспечивает лучшую помехозащищенность.
Логическому нулю соответствует переход на верхний уровень в центре битового интервала, логической единице — переход на нижний уровень. Логика кодирования хорошо видна на примере передачи последовательности единиц или нулей. При передаче чередующихся битов частота следования импульсов уменьшается в два раза.
Информационные переходы в средине бита остаются, а граничные (на границе битовых интервалов) — при чередовании единиц и нулей отсутствуют. Это выполняется с помощью последовательности запрещающих импульсов. Эти импульсы синхронизируются с информационными и обеспечивают запрет нежелательных граничных переходов.
Изменение сигнала в центре каждого бита позволяет легко выделить синхросигнал. Самосинхронизация дает возможность передачи больших пакетов информацию без потерь из-за различий тактовой частоты передатчика и приемника.
Большое достоинство манчестерского кода — отсутствие постоянной составляющей при передаче длинной последовательности единиц или нулей. Благодаря этому гальваническая развязка сигналов выполняется простейшими способами, например, с помощью импульсных трансформаторов.
Частотный спектр сигнала при манчестерском кодировании включает только две несущие частоты. Для десятимегабитного протокола — это 10 МГц при передаче сигнала, состоящего из одних нулей или одних единиц, и 5 МГц — для сигнала с чередованием нулей и единиц. Поэтому с помощью полосовых фильтров можно легко отфильтровать все другие частоты.
Код Манчестер-II нашел применение в оптоволоконных и электропроводных сетях. Самый распространенный протокол локальных сетей Ethernet 10 Мбит/с использует именно этот код.
Вторая передача — код NRZ
Код NRZ (Non Return to Zero) — без возврата к нулю — это простейший двухуровневый код. Нулю соответствует нижний уровень, единице — верхний. Информационные переходы происходят на границе битов. Вариант кода NRZI (Non Return to Zero Inverted) — соответствует обратной полярности.
Несомненное достоинство кода — простота. Сигнал не надо кодировать и декодировать.
Кроме того, скорость передачи данных вдвое превышает частоту. Наибольшая частота будет фиксироваться при чередовании единиц и нулей. При частоте 1 ГГц обеспечивается передача двух битов. Для других комбинаций частота будет меньше. При передаче последовательности одинаковых битов частота изменения сигнала равна нулю.
Код NRZ (NRZI) не имеет синхронизации. Это является самым большим его недостатком. Если тактовая частота приемника отличается от частоты передатчика, теряется синхронизация, биты преобразуются, данные теряются.
Для синхронизации начала приема пакета используется стартовый служебный бит, например, единица. Наиболее известное применение кода NRZI — стандарт ATM155. Самый распространенный протокол RS232, применяемый для соединений через последовательный порт ПК, также использует код NRZ. Передача информации ведется байтами по 8 бит, сопровождаемыми стартовыми и стоповыми битами.
Четвертая передача — код MLT-3
Код трехуровневой передачи MLT-3 ((Multi Level Transmission — 3) имеет много общего с кодом NRZ. Важнейшее отличие — три уровня сигнала.
Единице соответствует переход с одного уровня сигнала на другой. Изменение уровня сигнала происходит последовательно с учетом предыдущего перехода. Максимальной частоте сигнала соответствует передача последовательности единиц. При передаче нулей сигнал не меняется. Информационные переходы фиксируются на границе битов. Один цикл сигнала вмещает четыре бита.
Недостаток кода MLT-3, как и кода NRZ — отсутствие синхронизации. Эту проблему решают с помощью преобразования данных, которое исключает длинные последовательности нулей и возможность рассинхронизации.
Редуктор — координирование данных 4В5В
Протоколы, использующие код NRZ, чаще всего дополняют кодированием данных 4B5B. В отличие от кодирования сигналов, которое использует тактовую частоту и обеспечивает переход от импульсов к битам и наоборот, кодирование данных преобразует одну последовательность битов в другую.
В коде 4B5B используется пяти-битовая основа для передачи четырех-битовых информационных сигналов. Пяти-битовая схема дает 32 ((два в пятой степени) двухразрядных буквенно-цифровых символа, имеющих значение в десятичном коде от 00 до 31. Для данных отводится четыре бита или 16 (два в четвертой степени) символов.
Четырех-битовый информационный сигнал перекодируется в пяти-битовый сигнал в кодере передатчика. Преобразованный сигнал имеет 16 значений для передачи информации и 16 избыточных значений. В декодере приемника пять битов расшифровываются как информационные и служебные сигналы. Для служебных сигналов отведены девять символов, семь символов — исключены.
Исключены комбинации, имеющие более трех нулей (01 &— 00001, 02 &— 00010, 03 &— 00011, 08 &— 01000, 16 &— 10000). Такие сигналы интерпретируются символом V и командой приемника VIOLATION — сбой. Команда означает наличие ошибки из-за высокого уровня помех или сбоя передатчика. Единственная комбинация из пяти нулей (00 &— 00000) относится к служебным сигналам, означает символ Q и имеет статус QUIET — отсутствие сигнала в линии.
Кодирование данных решает две задачи — синхронизации и улучшения помехоустойчивости. Синхронизация происходит за счет исключения последовательности более трех нулей. Высокая помехоустойчивость достигается контролем принимаемых данных на пяти-битовом интервале.
Цена кодирования данных — снижение скорости передачи полезной информации. В результате добавления одного избыточного бита на четыре информационных, эффективность использования полосы частот в протоколах с кодом MLT-3 и кодированием данных 4B5B уменьшается соответственно на 25%.
При совместном использовании кодирования сигналов MLT-3 и данных 4В5В четвертая передача работает фактически как третья — 3 бита информации на 1 герц несущей частоты сигнала. Такая схема используется в протоколе TP-PMD.
Пятая передача — код PAM 5
Рассмотренные выше схемы кодирования сигналов были битовыми. При битовом кодировании каждому биту соответствует значение сигнала, определяемое логикой протокола.
При байтовом кодировании уровень сигнала задают два бита и более.
В пятиуровневом коде PAM 5 используется 5 уровней амплитуды и двухбитовое кодирование. Для каждой комбинации задается уровень напряжения. При двухбитовом кодировании для передачи информации необходимо четыре уровня (два во второй степени — 00, 001, 110, 111). Передача двух битов одновременно обеспечивает уменьшение в два раза частоты изменения сигнала.
Пятый уровень добавлен для создания избыточности кода, используемого для исправления ошибок. Это дает дополнительный резерв соотношения сигнал / шум 6 ддБ.
Код PAM 5 используется в протоколе 1000 Base T Gigabit Ethernet. Данный протокол обеспечивает передачу данных со скоростью 1000 Мбит/с при ширине спектра сигнала всего 125 МГц.
Как это достигается? Данные передаются по всем четырем парам одновременно. Следовательно, каждая пара должна обеспечить скорость 250 Мбит/с. Максимальная частота спектра несущей при передаче двухбитовых символов кода PAM 5 составляет 62,5 МГц. С учетом передачи первой гармоники протоколу 1000 Base T требуется полоса частот до 125 МГц. Но о несущей, гармониках и полосе частот следует поговорить отдельно.
Ширина магистрали — требуемая полоса частот
Скорость движения зависит не только от возможностей автомобиля, но и от качества магистрали. То же самое справедливо и для передачи данных. Рассмотрим возможности информационных магистралей.
Кодирование сигналов — это способ преобразования тактовой частоты в скорость передачи данных. С какой целью выполняют преобразование? Для того, чтобы увеличить скорость без изменения частотного диапазона канала связи. Кодирование требует использования более сложной приемо-передающей аппаратуры. Это минус. Зато при переходе к более скоростным протоколам можно использовать те же кабели. А это уже большой плюс.
Например, протокол Fast Ethernet 100 Base T4 обеспечивает работу сети со скоростью 100 Мбит/с на кабелях категории 3 (16 МГц). Gigabit Ethernet 1000 Base T реализован таким образом, чтобы на базе каналов категории 5(100 МГц), имеющий некоторый резерв, передавать 1000 Мбит/с.
Ширина спектра сигнала
Сигнал, имеющий синусоидальную форму, называется гармоническим. Его параметры определяются частотой и амплитудой. Чем больше форма сигнала отличается от синусоиды, тем больше гармонических составляющих он несет. Частоты гармоник кратны частоте несущей. Стандарты электропитания, например, требуют оценки качества напряжения сигнала вплоть до тридцатой гармоники.
Диапазон частот сложного сигнала называется спектральной шириной сигнала. Он включает основную составляющую, которая определяет несущую, и гармонические составляющие, которые задают форму импульсов.
Восстановление формы импульсов производится на аппаратном уровне, поэтому гармонические составляющие убирают с помощью фильтров.
Спектральная ширина сигнала зависит от тактовой частоты, метода кодирования и характеристик фильтра передатчика.
Рисунок 6 иллюстрирует, как метод кодирования позволяет уменьшить частоту несущей. Для трех методов кодирования приведены ситуации, требующие максимальную частоту несущей. Один герц несущей передает один бит (1) при манчестерском кодировании, два бита (01) кода NRZ и четыре бита (1111) кода MLT-3. Фактор кодирования (передача) составляет соответственно один, два и четыре.
Другие комбинации битов требуют меньшей частоты. Например, при чередовании нулей и единиц частота несущей кода MLT-3 уменьшается еще в два раза, длительная последовательность нулей уменьшает частоту несущей до нуля.
Спектральную ширину сигнала не следует путать с тактовой частотой. Тактовая частота — это метроном, задающий темп мелодии. На рисунке 6 тактовой частоте соответствует скорость чередования битов. Спектральная ширина сигнала в данной аналогии это огибающая сигнала при условии, что она позволяет восстановить исходный импульсный сигнал.
В аналоговой передаче спектральная ширина — это мелодия, имеющая гораздо более широкий спектр. Если попытаться передать мелодию по телефону, придется пожертвовать спектром. Линия связи, имеющая узкую полосу пропускания, «обрежет» верхние гармоники. При этом, качество звучания мелодии на выходе узкополосного канала связи ухудшится.
При цифровой передаче для восстановления исходного сигнала требуется меньше гармоник, чем для аналогового. Технология передачи и приема цифровых сигналов позволяет восстановить исходный сигнал по несущей спектра. Однако для уменьшения коэффициента ошибок необходимо присутствие первой гармоники, что удваивает ширину спектра или частотный диапазон.
Однополосный и двухполосные сигналы
Сигнал, который не имеет спектральной энергии нулевой частоты, является двухполосным. У двухполосного ширина первой гармоники в два раза больше, чем у однополосного. Спектр сигнала после манчестерского кодирования является двухполосным. Кодирование методами NRZ, MLT-3 и PAM 5 дает однополосный сигнал.
Как было отмечено выше, код Манчестер-II дает две несущие частоты: 5 МГц и 10 МГц.
Частота 10 МГц передается с одной гармоникой (несущая и гармоники обозначены на рис. 7 красным цветом). Частота 5 МГц (обозначенная зеленым цветом) имеет три гармоники в верхнем диапазоне. Остальные гармоники обрезаются фильтрами.
Итак, при передаче однополосного сигнала, кодированного методом NRZ, со скоростью 10 Мбит/с, требуется 10 ММГц. Для двухполосного сигнала, который создается манчестерским десятимегабитным протоколом необходимо 20 МГц полосы пропускания.
Для спектра несущей протокола ATM 155, в котором реализован метод кодирования сигналов NRZ, а тактовая частота составляет 155,52 ММГц, требуется полоса частот 77,76 МГц. С учетом одной несущей полоса сигнала составляет 155,52 ММГц.
Стандартный канал категории 5 максимальной длины обеспечивает полосу 100 Мгц с запасом сигнал / шум 3,1 дБ. Нулевой запас превышения мощности сигнала на шумом при этом будет на частоте 115 МГц. Таким образом, анализ спектра позволяет сделать вывод о недостаточной ширине информационной магистрали.
Кроме ширины магистрали качество полотна зависит от неровностей. Применительно к кабельным каналам это отношение сигнал / шум, которое зависит в первую очередь от качества стыков — разъемных соединений. Волновая природа шумов и несоответствие категории 5 требованиям протоколов класса D подробно освещается в статье Дефицит категории 5.
Выводы
Методы кодирования и сложные схемы, использующие все витые пары, обеспечивают увеличение скоростей передачи данных без пропорционального увеличения диапазона частот среды передачи или ширины информационных магистралей.
Анализ методов кодирования позволяет сделать вывод о том, что системы категории 5 имеют дефицит ресурсов даже для приложений своего класса. Современные информационные магистрали требуют более тщательной подготовки для перехода от десятимегабитных приложений к высокоскоростным протоколам.
При создании новых систем требуется выбор среды передачи с резервом на будущее, который осложняется тем, что стандарты категории 5е и категории 6 еще не приняты.
В условиях дефицита параметров существующих и отсутствия стандартов новых категорий возрастает роль достоверной информации по возможностям действующих и перспективных кабельных систем. Специальные знания требуются не только системным интеграторам, но и заказчикам.
Самый простой путь — довериться авторитету производителя СКС и интеграторов. Но он также самый недостоверный, ненадежный и дорогой.
Самый благородный способ получения знаний — приобретение и изучение стандартов и различных пособий. На комплект американских, международных и европейских стандартов открытых систем придется потратить более тысячи долларов. Проекты разрабатываемых стандартов стоят от ста до трехсот долларов. Плюс несколько сот часов на их перевод и изучение.
При этом содержание можно полностью понять только на основе знания теории передачи электропроводных и оптических сигналов. И даже после этого можно не увидеть никаких несоответствий, если внимательно не изучить и не проанализировать стандарты физического уровня протоколов.
Самый быстрый способ — обучение на курсах по структурированным кабельным системам. Это к тому же дешевле и эффективнее. Однако практически все курсы не раскрывают несоответствий стандартов и не допускают выхода за их рамки.
EcoLAN — это единственная компания, разработавшая семинары обучения для заказчиков и предлагающая комплекс услуг, которые обеспечивают реальную экономию при создании и эксплуатации кабельных систем локальных сетей.
Отличие курсов EcoLAN заключается в том, что они призваны обосновать возможность выхода за рамки стандартов уже сегодня. Это позволяет использовать среду передачи по максимуму ее возможностей, что уменьшает стоимость владения. Кроме того, дает дополнительную свободу выбора систем и решений, особенно необходимую в условиях, когда происходит переход к новым категориям СКС и сетевым протоколам.