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

Книги и методы для курсовых / Kody_i_ustroystva_pomehoust__kodir

.pdf
Скачиваний:
163
Добавлен:
15.06.2014
Размер:
1.8 Mб
Скачать

3.По заданной преподавателем порождающей матрице G(x) построить проверочную матрицу H(x). Определить параметры кода.

4.Сформировать кодовую последовательность с использованием заданного преподавателем информационного блока Q(x) и порождающей матрицы G(x). Определить класс кода.

5.Сформировать и пояснить сущность проверочных уравнений по заданной проверочной матрице H(x).

6.Дать определение и пояснить сущность дуального кода.

7.Дать определение и пояснить сущность эквивалентного кода.

8.Дать определение и пояснить сущность кодов максимальной длины.

9.Дать определение и пояснить сущность ортогонального и биортогонального кода.

é0

1 1

1

1

0

0ù

 

10. По проверочной матрице H(x) = ê1

1 0

1

0

1

0ú

определить минимальное

ê

 

 

 

 

 

ú

 

ê

1 1

0

0

0

1

ú

 

ë1

û

 

кодовое расстояние и кратность корректируемых ошибок.

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

12.Как изменится минимальное кодовое расстояние двоичного линейного блокового кода при добавлении ко все его строкам порождающей матрицы одного проверочного символа?

13.

Дать геометрическую интерпретацию СБЛК с параметрами

(n,k,d 0 )=(3,2,2). Определить его корректирующие свойства.

14.

Определить R, l, r, t исп и tобн для СЛБК с параметрами (n,k,d0 )=(3,1,3) и

дать его геометрическую интерпретацию.

3.ЦИКЛИЧЕСКИЕ КОДЫ: ОПРЕДЕЛЕНИЕ, ОСНОВНЫЕ СВОЙСТВА И ПРИНЦИПЫ ПОСТРОЕНИЯ

3.1. Определение и основные свойства циклических кодов

Важнейшим недостатком СБЛК, как отмечалось выше, является высокая трудоемкость их построения при длине кодовой последовательности n³31 дво-

ичный символ и коррекции ошибок кратностью tош³3 двоичных символа. Поиск более простых принципов построения СБЛК привел к открытию нового широкого класса групповых линейных блоковых кодов, получивших название циклических кодов (ЦК). Основоположником ЦК является Прейндж [6]. Дальнейшее развитие теория построения ЦК получила в работах Боуза, Чоудхури, Хоквингейма, Файра, Рида-Соломона, Гоппы и др.

Циклические коды являются подклассом в классе линейных блоковых кодов, удовлетворяющих определенным требованиям. Свое название данные коды получили по причине того, что основной операцией построения кодовых последовательностей (Fi(x)) является цикл, а точнее циклическая перестановка двоичных символов разрешенных кодовых последовательностей [4,6].

В соответствии с [3,4,6] циклическим кодом называется линейный блоковый код, который представляет собой конечное множество, замкнутое относительно операции циклического сдвига кодовых последовательностей, образующих данный код. С математической точки зрения ЦК является идеалом в линейной коммутативной алгебре многочлена (полинома) n-го порядка по модулю двучлена xn-1 над полем коэффициентов. Это означает, что кодовые последовательности ЦК имеют длину “n” двоичных кодовых символов и описываются полиномами степени (n-1), в которых коэффициентами при соответствующих степенях формальной переменной, обозначаемой через “x”, являются двоичные символы кодовой последовательности. Формальная переменная “x”, которая носит название оператора Хаффмана или оператора задержки и не оказывает никакого влияния на свойства кода. Таким образом, кодовую последовательность ЦК в общем виде можно записать так:

Fi(x)=cn-1×xn-1+ cn-2×xn-2 +…+c1×x1+ c0×x0,

(3.1)

где x – форменная переменная,

n-1, n-2 ,…, 1, 0 – показатели степеней, в которые возводятся основания кодов, и одновременно порядковые номера, которые занимают двоичные символы (разряды) кодовой последовательности, начиная со старшего и заканчивая нулевым;

ci – коэффициенты формальной переменной, которые могут принимать или быть равными логической 1 (ненулевой член Fi(x)) или логического 0 (ну-

левой член Fi(x)). Например; Fi(x)=1×x4+0×x3+0×x2+1×x1+0×x0=x4+x=10010.

Представление кодовых последовательностей в виде многочленов позволяют установить однозначное соответствие между ними и свести действия над кодовыми последовательностями к действиям над полиномами: умножение, сложение, деление и вычитание этих полиномов производится по обычным правилам алгебры, но коэффициенты с одинаковыми степенями “x” суммиру-

ются по модулю два. Например; Fi(x)=(x3+x2+1)×Fj(x)=(x+1)=x4+x3+x3+x2+x+1= =x4+((1+1)mod2)×x3+x2+x+1=x4+0×x3+x2+x+1=x4+x2+x+1.

Уточним сущность понятия циклического сдвига или циклической перестановки двоичных символов кодовой последовательности. Пусть Fi(x)=cn-1xn-1+ +cn-2xn-2+…+c1x1+c0x0, то циклический сдвиг на один разряд дает Fi(x)=cn-1xn+cn-2 xn-1+…+c1x2+c0x1. Чтобы степень новой кодовой последовательности Fi(x) не превышала (n-1), член cn-1·xn заменяется единицей, поэтому

Fi(x)=cn-2xn-1+ cn-3xn-2+…+c1x2+c0x+ cn-1x0.

Например, пусть F(x)=x5+x3+x2+x=0101110, при n=7 двоичных символов. (Заметим, что запись кодовой последовательности в виде многочлена, а затем перевод ее в двоичную форму записи, не всегда определяет длину кодовой последовательности “n”. Например, при n=5, многочлен F(x)=x2+1=101, т.е. n=3, что неверно. В таких случаях надо дописать старшие нулевые символы, т.е. F(x)=x2+1=00101, что дает n=5 двоичным символам).

Сдвигаем F(x) на один разряд (символ) влево, и получаем

F(x)=1011100=x6+x4+x3+x2. Очевидно, что x1(x5+x3+x2+x)=x6+x4+x3+x2. Отсюда вытекает второе определение ЦК, а именно, циклический сдвиг двоичных символов разрешенной кодовой последовательности влево или вправо на один, два,…, (k-1) символов вновь приводит к формированию разрешенной кодовой последовательности.

Таким образом, циклическую перестановку двоичных символов разрешенной кодовой последовательности можно рассматривать как умножение F(x) на “x” при первом сдвиге, на “x2” при втором сдвиге и т. д., что можно в общем виде записать или представить так:

éF(x)

 

ù

 

ê

× F(x)

ú

 

êx

ú

 

ê

2

× F(x)

ú

 

êx

 

ú

 

ê.

 

 

 

ú

 

ê.

 

 

 

ú

 

ê

 

 

 

ú

 

ê.

k−1

 

ú

 

ê

 

ú

(3.2)

ëx

 

 

× F(x)û .

Последний вывод можно рассматривать еще следующим образом: так как при сложении по модулю два двучлен xn-1 можно записать как xn=1, то замена xn на 1 в произведении x×F(x) дает новый многочлен, коэффициенты которого образуют новую разрешенную кодовую последовательность. Следовательно, в кодовой последовательности, имеющей длину “n” двоичных кодовых символов, степень полинома не может превышать n-1, так как в противном случае длина кодовой последовательности превысит “n”, а поэтому xn заменяется логической 1.

Таким образом, можно сделать следующие выводы:

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

2.ЦК относятся к групповым линейным кодам, если они образуются путем умножения каждой последовательности равнодоступного (простого) кода, выраженных в виде многочлена Q(x) с максимальной степенью (k-1), на некото-

рой полином P(x) степени l=n-k. Приведение подобных членов производится по модулю два; порядок поля кодирования преобразуется с Kраз=2k до Kобщ=2n, но число разрешенных кодовых последовательностей кода при этом остается равным Kраз=2k, и они образуют циклическую подгруппу группы Kобщ=2n, отличающуюся тем, что все элементы подгруппы имеют общее свойство делимости на полином P(x), получивший название образующего или порождающего полинома.

В соответствии с [3,4,6] в качестве образующего полинома используются полиномы, обладающие следующими свойствами:

-во-первых, образующий полином P(x) должен быть делителем двучлена xn+1;

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

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

Так как ЦК являются дальнейшим развитием групповых СБЛК, то данные коды обладают всеми свойствами СБЛК, а так же имеют, ряд дополнительных свойств.

Косновным свойствам ЦК относятся:

1.Вес (wк.п.) разрешенной кодовой последовательности ³ d0;

2.Вес проверочной части wпр.ч. разрешенной кодовой последовательности ³ d0-1;

3.Сдвиг кодовых символов разрешенной кодовой последовательности влево или вправо на один, два,…, (k-1) символ вновь приводит к разрешенной кодовой последовательности. Если же при циклическом сдвиге всегда будет получатся новая кодовая последовательность, то такой код будет называться квазициклическим; данные коды имеют несколько большую корректирующую способность и сложность реализации, чем ЦК;

4. Разрешенная кодовая последовательность без ошибок Fр'(x) при делении на полином P(x) дает нулевой остаток, т.е. Fр'(x)/P(x)=R(x)=0 и R(x) не равно 0 – при наличии ошибок;

5.Сумма по модулю два символов двух, трех,…, (k-1) разрешенных кодовых последовательностей вновь образует разрешенную кодовую последовательность;

6.Двучлен вида xn+1 должен делиться на порождающий полином P(x) без остатка (имеется в виду обычная операция деления многочленов);

7.Если все операции над полиномами (кодовыми последовательностями) проводятся в двоичном поле Галуа (GF(2)), т.е. действия над коэффициентами полиномов осуществляется по модулю два, а умножение полиномов производится по модулю образующего полинома P(x), то применение указанных операций не приводит к кодовым последовательностям, длина которых больше длины заданного кода, т.е. “n”;

8.Результат деления двучлена xn+1 на образующий полином P(x) дает полином, который носит название проверочного полинома и обозначается как h(x), т.е. h(x)=(xn+1)/P(x) и который в теории и практике помехоустойчивого кодиро-

вания играет важную роль. Произведение h(x)×P(x)=xn+1=0, а потому многочлены h(x) и P(x) рассматривается как ортогональные и операция деления (xn+1)/P(x) ипользуется в основе построения алгоритмов декодирования;

9. Двучлен ЦК вида xn-1 можно разложить на множители

xn-1=(x-1)(xn-1+ xn-2+…+1), (3.3)

которые можно использовать в качестве образующих полиномов ЦК с n=const, k=var и d0=var.

Например, разложить двучлен xn-1=x7-1 на множители вида (3.3) и определить образующие полинома и параметры кодов.

Решение: двучлен x7-1 раскладывается на следующие многочлены:

x7-1=(x-1)(x3+x2+1)(x3+x+1)

(3.4)

Из данного выражения видно, что можно образовать шесть делителей для двучлена x7-1, путем комбинирования полученных трех сомножителей (3.3). Следовательно, для двучлена x7-1 существует шесть разных двоичных линейных ЦК со следующими образующими полиномами и параметрами:

P1(x)=(x-1)=(x+1); l=1, n=7, k=6, d0=1 – простой код: l, k, n и tисп (tисп – кратность исправленных ошибок) – измеряются в двоичных символах;

P2(x)=(x3+ x2+1); l=3, n=7, k=4, d0=3, tисп=1; P3(x)=(x3+ x2+1); l=3, n=7, k=4, d0=3, tисп=1;

P4(x)=P2(x)×P3(x)=(x4+x3+x2+1); l=4, n=7, k=3, d0=4, tисп=1; P5(x)=P2(x)×P3(x)=(x4+x2+x+1); l=4, n=7, k=3, d0=4, tисп=1; P6(x)=P1(x)×P5(x)=(x6+x5+x4+ x3+x2+x+1); l=6, n=7, k=1, d0=7, tисп£3.

ЦК, задаваемые образующими полиномами P1(x), P2(x) и P3(x), относятся к классу ЦК Хэмминга. ЦК, задаваемые полиномами P4(x), P5(x) и P6(x), являются двойственными кодами Хэмминга и называются кодами максимальной длины (КМД).

Известно [1…4], что корректирующая способность групповых СБЛК существенно зависит от вида (структуры) образующего полинома, т.е. от количества ненулевых членов данного полинома и его максимальной степени l=n-k. В соответствии с этим можно отметить следующие свойства ЦК:

а) обнаруживающих ошибки:

-ЦК, образующий полином которого имеет более одного члена и не имеет общего множителя “x”, обнаруживает все одиночные ошибки и любое нечетное число ошибок. Простейшим образующим полиномом ЦК, обладающими данными свойствами, является полином вида P(x)=1+x;

-ЦК, образующий полином которого имеет вид P(x)=1+xc, обнаруживает любое нечетное число ошибок. Доказательство этого утверждения становится яс-

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

P(x)=1+xc=(1+x)×(1+x+x2+…+xc-1).

б) обнаруживающих и корректирующих ошибки:

ввиду того, что полином P(x)=1+xc нацело делится на 1+x, то согласно предыдущему свойству ЦК обеспечивает обнаружение любого нечетного количества ошибок;

-ЦК, образующий полином которого имеет максимальную степень l=n-k, обнаруживает любой пакет ошибок длиной tпак.обн.=l и менее двоичных символов или корректирует пакеты ошибок длиной tпак.исп. = l/2 двоичных символов;

-количество пакетов длиной l+1, не обнаруживаемых ЦК, составляет 1/2l-1 части всех пакетов (l+1) двоичных символов. Количество пакетов ошибок длиной более l+1, необнаруживаемых ЦК, составляет часть всех пакетов ошибок длиной от (l+2) до “n” двоичных символов включительно. Доказательство данных утверждений свойств ЦК можно найти в [4,6].

3.2.Матричное представление циклических кодов корректирующие независимые ошибки

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

Кодовая последовательность ЦК при заданной порождающей матрице

Gk,n(x) и заданном информационном блоке Q(x) формируется по правилу

Ώηάΰ Ωξ ΣβάΩ:

F(x)= Q(x)×Gk,n(x), т.е. произведения вектора-строки Q(x), содержащего “k” информационных двоичных символов, на порождающую матрицу G(x) рангом

(k´n). При этом, если используется каноническая (приведенно-ступенчатая) G(x), то будут формироваться кодовые последовательности систематического разделимого ЦК. Порождающая матрица G(x) строится довольно просто, если задан образующий полином P(x) и длина кодовой последовательности “n”. Рассмотрим следующие примеры на матричное представление ЦК.

Пример 3.1. Сформировать кодовую последовательность ЦК с парамет-

рами (n,k,d0)=(10,5,5), если P(x)=x5+x4+x2+1.

Решение: переводим P(x) из записи в форме полинома в двоичную форму записи, т.е. P(x)= x5+x4+x2+1=110101. Далее формируем первую строку порождающей матрицы G5.10(x) следующим образом: двоичную последовательность 110101 дополняем справа четырьмя нулями; в результате получаем разрешенную кодовую последовательность вида 1101010000 длиной n=10 двоичных символов. Следующий шаг – выполнение (k-1)=(5-1)=4 циклических сдвига двоичных символов первой строки G(x).

В результате получаем следующую порождающую матрицу

 

é1

1

0

1

0

1

0

0

0

0ù

 

 

ê

1

1

0

1

0

1

0

0

ú

 

 

ê0

0ú

 

G5,10

(x) = ê0

0

1

1

0

1

0

1

0

0ú

 

 

ê

0

0

1

1

0

1

0

1

ú

 

 

ê0

0ú

 

 

ê

0

0

0

1

1

0

1

0

ú

(3.5)

 

ë0

1û .

Этот способ построения порождающей матрицы G5.10(x) можно рассмотреть со следующей позиции:

а) переводим P(x) из записи в форме полинома в форму двоичной последовательности (можно и не переводить), т.е. P(x)=x5+x4+x2+1=110101;

б) умножаем P(x)=110101 на одночлен вида xk-1, т.е. на 1000; в результате получаем первую строку или первую разрешенную кодовую последовательность 1101010000, а далее используем рассмотренную методику, т.е. циклический сдвиг двоичных символов первой строки (k-1) раз.

В общем случае построение порождающей матрицы G(x) ЦК с использованием образующего полинома можно записать так:

é

 

 

P(x)

0ù

éqi

qi−1

×

×

×

q1

q0

0 ×

×

 

×

0 ù

 

 

ê

 

x × P(x)

 

ú

 

 

 

ê

 

0ú

ê

0 qi

qi−1

×

×

× q1 q0

0

×

×

 

×

0

ú

 

 

ê

x

2

× P(x)

 

ú

ê

 

ú

 

 

ê

 

0ú

ê

×

 

 

 

 

 

 

 

 

 

 

 

 

 

×

ú

 

 

G(x) = ê

 

 

 

 

×

×

ú

® ê

×

 

 

 

 

 

 

 

 

 

 

 

 

 

×

ú

 

 

ê

 

 

 

 

×

×

ú

ê

 

 

 

 

 

 

 

 

 

 

 

 

 

ú

 

 

ê

 

 

 

 

×

×

ú

ê

×

 

 

 

 

 

 

 

 

 

 

 

 

 

×

ú

 

 

ê

 

 

 

 

ú

ê

 

×

×

×

0 q

 

q

 

×

×

×

q

 

q

 

ú

 

 

 

k−1

 

 

ê 0

0

1

i−1

 

ú

 

 

ê

 

× P(x)

 

ú

ë

 

 

 

 

 

 

 

 

 

 

 

 

i û

,

(3.6)

ëx

 

 

 

0û

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где q=0;1 – коэффициенты образующего полинома, которые могут принимать значение либо 0, либо 1,

0 – нулевые символы, дополняющие каждую строку до значения “n” двоичных символов.

Формирование кодовой последовательности F(x), т.е. процесс кодирования информации с помощью G(x) осуществляется по правилу

F(x)=Q(x)×G(x):первый символ Q(x) умножаем на первый символ первого столбца G(x), второй символ Q(x) умножаем на второй символ первого столбца G(x) и суммируем по модулю два с первым результатом, третий символ Q(x) умножаем на третий символ первого столбца G(x) и суммируем по модулю два с предыдущем результатом и т. д. Затем первый символ Q(x) умножаем на первый символ второго столбца G(x) и далее все повторяется аналогично формированию первого кодового символа F(x).

Пример 3.2. Рассмотрим способ формирования кодовых последовательностей ЦК с использованием единичной матрицы и остатков от деления xn-1/P(x).

Для рассмотрения сущности формирования кодовых последовательностей ЦК используем данные предыдущего примера.

Так как k=5, то используем следующие единичные векторы: Q1(x)=10000, Q2(x)=01000, Q3(x)=00100, Q4(x)=00010 и Q5(x)=00001. Записываем

Q1(x)…Q5(x) в виде единичной подматрицы рангом (5´5).

 

é1

0

0

0

0

1

0

1

0

1ù

 

ê

1

0

0

0

1

1

1

1

ú

 

ê0

1ú

G5,10

(x) = ê0

0

1

0

0

0

1

0

1

1ú

 

ê

0

0

1

0

0

0

0

1

ú

 

ê0

1ú

 

ê

 

 

 

 

 

 

 

 

ú

 

ë0 0 0 0 1 1 0 0 1 1û .

Далее определяем проверочные символы каждой строки по следующей методике: делим xn-1/P(x) и берем остатки от деления для первой строки – от первого такта деления, т.е. R1(x), для второй строки – после двух тактов деления, т.е. R2(x) и т. д. Полученные символы дописываем к соответствующим строкам единичной подматрицы: