- •I. Алгебраические основы теории циклических кодов
- •1.2. Поля Галуа и их свойства
- •1.3. Основные действия над многочленами в поле двоичных чисел и их реализация
- •1. Сложение многочленов
- •2. Умножение многочленов
- •3. Деление многочленов
- •4. Реализация операций умножения и деления многочленов в поле двоичных чисел
- •4. Циклические коды, исправляющие пачки ошибок (коды файра)
- •5. Циклические коды бчх
- •6. Циклические коды рида—соломона
- •6.2 Построение кодов Рида-Соломона
- •6.3. Использование кодов Рида—Соломона для исправления стираний
- •6.4. Реализация действий над элементами поля
- •7. Мажоритарное декодирование циклических кодов
- •1.Алгебраические основы теории циклических кодов 2
- •Определение группы, кольца, поля
5. Циклические коды бчх
Коды Боуза—Чоудхури—Хоквингема (БЧХ-коды) представляют собой большой класс циклических кодов, исправляющих независимые ошибки кратности t и менее. Для кодов БЧХ характерны все основные свойства циклических кодов. Чаще всего коды БЧХ описывают с помощью корней порождающего многочлена Р (х) степени 2t. В качестве корней Р (х) выбирают 2t последовательных элементов аj,aj+1 ..., аj+2i-1поля Галуа GF (р'п), где 1≤ j≤pm— 1. Если при этом элемент а является примитивным (первообразным) в поле GF(pm), то такой код БЧХ называют примитивным с длиной кодовой комбинации п=рт—1 над полем GF (р). Для двоичных примитивных кодов БЧХ п = 2n — 1 над полем GF (2). В случае, если ряд корней многочлена Р(х) для кода БЧХ начинается с j=1, т. е. а, а2, .... а2t, то такой код называют кодом БЧХ в узком смысле.
Код БЧХ, у которого корень а не является примитивным элементом поля GF (рm), т. е. имеет порядок d < рт —1, называют непримитивным с длиной комбинации п =d.
Пусть аj-элемент расширения простого числового поля. Тогда по определению, данному в [7], некоторый нормированный многочлен т(х) наименьшей степени, для которого т(аj ) = 0, называют минимальной функцией для аi.
Отметим, что минимальные функции m(х) являются непри-водимыми многочленами. Если предположить, что каждому из корней аi производящего многочлена Р (х) соответствует своя минимальная функция тi (х), то производящий многочлен Р (х) должен быть наименьшим общим кратным всех минимальных функций, т. е.
P(x)=НОК[m1(x),m2(x), ... m2t(x)]. (51)
Таким образом, вектор, представленный многочленом f (x),будет кодовым тогда и только тогда, когда он делится без остатка как на каждую из минимальных функций т1 (х), m2(x), ..., т2t (х), так и на их наименьшее общее кратное.
Тогда для любого из корней а, а2, ....a2t справедливо уравнение f (аi) = с0 + с1 аi +с2(аi )2+…cn-1 (ai)n-1 = 0, которое можно записать в виде произведения двух матриц (coc1c2…cn-1)*[lai(ai)2…(ai)n-1]T=0. Но так как корнями f(х) должны быть все элементы a, a2 …,a2t, то можно сделать вывод, что вектор (c0c1…cn-1_) будет кодовым тогда и только тогда, когда он принадлежит нулевому пространству матрицы
Из свойства 1.6 полей следует, что если аi корень какой-либо минимальной неприводимой по модулю 2 функции mi (х)степени к, то остальными корнями будут (аi)2,((аi)2)2,...,(ai)2^(k-1).Следовательно, в разложении многочлена Р (х) каждая из различных минимальных функций mi (х) должна входить только один раз, а для построения матрицы (5.2) нужно использовать только по одному корню каждой из минимальных функций, входящих в разложение многочлена Р (х). Таким образом, если в качестве совокупности корней многочлена Р (х) выбраны элементы поля Галуа GF (2m) а, а2, а3, ..., а2t, то при построении матрицы Н должны быть использованы только нечетные степени а, а3, ..., а2t-1, а многочлен Р (х) будет иметь вид
P(x)=m1(x)m3(x) ... m2t-1(x). (5.3)
Рассмотрим следующий пример.
Пример 5.1. Пусть имеем двоичный циклический код БЧХ. к которому вектор {f (х)} будет принадлежать только тогда, когда элементы а, a2, а3, а4, а5, а6 будут корнями многочлена f (х). Кроме того, предполагается, что a — примитивный элемент поля Галуа GF (24). Тогда а15 = 1 и тi (х) обозначает минимальную функцию для аj .
В соответствие со свойством 1.6 элементы a, а2, а4 и а8 — корни одной и той же минимальной функции четвертой степени, следовательно, m1(х) = т2 (х)= т4 (х) = т8 (х). Аналогично, а3, а6, а12 и а24 = а9 — корни минимальной функции четвертой степени и m3 (х) = т6 (х) = m9 (х) = т12(х), а элементы a5 и а10 являются корнями минимальной функции второй степени и, следовательно, т5 (х)=т10(х). Отсюда, Р (х) является многочленом
P(x)= ml(x)m3(x)m5(x) (5.4)
степень которого равна 10.
Таким образом, к искомому циклическому коду БЧХ будет принадлежать любой вектор {f (х)}, если f (х) делится на Р(х). В то же время циклический код будет нулевым пространством матрицы
Так как аj является элементом поля GF (2т ) и представляет собой вектор из т двоичных элементов 0 и I, то матрица HT имеет размерность п * mt.
Из свойства 2.2 следует, что многочлен Р (х) является делителем многочлена F (х) = хn — 1, где п = 2m—1. В то же время, многочлен Р (х) для кодов БЧХ равен произведению минимальных функций. Следовательно, любая из минимальных функций, входящих в разложение многочлена Р(х), должна быть делителем функции F (х) = хn— 1 = х2^m-1— 1. При этом, как следует из высшей алгебры [4, 7], степень каждой минимальной функции не может быть больше т. А так как таких функций t, то степень многочлена Р (х) не превосходит mt. Отсюда каждая комбинация циклического примитивного кода БЧХ при длине, равной n = 2m—1, имеет число информационных разрядов, равное k≥2m— 1—mt.
Рассмотрим конкретный пример построения циклического кода БЧХ.
Пример 5.2. Построить двоичный примитивный циклический код БЧХ для т = 4 и t= 3.
В этом случае длина кодовой комбинации равна п = 2m— 1 = 15, а вектор {f (х)} будет принадлежать этому циклическому коду, если элементы поля GF (24) а, a2, ..., а6 будут корнями многочлена f(х). Кроме того, отметим, что а — примитивный элемент поля, а минимальной функцией для него пусть будет примитивный неприводимый многочлен т1 (х) = 1 +x+x4.
Как видим, этот пример является непосредственным продолжением примера 5.1, из которого следует, что производящий многочлен Р (х) имеет вид Р (х) = m1(х) т3 (х) т5 (х), где т1 (х) и m3 (х) — минимальные многочлены четвертой степени, а т5 (х) — минимальный многочлен второй степени, вследствие чего степень многочлена Р (х) равна 10. Кроме того, было показано, что матрица Н имеет вид (5.5).
Т ак как примитивный элемент а — корень минимального многочлена тх(х)=1 + х + х4, то, подставив вместо каждого элемента матрицы H его значение из табл. 1.1, получим транспонированную матрицу НТ;
В [7] показано, что m3(x)=1+x+x2+x3+x4, m5(x)=1+x+x2, тогда степень многочлена P(x) равна 10, что не превышает mt.
В рассмотренном примере
Т огда производящая матрица G искомого систематического кода имеет вид :
Образованный таким образом циклический (n,k)=(15,5) код БЧХ позволяет исправить любую совокупность ошибок кратности t=3 и менее.
Принципы исправления ошибок кодами БЧХ
Предположим, что передавая кодовый вектор {f(x)}, представление которого в виде многочлена будет иметь вид: f(x)=c0+c1x+…+cn-1xn-1. Пусть далее вследствие ошибок вместо вектора {f(x)} принят вектор {f(x)+e(x)}= {f(x)}+ {e(x)}, где {e(x)}-вектор ошибок.
Обозначим принятый с ошибками вектор {f(x)+e(x)} через вектор {h(x)}=(h0h1h2…hn-1).Принятую комбинацию можно представить в виде многочлена степени n-1, т.е. h(x)=h0+h1x+h2x2+…+hn-1xn-1. В результате умножения вектора {h(x)} на матрицу (5.2) получим вектор из t компонент [h(a), h(a3),…h(a2t-1)],где h(a)=h0+h1a+h2a2+…+hn-1an-1; h(a3)=h0+h1a3+h2(a3)2+…+hn-1(a3)n-1
И т.д.
В то же время {h(x)}= {f(x)+e(x)}, следовательно, h(x)= f(x)+e(x). Тогда h(ai)=f(ai)+e(ai), где i=1,3,…,2t-1, но так как f(x) делится на P(x) без остатка, то f(a)=f(a3)=…=f(a2t-1)≡0, так что h(ai)≡e(ai).
При умножении вектора {h(x)} на первый столбец матрицы HT , образованной из (5.5), получаем элемент
Отсюда следует, что имеется взаимнооднозначное соответствие между элементами вектора ошибок и элементами поля GF(2m). Каждому ошибочному элементу ei соответствует элемент i-й строки (i=0,1,2,…,n-1) первого столбца транспонированной матрицы HT, т.е. элемент поля ai.
Предположим, что ошибки произошли на позициях i1,i2,…,it, для которых ei=1, а для всех остальных ej=0, тогда (5.8) может быть переписана следующим образом:
Умножив вектор {h(x)} на какой-либо другой j-й столбец матрицы HTполучим
h(aj)=e(aj)=(aj)i1+(aj)i2+…+(aj)it=
где j= 1, 3, .... 2t— 1.
Выражения (5.11) представляют t симметрических функций Sj от нечетных степеней элементов Х1, Х2 Xt, которые
имеют вид
Таким образом, функции Sj дают t уравнений вида (5.12) с t неизвестными Х1, Х2..., Xt. Кроме того, из (5.12) можно найти также симметрические функции для четных j = 2, 4, .., 2t, т. е. можно получить дополнительно t уравнений вида (5.12) с теми же неизвестными. Действительно, учитывая свойство 1.4 для р = 2, получим
Для кодов БЧХ имеются более эффективные алгебраические алгоритмы декодирования. Рассмотрим один из них.
Так как суммы j-x степеней элементов Х1,Х2, ..., Xt представляют собой симметрические функции Sj, то эти элементы могут рассматриваться [8] как корни некоторого многочлена степени t
Xt+p1Xt-1+p2Xt-2+…+pt (5.I4)
разложение которого на линейные множители дает уравнение
(X-X1)(Х-Х2) ... (X-Xt)=0. (5.16)
Коэффициенты р1, р2, ..., рt являются простейшими симметрическими функциями, которые связаны с симметрическими функциями Sj тождествами Ньютона [1, 7]:
S3-p1S2+p2S1-3p3=0
S4-p1S3+p2S2-p3S1+4p4=0 и т. д.
При операциях по модулю 2 тождества Ньютона выписываются по формуле
где δ = 0 при i—четном и δ=1- при нечетном.
С учетом последнего тождества Ньютона можно переписать так:
St=p1St-1+p2St-2+…+pt-1S1+ δpt
Если тождества (5.16) решить относительно простейших симметрических функций pi и найденные значения рi, подставить в (5.14), то корни этого многочлена Х1, Х2, ..., Xt можно определить последовательной подстановкой в него каждого из п = 2m — 1 элементов поля. Если подставленный вместо X элемент аi не является корнем, то соответствующий символ вектора {h (x)} принят правильно. Если же элемент ai является корнем, то соответствующий i-й символ вектора {h (х)} принят ошибочным и должен быть исправлен.
Однако в силу зависимости (5.13) следует рассматривать не все тождества (5.16), а лишь те, которые определяют Sj для нечетных j, т. е.
St-1=p1St-2+p2St-3+…+pt-2S1+pt-1 (при t —четном) или St=p1St-1+p2St-2+…pt-1S1+pt (при t— нечетном). Отсюда видно, что имеется i/2 (при t—четном) или (t+1)/2 (при t — нечетном) уравнений, которых недостаточно для определения t неизвестных р1, р2, ..., рi. Однако в результате умножения {h(x)}*HT можно определить все симметрические функции S1, S3,…,S2t-1. Знание симметрических функций Sj с нечетными значениями j' вплоть до 2t—1позволяет составить дополнительные уравнения, которые вместе с (5.17) дадут t независимых уравнений с t неизвестными р1,р2, .... рt Эти уравнения можно уже решить относительно pt.
Выше было показано, как составить тождества Ньютона, когда j при Sj принимает целые значения, не превосходящие t, т. е. степени многочлена (5.14). Можно показать, что аналогично можно составить тождества Ньютона для значений j > t.
Действительно, если обозначить многочлен (5.14) через ψ(X) и подставить вместо X какой-либо из корней Х1, X2 .... Xt, то получим уравнение
Умножение обоих частей уравнения (5.18) на Xic-t дает
Где c>t. Если теперь просуммируем (5.19) по всем корням, т.е.
То получим
Решаем уравнения (5.17) совместно с (5.22) относительно неизвестных рi Найденные значения рi подставляем в (5.14) и, как было указано, последовательной подстановкой вместо X элементов поля GF (2m) находим корни этого многочлена. Этим самым мы устанавливаем ошибочные позиции принятого вектора {h (х)}.
Если произошло в действительности t — 1 ошибок, то один из корней Х1, Х2,…Xt должен быть равен нулю. Следовательно, при решении уравнений (5.17) и (5.22) мы должны получить pt =0. Если произошло t — 2 ошибки, то два корня равны нулю и, следовательно, pt= рt-1= 0 и так далее.
Пример 5.3. Рассмотрим процесс исправления тройных ошибок (t = 3) циклическим кодом БЧХ, построение которого рассматривалось в примере 5.2. Многочлен (5.14) для такого кода будет иметь вид Х3 + р1Х2 + р2Х + р3
На основании (5.17) и (5.22) составляем уравнения:
Сложение по модулю 2 соответствующих столбцов матрицы HT(5.6) позволяет найти значения S1,S3, S5. Кроме того, при операциях по модулю 2 S2 = S12, a S4 = S14 Решая уравнения относительно рt, находим [7]:
при условии, что S13+S3≠0.
Рассмотрим случай, когда ошибки появляются на 2, 5 и 7-м местах, т.е. {e(x)}=(010010100000000), тогда {h(x)}HT=(1011,1111,1000), т.е. S1=(1011), S3=(1111), S5=(1000).
Теперь найдем S2 и S4, обращаясь к табл. 1.1,
По формулам (5.24) находим p1=S1=a13,