Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сети и телекоммуникации

.pdf
Скачиваний:
203
Добавлен:
05.06.2015
Размер:
13.44 Mб
Скачать

71

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

матрица размером n k, которую называют порождающей или производящей матрицей кода G.

Множество линейных комбинаций образует линейное пространство, со-

держащее 2k блоков, т.е. линейный код, содержащий 2k блоков длиной n, обо-

значают (n, k). При заданных n и k существует много различных (n, k)-кодов с

различными кодовыми расстояниями d, определяемых различными порождаю-

щими матрицами. Все они имеют избыточность ek=1 - k/n или относительную скорость Rk=k/n.

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

ными. Затем к каждой из этих последовательностей приписывается r = n – k

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

Простейший систематический код (n,n-1) строится добавлением к ком-

бинации из n-1 информационных символов одного проверочного, равного сум-

ме всех информационных символов по модулю 2. Такой код (n,n-1) имеет d=2 и

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

кой на четность.

Положим, что исходные комбинации ak первичного кода: 001, 010, 011, 100, 101, 110, 111 (k=3). И выберем следующую порождающую матрицу для

(5,3)-кода:

1 0 0 1 0 G = 0 1 0 0 1 .

0 0 1 1 1

Тогда каждую комбинацию (5,3)-кода можно вычислить по следующей формуле:

an = ak G .

72

Например, кодовой комбинации 001 будет соответствовать кодовая ком-

бинация an линейного кода:

1 0 0 1 0

a5 = 0 0 1 0 1 0 0 1 = 0 0 1 1 1 . 0 0 1 1 1

Аналогичным образом можно найти и остальные комбинации (5,3)-кода.

Таким образом, порождающая матрица G является сжатым описанием линей-

ного кода.

Матрица Н, удовлетворяющая условию: G HT = 0, называется провероч-

ной матрицей кода. Она имеет размерность (n - k) n. Для матрицы G, рассмот-

ренной в предыдущем примере, матрица Н имеет вид:

H =

1 0 1 1 0 .

 

0 1 1 0 1

Матрица Н позволяет не только проверить, принадлежит ли комбинация an коду, но и формировать эти комбинации при кодировании. Преимуществом

линейных, в частности систематических, кодов является то, что в кодере и де-

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

Однако для получения высокой верности связи следует применять коды достаточно большой длины. Применение систематического кода в общем слу-

чае, хотя и позволяет упростить декодирование по сравнению с табличным спо-

собом, все же при значениях n порядка нескольких десятков не решает задачу практической реализации.

Совершенные и квазисовершенные коды Совершенными (плотно упакованными) называют коды, в которых вы-

полняются соотношения

=0 С ( − 1) = − 1 ,

73

где — максимальная кратность исправляемых ошибок; b — основание кода; r

— число проверочных символов. Они отличаются тем, что позволяют исправ-

лять все ошибки кратностью или меньше и ни одной ошибки кратности больше .

Число известных совершенных кодов ограничено кодами Хэмминга знач-

ности

n = (br 1)/(b 1)

и бинарным циклическим кодом Голея.

Квазисовершенными принято называть коды, исправляющие все ошибки кратности и

( − 1)

ошибок кратности +1 при условии, что

= С – 1 + = + 1 .

Класс квазисовершенных кодов значительно шире, чем класс плотно упа-

кованных кодов. Совершенные и квазисовершенные коды обеспечивают мак-

симум вероятности правильного приема комбинации при равновероятных ошибках в канале связи.

Циклические коды

Был предложен ряд кодов и способов декодирования, при которых слож-

ность декодера растет не экспоненциально, а лишь как некоторая степень n.

В классе линейных систематических двоичных кодов это — циклические коды.

Циклические коды просты в реализации и при невысокой избыточности обла-

дают хорошими свойствами обнаружения ошибок.

Циклические коды получили очень широкое распространение как в тех-

нике связи, так и в компьютерных средствах хранения информации. В зарубеж-

74

ных источниках циклические коды обычно называют избыточной циклической проверкой (CRC, Cyclic Redundancy Check).

Рассмотрим данный класс кодов подробнее. Название циклических кодов связано с тем, что каждая кодовая комбинация, получаемая путем циклической перестановки символов, также принадлежит коду. Так, например, циклические перестановки комбинации 1000101 будут также кодовыми комбинациями

0001011, 0010110, 0101100 и т.д.

Представление кодовых комбинаций в виде многочленов F(x) позволяет установить однозначное соответствие между ними и свести действия над ком-

бинациями к действию над многочленами. Сложение двоичных многочленов сводится к сложению по mod2 коэффициентов при равных степенях перемен-

ной x. Умножение производится по обычному правилу умножения степенных функций, однако полученные коэффициенты при данной степени складываются по mod2.

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

рестановка кодовой комбинации эквивалентна умножению полинома F(x) на x с

заменой на единицу переменной со степенью, превышающую степень поли-

нома.

Любой полином G(x) степени r < n, который делит без остатка двучлен xn -1, может быть порождающим полиномом циклического (n, k)-кода, где k = n - r. В этот код входят те полиномы, которые без остатка делятся на G(x).

Особую роль в теории циклических кодов играют неприводимые много-

члены G(x), т.е. полиномы, которые не могут быть представлены в виде произ-

ведения многочленов низших степеней.

Идея построения циклического кода (n, k) сводится к тому, что полином

Q(x), представляющий информационную часть кодовой комбинации, нужно преобразовать в полином F(x) степени не более n - 1, который без остатка де-

лится на порождающий полином G(x) (неприводимый многочлен) степени

75

r = n - k. Рассмотрим последовательность операций построения циклического

кода:

представляем информационную часть кодовой комбинации длиной k в

виде полинома Q(x);

умножаем Q(x) на одночлен xr и получаем Q(x)xr;

делим полином Q(x)xr на порождающий полином G(x) степени r, при этом получаем частное от деления C(x) такой же степени, что и Q(x)

Q(x)xr /G(x) = C(x) R(x)/G(x) ,

где R(x) – остаток от деления Q(x)xr на G(x);

умножив обе части на G(x), получим

F(x) = C(x)G(x) = Q(x)xr R(x) .

Полином F(x) делится без остатка на G(x), т.е. представляет собой разре-

шенную комбинацию циклического (n,k)-кода.

Таким образом, разрешенную кодовую комбинацию циклического кода можно получить двумя способами: умножением кодовой комбинации простого кода C(x) на полином G(x) или умножением кодовой комбинации Q(x) простого кода на одночлен xr и добавлением к этому произведению остатка R(x).

В первом случае информационные и проверочные разряды не отделены друг от друга (код получается неразделимым). Во втором случае получается

разделимый код. Этот код достаточно широко используется на практике, по-

скольку процесс декодирования и обнаружения ошибок при использовании разделимого кода выполняется проще.

Рассмотрим пример разделяемого циклического кода (9,5) с порождаю-

щим полиномом

G(x) = х4 + х + 1 (r = 4) .

В качестве информационной части кодовой комбинации возьмем поли-

ном

76

Q(x) = х4 + х2 + х + 1 .

Умножение Q(x) на xr эквивалентно повышению степени многочлена на r.

Q(x) = х4 + х2 + х + 1 10111 .

Q(x)xr = (х4 + х2 + х + 1)х4 = х8 + х6 + х5 + х4 101110000 .

Формирование проверочной группы осуществляется в процессе деления

Q(x)xr на G(x).

1

0

1

1

1

0

0

0

0

1

0

0

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

0

1

1

 

 

 

 

1

0

1

0

0

 

0

1

0

0

0

 

 

 

 

 

 

 

 

 

0

0

0

0

0

 

 

 

 

 

 

 

 

 

 

1

0

0

0

0

 

 

 

 

 

 

 

 

 

1

0

0

1

1

 

 

 

 

 

 

 

 

 

 

0

0

1

1

0

 

 

 

 

 

 

 

 

 

0

0

0

0

0

 

 

 

 

 

 

 

 

 

 

0

1

1

0

0

 

 

 

 

 

 

 

 

 

0

0

0

0

0

 

 

 

 

 

 

 

 

 

 

1

1

0

0

 

 

 

 

 

000011101

 

 

 

 

 

 

 

00101

1

 

x

 

 

 

 

x2

x3

 

 

x4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G(x) = x4 + x + 1

Рис. 6.13. Структурная схема формирования проверочной группы

 

Регистр задержки

 

1

2

 

Выход

3

4

 

 

 

К1

1

2

3

4

 

 

 

К2

Рис. 6.14. Упрощѐнная структурная схема кодера

77

Такая последовательность операций (суммирования) при делении Q(x)xr

на G(x) может быть осуществлена с помощью r-ячеечного сдвигающего реги-

стра с обратными связями между ячейками. Эти связи осуществляются через сумматоры по mod2. Делимое в виде кодовой группы, представляющей собой полином Q(x)xr , старшим разрядом подаѐтся на вход сдвигающего регистра, а

полином G(x) вводится в регистр в виде структуры обратных связей через сум-

маторы. Место включения сумматоров определяется структурой полинома G(x)

(рис. 6.13 и 6.14).

Врезультате деления получаем частное от деления C(x) = x4+x2 10100

иостаток от деления R(x) = x3+x2 1100. Для получения разрешенной кодовой

комбинации остаток (проверочная группа) помещается на место "пустых" разрядов Q(x)xr, т.е.

F(x)= x4+x2+x4+x2+x4+x2 101111100 .

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

Обнаружение ошибок при циклическом кодировании сводится к делению принятой кодовой комбинации на тот же образующий полином, который ис-

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

ную), то деление на образующий полином производится без остатка. Наличие остатка свидетельствует о присутствии ошибок.

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

зывает на то, что принятая комбинация является разрешенной. Всякому нену-

левому синдрому соответствует определенная конфигурация ошибок, которая и исправляется.

Однако обычно в системах связи исправление ошибок при использовании циклических кодов не производится, а при обнаружении ошибок выдается за-

78

прос на повтор испорченной ошибками комбинации. Такие системы называ-

ются системами с обратной связью и будут рассмотрены ниже.

Прочие классы блочных коды

Наряду с циклическими кодами на практике используются и другие типы

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

Например, среди циклических кодов особое значение имеет класс кодов,

предложенных Боузом и Рой-Чоудхури и независимо от них Хоквингемом. Коды Боуза-Чоудхури-Хоквингема (обозначаемые сокращением БЧХ) отличаются

сравнительно просто реализуемой процедурой декодирования.

Относительно простой является процедура мажоритарного декодирова-

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

лических кодов. Основана она на том, что в этих кодах каждый информацион-

ный символ можно несколькими способами выразить через другие символы ко-

довой комбинации.

 

 

 

 

 

Мощные коды (т.е. коды с длинными блоками и большим кодовым рас-

 

k1

n1 - k1

стоянием

d) при сравнительно простой

 

 

 

 

 

 

Проверка

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

2

 

объединяя несколько коротких кодов. Так

2

Информация

 

k

 

 

 

 

 

 

 

строится,

например,

итеративный код

– k

 

 

(рис. 6.15) из двух линейных систематиче-

Проверка

Проверка

2

 

 

 

n

 

 

ских кодов (n1,k1) и

(n2,k2). Минимальное

Рис. 6.15. Структура блока

 

 

итеративного кода

кодовое расстояние для двумерного ите-

 

 

 

ративного кода d=d1d2, где d1

и d2 — соответственно минимальные кодовые

расстояния для кодов 1-й и 2-й ступеней.

 

 

На итеративный код похож каскадный код, но между ними имеется суще-

ственное различие. Первая ступень кодирования в каскадном коде является ли-

79

нейным систематическим двоичным кодом (внутренний код), каждая комбина-

ция которого рассматривается как один символ недвоичного кода второй сту-

пени (внешнего).

При приѐме сначала декодируются (с обнаружением или исправлением ошибок) все строки (блоки) внутреннего кода, а затем декодируется блок внеш-

него m-ичного кода, причем исправляются ошибки и стирания, оставшиеся по-

сле декодирования внутреннего кода (рис. 6.16).

Внешний кодер

ди

В качестве внешнего кода

K)(N,

 

кодерВнутренний k)(n,

 

 

 

кодерВнешний

 

кодерВнутренний

используют обычно m-ичный код

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рида-Соломона, который являет-

 

 

 

 

Канал

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ся подклассом кодов БЧХ и обес-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

печивает наибольше возможное d

 

 

 

 

 

 

 

 

 

при заданных n2 и k2, если n2<m.

Рис. 6.16. Схема каскадного кодирования

Каскадные коды во многих слу-

и декодирования

чаях наиболее перспективны сре-

известных блочных помехоустойчивых кодов.

Метод перемежения

Для каналов с группированием ошибок часто применяют метод переме-

жения символов, или декорреляции ошибок. Он заключается в том, что сим-

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

Если интервал между символами, входящими в одну комбинацию, сде-

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

ко обнаружены (исправлены) декодером.

Свѐрточные коды

80

Все рассмотренные до сих пор коды относятся к числу так называемых

блочных кодов. В блочных кодах последовательность передаваемых символов разделена блоки по n символов в каждом. При этом обработка символов осуще-

ствляется по-блочно.

В настоящее время широкое распространение и применение получили не-

прерывные коды, в которых деление на блоки отсутствует. Непрерывное коди-

рование осуществляется последовательно по мере поступления кодируемых символов по некоторым рекуррентным соотношениям, поэтому такие коды на-

зываются рекуррентными.

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

точные коды (convolutional code). Свѐрточные коды можно генерировать с по-

мощью линейных регистров сдвига (рис. 6.17), выполняющих операцию свѐрт-

ки информационной последовательности и импульсной характеристики регист-

ров (порождающей последовательности).

В общем случае при кодировании в поток входящих информационных символов вставляются проверочные символы, при этом на каждые n кодовых

символов приходится k информационных. Скорость такого кода R = k/n (k/n-

свѐрточный код). В рассмотренных примерах k = 1, n = 2, R = 1/2.

Вход

 

D

D

0110

 

1 Выход Вход

2 00111110

0110

 

 

1

Выход

D

D

00111010

 

2

Рис. 6.17,а. Структурная схема

Рис. 6.17,б. Структурная схема

свѐрточного систематического

свѐрточного несистематического

кодирования (1/2)

кодирования (1/2)