Илл. 2.14. Линейные коды. (а) Биты. (б) NRZ. (в) NRZI. (г) Манчестерское кодирование. (д) Биполярное кодирование (AMI)
Отправленный сигнал NRZ проходит по проводу. На другой стороне приемник преобразует его в биты путем дискретизации сигнала через равномерные промежутки времени. Этот сигнал несколько отличается от исходного. Он ослабляется и искажается каналом и шумом на стороне приемника. Для декодирования битов приемник сопоставляет импульсные сигналы с ближайшими символами. Для NRZ положительное напряжение означает, что была отправлена «1», отрицательное — «0».
Метод NRZ — отличная отправная точка для изучения методов кодирования, поскольку он прост. Но на практике он применяется редко. Существуют более сложные схемы преобразования битов в сигналы, лучше отвечающие инженерным соображениям, — линейные коды (line codes). Ниже описаны линейные коды, которые повышают эффективность полосы пропускания, а также обеспечивают восстановление синхронизации и баланс постоянного тока.
Эффективность полосы пропускания
При использовании NRZ сигнал может перескакивать между положительным и отрицательным уровнями чуть ли не каждые 2 бита (когда единицы и нули меняют друг друга). Поэтому для скорости передачи данных в B бит/с необходима полоса пропускания минимум B/2 Гц, как следует из уравнения Найквиста (2.3). Это фундаментальное ограничение, так что без дополнительной полосы пропускания NRZ не способна обеспечить большую скорость. Полоса пропускания — зачастую ограниченный ресурс, даже в случае проводных каналов. Чем выше частота сигнала, тем сильнее его затухание и ниже эффективность. Кроме того, высокочастотные сигналы требуют более быстрой электроники.
Для более эффективного использования ограниченной полосы пропускания повышается число уровней сигнала (больше двух). Например, при четырех уровнях вольтажа можно отправлять два бита сразу в виде одного символа. Такая архитектура вполне работоспособна, если поступающий сигнал достаточно мощный для различения всех четырех уровней. Скорость изменения сигнала составляет половину битрейта, так что требуется меньшая полоса пропускания.
Скорость, с которой меняется сигнал, — это скорость передачи символов (symbol rate). Необходимо отличать ее от скорости передачи в битах, или битрейта (bit rate). Битрейт равен скорости передачи символов, умноженной на количество битов в символе. Ранее скорость передачи символов называлась скоростью передачи в бодах, или бодрейтом (baud rate). Это понятие применялось в отношении работы телефонных модемов, передающих цифровые данные по телефонным линиям. В литературе термины «битрейт» и «бодрейт» часто путают.
Обратите внимание, что количество уровней сигнала не обязательно должно равняться степени двойки. Во многих случаях это не так, при этом часть уровней используется для защиты от ошибок и упрощения архитектуры приемника.
Восстановление тактового (синхронизационного) сигнала
В любой схеме преобразования битов в символы приемник должен знать, где кончается один символ и начинается следующий, чтобы правильно декодировать биты. В NRZ символы представляют собой уровни напряжения, поэтому при длинной последовательности нулей или единиц сигнал остается неизменным. Рано или поздно становится сложно различать биты (ведь 15 нулей очень похожи на 16), разве что ваш синхросигнал чрезвычайно точен.
Точный синхросигнал позволяет решить проблему, но это слишком затратно для серийного производства. Учтите, что речь идет о синхронизации битов в каналах связи, работающих на скорости во много мегабит в секунду. Отклонение тактового сигнала более чем на долю микросекунды недопустимо даже на максимально длинном отрезке. Такое решение подходит только для медленных каналов связи или коротких сообщений.
Одна из возможных стратегий — отправка на приемник отдельного синхросигнала. Еще одна тактовая линия не проблема для компьютерных шин или коротких кабелей, и так содержащих множество параллельных линий связи. Но в большинстве сетевых подключений она станет напрасной тратой ресурсов — по дополнительной линии разумнее отправлять данные. Чтобы обойтись без нее, можно воспользоваться хитростью: соединить синхросигнал с информационным, применив к ним операцию XOR («исключающее ИЛИ»). Результат представлен на илл. 2.14 (г). Уровень тактового сигнала меняется при каждой передаче бита, поэтому тактовый генератор должен работать со скоростью, вдвое превышающей битрейт. Логический «0» кодируется (с помощью XOR) тактовым переходом с низкого уровня на высокий, то есть просто самим тактовым сигналом. А при операции XOR с высоким уровнем он меняется на противоположный и происходит тактовый переход с высокого уровня на низкий. Этот переход соответствует логической «1». Такая схема, применявшаяся в классических сетях Ethernet, называется манчестерским кодированием (Manchester encoding).