Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по дискретной математике / Лекции по дискретной математике.doc
Скачиваний:
77
Добавлен:
01.05.2014
Размер:
2.52 Mб
Скачать

Глава III. Кодирование

3.1. Основные задачи теории кодирования.

Задача кодирования имеет множество аспектов. Перечислим основные из них.

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

  2. Сжатие информации в базах данных.

  3. Обеспечение помехоустойчивости при передаче по каналам связи.

  4. Защита информации от несанкционированного доступа.

Здесь будет рассмотрено лишь двоичное кодирование текстов из некоторого символьного алфавита, например, букв и цифр. Для такого кодирования будут изучаться задачи 3 и 4.

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

Такой принцип, позволяющий сокращать время передачи сообщения, и был впервые реализован в азбуке Морзе (1837г.), где буква «е» кодируется одной точкой, а реже встречающаяся в английских текстах буква «о» - тремя тире.

С другой стороны, значительными техническими удобствами обладает равномерное кодирование, при котором все символы кодируются двоичными блоками одинаковой длины. Этот принцип был впервые реализован в телеграфном коде Боде (1877г.). Каждая буква в нем кодируется двоичным набором длины 5. Число таких наборов 25=32 оказывается достаточным для кодирования алфавитов европейских языков.

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

Тест

  1. Какой код называют двоичным блоковым кодом? а) Код, состоящий из двоичных наборов; б) Код, состоящий из двоичных наборов фиксированной длины.

  2. Является ли азбука Морзе блоковым кодом? а) да; б) нет.

  3. Какова длина телеграфного кода? а) 4; б) 5; в) 6.

3.2. Помехоустойчивое кодирование.

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

Пусть и- два двоичных набора (блока) длиныn. Расстоянием Хэмминга между ними называется число позиций, в которых они различаются. Пусть, например,,. Тогда, т.к. наборы различаются в первой и четвертой позициях. Расстояние Хэмминга удовлетворяет обычным аксиомам метрики:

  1. , причем тогда и только тогда, когда;

  2. ;

  3. (неравенство треугольника).

Шаром Хэмминга радиуса с центром вбудем называть множество наборовтаких, что. В шаре радиусасодержитсянаборов.

Пусть теперь кодовые слова выбраны из множества 2n блоков так, что расстояние между каждой парой слов не меньше , где– некоторое натуральное число. Тогда, если при передаче слова произошло не болееошибок, то их можно исправить по правилу ближайшего соседа: истинное кодовое слово является ближайшим кодовым словом к полученному в результате ошибок блоку. Таким образом, ограниченное число ошибок может быть исправлено и истинное кодовое слово восстановлено.

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

Один из основных подходов к построению кодов основан на том, что множество двоичных блоков длины рассматривается как множество– мерных векторов. Сложение векторов осуществляется их покоординатным сложением, причем 0+0=0, 0+1=1+0=1, 1+1=0, т.е. сложение выполняется по модулю 2. Векторы можно также умножать на 1 и 0, при этом умножение на 1 оставляет вектор без изменения, а умножение на 0 делает его нуль – вектором. Скалярное произведение двух векторов есть сумма их покоординатных произведений, приведенная по модулю 2. Таким образом, скалярное произведение также равно 0 или 1. Если скалярное произведение двух векторов равно 0, то говорят, что они ортогональны. Если в определенном таким образом линейном пространстве выбрано некоторое подпространство размерности, то множество векторов, ортогональных ко всем векторам подпространства, также является линейным подпространством. Которое имеет размерностьи называется подпространством ортогональным к исходному.

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

Важный класс кодов, называемых линейными, определяется тем, что в линейном пространстве двоичных блоков выбирается некоторое подпространство и его векторы объявляются кодовыми словами. Пусть выбранное подпространство имеет размерность . Тогда в нем существуетлинейно независимых векторов (базис) и любой вектор подпространства является их линейной комбинацией. Так как каждый коэффициент линейной комбинации равнее 0 или 1, то всего существует 2k различных линейных комбинаций, т.е. кодовое подпространство имеет 2k векторов.

Пусть ,– два произвольных слова линейного кода. Прибавив к каждому слово(как вектор), получим два других кодовых слова 0 и. Ясно, что, норавно числу единиц в слове. Отсюда следует, что минимальное расстояние между кодовыми словами линейного кода равно минимальному числу единиц ненулевого кодового слова.

Пусть - базисные векторы кодового подпространства,- матрица, строками которой являются векторы. Она называется порождающей матрицей кода. Выбрав в пространстве, ортогональном кодовому, базис, образуем таким же образом матрицу,которая называется проверочной матрицей кода. Каждый вектор, ортогонален каждому из векторов. Это может быть записано как, где- матрица, состоящая из нулей.

Имея проверочную матрицу , кодовое подпространство можно определить как множество векторов, удовлетворяющих соотношению

,

где 0 – вектор – столбец из нулей.

Опишем теперь прием, позволяющий строить линейный код с минимальным расстоянием 3. Выберем некоторое натуральное число и сформируем матрицутак, чтобы все еёстолбцов были нулевыми и попарно различными, что всегда возможно при. Тогда линейный код с проверочной матрицейбудет иметь кодовое расстояние не менее 3, т.к. вектор, имеющий одну или две единицы не может удовлетворять соотношению. Этот линейный код, способный исправить одну ошибку, называется кодом Хэмминга.

Особенно изящной эта конструкция оказывается при . Пусть– произвольное слово (не обязательно кодовое), и пусть. Тогда, если, тоявляется кодовым словом. Если же, тоявляется одним из столбцов матрицы, например– ым. Тогда, инвертировав– ую координату вектора, мы получим кодовое слово.

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

В качестве примера пусть ,, тогда проверочная матрица

.

Совершенный код Хэмминга длины 7 с проверочной матрицей содержит 24=16 кодовых слов. Допустим, что на приемном конце канала связи было принято слово . Так как

.

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

Тест