Недостаток этой схемы в том, что из-за тактового генератора полоса пропускания должна быть в два раза больше по сравнению с NRZ (а мы помним, что полоса пропускания — ценный ресурс). Еще одна стратегия — закодировать данные, обеспечив достаточное количество тактовых переходов в сигнале. Ведь у схемы NRZ возникают проблемы с восстановлением тактового сигнала только в случае длинных цепочек нулей и единиц. При частых тактовых переходах синхронизировать приемник с поступающим потоком символов будет несложно.
Для начала можно упростить задачу, закодировав «1» в виде тактового перехода, а «0» — в виде его отсутствия, либо наоборот. Это вариация NRZ — инвертированный NRZ (Non-Return-to-Zero Inverted, NRZI). Пример NRZI приведен на илл. 2.14 (в). Он используется в популярном стандарте подключения периферийных устройств — USB (Universal Serial Bus, универсальная последовательная шина). При такой схеме длинные последовательности единиц не проблема.
Остается решить вопрос с длинными цепочками нулей. Телефонная компания могла бы потребовать от абонента не отправлять слишком много нулей подряд. В США старые цифровые телефонные каналы T1 (мы обсудим их далее) имели ограничение в 15 последовательных нулей. Чтобы действительно решить эту проблему, можно разбить очереди нулей. Для этого небольшие группы передаваемых битов сопоставляются так, чтобы цепочки нулей были представлены в виде чуть более длинных паттернов, в которых не так много последовательных нулей.
Популярный код, предназначенный для этой цели, — 4B/5B. Каждой группе из 4 бит соответствует 5-битный паттерн на основе фиксированной таблицы преобразования. 5-битные паттерны подобраны таким образом, что последовательности из более чем 3 нулей невозможны. Таблица соответствий приведена на илл. 2.15. Избыточность схемы составляет 25 % — это намного лучше,
Данные (4B)
Кодовое сочетание (5B)
Данные (4B)
Кодовое сочетание (5B)
0000
11110
1000
10010
0001
01001
1001
10011
0010
10100
1010
10110
0011
10101
1011
10111
0100
01010
1100
11010
0101
01011
1101
11011
0110
01110
1110
11100
0111
01111
1111
11101
Илл. 2.15. Соответствие 4B/5B
чем в случае с манчестерским кодированием (100 %). А поскольку имеется 16 входных комбинаций битов и 32 выходных, часть выходных комбинаций не используется. Даже если отбросить сочетания со слишком длинными цепочками нулей, их останется немало. В качестве бонуса можно использовать эти коды в виде управляющих сигналов физического уровня. Например, иногда «11111» обозначает свободную линию, а «11000» — начало фрейма.
Еще один метод — скремблирование (scrambling) — состоит в видимой рандомизации данных. При этом подходе вероятность появления частых тактовых переходов очень высока. В основе работы скремблера лежит операция XOR с псевдослучайной последовательностью, которая применяется к данным до их передачи. В результате данные становятся столь же случайными, как эта последовательность (при этом они не зависят от нее). Для восстановления настоящих данных приемник применяет к входящему потоку XOR с той же псевдослучайной последовательностью. Чтобы все сработало, создание последовательности должно быть очень простым. Обычно ее задают в виде начального значения простого генератора случайных чисел.
Метод скремблирования хорош тем, что не требует избыточной полосы пропускания и дополнительного времени. К тому же он часто предотвращает попадание энергии сигнала в преобладающие гармоники, излучающие электромагнитные помехи (такие гармоники возникают из-за повторяющихся паттернов данных). Скремблирование полезно тем, что случайные сигналы обычно являются «белыми», то есть их энергия распределена по всем гармоникам.
Впрочем, скремблирование не гарантирует отсутствия длинных цепочек. Иногда просто не везет. Если данные полностью совпадают со случайной последовательностью, в результате операции XOR получаются сплошные нули. Такой исход маловероятен при длинной псевдослучайной последовательности, которую трудно предсказать. Но в случае коротких или легко предсказуемых последовательностей злоумышленники могут отправлять битовые паттерны, образующие после скремблирования длинные цепочки нулей. В результате происходит сбой связи. Подобным недостатком страдали ранние версии стандартов отправки IP-пакетов по каналам SONET в телефонной системе (см. Малис и Симпсон; Malis and Simpson, 1999). Пользователи могли отправлять определенные «пакеты-убийцы», которые гарантированно вызывали проблемы.
Симметричные сигналы