Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Reliability2.doc
Скачиваний:
35
Добавлен:
27.10.2018
Размер:
1.2 Mб
Скачать

6. Пример эффективного использования избыточности. Помехоустойчивое кодирование

Чем сложнее устройство, чем из большего числа элементов оно состоит, тем больше должна быть вероятность отказов. Это естественное умозаключение входит в противоречие с нашей повседневной действительностью. Скажем, стремительное увеличение емкости накопителей информации совсем не приводит к увеличению числа сбоев. Напротив, нынешние терабайтные жесткие диски много надежнее 2-мегабайтных, которыми мы пользовались в начале 80-х прошлого века. Еще удивительнее тот факт, что при стремительном росте скорости и объемов данных, передаваемых по каналам связи, конечный пользователь информации практически никогда не замечает, чтобы в этих принятых данных были ошибки.

Один нетривиальный пример того, как увеличение сложности схемы может повышать ее надежность, был приведен в предыдущем параграфе. В данном параграфе мы очень коротко опишем решение еще одной задачи – защита от ошибок при хранении либо передаче данных, записанных в двоичной форме. Мы увидим, что для надежной передачи информации к ней надо добавить избыточные данные, которые позволят обнаружить наличие ошибок, а если ошибок не слишком много, то и исправить их.

6.1. Постановка задачи.

Начнем с примера. Рассмотрим систему связи, в которой входом канала являются двоичные сигналы, соответствующие символам алфавита . На выходе канала каждый сигнал анализируется и выносится решение в пользу одного из двоичных символов выходного алфавита .

Будем считать, что подлежащая передаче информация представлена в двоичной форме и поэтому элементарные сообщения представляют собой также двоичные символы 0 либо 1. Таким образом, мы можем непосредственно использовать входные символы канала для передачи сообщений источника. Предположим, однако, что из-за шума в канале связи при передаче сигналов возможны ошибки. Как можно усовершенствовать систему связи, с тем, чтобы устранить ошибки или, по меньшей мере, уменьшить их долю в принятой последовательности сообщений?

Приведем примеры кодов, исправляющих ошибки.

Пример 6.1. Будем вместо сообщения 0 передавать последовательность 000, а вместо 1 – последовательность 111. Множество передаваемых по каналу последовательностей образует код, который в данном случае имеет длину 3 и содержит 2 кодовых слова (мощность кода равна 2). Считая, что правильная передача символов более вероятна, чем неправильная, легко предложить разумную стратегию принятия решений декодером. Если принятая из канала последовательность «больше похожа» на 000, чем на 111, декодер считает, что передавалось сообщение 0, в противном случае принимает решение в пользу сообщения 1. Иначе говоря, если число единиц меньше 2, решение принимается в пользу 0, в противном случае – в пользу 1.

Число несовпадающих позиций в двух последовательностях и называют расстоянием Хэмминга между этими последовательностями. Описанный в примере декодер является декодером, принимающим решения по принципу минимума расстояния Хэмминга.

Назовем множество последовательностей на выходе канала, декодируемых в пользу некоторого кодового слова (точнее, в пользу сообщения, соответствующего этому слову), решающей областью слова (сообщения). Решающие области для данного примера приведены в таблице 6.1.

Таблица 6.1.

Корректирующий код из примера 6.1.

Сообщения

Кодовые слова

Решающие области

0

000

{000, 001, 010, 100}

1

111

{011, 101, 110, 111}

Нетрудно видеть, что одиночная ошибка в канале связи при использовании такого кода не опасна. Декодер примет правильное решение. Про такой код говорят, что он исправляет все ошибки кратности 1. Заметим, что на передачу одного бита информации данный код затрачивает 3 двоичных сигнала. Разумной характеристикой кода служит его скорость, которая указывает количество бит информации, переносимых одним сигналом. Скорость кода в данном примере равна

(бит/символ канала). ■

Рассмотрим еще один, немного более сложный, пример кода, исправляющего одиночные ошибки.

Пример 6.2. Объединим биты передаваемого сообщения в пары. Множество «расширенных сообщений» состоит теперь из 4 различных двоичных комбинаций. Приведенный в таблице 6.2. пример показывает одну из возможных конструкций кода для этого множества сообщений.

Таблица 6.2.

Код для примера 6.2.

Сообщения

Кодовые слова

Решающие области

00

00000

{00000,00001,00010,00100,01000,10000,11000,10001}

01

10110

{10110,10111,10100,10010,11110,00110,01110,00111}

10

01011

{01011,01010,01001,01111,00011,11011,10011,11010}

11

11101

{11101,11100,11111,11001,10101,01101,00101,01100}

Непосредственной проверкой можно убедиться в том, что этот код также не боится однократных ошибок, но его скорость несколько больше, поскольку 5 сигналов будет затрачено уже на передачу 2 двоичных сообщений. Поэтому

(бит/символ канала). ■

Понятно, что рассмотренные коды не спасают полностью от ошибок при передаче сообщений. Код примера 6.1. не защищает от двукратных ошибок. Код примера 6.2 исправляет некоторые комбинации 2-кратных ошибок (например, 11000, 10001), но все остальные комбинации из 2 или большего числа ошибок неминуемо приводят к выдаче получателю неправильно восстановленных сообщений.

Приведенные выше примеры убеждают в том, что важными характеристиками кода, защищающего информацию от ошибок, являются его скорость и помехоустойчивость. Последняя характеристика может быть численно измерена вероятностью выдачи получателю ошибочного сообщения.

Для того, чтобы надежно передавать данные, нужно исправлять много ошибок, соответственно коды должны быть длинными. Для того, чтобы скорость передачи оставалась высокой, коды должны содержать много кодовых слов. Например, по сегодняшним меркам коды длины 1000 не рассматривается как длинный. В то же время, чтобы скорость была равна 1/2, кодовое слово должно нести 500 бит информации и, соответственно, код должен содержать кодовых слов. Очевидно, не может существовать кодера, который хранил бы список из такого числа слов и никакой декодер не может искать переданное слово, сравнивая принятую последовательность со всеми словами такого списка. Как же устроены реальные кодеры и декодеры?

Решение задачи состоит в том, что в памяти хранится лишь небольшое число слов, а остальные слова получаются из них с помощью простых арифметических операций. Чтоб двигаться дальше, понадобится несколько определений и понятий из линейной алгебры над конечными множествами чисел.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]