Помехоустойчивое кодирование, то есть введение в сигнал избыточных символов, не несущих информации, позволяет исключить ошибки. Всегда ли это возможно?
Противоречия между выводами В. Котельникова и К. Шеннона нет. Оно снимается путем кодирования сигнала. Любопытно заглянуть в тайны процесса кодирования, который позволяет, невзирая на гибель отдельных битов в кровавых битвах с помехами, донести адресату информацию в неискаженном виде.
Что же такое кодирование? Это есть процесс замены частей нашего сообщения некими символами, удобными для передачи. Или, если говорить более широко, это замена реальных предметов, мыслей, чувств условными знаками. И мы с вами, читатель, с самого детства, оказывается, занимаемся кодированием. Кто в школе не выдумывал своего кода для подсказки товарищу, у кого не было условного звука для вызова из дому приятеля, кто не подавал таинственных знаков любимой девушке, наивно думая, что во всем мире только она их понижает?
Можно даже всю историю и деятельность человека рассматривать с точки зрения этого кодирования, с точки зрения применяемых условных знаков. Так смотрит на мир наука, именуемая семиотикой, главными объектами которой являются языки народов нашей планеты - наиболее совершенные знаковые системы общения людей.
Мы с детства привыкаем к различным знакам и не замечаем их условности.
Невероятный свист тысяч американцев оглушил В, Чкалова и его спутников, когда, совершив первый беспосадочный полет из СССР в США через Северный полюс, они совершили посадку вблизи Портленда. По лицам американцев В. Чкалов догадался, что это не, есть наш знак осуждения, а нечто обратное, и, заложив два пальца в рот, ответил тем же, что вызвало еще больший одобрительный всплеск свиста.
Несколько лет назад при посещении ГДР я был ошеломлен такой картиной. Только что я произнес последние слова доклада, как раздался мощный грохот: слушатели неистово заколотили руками по столам. Как оказалось, делали они это в знак одобрения. И нельзя не отдать им должного в рациональности такого кодирования: колотят они одной рукой, а вторая может писать, листать журнал и т. д.
В прошлом году, наслаждаясь перевальными маршрутами Западного Кавказа, мы присоединились к небольшой альпинистской группе, где царил авторитет и юмор некоего седовласого и очень прочно "сконструированного" мужчины, которого просто называли АБ. Мы тоже быстро усвоили это очень удобное, звучное и сближающее людей кодовое слово. И как же впоследствии мы были смущены открытием: двумя первыми буквами алфавита был обозначен, правда не случайно, академик Аркадий Бенедиктович Мигдал.
Ваш палец в дырке диска телефонного аппарата над цифрой 8. Вы вращаете диск до упора и отпускаете. Возвращаясь под действием пружины в исходное положение, он 8 раз прерывает цепь и создает 8 импульсов. Кстати, не надо пытаться ускорить обратный ход диска насильно, даже если вы очень спешите: импульсы укоротятся, и искатель вашего абонента на станции может не сработать. При наборе единицы посылается один импульс, а при наборе нуля - целых десять (вот как высоко оценен нуль в телефонном коде). Если у вас семизначный номер, состоящий только из единиц, то в линию побежит всего 7 импульсов, но их станет 70, если номер составлен из одних нулей.
Это простейший способ кодирования, берущий начало от наших десяти пальцев; только десятый палец обозначен нулем. Этими условными телефонными знаками мы пользуемся каждый день, а иногда и целый день.
Главным в кодировании является отчетливое различение выбранных условных знаков. Так, если три по-ружки НИНА, ЛИНА и ИННА работают в одной ла-оратории, то наверняка будет путаница из-за плохого различения (сходного звучания) трех "кодов", которыми нарекли при рождении этих девушек.
В таких случаях на помощь приходит простейший способ усиления различимости кодов - многократное их повторение. Но за это надо платить. И мы платим самой дорогой валютой - временем. Ведь сколько раз повторяется нами сигнал, во столько снижается скорость передачи информации.
И все же даже хорошо различимые коды, построенные по всем правилам современной математической теории кодирования, могут стать совсем плохо различимыми. Обезличить их могут вездесущие помехи. Проделки этих чертей различны. Отрывая куски "мяса" от нашего кода и наращивая его своим, они могут превратить один условный знак в другой, один код в другой.
Вспоминаю, как я стал их жертвой. Напав на мою телеграмму, они внесли в нее такую коррекцию, в результате которой слово "голубоглазая" трансформировалось в "глупоглазая". Этого было достаточно для довольно большой ссоры.
Вторая их проделка - беспощадное кромсание сигнала до такой степени, что он превращается в хаос, в шум, то есть сам становится чертом.
Наконец, последняя проделка - это формирование кода из собственного "мяса". Хаос помех, непрерывно меняясь по случайным законам, вдруг образует одну из комбинаций вашего кода. Такой трюк помех получил свое кодовое обозначение: "ложная тревога". Происхождение его такое. Антенна локатора, меняя положение, периодически "прочесывает" своими импульсами заданный участок неба. Как только в нем появится отражающее импульсы тело: ракета, самолет, спутник, - посланные бегуны, отразившись от него, возвращаются в приемник локатора и, следовательно, вызывают сигнал "тревога". Но такую же отраженную последовательность на некоторый минимально необходимый отрезок времени могут сфабриковать и черти, тогда в приемнике возникнет такой же сигнал. Цели нет, а сигнал есть - "ложная тревога". Чтобы снизить вероятность этих трюков, иногда одиночные импульсы локатора заменяют более сложной группой посылок, состоящих из двух или трех импульсов.
Из приведенных примеров напрашивается вывод: одна посылка, несущая один бит информации, почти беззащитна от сильных помех, ей нужны телохранители - дополнительные импульсы. Такое кодирование называют избыточным.
Термин оказался удачным и стал применяться не только для характеристики кодов. Он даже проник в отзывы официальных оппонентов. Я уже несколько раз там его встретил: "Диссертация имеет большую избыточность" (не поймешь, не то много пустой породы, не то слишком много науки); "Избыточность украшает работу, но затрудняет ее чтение, а местами и понимание" (еще замысловатее).
Проиллюстрируем введение избыточности на простом примере. Пусть для управления воздушным шаром требуется передать только две команды - "вверх" и "вниз".. Первая значит сброс балласта, вторая - подачу газа в оболочку из бортовых баллонов.
Самое простое решение сводится к использованию радиоканала, способного кодировать посылки двух качеств: 0 и 1. Посылке 1, например, присваиваем команду "вверх", а посылке 0 - команду "вниз".
Вблизи командного пункта шар точно выполняет распоряжение. Но вот ветер унес его от командного пункта, сигнал ослаб, и черти частично взяли управление "на себя". Без нашей команды шар то поднимается, то опускается, следуя ложной тревоге. А потом он, несмотря на посылаемые команды, и вовсе перестает иногда слу-шаться, не исполняет распоряжений - это так называемый "сбой" команды, ее непрохождение, ее искажение до неузнаваемости. Как ему помочь?
Надо ввести избыточность в код.
Добавим по одному импульсу к каждой команде. Пусть команде "вверх" соответствует теперь посылка 1 0, а команде "вниз" - посылка 0 1. При этом, конечно, надо в приемник ввести дешифратор, который проверяет наличие обоих импульсов и их последовательность.
Начинаем испытывать новые команды. Обнаруживаем любопытный факт. Ложных тревог стало меньше, но еще появляются сбои, то есть чаще наша "радиорука" может поднять шар вверх или опустить вниз.
Так и должно быть. Ведь теперь у чертей больше возможностей: не удалось изуродовать первый импульс команды, принимаются искажать второй.
Но и с этим помогает бороться избыточность. Добавим к командам еще по одному импульсу: "вверх" - 01, "вниз" - 010. При этом дешифратор отрегулируем так, чтобы он выдавал команду на исполнение при прохождении любых двух импульсов из каждой тройки. Теперь помехи могут изгрызть любой из трех импульсов, а команда все равно пройдет.
Итак, и сбои, и ложные тревоги стали редки, и шар нас слушается. Но вот ветер уносит его все дальше и дальше, мощность сигнала, слабея, приближается к мощности шума. Раньше нам опасны были только редкие сильные всплески шума. Теперь опасны и средние, которых значительно больше. Они способны поражать не только один импульс команды, но и два ("сбой"), могут образовать также пару импульсов, похожих на импульсы в нашей команде ("ложная тревога").
Мы снова можем добавить в команды по импульсу, например так: 1011 и 0100, то есть ввести дополнительную избыточность, а дешифратор "научить" срабатывать от любых трех прошедших импульсов или только от некоторых.
Так у сигнала появляются спутники - телохранители, которые, отчаянно сражаясь с помехами, часто сами гибнут в неравном бою, но расчищают информации путь к корреспонденту сквозь вражеские полчища помех.