Метод скремблирования хорош тем, что не требует избыточной полосы пропускания и дополнительного времени. К тому же он часто предотвращает попадание энергии сигнала в преобладающие гармоники, излучающие электромагнитные помехи (такие гармоники возникают из-за повторяющихся паттернов данных). Скремблирование полезно тем, что случайные сигналы обычно являются «белыми», то есть их энергия распределена по всем гармоникам.
Впрочем, скремблирование не гарантирует отсутствия длинных цепочек. Иногда просто не везет. Если данные полностью совпадают со случайной последовательностью, в результате операции XOR получаются сплошные нули. Такой исход маловероятен при длинной псевдослучайной последовательности, которую трудно предсказать. Но в случае коротких или легко предсказуемых последовательностей злоумышленники могут отправлять битовые паттерны, образующие после скремблирования длинные цепочки нулей. В результате происходит сбой связи. Подобным недостатком страдали ранние версии стандартов отправки IP-пакетов по каналам SONET в телефонной системе (см. Малис и Симпсон; Malis and Simpson, 1999). Пользователи могли отправлять определенные «пакеты-убийцы», которые гарантированно вызывали проблемы.
Симметричные сигналы
Сигналы, в которых доля положительного напряжения равна доле отрицательного даже за короткий промежуток времени, называются симметричными (balanced signals)20. Их среднее значение равно нулю, а значит, в них отсутствует составляющая постоянного тока. Это является преимуществом, поскольку некоторые каналы связи (например, коаксиальный кабель и линии с трансформаторами) сильно ослабляют составляющую постоянного тока из-за их физических свойств. Кроме того, при подключении приемника к каналу связи методом емкостного соединения (capacitive coupling) передается только переменная составляющая тока. В любом случае при отправке сигнала с ненулевым средним значением только впустую тратится энергия, ведь составляющая постоянного тока будет отфильтрована.
Симметрирование кабеля обеспечивает тактовые переходы для синхросигналов благодаря сочетанию положительного и отрицательного напряжения. Также оно позволяет легко настраивать приемники, ведь среднее значение сигнала всегда можно измерить и использовать как порог решения для декодирования символов. Если сигналы несимметричны, среднее значение может отклоняться от истинного уровня принятия решения, например, из-за плотности единиц. Таким образом, большее число символов будет декодировано с ошибками.
Простейший способ реализации симметричного кода — использовать в качестве логической «1» и логического «0» два разных уровня напряжения. Например, +1 В для бита 1 и –1 В для бита 0. Для отправки «1» передатчик чередует уровни +1 В и –1 В, чтобы среднее значение всегда было нулевым. Это биполярное кодирование (bipolar encoding). В телефонных сетях оно называется кодированием с чередованием полярности (Alternate Mark Inversion, AMI) в соответствии со старой терминологией, в которой «1» называлась «отметка» («mark»), а «0» — «пробел» («space»). Пример приведен на илл. 2.14 (д).
При биполярном кодировании добавляется еще один уровень напряжения, чтобы достигнуть баланса. Для этой цели также можно воспользоваться кодом, аналогичным 4B/5B (как и для получения тактовых переходов при восстановлении синхросигналов). Пример подобного симметричного кода — линейный код 8B/10B. В нем 8 бит входного сигнала соотносится с 10 битами выходного, так что его КПД составляет 80 % (как и в случае 4B/5B). 8 бит разбиваются на две группы: из 5 бит (которые сопоставляются с 6 битами) и из 3 бит (сопоставляются с 4 битами). Далее 6-битный и 4-битный символы объединяются. В каждой группе некоторые входные паттерны можно соотнести с симметричными выходными паттернами с тем же числом нулей и единиц. Например, «001» соответствует симметричный паттерн «1001». Впрочем, возможных сочетаний недостаточно, чтобы все выходные паттерны были симметричными. В подобных случаях входной паттерн сопоставляется с двумя выходными, у одного из которых будет лишняя единица, а у второго — лишний ноль. Например, паттерн «000» ассоциируется с паттерном «1011» и дополнительным к нему паттерном «0100». При сопоставлении входных битов с выходными, кодировщик запоминает дисбаланс (disparity) предыдущего символа. Этот дисбаланс равен общему количеству нулей или единиц, которых сигналу не хватает до симметричности. Далее кодировщик выбирает либо выходной паттерн, либо дополнительный к нему для снижения дисбаланса. В случае кода 8B/10B максимальный дисбаланс равен 2 битам. Следовательно, сигнал никогда не будет сильно отличаться от симметричного. Также в нем не будет более пяти последовательных единиц или нулей, что удобно для восстановления синхросигнала.