Вы находитесь на странице: 1из 63

1 Линейные коды

1.1 Основные понятия

Моментом появления теории информации вообще, и теории помехоустойчивого кодирования, в частности, принято счи- тать 1948 год, когда были опубликованы Шенноновские теоре- мы существования — прямая и обратная. Прямая утверждает, что для любого канала связи можно обеспечить передачу со сколь угодно малой вероятностью ошибки P 0, если только скорость передачи в канале не превышает некоторой констан- ты R < C, которая носит название пропускной способности канала. Обратная теорема утверждает, что не существует ме- тода кодирования, который при скорости передачи, хотя бы на ε превышающую пропускную способность канала, может обеспечить вероятность ошибки, не стремящуюся к единице. Таким образом, смысл пропускной способности канала — это предельная скорость, при которой возможна передача. Канал связи — это место, где происходят ошибки. Рас- смотрим стандартную модель двоично-симметричного канала (рис. ??). Пусть мы хотим передавать по каналу символы 0 и 1. С некоторой вероятностью p мы будем получать на выхо- де не тот символ, который передавался. Естественный путь повышения надежности при передаче — повторение одного и того же символа заданное число раз (код с повторением ). Очевидно, что, повторив символ 0 (или 1) n раз, мы обеспе- чим возможность обнаружения n 1 ошибок, и исправления n 1/2 ошибок. Вероятность ошибки стремится к нулю с ростом n, однако, к нулю при этом стремится и скорость пе- редачи R = 1/n. Однако, теоремы Шеннона утверждают, что сколь угодно надежная передача с использованием кодирова- ния возможна при скоростях, не стремящихся к нулю. Хотя эти теоремы не дают конструктивных способов построения ко- дов, рассмотренная ранее идея внесения избыточности может быть использована для получения хороших кодов. Для этого достаточно только заметить, что, если мы обрабатываем не

1

один бит, а блок из k бит, ставя ему в соответствие блок из n бит, n > k, полученный код имеет скорость

R = k

n ,

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

m 1 , m 2 ,

будем передавать кодовые слова a 1 , a 2 ,

., m N . Вместо этой последовательности сообщений

, a N :

m 1

.

m N

ϕ

−→ a 1

.

.

ϕ

−→ a N

(1.1)

Пусть длина передаваемых сообщений равна k (символов в

некотором алфавите), а длина кодовых слов равна n, k < n, т.е. внесена избыточность r = n k. Множество слов A =

{a 1 , a 2 ,

1, n,

где α i — символ некоторого конечного алфавита из q элемен- тов, назовем кодом. В дальнейшем ограничимся рассмотрени- ем только двоичных последовательностей, то есть q = 2. Отоб- ражение (1.1) безызбыточных сообщений на кодовые слова бу- дем называть процедурой кодирования. Параметрами кода являются кодовая длина n, и число слов

в коде N = 2 k . Однако, оба эти параметра не характеризуют вероятность ошибки декодирования P ош . Попробуем опреде- лить параметр кода, влияющий на P ош . Снова рассмотрим код с повторением с n = 3, т.е. каждый ноль мы кодируем тремя нулями, а каждую единицу — тремя единицами. Тогда, оче- видно, мы можем исправить одну ошибку: последовательно- сти 100, 010 или 001 больше ”похожи” на последовательность

довательность из n символов a i = {α 1 , α 2 ,

, a N }, каждое из которых представляет собой после-

, α n },

i

2

из всех нулей, чем из всех единиц, и можно принять реше- ние, что передавался 0. Аналогично, чтобы исправить любые 2 ошибки, понадобится n = 5 кодовых бит. Таким образом, процедура декодирования, то есть восста- новления переданного слова по принятому, заключается в опре- деления кодового слова, наиболее ”похожего” на принятое сло- во. Такая похожесть может быть выражена с помощью рассто- яния между двумя векторами x и y, то есть функции d(x, y), обладающей свойствами:

1. d(x, y) 0,

2. d(x, y) = d(y, x)

3. d(x, z) d(x, y) + d(y, z)

d(x, y) = 0 x = y

Определение 1.1 Расстояние Хэмминга d H (x, y) между дву- мя векторами x и y определяется как число позиций, в которых эти векторы различаются.

Расстояние Хэмминга — это функция, которая удовлетво- ряет всем свойствам расстояния. Тогда расстояние Хэмминга между векторами 11111 и 00000 равно 5. Ошибка в одном слове приближает нас к другому слову, поэтому может быть исправ- лена, только если она меньше половины расстояния. Так, если расстояние между векторами d, то можно исправить

t = d 1

2

ошибок. Однако в общем случае код содержит не два слова, а гораздо больше, поэтому между одной парой слов может быть маленькое расстояние, между другой парой слов — боль- шое. За меру, характеризующую код в целом, принимают ми- нимальное кодовое расстояние d 0 = min i =j d(a i , a j ). Код с ми- нимальным расстоянием d 0 может исправить любую комбина- цию из (d 0 1)/2 ошибок. Таким образом, мы получили еще

3

один параметр кода: минимальное кодовое расстояние. Вели- чина d 0 связана с вероятностью ошибки декодирования P ош , однако, этот параметр не характеризует все ошибки, которые может исправлять код. Подробнее вычисление P ош рассматри- вается в разделе ??. Любая система передачи информации характеризуется сле- дующими параметрами:

1. P ош — вероятность ошибки

2. V — скорость передачи (бит/сек)

3. ϑ — сложность устройств кодера/декодера

При построении системы связи требуется обеспечить высокую скорость передачи при малой вероятности ошибки и малой сложности, то есть:

P ош ,

V ,

ϑ

Эти параметры связаны с параметрами кода: сложность ϑ пря- мо зависит от длины кода n, скорость передачи прямо зависит от числа слов в коде N (так как она зависит от k, а N = 2 k ), вероятность ошибки P ош связана с расстоянием d 0 . Таким образом, требуется обеспечить:

d 0 ,

N ,

n

Однако данные требования противоречивы. Длина кода n определяет размер пространства сообщений длины n. Если за- фиксировать этот параметр, то увеличение N повлечет за со- бой уменьшение d 0 , и наоборот. Таким образом, задача по- строения хорошего кода может формулироваться как опти- мизация одного из параметров d 0 , N , n при фиксированных остальных параметрах. Обычно рассматривается задача мак- симизации N (n, d 0 ) при фиксированных значениях n и d 0 . В следующем разделе мы рассмотрим существующие границы для числа слов в коде N .

4

1.2 Нижняя и верхняя границы для числа слов в коде

Введем понятия нижней и верхней границы для числа слов в

¯

коде. Верхняя граница N определяется утверждением: не су-

¯

ществует кода, число слов в котором N > N . Нижняя граница

N определяется утверждением: существует код, число слов в котором N N . В связи с этими определениями нижнюю границу иногда называют границей существования, верхнюю — границей несуществования. Таким образом, граница N = N — граница, практически не достижимая (за исключением некоторых классов кодов, назы- ваемых совершенными, доказано, что неизвестных совершен-

ных кодов не существует [?]), а N = N — граница, на которой лежат хорошие коды. Можно дать другую трактовку верхней и нижней границы: пусть N 0 — оптимальное значение числа

¯

¯

слов в коде. Тогда N N 0 N.

1.2.1 Граница Хэмминга

¯

Верхняя граница N , или граница Хэмминга, строится следу- ющим образом: все пространство двоичных последовательно- стей длины n имеет размер 2 n . Пусть у нас есть некоторый код, будем рассматривать сферы радиуса t = (d 1)/2 (d — ми- нимальное кодовое расстояние), центрами которых являются кодовые слова, см. рис. ??. Такая геометрическая трактовка

обусловлена тем, что для d выполняются свойства расстоя- ния, а следовательно, справедливы все геометрические поня- тия. Таким образом, можно определить сферы радиуса t — геометрическое место точек, находящихся на расстоянии Хэм- минга t от центра. Обозначим за V t объем полученной сферы, т.е. число точек внутри нее, и умножим на N — число слов в коде. Тогда

V t · N 2 n

5

— объем пространства, занятый сферами. Мы получили верх- нюю оценку

¯

N

= 2 n .

V t

Осталось найти объем сферы V t . Центром сферы является последовательность длины n. Внутри сферы находятся: сам центр сферы, вектора, которые отличаются от него в одной позиции (таких векторов C n = n), вектора, отличающиеся от него в двух позициях (C n = n · (n 1)/2), и так далее, до векторов, отличающихся от данного в t позициях (то есть на- ходящегося на расстоянии t). Таким образом,

2

1

V t = 1 + C n + C n +

1

2

t

+ C n .

Тогда

¯ 2 n

N =

t

i=0 C n

i

— верхняя граница Хэмминга, или граница плотной упаковки. Такое название связано с тем, что мы пытаемся сферами ”плотно упаковать” все пространство векторов длины n, пы- таясь оценить максимальное число сфер, которые при такой упаковке могут ”уместиться” в пространство.

1.2.2 Граница Варшамова-Гилберта

Нижняя граница, или граница Варшамова-Гилберта, строит- ся следующим образом. В отличие от границы Хэмминга, где мы пытались найти максимально возможное число слов в коде (при заданных ограничениях n и d), при этом получая границу несуществования, в данном случае указывается процедура по- строения кода с заданными n и d, при этом делается попытка максимизировать число N слов в этом коде, что соответствует границе существования — код с таким N точно существует. Возьмем произвольную точку пространства всех векторов длины n и построим вокруг нее сферу радиуса d 1. Будем

6

считать взятую точку кодовым словом, а все остальные точ- ки внутри сферы радиуса d 1 запретим для использования в качестве кодовых слов (так как необходимо обеспечить ми- нимальное расстояние кода d). Затем, в качестве следующего кодового слова, берется произвольная точка из незапрещенной области пространства. Вокруг нее также проводится сфера ра- диуса d 1 и запрещаются все точки внутри сферы (рис. ??). Так действовать можно до тех пор, пока в пространстве не останется незапрещенных слов. Так как сферы имеют ради- ус d, они могут пересекаться, для того, чтобы максимизиро- вать параметр N , нужно строить сферы таким образом, что- бы области их пересечений были как можно большими. Одна- ко сложно учесть эти пересечения при вычислении N , будем исходить из худего случая — когда проведенные сферы не пе- ресекаются. Тогда

Отсюда получаем

N

N

·

V d1

2 n .

· V d1 = 2 n .

Используя полученные в разделе 1.2.1 выражения для объема сферы заданного радиуса, получим

N =

2 n

d1

i=0

i

n

C

.

Границу Варшамова-Гилберта иногда называют границей по- крытий — с помощью как можно большего числа сфер дела- ется попытка ”покрыть” все пространство из 2 n векторов. Коды, лежащие на границе Варшамова-Гилберта, являют- ся хорошими. Задача построения кодов на границе Варшамова- Гилберта является важной задачей теории кодирования.

1.3 Задание линейных блоковых кодов

В предыдущих разделах мы рассматривали код как отобра- жение (1.1) множества из 2 k информационных слов длины k

7

в множество кодовых слов длины n. Очевидно, что уже при малых величинах k задание кода с помощью таблицы 1.1 ста- новится нереализуемым. Необходим более простой метод за- дания кода (кодирования), такой метод может быть предло- жен с помощью математического аппарата линейных вектор- ных пространств. Множество V называется векторным (линейным) простран- ством на полем K, если

1. V является абелевой группой по сложению

2. Для любых v V , λ K определен λv V (умножение вектора v на скаляр λ), при этом

(a)

λ(v 1 + v 2 ) = λv 1 + λv 2

(b)

(λ 1 + λ 2 )v = λ 1 v + λ 2 v

(c)

(λ 1 λ 2 )v = λ 1 (λ 2 v)

(d)

1 K · v = v

Здесь 1 K — нейтральный элемент по умножению поля K. Например, векторным пространством является множество

, α n }, α i K, где операции

последовательностей a = {α 1 ,

сложения и умножения на скаляр определены как

a + b = (α 1 + β 1 ,

λa = (λα 1 ,

,

λα n )

,

α n + β n )

Будем рассматривать векторные пространства в поле по мо- дулю 2. В каждом линейном пространстве размерности k есть ба- зис, то есть набор из k линейно независимых векторов. Линей- ное пространство задается всеми 2 k линейными комбинациями векторов базиса. Это позволяет компактно задавать линейное пространство.

Определение 1.2 Линейным двоичным (n, k)-кодом будем на- зывать любое k-мерное подпространство n-мерного простран- ства двоичных последовательностей.

8

Так как (n, k)-код является k-мерным пространством, он содержит базис из k линейно независимых векторов. Запишем этот базис в матрицу G размерности k × n, и назовем ее по- рождающей, или генераторной, матрицей кода. Тогда кодирование может быть представлено следующей процедурой. Пусть m — информационный вектор длины k. То- гда кодовое слово a получается умножением информационного вектора на порождающую матрицу G:

ϕ

m −→ a = m · G.

Матрица G содержит информацию о параметрах кода: длине n, числе кодовых слов N = 2 k и скорости R = k/n. Един- ственный параметр, не задаваемый в явном виде порождаю- щей матрицей — минимальное расстояние d 0 . Пусть порождающая матрица G имеет вид

G = [C 1 |C 2 ],

где C 1 — квадратная k × k-матрица, C 2 — некая матрица раз- мерности k × n k. Тогда, если C 1 — невырожденная матрица,

, получим другой базис

то, умножив матрицу G слева на C этого же линейного пространства G :

1

1

G = [I k |C],

где I k — единичная k × k-матрица, C = C кодировании с помощью матрицы G :

ϕ

m −→ a = m · G = (m|c),

1

1

(1.2)

C 2 . Тогда при

то есть первые k позиций кодового слова всегда содержат ин- формационный вектор в явном виде. Код, заданный матрицей вида (1.2), называется систематическим. Рассмотрим матрицу

H

= C T |I r

9

(1.3)

размерности r×n, где r = nk — число избыточных символов, C k ×r-матрица из (1.2). Здесь матрица H записана в общем виде, для случая двоичных кодов можно принять C = C. Заметим, что

GH T = [I k |C] · C = C + C = 0.

I r

То есть, матрица (1.3) является базисом пространства, орто- гонального коду G. Для любого кодового слова будет выпол- няться равенство

¯

aH T = (mG)H T = m(GH T ) =

¯

0.

C другой стороны, ни для какого вектора e, не являющегося кодовым словом, произведение eH T не может быть равно нулю (нулевому вектору), так как e не принадлежит пространству G. То есть, линейный код может быть описан и как множество слов {a}, таких, что

aH T = 0.

Матрица H также однозначно задает линейный код, и назы- вается проверочной матрицей кода. С помощью матрицы H можно проверить, является ли некоторый вектор кодовым сло- вом. Таким образом, существует несложная процедура обна- ружения ошибок кратности до d 0 1. Пусть из канала связи принято слово b. Вычислив синдром

(1.4)

можно принять решение о том, что принято кодовое слово (ес- ли синдром равен нулю), или же обнаружена ошибка передачи (в противном случае). Итак, линейные коды позволяют с помощью задания по- рождающей и проверочной матрицы кода легко решать зада- чи кодирования и обнаружения ошибок. С другой стороны, свойство линейности пока никак не использовалось для опре- деления минимального расстояния кода d 0 . Кроме того, су- ществует возможность того, что, наложив на коды свойство

S

= bH T ,

10

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

1.4 Теорема о минимальном расстоянии ли- нейных кодов

Будем называть весом Хэмминга W H (x) (или просто W (x)) некоторого вектора x число ненулевых позиций в этом векто- ре. Назовем минимальным весом W 0 кода G минимальный вес ненулевых кодовых слов,

W 0 = min

a

i

G W(a i ).

Тогда справедливо следующее утверждение.

Лемма 1.1 Минимальное расстояние линейного кода равно его минимальному весу,

d 0 = W 0 .

Доказательство. Пусть d 0 — минимальное расстояние кода. Тогда существует два кодовых слова, a и a , таких, что d 0 = d(a, a ). Заметим, что справедливо равенство

d(a, a ) = d(a + e, a + e).

Примем e = a , тогда

d(a + a , a + a ) =

d(a + a , 0) = da, 0) = W a).

Так как сумма двух слов линейного кода также является ко- довым словом, aˆ — кодовое слово, и

(1.5)

d 0 = W a) W 0 .

11

Теперь, пусть W 0 — минимальный вес. Тогда существует такое кодовое слово a, для которого

W 0 = W (a) = d(a, 0).

Но тогда

W 0

d 0 .

(1.6)

Из (1.5) и (1.6) получаем условие Леммы.

Пользуясь Леммой 1.1, можно доказать следующую теоре- му о минимальном расстоянии линейных кодов.

Теорема 1.1 Для того, чтобы линейный (n, k)-код с прове- рочной матрицей H имел минимальное расстояние d 0 , необ- ходимо и достаточно, чтобы:

1. Любые d 0 1 столбцов матрицы H были линейно неза- висимы;

2. В матрице H существовали d 0 линейно зависимых столб- цов.

Доказательство. Докажем необходимость. Пусть d 0 — ми- нимальное расстояние кода. Тогда по Лемме 1.1 в коде есть

слово a веса W (a) = W 0 = d 0 , где W 0 — минимальный вес

кода. Пусть {α i 1 ,

a. Так как a является кодовым словом,

., α i W 0 } — все ненулевые элементы вектора

aH T = 0,

это означает, что W 0 = d 0 столбцов матрицы H с номерами

{i 1 ,

W 0 — минимальный вес, в матрице H не может быть менее, чем d 0 , линейно зависимых столбцов.

Теперь докажем достаточность. Пусть в матрице H есть d 0

, h i d 0 }. Тогда эти столб-

линейно зависимых столбцов {h i 1 ,

., i W 0 } линейно зависимы. С другой стороны, так как

цы задают кодовое слово веса d 0 , которое содержит ненулевые

12

, i d 0 }, и нули на остальных пози-

циях. Если матрица H не содержит d 0 1 или менее линейно

зависимых столбцов, в коде нет ненулевых слов веса, меньше-

элементы на позициях {i 1 ,

го d 0 = W 0 .

Пример 1.1 Пусть есть код с проверочной матрицей

H = 0

1

0

0

1

0

1

1

0

0

0

0

0

1

0

1

0

0

0

1

0

0

0

1

Так как в матрице есть нулевой столбец, минимальное рассто- яние этого кода d 0 = 1. Удалив нулевой столбец, получим код с d 0 = 2, так как в матрице присутствуют два одинаковых столбца. Теперь рассмотрим код

H = 0

1

0

0

1

0

1

1

0

0

1

1

1

1

1

1

0

1

0

0

1

 

(1.7)

В матрице (1.7) нет ни нулевого, ни двух одинаковых столбцов. Минимальное число линейно зависимых столбцов равно 3, и следовательно, d 0 = 3. Итак, получили код с n = 7, k = 4, d 0 = 2t + 1 = 3, исправляющий одну ошибку. Найдем границу Хэмминга для n = 7, t = 1:

¯ 2 n

N =

2 7

=

t

i=0 C n

i

1 + C

1

7

= 16 = 2 4 .

То есть, код с матрицей (1.7) лежит на границе Хэмминга. Это совершенный (7,4)-код Хэмминга, столбцы проверочной матрицы которого получены из всех 2 3 1 ненулевых двоичных векторов.

Теорема 1.1 дает способ нахождения минимального рас- стояния линейных кодов. Однако, сложность этой процедуры

13

остается экспоненциальной, так как не известно простого спо- соба нахождения максимального числа d 0 , такого, что любые d 0 1 столбцов линейно независимы. В следующем разделе рассматриваются границы для ли- нейных кодов.

1.5 Граница Варшамова-Гилберта для линей- ных кодов

Укажем процедуру для построения проверочной матрицы H. Чтобы код имел расстояние d 0 , любые d 0 1 столбцов в H должны быть линейно независимы. Будем строить столбец за столбцом так, чтобы никакие d 0 1 столбцов не были линей- но зависимы. Процедура окончится, когда невозможно будет построить очередной линейно независимый столбец. Первый столбец можно выбрать 2 r 1 способами (исклю- чая нулевой столбец). На втором шаге запрещенными являют- ся уже два столбца — нулевой и поставленный на предыдущем шаге. На каждом следующем шаге запрещаются все предыду- щие столбцы и их линейные комбинации. Итак, пусть постро- ено j 1 столбцов. При каких условиях можно поставить j-ый столбец? На данном шаге запрещено

2

1 + j 1 + C j1 +

+ C

d 0 2

j1

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

2

1 + j 1 + C j1 +

+ C

d 0 2

j1

2 r .

Отсюда можно определить длину кода. Выберем самое послед- нее число j, для которого неравенство выполняется, тогда дли- на кода составит n = j 1. Тогда имеем

d 0 2

i=0

C n 2 r = 2 n /2 k ,

i

14

отсюда

2

k

2 n

d 0 2

i=0

i

n

C

.

(1.8)

Соотношение (1.8) является улучшенной границей Варшамова- Гилберта для линейных кодов. Подсчитаем, сколько всего существует кодов с параметра-

ми (n, k). Если считать, что каждая порождающая матрица задает код (это не совсем верно, так как у одного линейно- го пространства существует много базисов), имеем 2 nk кодов. Какая доля этих кодов лежит на нижней границе? Будем считать, что матрица H выбирается случайно. За- дадим вероятностный ансамбль матриц, полагая, что вероят- ность выбора 0 или 1 на конкретной позиции равна 1/2. Тогда все матрицы появляются с одинаковой вероятностью 2 rn .

, α n ). Это

слово будет принадлежать некоторому коду a A H , где A H — код, задаваемый проверочной матрицей H, с вероятностью

, h n ].

Pr(a A H ). Пусть матрица H состоит из столбцов [h 1 ,

Теперь возьмем произвольное слово a = (α 1 ,

Тогда aH T = α 1 h 1 +

отсюда

+ α n1 h n1 . (1.9)

Если слово a — ненулевое, оно содержит хотя бы одну нену- левую позицию. Для определенности положим, что последняя

позиция не равна нулю. Таким образом, вероятность того, что слово a принадлежит коду A H , равна вероятности выполнения

, h n1 ],

равенства (1.9). Какими бы ни были столбцы [h 1 ,

для выполнения равенства (1.9) достаточно правильно подо- брать столбец h n . Тогда

+ α n1 h n1 + α n h n = 0,

α n h n = α 1 h 1 +

Pr(a A H ) = 2 r .

Теперь введем понятие ”плохого” вектора. Все вектора, вес

15

которых W < d ВГ (где d ВГ — получено из уравнения

d ВГ r

i=0

i

C n = 2 r ,

будем называть плохими. Если код содержит хотя бы один та- кой вектор, то он лежит ниже границы Варшамова-Гилберта. Таких векторов

d ВГ 1

i=1

i

n

C

.

Вероятность того, что произвольный код A H содержит хотя бы один плохой вектор a b , равна

Pr(a b A H ) =

d ВГ 1

i=1

C

i

n 2 r .

Если

Pr(a b A H ) < 1,

то существует хотя бы один ”хороший” код. Фактически, мы получили границу Варшамова-Гилберта другим способом. На самом деле,

d ВГ εn

i=1

C

i 2 r

n

— доля плохих кодов длины n. Оценим, как будет меняться

эта доля с ростом n. Для этого оценим C формулой Стирлинга:

αn , α < 1, пользуясь

n

n! n n .

e

Тогда

C

αn

n

=

n! (αn)!(n(1 α))!

n

e

αn n n(1 α)

e

αn

e

n(1α) =

1

α αn (1 α) (1α)n .

16

Теперь, учитывая, что α = 2 log 2 α , (1 α) = 2 log 2 (1α) , по- лучим

C

αn

n

=

2 nH(α) ,

где

H(α) = α log α (1 α) log(1 α).

В кодировании ”хорошими” называют коды, у которых до- ля n d не стремится к нулю при n → ∞ и R = const. Пусть

Тогда

dεn

C

i

n 2 r =

i=1

δnεn

i=1

d

n = δ.

n i 2 (1R)n < nC (δε)n 2 (1R)n n2 n(H(δε)(1R)) 2 n(H(δε)H(δ)) 2

C

n

n→∞

0.

Таким образом, мы получили, что доля плохих кодов стремит- ся к нулю с ростом длины кода n, другими словами, почти все коды в асимптотике лежат на границе Варшамова-Гилберта. Однако, данный факт не дает процедуры построения хороших кодов. Задача построения таких кодов является важной зада- чей теории кодирования.

2 Декодирование линейных кодов

2.1 Полное декодирование линейных блоко- вых кодов

В предыдущем разделе мы описывали линейные коды, вопро-

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

, a N } — множество

Пусть b — принятое слово, {a 1 , a 2 ,

кодовых слов. Будем рассматривать аддитивные каналы, то есть такие, в которых произошедшие в канале ошибки можно

17

a

1

a

2

.

.

.

a

2 k

e

2

a 2 + e 2

.

.

.

a 2 k + e 2

.

.

.

.

.

.

.

.

.

.

.

.

e

2 r

a 2 + e 2 r

.

.

.

a 2 k + e 2 r

Таблица 2.1. Стандартная расстановка

описать с помощью вектора ошибок, покомпонентно добавля- емому к передаваемому кодовому слову a:

b = a + e.

Процедура декодирования заключается в том, чтобы по при- нятому слову определить, какое кодовое слово передавалось. При этом нужно максимизировать условную вероятность P (a|b). Слово, для которого вероятность будет максимальной, и бу- дет считаться результатом декодирования. Такое декодирова- ние называется декодированием по максимуму правдоподобия. Другим способом декодирования является нахождение кодо- вого слова, ”ближайшего” к принятому в терминах некоторого расстояния, например, Хэмминга, то есть задачей является ми- нимизация d(a, b). Такое декодирование называется декодиро- ванием по минимуму расстояния, оно может быть осуществ- лено перебором по всем 2 k кодовым словам. Рассмотрим таблицу 2.1. она содержит все 2 n векторов про- странства. Строится она следующим образом: первую ее стро- ку составляют кодовые слова, затем вектор e 2 выбирается как любой вектор, не вошедший в первую строку, вектор e 3 — лю- бой вектор, не вошедший в первые две строки, и так далее. Легко показать, что все элементы построенной таблицы раз- личны, т.е. никакой вектор из пространства 2 n не входит в нее более одного раза. Следовательно, таблица содержит 2 2 k = 2 r строк. Строка такой таблицы называется смежным классом, а вектор, стоящий в первом столбце — лидером смежного клас- са. Таблица 2.1 называется стандартной расстановкой. Од-

n

18

ним из ее свойств является то, что выбор лидера смежного класса влияет только на порядок следования векторов в этом смежном классе, но не меняет самого множества векторов, вхо- дящих в данный смежный класс. Заметим, что синдром любого вектора в смежном классе с лидером e одинаков,

S(a i + e) = a i H T + eH T = eH T ,

i = 1, 2 k .

Таким образом, если вычислить синдром (1.4) по принятому вектору b = a + e, где a — передававшееся кодовое слово, e — вектор ошибки, это позволит определить смежный класс, в котором лежит вектор e, но не сам вектор e. Будем считать, что вектором ошибки является лидер смежного класса, чей синдром совпадает с синдромом принятого слова. Тогда можно сформулировать следующую процедуру декодирования.

1. вычисляется синдром S принятого вектора b

2. в таблице стандартной расстановки ищется синдром S и

определяется соответствующий S лидер смежного класса

e

3. вычисляется вектор aˆ = b + e — декодированный вариант принятого вектора b

Описанный метод декодирования называется синдромным декодированием, или декодированием по стандартной расста- новке. Таблица 2.1 описывает все вектора, которые может испра- вить код — это лидеры смежных классов. Ошибка декодиро- вания произойдет тогда, когда реальный вектор ошибки не яв- лялся лидером смежного класса. Однако, свойства стандарт- ной расстановки позволяют, выбирая различные вектора в ка- честве лидеров и не меняя при этом самих смежных классов, приспособить стандартную расстановку к конкретному каналу связи таким образом, чтобы лидерами были самые вероятные

19

в данном канале векторы. Например, в канале ДСК более ве- роятными векторами являются векторы меньшего веса Хэм- минга, и, выбрав в качестве лидеров самые легкие векторы смежного класса, получим, что в данном случае декодирова- ние по минимуму расстояния совпадает с декодированием по максимуму правдоподобия. Декодирование, исправляющее все ошибки-лидеры смеж- ных классов, называется полным, так как оно позволяет испра- вить все ошибки, которые может исправить код. Это требует хранения таблицы из 2 r лидеров. Таким образом, декодиро- вание может осуществляться перебором по всем 2 k кодовым словам, или всем 2 r синдромам. Тогда общая сложность деко- дирования составит

χ

= min(2 k , 2 r ).

(2.1)

Исправление не всех лидеров смежных классов, а только какого- то их подмножества (например, векторов веса, не превышаю- щего некоторой величины), может позволить для некоторых классов кодов построить процедуры декодирования, имеющие меньшую (полиномиальную) сложность, и влечет за собой уве- личение вероятности ошибочного декодирования. Однако, та- кие декодеры требуют дополнительных ограничений на струк- туру кода, и рассмотрены в разделе ??. В следующем разделе мы рассмотрим общий метод деко- дирования, применимый к любому линейному коду, позволя- ющий уменьшить сложность (2.1).

2.2 Декодирование по информационным со- вокупностям

В этом разделе рассматриваются вопросы, связанные с мето- дом общего декодирования линейных кодов, использующего информационные совокупности. Ключевым при изучении многих общих методов декодиро- вания является понятие информационной совокупности (и.с.)

20

кода. Мы уже знаем из (1.2) раздела 1.3, что для системати-

α k } полно-

, α n ) (n, k)-кода.

Это означает, что в коде есть, и только одно, слово, у ко-

торого на позициях с номерами {0,

α 0 ,

, k 1 не является, однако, ис-

ключительным. Для каждого кода есть еще целый ряд мно-

жеств {j 1 ,

ковы бы ни были α j 1 ,

, j k } стоят символы

j k } так

же полностью определяет кодовое слово, как и задание первых его символов.

α j 1 ,

одно слово, у которого на позициях {j 1 ,

, α j k , в коде имеется одно и только

n 1) таких, что ка-

, k 1} стоят символы

ческого кода задание k стью определяет cлово

первых символов {α 0 ,

(α 0 ,

.,

α k ,

α k+1 ,

,

, α k1 . Множество номеров 0,

, j k } (0 j 1 <

< j k

, α j k . Т.е. задание символов на позициях {j 1 ,

,

, j k } (0 j 1 <

< j k n 1) называется информационной совокупностью

(и.с.) кода V , если задание компонент α j 1 , определяет слово из V .

Пусть G — порождающая матрица кода V . Обозначим че- рез G(γ) матрицу, составленную из столбцов матрицы G, но- мера которых входят в множество γ.

, α j k однозначно

Определение 2.1 Множество номеров {j 1 ,

, j k } явля-

ется и.с. тогда и только тогда, когда матрица G(γ) является

невырожденной.

Если в принятом с ошибками кодовом слове имеется хотя бы одна и.с., в символах которой (т.е. в символах с номерами из этой и.с.) ошибок нет (и.с., свободная от ошибок ), то переда- вавшееся слово может быть правильно восстановлено по этой и.с. Процесс декодирования при этом может быть интерпрети- рован как процесс поиска и.с., свободной от ошибок. Важным при организации такого декодирования становится вопрос ”об остановке” — вопрос о выборе правила, руководствуясь кото- рым, можно определить, что найдена свободная от ошибок и.с.

Утверждение 2.1 Множество позиций γ = {j 1 ,

21

В дальнейшем, если не сделано специальной оговорки, мы бу- дем рассматривать декодирование ошибок, кратность которых не превышает t. Опишем теперь алгоритм декодирования по и.с. Пусть γ =

{j 1 ,

., j k } — и.с. кода V , а матрицы G и H – порождаю-

щая и проверочная матрица этого кода. Обозначим через G γ

матрицу

G γ = (G(γ)) 1 · G.

(2.2)

Ясно, что столбцы матрицы G γ с номерами {j 1 ,

, j k } состав-

ляют единичную (k×k)-матрицу. Умножив вектор (α j 1 ,

на матрицу G γ , мы получим кодовое слово, у которого на по-

зициях {j 1 ,

, α j k )

, j k } расположены символы α j 1 ,

, α j k .

(α j 1 ,

=

, α j k ) · G γ =

(α j 1 ,

, α j k ) ·

.

.

.

.

.

.

.

.

.

.

.

.

j 1

1

0

0

.

.

.

.

.

.

.

.

.

.

.

.

j 2

0

1

0

.

.

.

.

.

.

.

.

.

.

.

.

j 3

0

0

1

.

.

.

.

.

.

.

.

.

.

.

.

=

=

j 1

α

j 1

j 2

α

j 2

j 3

α

j k

.)

Матрице G γ поставим в соответствие проверочную матрицу

H γ = (Hγ)) 1 · H,

(2.3)

где γ¯ = {1, 2,

го слова, не вошедших в γ, a Hγ) — матрица, составленная из

столбцов матрицы H с номерами из γ¯. В матрице H γ в столб- цах, не вошедших в и.с. γ, стоит единичная (r × r)-матрица. Поэтому, если все ненулевые компоненты некоторого вектора ошибки e расположены в множестве γ¯ (т.е. если γ свободна от ошибок), то вес синдрома

, n}\γ, т.е. множество номеров позиций кодово-

T

γ

S γ (e) = eH

22

(2.4)

равен весу вектора ошибки. При декодировании ошибок крат- ности, не превышающей t = (d 1)/2, вес синдрома, вычис-

ленного по и.с., свободной от ошибок, не превышает t. Следо- вательно,алгоритм декодирования по и.с. ошибок кратности v t можно сформулировать следующим образом.

, γ e }—множество и.с. кода, достаточ-

ное для декодирования ошибок кратности v.

Пусть Γ = {γ 1 , γ 2 ,

1. По принятому вектору b = a + e, b = (β 0 , β 1 ,

, j k }, что вес синдрома

, β n1 ), a

— передававшийся вектор, e — вектор ошибки) вычисля- ются синдромы S γ i (b) до тех пор, пока не найдется такая

и.с. γ = {j 1 , j 2 ,

ω(S γ (b)) v

(2.5)

2. При выполнении (4.4) кодовое слово

a 0 = b(γ )G γ = (β j , β j ,

1

2

, β j

k

) · G γ

(2.6)

считается декодированным вариантом принятого слова.

3. Если ни для одного γ из Γ соотношение (4.4) не выполня- ется, считается, что обнаружена неисправляемая ошиб- ка.

Пример 2.1 Рассмотрим декодирование двоичного кода (7, 4) с d = 3. Порождающая G и проверочная H матрицы этого ко- да

G =

1

0

0

0

0

1

0

0

0

0

1

0

0

0

0

1

1

1

1

0

0

1

1

1

1

1

0

1

;

1

H = 0

1

1

1

1

1

1

0

0

1

1

1

0

0

0

1

0

0

0 ;

1

Множество символов γ = {0, 1, 2, 6} является и.с. рассматри- ваемого кода, а множество γ = {0, 1, 2, 4} не является и.с.,

23

т.к. определитель матрицы G(γ )

|G(γ )| =

1

0

0

0

0

1

0

0

0

0

1

0

1

1

0

1

= 0

а определитель матрицы G(γ )

|G(γ )| =

1

0

0

0

0

1

0

0

0

0

1

0

1

1

0

0

= 0

Аналогично можно проверить, что

{3, 4, 5, 6}, γ (2) = {0, 1, 2, 6} являются и.с. Для этих и.с. H γ (0) = H, G γ (0) = G;

γ (0) = {0, 1, 2, 3}, γ (1) =

1

H γ (1) = (H(0, 1, 2)) 1 H = 0 1 1

0

1

1

1 1

H =

1

1

= 1

1

1

1

0

0

1 · 0

1

1

1

1

= 0

0

1

1

1

0

1

0

1

1

0

0

0

1

0

1

1

1

0

1

1

0

0

1

1

1

0

1

0

1

1

0

0

0 =

1

0

1 ,

1

G γ (1) = (G(3, 4, 5, 6)) 1 G =

1

1

1

0

0

1

1

1

1

1

0

1

1

0

0

0

0

1

0

0

0

0

1

0

0

0

0

1

H γ (2) = (H(3, 4, 5)) 1 H = 1 1 1 0 1 0 0 ;

1

1

1

0

0

1

1

0

0

0

0

1

1

1

24

;

G γ (2) = (G(0, 1, 2, 6)) 1 G =

1

0

0

0

0

1

0

1

0

0

1

1

0

0

0

0

1

1

1

0

0

1

1

0

1

1

0

1

.

Множество и.с. Γ = γ (0) , γ (1) , γ (2) позволяет декодиро- вать любые однократные ошибки в коде (7, 4). Пусть переда- валось слово a = (0000000), а принято слово b = (0001000). Продекодируем слово b в соответствии с изложенным выше алгоритмом:

S γ (0) (b)

=

bH T (0)

γ

= (011) w(S γ (0) (b)) = 2 > 1 = d 1

2

S γ (1) (b)

=

bH T (1)

γ

= (101) w