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

(по цифровому вещанию) Dvorkovich_V_Cifrovye_videoinformacionnye_sistemy

.pdf
Скачиваний:
258
Добавлен:
15.03.2016
Размер:
23.26 Mб
Скачать

Глава 19. Помехоустойчивое кодирование в системах передачи

степенях складываются по модулю два (без переноса в старший разряд), а операция вычитания эквивалентна сложению. Операция умножения на полином степени m соответствует сдвигу кодовой комбинации на m разрядов влево. Проиллюстрируем это на примере. Пусть m = 3 и полином v(x) = x3 +x2 +1 умножается на x3. Полиному v(x) = x3 + x2 + 1 соответствует комбинация 1101. Полиному v(x) = (x3 + x2 + 1) · x3 = x6 + x5 + x3 — комбинация 1101000.

19.3.2.Порождающая и проверочная матрицы циклического кода

Основным свойством циклических кодов является то, что все полиномы v(x), представляющие разрешенные кодовые комбинации, должны делиться без остатка на некоторый полином Gm(x) минимальной степени m, который называется порождающим полиномом кода [7.6, 7.9]. Следовательно, любое произведение Gm(x) на многочлены, степень которых не превышает k − 1, образует линейный циклический (n, k)-код. Свойство делимости комбинации циклического кода на порождающий полином положено в основу циклического кодирования и декодирования.

Как показано в [7.6], одним из основных свойств порождающего полинома Gm(x) является то, что он делит бином (xn + 1) без остатка. Таким образом, чтобы найти некоторый порождающий полином, необходимо знать разложение (xn + 1) на неприводимые множители φj (x), j = 1, l:

xn + 1 = φ1(x)φ2 (x) . . . φl(x).

(19.21)

Многочлен φ(x) степени m является неприводимым в поле GF(2), если он не делится ни на какой многочлен с коэффициентами из GF(2) степени меньшей m, но большей 0.

В соответствии с (19.21) порождающим может быть полином, образованный как каждым неприводимым множителем φj (x), j = 1, l, так и любой комбинацией

их произведений, которые будут также являться делителями xn + 1:

$

Gm(x) =

φj (x).

(19.22)

 

j{1,2,...,l}

 

Для компактной записи двоичного циклического кода (n, k)-кода используется порождающий (образующий) полином Gm(x) степени mn − k с коэффициен-

тами gi, i = 1, n − k из поля Галуа GF(2):

Gm(x) = g0 + g1x + g2x2 + · · · + gmxm.

Неприводимые полиномы играют роль, сходную с простыми числами в теории чисел. Вид неприводимого полинома зависит от числа проверочных символов m. Имеются таблицы неприводимых полиномов, некоторые из них представлены в табл. 19.3.

При больших значениях n двучлен xn + 1 может иметь несколько делителей степени m. В связи с этим возникает неоднозначность в выборе порождающего полинома: какой из этих делителей будет порождать наилучший код? На этот вопрос не существует однозначного ответа. Тем не менее во многих случаях целесообразно пользоваться таблицей наилучших двоичных циклических кодов, которые применяются в различных Рекомендациях ITU-T (табл. 19.4).

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

Таблица 19.3. Таблица некоторых неприводимых полиномов

m

Gm(x)

Двоичный эквивалент

Десятичный эквивалент

1

G1(x) = x + 1

11

3

2

G2(x) = x2 + x + 1

111

7

3

G3(x) = x3 + x + 1

1011 1101

11 13

G3(x) = x3 + x2 + 1

 

 

 

 

G4(x) = x4 + x + 1

 

 

4

G4(x) = x4 + x3 + 1

10001 11001 11111

17 25 31

 

G4(x) = x4 + x3 + x2 + x + 1

 

 

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

v(x) = Ck(x) · Gm(x) = c0Gm(x) + c1xGm(x) + . . . + ck−1xk−1 Gm(x). (19.23)

Таблица 19.4. Таблица эффективных двоичных циклических кодов ITU

Код

Порождающий полином Gm(x)

Примечание

CRC-4

1 + x + x4

Применяется в ISDN

 

(1+x)(1+x2 +x3 +x4 +x5 +x6 +x7) =

Используется в системах

CRC-8

= 1 + x + x2 + x8

асинхронной передачи

 

 

данных по технологии АТМ

CRC-12

(1 + x)(1 + x2 + x11) =

 

= 1 + x + x2 + x3 + x11 + x12

 

CRC-16

(1 + x)(1 + x + x2 + x3 + x4 + x12 +

Является стандартом CCITT

+ x13 + x14 + x15) = 1 + x5 + x12 + x16

для HDLC и LAPD

CRC-32

1 + x + x2 + x4 + x5 + x7 + x8 + x10 +

Применяется в HDLC

+x11 +x12 +x16 +x22 +x23 +x26 +x32

Учитывая произведение x5Gm(x), s = 0, k − 1, каждое слагаемое в (19.23) представляет собой сдвиг порождающего полинома Gm(x) на s элементов вправо, которому соответствует вектор

g = (1, g1, g2, . . . , gm−1, 1),

где g0 = 1 на основании соответствующего свойства полиномов минимальной степени [7.6]. В матричной форме кодовый вектор v, соответствующий многочлену V (x), может быть представлен в виде произведения информационного вектора c на порождающую матрицу Gk×n:

 

 

 

 

 

v1×n = c1×k Gk×n,

 

 

 

 

 

(19.24)

где порождающая матрица Gk×n имеет вид:

1

0

 

. . .

0

 

 

0

1

g1 ··

·· ··

gm−2

gm−1

 

 

 

 

1

g1

g2

 

gm−1

1

0

0

 

. . .

0

 

 

Gk×n =

0.

.0

.1 ·.· ·

·.· ·

·.· ·

gm. −1

.1

 

... .

0.

. (19.25)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

1

g

 

g

 

 

 

g

 

1

 

 

 

.. .. .. .. ..

..

.. ..

 

..

..

 

 

 

 

 

· · ·

· · ·

 

 

1

 

2

· · ·

· · ·

 

m−1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Каждая строка порождающей матрицы Gk×n имеет размерность n и является кодовым словом; в каждом столбце (19.26) присутствует циклический сдвиг вектора g=(1, g1, g2, . . . , gm−1).

Глава 19. Помехоустойчивое кодирование в системах передачи

Вобщем случае матрица Gk×n порождает несистематический циклический код. Однако заметим, что в силу линейности кодового пространства Vn, замена любой строки суммой этой строки с другой, отличной от нее, не меняет кодового пространства. Это свойство позволяет привести Gk×n к систематическому виду.

Проверочная матрица циклического кода может быть получена на основании того, что многочлен Gm(x) делит xn + 1 без остатка, следовательно,

xn + 1 = Gm(x) · H(x).

Введя проверочную матрицу следующего вида

H(n−k)×n =

 

hk

hk−1

hk−2 · · ·

h1

h0

0.

.0

.hk

··.·· ··

·.· ·

·.· ·

 

 

0

hk

hk−1

 

h2

h1

 

 

0

..

..

0

h

 

h

..

 

..

.. ..

 

 

 

 

· · ·

· · ·

 

 

k

 

k−1

 

 

 

 

 

 

 

 

00 . . . 0

h0

0

. . .

0

h1

h0

. . .

0

..

 

..

 

..

 

.

.

.

 

.

 

 

 

. .

· · ·

· · ·

h1

h0

(19.26)

,

получим известное матричное уравнение (19.9) для синдромного декодирования:

v HT = 0.

(19.27)

19.3.3.Систематическое кодирование циклическими кодами

Приведенные в табл. 19.3 порождающие полиномы образуют несистематический код. Однако путем некоторой модификации алгоритма кодирования (19.24) можно получить систематический циклический код с теми же параметрами [7.6].

Пусть имеется информационный полином степени k −1 и его mn −k кратный сдвиг в n-разрядном сдвиговом регистре:

Ck (x) = c0 + c1x + c2x2 + . . . + ck−1xk−1 ,

(19.28)

xmCk(x) = c0xm + c1xm+1 + c2xm+2 + . . . + ck−1xn−1.

(19.29)

Такой сдвиг не вызывает переполнения регистра сдвига и соответствует заполнению k правых крайних двоичных разрядов регистра информационным вектором Ck(x). При этом m оставшихся разрядов остаются свободными. Эти разряды необходимо заполнить таким образом, чтобы вектор, содержащийся в регистре, принадлежал циклическому коду, т. е. делился без остатка на порождающий полином Gm(x) минимальной степени m. Поэтому многочлен xmCk(x) можно представить в следующем виде:

xmCk(x) = Q(x) · Gm(x) + R(x),

(19.30)

где R(x) — остаток от деления вектора xmCk(x), содержащегося в регистре сдвига, на Gm(x).

В (19.30) и далее операция сложения производится по правилам арифметики по модулю 2, при которой операция вычитания эквивалентна операции сложения. Из этого соотношения также следует

xmCk(x) + R(x) = Q(x) · Gm(x) = v(x),

(19.31)

а из (19.31) вытекает следующий алгоритм кодирования систематического циклического (n, k)-кода:

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

подлежащая кодированию k-разрядная кодовая комбинация описывается полиномом Ck(x) степени k − 1;

полином Ck(x) умножается на xm, что эквивалентно сдвигу k-разрядной комбинации влево (в сторону старших разрядов) на m разрядов или добавлению m нулей справа;

полученный полином xmCk(x) делится на порождающий полином Gm(x), имеющий степень, равную числу проверочных символов m, в результате чего получается целая часть Q(x) и остаток от деления R(x)

Ck(x)xm

= Q(x) +

R(x)

;

(19.32)

Gm(x)

Gm(x)

 

 

 

формируется n-разрядная разрешенная комбинация систематического циклического кода, соответствующая полиному v(x)xm Ck(x) + R(x), для чего в свободные разряды регистра записывается комбинация, соответствующая остатку от деления R(x).

Можно показать, что комбинации, соответствующие полиному v(x), являются разрешенными. С этой целью умножим обе части уравнения (19.32) на Gm(x):

Ck(x)xm = Q(x)Gm(x) + R(x).

Вычитая из обеих частей R(x) и учитывая, что операции вычитания и суммирования по модулю два эквивалентны, получим:

xmCk(x) + R(x) = Q(x)Gm(x).

Выражение в левой части этого равенства — это кодовое слово v(x). Следова-

тельно, v(x) = Q(x) — целая часть, т. е. полученный полином v(x) делится на

Gm(x)

Gm(x) без остатка, а значит, представляет собой разрешенную комбинацию циклического кода.

Пример. Построим кодовую комбинацию циклического кода (7, 4), соответствующую комбинации 1001. Общая длина комбинации n=7, число информационных символов k = 4, проверочных mn − k = 3. Из таблицы неприводимых полиномов табл. 19.3 для m = 3 выберем образующий полином G(x)x3 +x+1. В соответствии с рассмотренным выше алгоритмом кодирования получаем:

1. 1001 → C4(x) = x3 + 1. 2. x3C4(x) = x6 + x3.

3. Вычисление остатка от деления x3C4(x) на порождающий полином Gm(x):

x6 + x4 + x3

 

 

x3 + x

x4

 

 

x3 + x + 1

x6 + x3

 

 

x4 + x2 + x

 

 

 

 

x2 + x

 

(101)2

 

R(x)

 

 

 

4. Формирование разрешенной

комбинации циклического кода:

C DA B

 

 

 

v7(x) = x3C4(x) + R(x) = x6 + x3 + x2 + x

→ 1001110.

Глава 19. Помехоустойчивое кодирование в системах передачи

19.3.4. Обнаружение ошибок

Процедура обнаружения ошибки сводится к делению принятой комбинации на порождающий полином Gm(x) и анализу остатка от деления R(x). Поскольку разрешенные кодовые комбинации делятся на образующий полином без остатка, то значение R(x) = 0 означает либо факт отсутствия ошибок, либо случай, когда кратность ошибки выше обнаруживающей способности циклического кода. Если R(x) = 0, то произошел прием с ошибкой (обнаруживаемой). Таким образом, остаток от деления R(x) играет роль синдрома в коде Хэмминга.

Пример процесса декодирования

Пусть полученная комбинация 1001110 совпадает с переданной, т. е. искажений нет. Известно, что комбинация образована с помощью порождающего полинома G3(x)x3 + x2 + 1. В результате деления полинома, описывающего эту комбинацию на порождающий полином G3(x) получается:

x6 + x4 + x3

 

 

 

 

+ x

 

x3 + x

x4

+ x2

 

x3 + x + 1

x6 + x3

+ x2

+ x

 

x4

+ x2

+ x

 

 

 

 

 

 

0

 

R(x) = 0.

Пусть в результате приема искажен второй символ кода, т. е. принята комбинация 1101110. Тогда в результате расчета R(x) фиксируется ошибка:

x6 + x4 + x3

 

 

 

 

 

 

 

 

+ x2

+ x

x3

+ x2 + x + 1

x5

+ x4

 

x3 + x + 1

x6 + x5

+ x3

 

+ x2

+ x

 

x5

+ x3 + x2

 

 

 

 

 

x4

+ x3

 

+ x

 

 

 

x4

+ x2

 

+ x

 

 

 

 

 

x3

+ x2

 

 

 

 

x3

+ x + 1

 

 

 

x2 + x + x R(x) = 0.

19.3.5. Исправление однократных ошибок

Определение места ошибки в принятой комбинации циклического кода основано на анализе остатка R(x) от деления полинома v (x) принятой комбинации на порождающий полином Gm(x). Принятую с ошибкой в i-м разряде n-разрядную кодовую комбинацию можно представить полиномом:

v (x) = v(x) + xn−i,

где i = 1, n — номер искаженного разряда, отсчитываемый от старшего; v(x) — полином комбинации CRC–кода, принятой без ошибки; xn−i — полином однократной ошибки (ошибку можно представить как n-разрядную комбинацию с «1» в i-м разряде; например, при i = 2 и n = 5 ошибка представляется комбинацией 01000, которой соответствует полином x3).

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

После деления v (x) на Gm(x) получим

v (x)

=

v(x)

+

xn−i

.

Gm(x)

Gm(x)

 

 

 

Gm(x)

Согласно свойству циклического кода v(x) делится на Gm(x) без остатка. Следовательно, остаток от деления v (x) равен остатку от деления xn−i, т. е. не зависит от вида v(x), а определяется только положением принятого с ошибкой символа. Это позволяет определить место ошибки путем последовательных сдвигов принимаемой комбинации в сторону старшего разряда и сравнения остатков Rj (x),

j = 0, n − 1 (j — число сдвигов) от деления сдвигаемой комбинации с остатком R0(x) (выделенным синдромом) от деления на Gm(x) полинома xn−1, описывающего ошибку в старшем разряде.

Согласно одному из методов исправления однократных ошибок при совпадении остатков Rj (x) = R0(x) на j-м шаге принимается решение об искажении символа Cj+1, номер которого на единицу больше числа сдвигов j.

Рассмотрим работу этого алгоритма на примере.

Пусть комбинация циклического кода (7, 4) 1001110, сформированная с помощью образующего полинома G(x)x3 + x + 1 принята с ошибкой в третьем разряде: 1011110. Для исправления ошибки определяется выделенный синдром R0(x) путем выполнения деления полинома ошибки в старшем разряде x6 на порождающий полином G(x) в двоичном эквиваленте:

 

100000

 

1011

 

 

1011

1011

 

 

 

1100

 

 

 

 

 

 

 

 

 

 

 

 

 

1011

 

 

 

 

 

 

1110

 

 

 

 

 

 

1011

 

 

R

 

 

101

 

(x).

 

 

 

0

 

Для определения искаженного символа вычисляются остатки Rj (x) от деления принятой кодовой комбинации на двоичный эквивалент порождающего полино-

ма G(x):

 

 

1011110

1011

 

1011

 

 

10001

 

110 |0 R0(x) = R0(x) 101 |1

111 |0 R1(x) = R0(x) 101 |1

101R2(x) = R0(x).

19.3.6.Общий принцип декодирования циклических кодов

Рассмотрим модель передачи данных по каналу связи с ошибками (рис. 19.11). При передаче по каналу связи с ошибками к кодовому слову v(x) добавляется многочлен ошибок e(x).

Глава 19. Помехоустойчивое кодирование в системах передачи

Рис. 19.11. Модель передачи данных по каналу связи с ошибками

В результате многочлен принятого кодового слова имеет вид:

r(x) = v(x) + e(x)

(19.33)

или в соответствии с (19.31):

r(x) = Q(x)Gm(x) + s(x),

(19.34)

где s(x) является синдромом, представляющим собой остаток от деления r(x) на порождающий полином Gm(x):

s(x) = r(x) mod (Gm(x)) = e(x) mod (Gm(x)).

(19.35)

Если r(x) является кодовым словом, то s(x) — нулевой многочлен. На рис. 19.12 представлена обобщенная структура декодера циклического кода.

Рис. 19.12. Обобщенная структура декодера циклического кода

Синдром s(x) используется для определения полинома ошибок e(x). Проблема декодирования в этом случае состоит в поиске полинома ошибок e(x) по известному синдрому s(x) согласно уравнению (19.35). При наличии многократных ошибок задача декодирования будет рассматриваться уже как решение системы уравнений вида (19.35). Эффективная реализация алгоритмов декодирования циклических кодов, позволяющих обнаруживать и исправлять многократные ошибки, достигается при использовании арифметики конечного поля — поля Галуа.

19.3.7. Арифметика полей Галуа

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

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

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

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

Пример. Рассмотрим построение поля Галуа GF(28), состоящее из q = 28 = = 256 чисел от 0 до 28 − 1, упорядоченных особым образом.

Согласно теории Галуа, любой элемент произвольного поля можно представить в виде i-й степени одного (или нескольких) примитивного элемента α: bi = αi GF (p), 0 i p − 2. В поле GF(28) имеется единственный примитивный элемент, в качестве которого выступает простое число 2. Следовательно, любой ненулевой элемент поля bi может быть получен возведением 2 в степень

i, 0

 

i

 

2

8

2. Нетрудно заметить, что, начиная с i = 8, получается результат,

 

 

 

 

 

 

 

8

− 1]. В поле GF(2

8

) эта ситуация

который выходит за пределы множества [0, 2

 

 

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

 

 

 

 

 

 

Согласно теории конечных полей, в любом поле должны быть определены

 

 

 

 

 

 

 

0

n

 

m

− 1, для GF(2

8

 

 

 

255

элементы 0, b0 = α = 1

и bn = α8

= 1, где np

 

 

 

): b255 = α

= 1.

Остальные элементы поля GF(2

) определяются следующим образом:

 

 

 

 

 

 

 

 

bi =

α αi−1,

 

αi−1

< 2m−1 = 128,

 

 

 

 

 

 

 

 

 

 

 

 

α ·· αi−1 mod ξ,

αi−1

2m−1 = 128,

 

 

 

 

 

где ξ — некоторое число, которое в теории Галуа задается в полиномиальной форме.

Для примера, поле GF(28) может быть порождено полиномом f (x)x8 + x4 + x3 + x2 + 1, который используется в коде Рида–Соломона (204, 188) на физическом уровне телевизионного стандарта DVB-T. Этот полином соответствует в двоичной форме числу ξ = 0011101B и в десятичной — ξ = 285.

Согласно теории [7.7, 7.8], любой порождающий поле полином f (x) должен быть неприводимым. Таким образом, конечное поле вида GF(2m) может быть построено заданием некоторого двоичного неприводимого полинома f (x) порядка m, который по смыслу соответствует роли порождающего полинома Gm(x) циклических кодов.

Элементы теории полей Галуа

Поле — это множество элементов A, в котором определены операции сложения, вычитания, умножения и деления. Сложение и умножение должны удовлетворять коммуникативному, ассоциативному и дистрибутивному законам: для любых элементов α, β, γ. В таком поле должны выполняться соотношения:

коммутативность: α + β = β + α; α · β = β · α;

ассоциативность: α + (β + γ) = α + β) + γ; α · (β · γ) = (α · β) · γ;

дистрибутивность: α · (β + γ) = α · β + α · γ;

замкнутость: α + β A,

Глава 19. Помехоустойчивое кодирование в системах передачи

атакже должны существовать элементы 0, 1, −α, обратный к α = 0 элемент α−1, такие, что:

α + 0 = α;

− α + α = 0;

0 · α = 0;

1

·

α = α;

если α = 0,

то α−1

·

α = 1.

 

 

 

 

 

Число элементов конечного поля называется порядком поля. Согласно теории [7.8], число элементов q конечного поля всегда удовлетворяет условию

q = pm

(19.36)

где p — простое число, называемое характеристикой поля; m = 1, 2, . . .. Другими словами, если число элементов q некоторого множества не удовлетворяет условию (19.36), то для этого множества невозможно определить операции сложения и умножения, удовлетворяющие аксиомам поля. Так, например, невозможно образовать поле с числом элементов, равным 6, 10, 12, 14 и т. д., но можно построить поле с числом элементов, равным 2, 3, 4, 5, 7, 8, 9, 11 и т. д.

Наиболее просто операции сложения и умножения выполняются в поле с числом элементов, равным p (m = 1). В этом случае поле называется простым; операции сложения и умножения в нем определены по модулю p ( mod p), а сами элементы образуют последовательность чисел {0, 1, 2, . . . , p − 1}. Простейшим простым полем Галуа является двоичное поле GF(2), сложение и умножение в котором выполняются по правилам арифметики «по модулю 2». Можно заметить, что правила арифметики табл. 19.1 удовлетворяют перечисленным выше правилам, с учетом того что обратным элементом к «1» по сложению и умножению является сам элемент «1».

Сложнее обстоит дело с построением расширенных полей Галуа GF(pm), где m > 1. Так как теория помехоустойчивого кодирования основывается, как правило, на полях характеристики 2, то ниже будут рассматриваться основные методы построения полей GF(2m). Каждый элемент такого поля можно представить в виде слова длины m над GF(2) или многочлена с двоичными коэффициентами, степень которого меньше чем m. К примеру, любой элемент α GF(23) можно записать как двоичное слово или как многочлен a2x2 + a1x + a0, {a2, a1, a0} {0, 1}, где формальная переменная x является указателем позиции соответствующего коэффициента. В этом случае, если сложение элементов из GF(2m) будет выполняться по правилу сложения представляющих их многочленов в поле GF(2), а умножение элементов поля определить как умножение представляющих эти элементы многочленов по модулю некоторого заданного неприводимого многочлена над GF(2) степени m, то тем самым будет построено поле Галуа GF(2m).

Если рассмотреть степени некоторого ненулевого элемент α GF(q) вида α1, α2, . . . , αl, . . ., то нетрудно заметить, что все они являются элементами поля GF(q) и в силу конечности поля для некоторых l и s (l = s) будет справедливо равенство αl = αs, а значит, αl−s = 1. Минимальное натуральное число dα, для которого αdα = 1, является мультипликативным порядком элемента α.

В теории конечных полей доказывается, что мультипликативный порядок любого ненулевого элемента α поля GF(q) делит значение q − 1. Например, в поле GF(23) число ненулевых элементов поля является простым: q − 1 = 7, следовательно, делителями q − 1 могут быть только 1 и 7. В свою очередь, это означает, что все ненулевые элементы, кроме единичного, имеют максимальный мультипликативный порядок, равный 7.

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

Элемент α поля GF(q), имеющий максимальный мультипликативный порядок dαq − 1, называется примитивным элементом поля.

В любом конечном поле GF(q) всегда существует хотя бы один примитивный элемент α. Особенностью такого элемента является то, что все его q − 1 последовательных степеней α1 = α; α2, . . . , αq−2, αq−1 = 1 различны и соответствуют всем ненулевым элементам поля GF(q). Таким образом, в поле GF(23) все ненулевые элементы поля, за исключением единицы, примитивны, поскольку число ненулевых элементов является простым и, следовательно, мультипликативный порядок для этих элементов максимален и равен 7.

Расширенное поле, построенное как множество полиномов по модулю некоторого неприводимого полинома f (x), всегда содержит в качестве элемента поля полином x. Если окажется, что x — примитивный элемент, то соответствующий неприводимый полином f (x) называется примитивным полиномом. Примитивный элемент α, степени которого образуют конечное поле, является корнем неприводимого полинома f (x):

f (α) = 0

(19.37)

и, как будет показано ниже, удовлетворяет условию αq−1 = 1.

Примитивные полиномы произвольной степени m определены над любым конечным полем. Они наиболее удобны для построения расширенных полей, поскольку позволяют реализовать простой вариант таблицы умножения элементов поля. Действительно, любые ненулевые элементы a и b расширенного поля GF(2m) могут быть выражены как некоторые l-я и s-я степени примитивного элемента α: a = αl, b = αs. Тогда a · b = αl+s и, значит, таблица умножения двух элементов поля a и b представляет собой не что иное, как перечисление всех ненулевых степеней примитивного элемента α.

Построение расширенного поля

Построение расширенного поля GF(pm) в виде степеней примитивного элемента является достаточно простой процедурой и предполагает следующий алгоритм действий.

На первом этапе выбирается порождающий поле примитивный полином степени m над простым полем GF(p): f (x)xm + fm−1xm−1 + · · ·+ f1x + f0. Тогда m-я степень x по модулю f (x) определится как

xm = −fm−1xm−1 − fm−2xm−2 − . . . − f1x − f0.

Предположение о примитивности x позволяет использовать для его обозначения α, в результате чего имеем равенство

αm = −fm−1αm−1 − fm−2αm−2 − . . . − f1α − f0.

 

Отсюда

 

αm+1 = α · αm = −fm−1αm − fm−2αm−1 − . . . − f0α.

(19.38)

Если основным является поле с характеристикой p = 2, то в силу свойств двоичной арифметики поля GF(2)α = −α, и выражение (19.38) можно записать в виде

αm+1 = α · αmfm−1αm + fm−2αm−1 + . . . + f0α, fi GF(2).

(19.39)