
Книги и методы для курсовых / Kody_i_ustroystva_pomehoust__kodir
.pdf3.По заданной преподавателем порождающей матрице 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) и т. д. Полученные символы дописываем к соответствующим строкам единичной подматрицы: