Научная статья на тему 'О ПРОСТОМ АЛГОРИТМЕ ДЕКОДИРОВАНИЯ КОДОВ БЧХ, КОДОВ РИДА-СОЛОМОНА И КОДОВ ГОППЫ'

О ПРОСТОМ АЛГОРИТМЕ ДЕКОДИРОВАНИЯ КОДОВ БЧХ, КОДОВ РИДА-СОЛОМОНА И КОДОВ ГОППЫ Текст научной статьи по специальности «Математика»

CC BY
305
38
i Надоели баннеры? Вы всегда можете отключить рекламу.
Журнал
Вестник СибГУТИ
ВАК
Область наук
Ключевые слова
ПОМЕХОУСТОЙЧИВЫЕ КОДЫ / КОДЫ РИДА-СОЛОМОНА / КОДЫ ГОППЫ / КОДЫ БОУЗА-ЧОУДХУРИ-ХОКВИНГЕМА / ДЕКОДИРОВАНИЕ КОДА

Аннотация научной статьи по математике, автор научной работы — Рацеев Сергей Михайлович, Череватенко Ольга Ивановна

Гао получил простой и эффективный алгоритм декодирования кодов Рида-Соломона. В работе приводится описание применения данного алгоритма для декодирования обобщенных кодов Рида-Соломона, кодов Гоппы, кодов Боуза-Чоудхури-Хоквингема и кодов Рида-Соломона в случае ошибок и стираний.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ON A SIMPLE ALGORITHM FOR DECODING BCH CODES, REED-SOLOMON CODES, AND GOPPA CODES

Gao obtained a simple and efficient algorithm for decoding Reed-Solomon codes. In this paper we describe the use of this algorithm for decoding generalized Reed-Solomon codes, Goppa codes, Bose-Chaudhuri-Hocquenghem codes, and Reed-Solomon codes with errors and erasures.

Текст научной работы на тему «О ПРОСТОМ АЛГОРИТМЕ ДЕКОДИРОВАНИЯ КОДОВ БЧХ, КОДОВ РИДА-СОЛОМОНА И КОДОВ ГОППЫ»

УДК 519.725

О простом алгоритме декодировании кодов БЧХ, кодов Рида-Соломона и кодов Гоппы

С. М. Рацеев, О. И. Череватенко

Гао получил простой и эффективный алгоритм декодирования кодов Рида-Соломона. В работе приводится описание применения данного алгоритма для декодирования обобщенных кодов Рида-Соломона, кодов Гоппы, кодов Боуза-Чоудхури-Хоквингема и кодов Рида-Соломона в случае ошибок и стираний.

Ключевые слова: помехоустойчивые коды, коды Рида-Соломона, коды Гоппы, коды Боуза-Чоудхури-Хоквингема, декодирование кода.

1. Введение

Коды Рида-Соломона (РС) являются важным частным случаем кодов Боуза-Чоудхури-Хоквингема (БЧХ), длины которых равны мощности мультипликативной группы поля, над которым они заданы. Важной особенностью кодов РС является возможность исправления многократных пакетов ошибок и тот факт, что они лежат на границе Синглтона. В настоящее время имеется несколько хорошо известных алгоритмов декодирования кодов РС. В силу специфики кодов РС эти алгоритмы позволяют восстановить количество искаженных данных, которое может доходить до половины количества избыточных данных. Наиболее известными алгоритмами декодирования кодов РС являются алгоритм Питерсона-Горенстейна-Цирлера, алгоритм Сугиямы-Касахары-Хирасавы-Намекавы, алгоритм на основе метода Берлекэмпа-Месси [1, 2]. Данные алгоритмы находят решение так называемого ключевого уравнения в четыре этапа: вычисление компонент синдромного вектора, вычисление многочлена локаторов ошибок, нахождение корней многочлена локаторов ошибок, вычисление значений ошибок. К данным алгоритмам можно также добавить алгоритм нахождения значений ошибок Форни.

Для кодов РС Гао [3] и Шиозаки [4] предложили более простой и естественный алгоритм декодирования. Асимптотическая сложность данного алгоритма оценивается величиной 0(и(^ и)2), которая совпадает со сложностью лучших алгоритмов декодирования кода РС, причем его описание является самым простым из описаний известных алгоритмов. Данный алгоритм состоит из трех шагов: построение интерполяционного многочлена, применение незаконченного обобщенного алгоритма Евклида, деление многочленов.

Алгоритм Гао хорошо адаптируется для декодирования обобщенных кодов РС, кодов БЧХ, кодов Гоппы, декодирования кодов РС в случае ошибок и стираний, что и будет продемонстрировано в данной работе. Для каждого алгоритма приведен пример декодирования.

Заметим также, что важность исследования кодов Гоппы обусловлена еще и тем, что на их основе строятся перспективные постквантовые криптосистемы [5].

2. Алгоритм декодирования обобщенных кодов Рида-Соломона

Напомним определение обобщенного кода Рида-Соломона. Пусть а = (а0, а1,..., ап-1), где аг - различные элементы поля СЕ(дт), у = (уо, Уь..., уп-1) - ненулевые (не обязательно различные) элементы из СЕ(дт). Тогда обобщенный код Рида-Соломона, обозначаемый

ОЯБк(а, у), состоит из всех кодовых векторов вида:

и = (уоЬ(ао),у1 Ъ(а\),... ,Уп-\Ь(а,п-1)), (1)

где Ь(х) - информационные многочлены над полем ОГ(дт), степени которых не превосходят к — 1. При этом кодовое расстояние кода ОЯБк(а, у) равно d = п — к + 1.

При описании нижеследующего алгоритма, а также его обоснования в виде теоремы 1 будем следовать работе [6].

Определим многочлен:

т(х) = (х — а0)(х — а\)... (х — ап-1).

Например, если аi пробегают все элементы поля ОГ(д), то т(х) = хп — х. Если п | д — 1 и элемент а имеет порядок п (в мультипликативной группе ОГ *(дт)), то т(х) = (х — 1)(х — а)... (х — ап-1) = хп — 1.

Пусть кодовый вектор и получен на основе информационного многочлена Ь(х) = Ь0 + Ь1х + ... + Ьк-1хк-1 с помощью (1), V = и + е - полученный на приемном конце вектор, в котором Ь ошибок, Х1 = аг1,... ,Х1 = агг - локаторы ошибок, У1 = ег1,... ,Уг = егг - значения ошибок. Многочлен локаторов ошибок запишем в виде:

а(х) = (х — X1)... (х — Xг). Если ошибок не было, то будем полагать, что а(х) = 1.

Если Vi = иг, то Vi = угЬ(аг). Если Vi = иг, то на позиции г произошла ошибка, поэтому а(аг) = 0. Из этого следует, что

v(аi)y-1Vi = а(аг)Ь(аг), г = 0,1,... ,п — 1.

Обозначим р(х) = а(х)Ь(х). Заметим, что

1 ^^ — 1 п + к deg р(х) < —---+ к — 1 < —-—.

Тогда

а^у-1 Vi = р(а^, г = 0,1,... ,п — 1.

Построим интерполяционный многочлен Лагранжа f (х) степени не выше п — 1, проходящий через точки (аo,y-1Vo), (аl,y-lVl),..., (ап-1,у--^п~1):

/(а^ = yi-1Vi, г = 0,1,...,п — 1, deg/(х) < п — 1.

Тогда из равенств

а (а(а^) = р(а^), г = 0,1,...,п — 1

получаем сравнение:

а(х)/(х) = р(х) (mod т(х)). (2)

Действительно, разделим с остатком а(х)/(х) и р(х) на т(х):

а(х)/(х) = д(х)т(х) + г(х), deg г(х) < п,

р(х) = д(х)т(х) + г(х), deg г(х) < п.

Так как т(аг) = 0, то:

г(а^ = а (а(а^ = р(а^ = г(а^, г = 0,1,... ,п — 1.

Так как многочлены г(х) и г(х) совпадают в п точках (причем аi = а^ при г = ]) и имеют степень не более п — 1, то г(х) = г(х). Следовательно, получаем сравнение (2).

Алгоритм 1 (алгоритм декодирования для обобщенных кодов РС).

Вход: принятый вектор V.

Выход: исходный информационный вектор Ь, если произошло не более [(ё —1)/22] ошибок, где [ ] - целая часть числа.

1. Интерполяция. Строится интерполяционный многочлен / (х), для которого

/ (аг ) = y-lVi, г = 0, 1,...,и — 1.

2. Незаконченный обобщенный алгоритм Евклида. Пусть г-1(х) = т(х), г0(х) = /(х), v-1(x) = 0, v0(x) = 1. Производится последовательность действий обобщенного алгоритма Евклида:

гг-2(х) = Тг-1(х)дг-1(х) + гг(х), Vi(x) = Vi-2(x) — Vi-l(x)qi-l(x), г > 1, до тех пор, пока не достигается такое г^ (х), для которого

и + к . . и + к

degTj-i(x) > —-—, degrj(x) <

> 2 ' ~ 2 3. Деление. Информационный многочлен равен b(x)

rj(x)

Vj (x)'

Теорема 1. Если в кодовом векторе произошло не более [(d — 1)/2] ошибок, то алгоритм декодирования 1 всегда приводит к единственному решению, а именно, к исходному информационному вектору b.

Доказательство. Пусть b(x) - исходный информационный многочлен (который соответствует вектору b), u(x) - кодовый многочлен, полученный с помощью формулы (1). Пусть многочлен ошибок e(x) имеет вес не более [(d — 1)/2], v(x) = u(x) + e(x) - принятый на приемном конце многочлен. Заметим, что для a(x) и p(x) (истинные значения), которые получены на основе исходных данных, сравнение (2) выполнено, причем b(x) = p(x)/a(x).

Пусть с помощью алгоритма 1 получены значения Tj (x) и Vj (x), причем

n + к n + k

deg Tj-i(x) > , deg Tj (x) < .

Покажем, что Vj (x) делится на Tj (x), причем Tj (x)/vj (x) = b(x). Домножив первое из приведенных ниже сравнений

<j(x)f (x) = p(x) (mod m(x)),

Vj(x)f (x) = Tj(x) (mod m(x)) на Vj (x), а второе - на a(x), получим:

Vj(x)p(x) = &(x)Tj(x) (mod m(x)). (3)

Оценим сверху степени многочленов из левой и правой частей данного сравнения. Для многочлена из правой части сравнения:

, ч , ч d — 1 n + к deg a(x)Tj(x) < —2--+--2— = n.

Учитывая, что для любого i -го шага обобщенного алгоритма Евклида выполнено:

deg Vi (x) = deg m(x) — deg Ti-i(x),

получаем:

Поэтому

deg Vj (х) = deg т(х) — deg г^-1(х) < п —

п + к d — 1

, ч , ч d — 1 п + к

^ V (х)р(х) +

Следовательно, из сравнения (3) получаем равенство:

Vj (х)р(х) = а(x)rj (х). Так как р(х) = а(х)Ь(х), то rj (х) = Vj (х)Ь(х).

п.

Задача нахождения интерполяционного многочлена тесно связана с задачей обращения матрицы Вандермонда. Помимо классического метода Гаусса существуют алгоритмы обращения матрицы Вандермонда, которые учитывают ее структуру. В работе [7] приводятся формулы для вычисления обратной матрицы к матрице Вандермонда специального вида над конечным полем. В работе [8] приводится алгоритм со сложностью 0(п3). В работах [9, 10, 11, 12, 13] приводятся алгоритмы со сложностью 0(п2). В любом случае обращение матрицы Вандермонда является предвычислением и не влияет на сложность алгоритма декодирования. Пример 1. Рассмотрим обобщенный код Рида-Соломона над полем ОГ(7) с параметрами п = 5, к = 3, d = 3, а = (2, 3, 4, 5, 6), у = (1, 2, 3, 2,1). Для данного кода многочлен т(х) примет вид:

т(х) = (х — 2)(х — 3)(х — 4)(х — 5)(х — 6)

х6 — 1 х1

1 + х + х2 + х3 + х4 + х5.

Ниже приведена матрица Вандермонда V на основе вектора а, обратная к ней матрица V-1 и диагональная матрица У на основе вектора у:

V

Заметим, что первые к = 3 строки матрицы VУ образуют порождающую матрицу О нашего кода.

Пусть Ь = (2, 4, 1) - информационный вектор, который соответствует многочлену Ь(х) = 2 + 4х + х2 . Процесс кодирования можно записать в следующем виде:

1 1 1 1 1 1 5 0 1 5 1 0 0 0 0

2 3 4 5 6 2 5 6 4 1 0 2 0 0 0

4 2 2 4 1 , V-1 = 3 2 0 3 2 , У = 0 0 3 0 0

1 6 1 6 6 4 2 3 6 1 0 0 0 2 0

2 4 4 2 1 5 0 5 0 5 0 0 0 0 1

2

и = (уоЬ(ао),у1Ь(а1),... ,у,п-1Ь(а,п-1)) = ЬО.

После кодирования информационного вектора Ь получаем кодовый вектор и = (0, 4,4, 3, 6).

Предположим, что на приемном конце принят вектор V = и + е = (0, 2, 4, 3, 6), где е = (0, 5, 0, 0,0) - вектор ошибок. Применим алгоритм декодирования 1.

1. Интерполяция. Вычисляем коэффициенты многочлена /(х) = /0 + /]_х + ... + /4х4:

(/о, /1,/2,/з, /4) = (0, 2, 4, 3, 6)У-^-1 = (0, 6, 2, 3, 6).

2. Незаконченный обобщенный алгоритм Евклида. Полагаем г-1(х) = т(х), г0(х) = /(х), v-1(x) = 0, v0(x) = 1. После применения первого шага обобщенного алгоритма Евклида

г-\(х) = г0(х)(?э + 6х) + 1 + 4х + х2 + х3, г\(х) = 1 + 4х + х2 + х3,

VI (х) = — (3 + 6х) = 4 + х

процесс останавливается, так как deg г0 (х) = 4, deg г1(х) = 3, причем (п + к)/2 = 4. 3. Деление. Исходный информационный многочлен равен:

Ь(х) = -(х) = 2 + 4х + х2. 3. Декодирование кодов БЧХ

Для построения алгоритма декодирования для кодов БЧХ на основе метода Гао нам понадобится следующее хорошо известное утверждение.

Предложение 1. Пусть код БЧХ А над полем Г = ОГ(д) определяется последовательностью корней

а1, а

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

.1+1

, а

1+&-2 е ог(дт)

порождающего многочлена д(х) € Г[х], где а - примитивный элемент поля ОГ(дт). Пусть А - код Рида-Соломона над полем ОГ(дт) с порождающим многочленом д(х) = (х — а1 )(х — а1+1)... (х — а1+ё-2). Тогда код А является ограничением кода А на подполе ОГ(д), т.е. код А состоит из всех таких и е А, компоненты которых принадлежат полю ОГ(д).

Заметим, что предложение 1 верно для любого а е ОГ*(д). В этом случае длины кодов А и А равны порядку элемента а при 5 > 2. При этом код А уже будет подпадать под определение обобщенного кода Рида-Соломона. Алгоритм 2 (декодирование кода БЧХ).

Вход: принятый вектор V.

Выход: исходный кодовый вектор и е А С А, если число ошибок не превышает [(д,— 1)/2\.

1. Вектор V декодируется с помощью алгоритма 1 для кода А (при этом полагается, что т(х) = хп — 1), который возвращает информационной многочлен Ь(х), соответствующий вектору и.

2. После этого остается получить вектор и на основе Ь(х) с помощью формулы:

и

(Ь(1),Ь(а),...,Ь(ап-1)).

Пример 2. Рассмотрим код БЧХ над полем ОГ(23), построенным на основе многочлена х3 + х + 1 с примитивным элементом а:

а0 =

а2 =

а4 =

а6 =

1

а

а +а2 +а2

100, 001, 011, 101,

а1

а3

а5 а7

а

1 +а

1 +а +а2 1

010, 110, 111, 100.

В

качестве порождающего многочлена рассмотрим примитивный многочлен

д(х) = х + х + 1. Хорошо известно, что полученный код БЧХ является кодом Хэмминга с параметрами п = 7, к = 4, d = 3 .С одной стороны, для данного кода существуют эффективные алгоритмы декодирования. С другой стороны, этот пример является иллюстрацией применения алгоритма Гао к кодам БЧХ.

1

Построим каноническую форму матрицы для нашего кода. Для этого разделим хг с остатком на д(х):

х3 = д(х) • 1 + 1 + х, х4 = д(х) • х + х + х2,

х5 = д(х) • (1 + х2) + 1 + х + х2, х6 = д(х) • 1 + 1 + х2.

Получаем порождающую матрицу О в каноническом виде:

О

1101000 0110100 1110 0 10 1010001

Закодируем информационный вектор г = (1, 0,1,1):

и = гО = (1, 0, 0,1,0,1,1). Предположим, что на приемном конце получен вектор:

V = (1, 0,0,1, 0, 0,1) = и + е,

где вектор ошибок равен е = (0,0, 0, 0, 0,1, 0).

Для декодирования многочлена v(x) = 1+х3+х6 применим алгоритм 2. Для этого сначала рассмотрим этот многочлен как искаженный кодовый многочлен \7, 5, 3] -кода Рида-Соломона надполем ОГ (23) с порождающим многочленом д(х) = (х — а)(х — а2). Матрица Вандермон-да (в данном случае, в частности, матрица дискретного преобразования Фурье) для данного кода Рида-Соломона и ее обратная имеют вид:

V

а

г]

V-1 = - (а-гз

1 1 1 1 1 1 1 \

а а2 а3 а4 а5 а6

а2 а4 а6 а а3 а5

а3 а6 а2 а5 а а4 ,

а4 а а5 а2 а6 а3

а5 а3 а а6 а4 а2

1 а6 а5 а4 а3 а2 а /

/ 1 1 1 1 1 1 1 \

1 а6 а5 а4 а3 а2 а

1 а5 а3 а а6 а4 а2

= 1 а4 а а5 а2 а6 а3

1 а3 а6 а2 а5 а а4

1 а2 а4 а6 а а3 а5

V 1 а а2 а3 а4 а5 а6 /

1

п

1. Интерполяция. Вычисляем многочлен /(х):

(/о, /1,/2, /3, /4, /5, /б) = VV-1 = (1, а6, а5, а6, а3, а3, а5),

/ (х) = 1 + а6х + а5х2 + а6х3 + а3х4 + а3х5 + а5х6.

2. Применение незаконченного обобщенного алгоритма Евклида.

г-1(х) = х7 — 1, г0 (х) = /(х). Тогда

Полагаем

х7 — 1 = / (х)(1 + а2х) + х + а6х2 + а2х3 + х4 + а2х5, v1(x) = — (1 + а2 х) = 1 + а2х.

3. Деление:

7 / \ Г1 (х) 2 4

Ь(х) = —= х + х + х .

Vl(x)

4. Находим кодовый многочлен

и = (Ь(1),Ь(а),...,Ь(а6)) = (0,1,1, 0,1, 0, 0^ = (1,0, 0,1, 0,1,1), из которого извлекаем исходный информационный вектор г = (1, 0,1,1).

4. Декодирование кодов Рида-Соломона в случае ошибок и стираний

Пусть код РС над полем ОГ(д) имеет параметры [п,к,ё = п — к + 1], п = д — 1, а - примитивный элемент поля ОГ(д), д(х) = (х — 1)(х — а)... (х — ап-1) - порождающий многочлен. Пусть теперь в канале связи происходят ошибки и стирания, ё > 2Ь + г + 1, где Ь и г - число ошибок и стираний соответственно. Предположим, что в принятом векторе V произошло Ь ошибок и г стираний, причем К - множество позиций в векторе V, на которых произошли стирания. Обозначим через V новый вектор длины п — г, который получен из вектора V путем удаления координат с номерами, принадлежащими множеству К. Тем самым мы рассматриваем новый обобщенный код Рида-Соломона длины V = п — г, размерности к = к и с кодовым расстоянием ё = п — к + 1. Для декодирования информационного многочлена Ь(х) можно применить алгоритм 1, который будет работать с вектором V и новыми параметрами V, к и ё. Вектор у в данном алгоритме полагается состоящим из единиц. При этом рассматриваются такие степени аг, для которых г ^ К, а многочлен т(х) имеет такой вид:

т(х) = (х — аг).

0<г<п-1,

Незаконченный алгоритм Евклида шага 2 алгоритма 1 будет работать до тех пор, пока не достигнется такое г] (х), что:

пк + к пк + к

deg Г]-1(х) > 2 , г] (х) < ——.

Так как для данного обобщенного кода Рида-Соломона выполнено ё > 2Ь + 1, то из теоремы 1 следует, что такой алгоритм декодирования однозначным образом возвратит исходный информационный многочлен Ь(х).

Пример 3. Построим код РС над полем ОГ (11) с параметрами п = 10, к = 5, ё = п — к + 1 = 6. Число а = 2 является примитивным элементом поля ОГ(11) (иными словами, первообразным корнем кольца вычетов по модулю 11, так как по критерию первообразного корня для данного случая должно быть выполнено а2 ф 1 (mod 11) и а5 ф 1 (mod 11)). Данный код может исправлять либо до двух ошибок и одно стирание, либо одну ошибку и до трех стираний, либо до пяти стираний.

Рассмотрим случай одной ошибки и трех стираний. Пусть Ь = (7, 2,8,1, 4) - информационный вектор, который соответствует многочлену Ь(х) = 7 + 2х + 8х2 + х3 + 4х4. После кодирования этого вектора получаем:

и = (Ь(1),Ь(а),...,Ь(а9)) = (0, 5,10, 7, 4, 5, 3,9, 7, 9).

Пусть на приемном конце получен вектор

V = (0, 5,10, 7,1, *, 3, *, 7, *),

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

Удалив в векторе V стертые символы, получим новый вектор

к = (0, 5,10, 7,1, 3, 7),

в котором только одна ошибка. Сейчас будем рассматривать обобщенный код РС длины гг = 7, размерности к = 5, с кодовым расстоянием d = 3. Множество Я позиций стертых символов равно Я = {5, 7, 9}. Составляем многочлен т(х):

т(х) = (х — аР)(х — а1)(х — а2)(х — а3)(х — а4)(х — а&)(х — а8) =

= (х — 1)(х — 2)(х — 4)(х — 8)(х — 5)(х — 9)(х — 3) =

хю - 1

= 7-77ТГ7-^-^ = 6 + 10х + 10х2 + 5х5 + х6 + х7.

(х — 10)(х — 7)(х — 6)

Построим матрицу Вандермонда V для вектора (1, 2, 4,8, 5, 9, 3) и ее обратную матрицу

V

-1.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

V

1 1 1 1 1 1 1 8 3 9 9 9 1 6

1 2 4 8 5 9 3 8 10 0 0 0 3 1

1 4 5 9 3 4 9 4 4 4 1 3 5 1

1 8 9 6 4 3 5 , V-1 = 9 1 0 0 0 2 10

1 5 3 4 9 5 4 6 9 3 5 1 3 6

1 10 1 10 1 1 1 8 2 5 3 4 1 10

1 9 4 3 5 9 3 2 4 1 4 5 7 10 )

1. Интерполяция. Вычисляем коэффициенты многочлена /(х) = /0 + ¡1х + ... + /6х6:

(¡о, /1,...,/6) = (0,5,10, 7,1, 3, 7^-1 = (0, 8,10,8,1, 2, 4).

2. Применение обобщенного алгоритма Евклида. Определяем г-1(х) = т(х), г0(х) = /(х) и применяем алгоритм Евклида:

т(х) = / (х)(7 + 3х) + 6 + 9х + 4х2 + 2х3 + 2х4 + 10х5,

Vl(x) = —(7 + 3х) = 4 + 8х.

После первого шага останавливаемся, так как (п + к)/2 = 6, deg г0(х) = 6, deg г1(х) = 5.

3. Деление:

Ь(х) =

Г1(х) = 6 + 9х + 4х2 + 2х3 + 2х4 + 10х v1(x) 4 + 8х

7 + 2х + 8х2 + х3 + 4х

5

4

5. Декодирование кодов Гоппы

Определение кода Гоппы [14] с векторами длины п, каждая компонента которых принадлежит полю ОЯ(д), опирается на два объекта: многочлен О(х) степени г с коэффициентами из поля ОЯ(дт), который называется многочленом Гоппы; подмножество Ь = {а0, а^^,..., ап-1}

элементов поля GF(qm) таких, что G(ai) = 0 для всех аг е L. Обычно в качестве L выбирается подмножество всех элементов поля GF(qm), которые не являются корнями многочлена

G(x).

Код Гоппы r(L,G) состоит из всех векторов u = (u0,ui,... ,un-i) с компонентами из GF(q), для которых выполнено сравнение:

n-i

= 0(mod G(x)).

^ x - аг

г=0

Хорошо известно, что для кодового расстояния кода r(L,G) выполнено неравенство

d > r + 1.

Следующее утверждение (см., напр., [15]) говорит о том, что коды Гоппы являются ограничениями кодов Рида-Соломона на подполе (т.е. альтернативными кодами). Теорема 2. Код r(L,G) представляет собой ограничение кода GRSn-r (L,y) на подполе GF(q),

где n - r = k, y = (yo,yi,... ,yn-i),

Уг = G(a) П -1-, i = 0,1,...,n - 1. (4)

J-J- аг — aj

0<j<n-1, г j

Данная теорема означает, что к кодам Гоппы можно применять алгоритмы декодирования для обобщенных кодов Рида-Соломона. Алгоритм 3 (декодирование кода Гоппы).

Вход: принятый вектор v = u + e, где u е r(L, G) С GRSn-r (L, y).

Выход: исходный кодовый вектор u, если произошло не более [r/2] ошибок, [ ] - целая часть числа.

1. К вектору v применяется алгоритм 1, на выходе которого получаем многочлен b(x).

2. Вычисление кодового вектора u:

u = (yob(ao),yib(ai),.. .,yn-ib(an-i)).

Теорема 3. Если в кодовом векторе произошло не более [r/ 2] ошибок, то алгоритм декодирования 3 всегда приводит к единственному решению, а именно, к исходному кодовому вектору u кода r(L, G).

Доказательство. Пусть код r(L, G) имеет кодовое расстояние d > r + 1, r = deg G(x). Пусть u е r(L,G). Так как код r(L,G) является ограничением кода GRSk(L,y) на подполе GF(q), то u можно получить с помощью кодирования некоторого информационного многочлена b(x) кода GRSk(L,y) с помощью формулы (1). При этом кодовое расстояние кода GRSk(L,y) равно d = n — k + 1 = r +1. Поэтому если в векторе u произошло не более r/2 ошибок, то их можно исправить на основе одного из алгоритмов декодирования кода GRSk(L,y). Учитывая теорему 1, пусть после применения алгоритма 1 получен информационный многочлен b(x) = rj(x)/vj(x) кода GRSk(L,y). Тогда осталось найти исходный кодовый вектор u кода r(L,G) на основе кодирования многочлена b(x) кода GRSk(L,y) с помощью формулы (1). □

Пусть код r(L, G) является двоичным. Если G(x) не имеет кратных корней, то код r(L, G) называется сепарабелъным кодом Гоппы. Пусть G(x) - полный квадрат некоторого многочлена над GF(2m) наименьшей степени, делящийся на G(x). В случае сепарабельного кода G(x) = G2(x). Для минимального расстояния сепарабельного кода r(L, G) верна оценка d > 2r + 1 и выполнено равенство r(L,G) = r(L,G) (см., напр., [15]). Эти факты позволяют строить сепарабельный код r(L, G) = r(L, G), а алгоритм декодирования 3 применять относительно кода GRSn-2r (a, y), r = deg G(x).

Пусть след элемента $ £ ОГ(2т) не равен нулю, г = 1,... ,в. Тогда хорошо известно, что многочлен О(х) = Л 1=1(х2 + х + вг) не имеет корней в ОГ(2т). Напомним, что для сепарабельности многочлена О(х) необходимо отсутствие кратных корней.

Перед рассмотрением следующего примера заметим, что если (а0 ,а1,..., ап-1} = ОГ(дт),

п

дт, д - четное, то П с

1 для любого г = 0,1,

о<з<п~1, (а у — а г)

для любого фиксированного в £ ОГ(дт) отображение ¡в : ОГ(дт)

п — 1. Действительно,

ОГ(дт), определенное равенством ¡в(х) = х — в, х £ ОГ(дт), является биективным. Поэтому в произведении Л о<]<п-1, (ау — аг) участвуют все ненулевые элементы поля, т.е. каждая скобка - это ненулевой элемент поля, причем все такие элементы различны. Осталось заметить, что все элементы из Ог*(дт) являются корнями многочлена хп-1 — 1.

Пример 4. Пусть Г = ОГ(23) - поле, построенное на основе многочлена 1 + х + х3 с примитивным элементом а £ ОГ(23) (см. пример 2). Построим [8, 2] -код Гоппы Г(Ь,О) над полем ОГ(2), в котором множество Ь и многочлен О(х) определены над ОГ(23). Пусть Ь = ОГ(23) = (0,1, а, а2,..., а6}, О(х) = 1 + х + х2. Так как след единицы ненулевой, то многочлен О(х) не имеет корней в поле ОГ(23). Также вычислим О(х) = О2(х) = 1+ х2 + х4. Так как <1 > 5, то код может исправлять 1 и 2 ошибки.

Учитывая теорему 2, данный код является ограничением кода ОКБ4(Ь,у) на подполе ОГ(2), где

Уг = О(аг) Д ^^ = О(аг), г = 0,1,..., 7,

а у

0^<7, 1 у

у = (1,1, а3, а6, а3, а5, а5, а6). Матрица Вандермонда V для кода ОКБ4(Ь, у), ее обратная V-1 и матрица У имеют вид:

V

1 1 1 1 1 1 1 1 \ 1 0 0 0 0 0 0 1

0 1 а а2 а3 а4 а5 а6 0 1 1 1 1 1 1

0 1 а2 а4 а6 а а3 а5 0 а6 а5 а4 а3 а2 а

0 1 а3 а6 а2 а5 а а4 1 0 а5 а3 а а6 а4 а2

0 1 а4 а а5 а2 а6 а3 ^ 1 = 0 а4 а а5 а2 а6 а3

0 1 а5 а3 а а6 а4 а2 0 а3 а6 а2 а5 а а4

0 1 а6 а5 а4 а3 а2 а 0 а2 а4 а6 а а3 а5

0 1 1 1 1 1 1 1 / 0 а а2 а3 а4 а5 а6 1

У = Diag(1,1, а3, а6, а3, а5, а5, а6),

где У - диагональная матрица.

Рассмотрим кодовый вектор и = (0, 0,1,1,1,1,1,1) £ Г(Ь, О) ном конце после передачи вектора и получен вектор:

Г(Ь, О). Пусть на прием-

V = и + е = (0, 0,0,1,1,1,0,1), е = (0, 0,1, 0, 0, 0,1,0). Будем декодировать вектор V с помощью алгоритма 1 для кода ОКБ4(Ь, у). В нашем слу-

чае

х х.

т(х) = (х — в)

веер (23)

Вычисляем коэффициенты интерполяционного многочлена f (х):

(¡0, ¡1,..., ¡7) = vУ- V-1 = (0,а2, 0,0,а,а,а4,а), / (х) = а2х + ах4 + ахъ + а4х& + ах7.

Полагаем г-\(х) = т(х), г0(х) = f (х) и применяем незаконченный обобщенный алгоритм Евклида:

т(х) = f (х)(а2 + а6х) + а5х + ах2 + а3х4 + ах5 + а2х6, У\(х) = -(а2 + а6 х) = а2 + а6х, f (х) = г\(х)(а3 + а6х) + а4х + х3 + а5х4, ь2(х) = 1 — (а3 + а&х)ь\(х) = а4 + а4х + а5х2.

Так как для кода СКБ4(Ь,у) п = 8, к = 4, (п + к)/2 = 6,то после второго шага алгоритм Евклида останавливается (deg Т\(х) = 6, deg г2(х) < 6).

Информационный многочлен Ь(х) кода ОКБ4(Ь,у), который соответствует вектору и, имеет вид:

, . г2(х) а4х + х3 + а5х4 2

Ь(х) г 4 : 4 : 5 2 х +х .

у2(х) а4 + а4х + а5х2

Вычисляем сам вектор и:

и = (уаЬ(0),угЬ(1),у2Ь(а),... ,у7Ь(а6)) = (0,0,1,1,1,1,1,1).

Литература

1. Блейхут Р. Теория и практика кодов, контролирующих ошибки. Перевод с англ.: И. И. Грушко, В. М. Блиновский. Под редакцией К .Ш. Зигангирова. М.: Мир, 1986. 576 с.

2. W. Cary Huffman, Vera Pless. Fundamentals of Error-Correcting Codes. Cambridge University Press, 2003. 646 p.

3. Gao S. A new algorithm for decoding Reed-Solomon codes // Communications, Information and Network Security / V. Bhargava, H. V. Poor, V. Tarokh, and S. Yoon, Eds. Norwell, MA: Kluwer, 2003. V. 712. P. 55-68.

4. Shiozaki A. Decoding of redundant residue polynomial codes using Euclid's algorithm // IEEE Transactions on Information Theory. Sep. 1988. V. IT-34, № 5. P. 1351-1354.

5. Status Report on the First Round of the NIST Post-Quantum Cryptography Standardization Process. National Institute of Standards and Technology. Internal Report 8240. January, 2019. 27 p. https://doi.org/10.6028/NIST.IR.8240.

6. Федоренко С. В. Простой алгоритм декодирования алгебраических кодов // Информационно-управляющие системы. 2008. № 3. С. 23-27.

7. Althaus H., Leake R Inverse of a finite-field Vandermonde matrix (Corresp.) // IEEE Transactions on Information Theory. 1969. V. 15, № 1. P. 173.

8. Клейбанов С. Б., Норкин К. Б., Привалъский В. Б. Обращение матрицы Вандермонда // Автоматика и телемеханика. 1977. № 4. С. 176-177.

9. Bjorck A, Pereyra V. Solution of Vandermonde systems of equations // Mathematics of Computation. 1970. V. 24, № 112. P. 893-903.

10. Gohberg I., Olshevsky V. The fast generalized Parker-Traub algorithm for inversion of Vandermonde and related matrices // Journal of Complexity. 1997. Vol. 13, № 2. P. 208-234.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

11. Parker F. D. Inverses of Vandermonde matrices // The American Mathematical Monthly. 1964. V. 71, №4. P. 410-411.

12. Traub J. F. Associated polynomials and uniform methods for the solution of linear problems // Siam Review. 1966. V. 8, № 3. P. 277-301.

13. Yan S., Yang A. Explicit algorithm to the inverse of Vandermonde matrix // 2009 International Conference on Test and Measurement, Hong Kong, 2009. P. 176-179.

14. Гоппа В. Д.Новый класс линейных корректирующих кодов // Пробл. передачи информ. 1970. Т. 6, № 3. С. 24-30.

15. Мак-Вильяме Ф. Дж., Слоэн Н. Дж. А. Теория кодов, исправляющих ошибки: пер. с англ. M: Связь, 1979. 744 с.

Статья поступила в редакцию 15.03.2020; переработанный вариант - 05.05.2020.

Рацеев Сергей Михайлович

д.ф.-м.н., профессор кафедры информационной безопасности и теории управления Ульяновского государственного университета (432017, Ульяновск, ул. Льва Толстого, 42), e-mail: [email protected]).

Череватенко Ольга Ивановна

к.ф.-м.н., доцент кафедры высшей математики Ульяновского государственного педагогического университета имени Н. И. Ульянова (432071, Ульяновск, пл. Ленина, д. 4/5).

On a simple algorithm for decoding BCH codes, Reed-Solomon codes, and Goppa codes S. M. Ratseev, O. I. Cherevatenko

Gao obtained a simple and efficient algorithm for decoding Reed-Solomon codes. In this paper we describe the use of this algorithm for decoding generalized Reed-Solomon codes, Goppa codes, Bose-Chaudhuri-Hocquenghem codes, and Reed-Solomon codes with errors and erasures.

Keywords: error-correcting codes, Reed-Solomon codes, Goppa codes, Bose-Chaudhuri-Hocquenghem codes, code decoding.

i Надоели баннеры? Вы всегда можете отключить рекламу.