
- •В.О. Осипян
- •1. Алфавит дискретных устройств. Конечные поля
- •1. 1. Простое поле галуа gf( p )
- •1. 2. Составное поле галуа gf( Рn )
- •2. Кодирование информации
- •2. 1. Основные понятия. Примеры кодов
- •2. 2. Линейные коды. Способы их задания
- •2. 3. Свойства линейного кода. Коды хэмминга
- •2. 4. Циклические коды
- •2. 5. Коды бчх, исправляющие две ошибки
- •2. 6. Нелинейные коды. Коды адамара
- •2. 7. Границы мощности кодов
- •3. Информация и неопределённость
- •3. 1. Количественная мера неопределённости
- •3. 2. Условная неопределённость.
- •3. 3. Передача информации
2. 4. Циклические коды
Важнейшим частным случаем линейных кодов являются циклические коды, которые допускают простую техническую реализацию и могут быть использованы для изучения, поиска и построения других не менее эффективных в практическом отношение кодов.
Линейный код С называется циклическим, если любой циклический сдвиг кодового слова также является кодовым словом , т.е. если с0с1. . . сn -1
принадлежит С, то и сn -1с0 . . . сn -2 принадлежит С.
Для описания циклических кодов сопоставим каждому кодовому слову с0с1. . . сn -1 GF n ( P ) полином степени n -1 :
с ( х ) = с 0 + с1 х + . . . + сn -1 х n -1 .
Тогда сумме двух кодовых слов будет соответствовать полином, представляющий сумму соответствующих им поиномов ( все вычисления здесь и ниже по модулю Р ). Причём сумма полиномов равна полиному, соответствующему некоторому кодовому слову. Однако произведение полиномов, каждый из которых имеет степень не больше n - 1, в общем случае не соответствует кодовому слову длины n, так как его степень может быть больше n - 1.
Так, например, код
С =0 0 0 , 0 1 1 , 1 0 1 , 1 1 0
является циклическим кодом длины 3 и его кодовым словам соответствуют полиномы:
0 , х + х 2 , 1 + х 2 , 1 + х .
Сумме кодовых слов 1 0 1 и 1 1 0 соответствует слово 0 1 1 , которому соответствует полином с ( х ) = х + х 2 , а произведению этих же слов не соответствует кодовое слово. Поэтому нам необходимо такое представление произведения полиномов, а именно по модулю полинома х n - 1, при котором результату будет соответствовать также полином степени не больше
n - 1.
В самом деле, если кодовому слову с 0с1. . . сn -1 соответствует полином
с ( х ) = с 0 + с1 х + . . . + сn -1 х n -1,
то циклическому сдвигу сn -1с0 . . . сn -2 будет соответствовать полином
х с ( х ) = с 0х + с1 х 2 + . . . + сn -1 х n = с n -1 + с 0 х + с1 х 2+ . . .
+ сn -2 х n -1+ сn -1 ( х n -1) = сn -1 + с 0 х + . . . + с n -2 х n -1
по модулю х n -1 .
Таким образом, умножению полинома с ( х ) на х соответствует циклическому сдвигу кодового слова.
Приведём практический способ построения циклического кода с помощью так называемого порождающего полинома.
Пусть
g ( x ) = g0 + g1 x + . . . + gr xr
некоторый делитель полинома х n - 1 степени r 1 - порождающий полином циклического кода длины n. Рассмотрим множество всех полиномов f(x) степени не выше n - 1 которые делятся на g( x ), т.е. множество полиномов с ( х ) = f ( x ) g ( x ). Каждому такому полиному
с ( x ) = с 0 + с1 х + . . . + сn -1 х n -1
сопоставим слово его коэффициентов с0с1. . . сn-1 и обозначим через С множество всех таких слов.
Покажем, что С является циклическим кодом длины n размерности n - r с порождающим полиномом g ( x ), причём сообщение f ( x ) кодируется словом с ( х ) = f ( x ) g ( x ).
Пусть с0с1. . . сn - 1 и d0d1 . . . dn - 1 - два произвольных слова из С, которым соответствуют полиномы
с 1( x ) = с 0 + с1 х + . . . + сn -1 х n -1 = f 1( x ) g ( x )
и
с 2( х ) = d0 + d1 х + . . . + dn - 1 х n -1 = f 2( x ) g ( x ) .
Тогда полином
с 1( x )+с 2( х ) = ( с 0+d0 ) + ( с1+d1 )х + . . . + ( сn -1+dn - 1 )х n -1=
= g ( x ) (f 1( x )+f 2 ( x )),
которому соответствует слово (с0+d0) (с1+d1). . .(сn -1+dn - 1), также делится на g(x) и, следовательно,( с0+d0 )( с1+d1). . .( сn -1+dn-1) принадлежит С, т.е. С - линейный код.
Далее, если с0с1. . . сn - 1 С, то его циклический сдвиг сn -1с0 . . . сn -2 также принадлежит С, в чём легко убедиться.
Так, например, полином g ( x ) = 1 + х + х 3 над GF(2) порождает циклический код длины 7 с минимальным расстоянием 3, что представляет собой двоичный [7 , 4 , 3 ] - код Хэмминга.
Если
g ( x ) = g0 + g1 x + . . . + gr xr
п
орождающий
полином циклического кода С, то матрица
g0
g1
. . . gr
0 . . . 0 g(x) 0 . . . 0
0 g0 g1 . . . gr 0 . . . 0 0 хg(x) 0 . . . 0
G = . . . = . . .
0 . . .0 g0 g1 . . . gr 0 . . . 0хn - r - 1 g(x)
представляет собой порождающую матрицу циклического кода С, так как С - пространство строк матрицы G.
С другой стороны, для декодирования циклического кода С, определим проверочный полином и проверочную матрицу соответственно как:
h( x ) = (x n - 1) / g( x ) = h 0 + h 1x + . . . + h kx k , h k 0 , h k GF(P) ,
0
0 . . . 0 h
k
. . . h 2
h 1
h 0
0 0. . .0 h(x)
H = 0 h k . . . h 2 h 1 h 0 0 0 хh(x) 0
. . . = . . .
h k . . . h 2 h 1 h 0 0 0 . . . 0 х n - k - 1 h(x) 0 0 . . .0
Таким образом, мы имеем основные способы задания циклических кодов.
Ранее рассмотренные коды Хэмминга H r в самом деле суть циклические коды с порождающими полиномами g ( x ) равными примитивным полиномам полей Галуа. А для определения всех порождающих полиномов, в общем случае, необходимо иметь разложение полинома x n - 1 на простые множители над полем Галуа, что является особым вопросом исследования. Так, например,если
x n - 1 = g 1( x ) g 2( x ) . . . g m( x ),
над GF(q), то можно получить 2m различных порождающих полиномов
g( x ) и столько же циклических кодов.
2.4.1. Найти все делители полинома х 7 - 1 над GF(2).
2.4.2. Нормированный полином М( х ) с коэффициентами из GF(Р) наименьшей степени, для которого М() = 0 , GF(q) называется минимальным полиномом элемента . Доказать, что:
а ) М( х ) неприводим над GF(Р);
б ) степень минимального полинома примитивного элемента поля
GF(q) равна n ( такой полином называется примитивным );
в ) М( х ) = Мр ( х ).
2.4.3. Найти все примитивные полиномы заданной степени поля GF(Р).
2.4.4. Определить порождающий полином циклического[ 15 , 11 , 3 ]- кода Хэмминга H 4.
2.4.5. Разработать алгоритмы кодирования и декодирования циклических кодов.
2.4.6. Доказать, что если h ( x ) делится на хТ - 1, то минимальное расстояние не может быть больше чем n / Т.
2.4.7. Код С называется реверсивным, если для произвольного слова
с0с1. . . сn -1 С следует, что сn -1 . . .с1с0 С. Доказать, что циклический код реверсивен тогда и только тогда, когда все элементы, обратные корням его порождающего полинома, также являются корнями порождающего полинома.
2.4.8. Доказать, если - 1 равна некоторой степени q по модулю n, то каждый циклический код над GF(q) длины n реверсивен.
2.4.9. Доказать, что x n - 1 имеет n различных корней над GF(q).
2.4.10. Циклотомический класс С s по модулю n над GF(q) определяется как множество:
С s = { s , sq ,sq2, . . . , sqms - 1 } ,
где sqms s (mod n ) , ( q , n ) = 1. Доказать, что
х n - 1 = П М s ( х ) ,
s
где s пробегает всё множество представителей по модулю n.
2.4.11. Определить проверочный полином для кода Хэмминга H 3 .
2.4.12. Доказать, что код Хэмминга H r является циклическим кодом с порождающим полиномом g (x)=М (х), где - примитивный элемент поля GF(q).
2.4.13. Построить наименьший циклический код, содержащее слово
0 0 1 1 0 1 0.
2.4.14. Разработать алгоритм разложения полинома х n - 1 над GF(q).
2.4.15.Определить минимальное расстояние циклического кода длины n.