pds
.pdf
|
|
é |
g(x) |
ù |
|||
|
|
ê |
xg(x) |
ú |
|||
|
|
ê |
|
|
|
|
ú |
G |
= |
ê |
x2g(x) |
ú |
|||
(n,k) |
|
ê |
..... |
|
|
ú |
|
|
|
ê |
|
|
ú |
||
|
|
ê |
x |
k− |
1 |
|
ú |
|
|
ë |
|
|
g(x)û |
Пример1: по второму определению циклического кода n=7 x7 +1=(x+1)(x3 +x+1)(x3 +x2 +1)
В качестве g(x) можно взять: g1(x)=x+1
g2(x)=x3 +x+1 g3(x)=x3 +x2 +1 g4(x)=(x+1)(x3 +x+1) g5(x)=(x+1)(x3 +x2 +1)
g6(x)=(x3 +x+1)(x3 +x2 +1)
Это будут следующие коды: (7,6) |
d=2 |
(7,4) |
d=3 |
(7,4) |
d=3 |
(7,3) |
d=4 |
(7,3) |
d=4 |
(7,1) |
d=7 |
|
é |
1+ |
x+ |
|
x |
3 |
ù |
é |
1101000ù |
||
|
ê |
|
|
ú |
ê |
ú |
|||||
Для кода Хемминга: G(7,4)= |
ê |
x+ |
|
x2 + |
x4 |
ú |
= ê |
0110100ú приведём к канонической |
|||
|
ê |
x2 |
+ |
x3 |
+ |
x5 |
ú |
ê |
0011010ú |
||
|
ê |
ú |
|||||||||
|
ê |
x |
3 |
+ |
x |
4 |
+ |
6 |
ú |
ê |
ú |
|
ë |
|
|
x |
û |
ë |
0001101û |
é1101000ù
форме и получим: G(7,4)=êê0110100úú
ê1110010ú êë1010001úû
é1001011ù
Проверочная матрица: H=[I3 RT] =êê0101110úú ,где I3 –единичная матрица 3 ×3
êë0010111úû
Последовательности (α0, α1, ... ,α n-1)соответствует многочлен α0x0 + … +α0x n-1
Как можно построить проверочную матрицу?
xn +1=g(x) h(x)=0
Для g(x) есть ортогональный многочлен, следовательно можно строить проверочную матрицу на основе g(x).
g(x)- порождающий многочлен
h(x)- проверочный многочлен степени k
Надо найти h(x). Способ 1 (см. пример1):
(x7+1) / (x3+x+1) = (x4+x2+x+1) = h(x) |
(деление столбиком) |
Способ 2:
h(x)=(x+1)(x 3+x 2+1)=x4+x3+x+x3+x2+1=x4+x2+x+1
|
é |
h(x) |
ù |
||
|
ê |
xh(x) |
ú |
||
|
ê |
|
|
|
ú |
Строим H(n,r) = |
ê |
x2h(x) |
ú |
||
|
ê |
|
|
|
ú |
|
ê |
|
|
|
ú |
|
ê |
x |
n− k |
|
ú |
|
ë |
|
h(x)û |
éx4 +
Для нашего примера H(7,4)=êêx5 +
êëx6 +
x2 |
+ |
x+ 1 |
ù |
é |
0010111ù |
|
||||||
x |
3 |
+ |
x |
2 |
+ |
|
ú |
ê |
|
ú |
|
|
|
|
|
xú |
= ê |
0101110ú |
приведём к канонической |
||||||
x |
4 |
+ |
3 |
+ |
x |
2 |
ú |
ê |
1011100 |
ú |
|
|
|
|
|
û |
ë |
û |
|
é1001011ù
форме и получим H(7,4)=êê0101110úú
êë0010111úû
Пример2: надо умножить (a0+a1x+a2x2)(b0+b1x+b2x2 ) по mod x3.
a0b0 + a0b1x + a0b2x2 +
+a1b0x + a1b1x2 + a1b2x3 +
+a2b0x2 + a2b1x3 + a2b2x4
Приведём по mod x3:
a0b0 + a0b1x + a0b2x2 +
a1b2 + a1b0x + a1b1x2 + a2b1 + a2b2x + a2b0x2
Произведению многочленов соответствует скалярное произведение векторов, при этом один из векторов пишется в естественном порядке (возрастающем), а коэффициенты второго вектора берутся в обратном порядке, а также используются все циклические сдвиги коэффициентов второго вектора.
é |
h(x) |
|
ù |
|
|
ê |
|
ú |
|
||
H = ê |
xh(x) |
ú |
g(x)h(x)=0 mod(x n+1) |
||
ê |
x |
n− k− |
1 |
ú |
|
ë |
|
h(x)û |
|
x7+1=(x+1)(x 3+x+1)(x 3+x2+1)
С помощью неприводимого многочлена П(α)=α3+α+1 можно построить
поле GF(23): |
|
|
|
|
α0 = |
1 |
= |
100 |
|
α1 = |
α |
= |
010 |
|
α2 = |
α2 |
= |
001 |
|
α3 |
= 1+α |
= |
110 |
|
α4 |
= |
α+α2 |
= |
011 |
α5 |
= 1+α+α2 = |
111 |
||
α6 |
= |
1+α2 |
= |
101 |
Построили элементы поля GF(23 ) по модулю неприводимого многочлена.
В теории Галуа доказано, что имеется однозначная связь между корнями двучлена (xn+1) и ненулевыми элементами поля GF(qn), а именно: корни двучлена (xn+1) являются ненулевыми элементами поля GF(qn).
Возьмём двоичное поле GF(2m). Установим связь между:
|
2m-1 |
|
|
X |
+ 1 |
и GF(2m), |
где (2m-1) – всего ненулевых элементов поля |
GF(2m), |
|
|
|
α0= … = 100 |
|
||
: |
|
: |
|
α6= … = 100 Распределим все элементы поля по многочлену:
x7+1=(x+1)(x 3+x+1)(x 3+x2+1)
α0 α1 α2 α4 α3 α6 α5 (т.к. α12 = α7+α5 = 1+α5 = α5)
Корректирующие свойства циклических кодов.
Корректирующие свойства циклических кодов задаются следующими двумя теоремами, авторами которых являются Боуз и Чоудхури. Впоследствии оказалось, что аналогичные результаты получил француз Хоквинчел. Поэтому коды, удовлетворяющие теоремам называются кодами ВЧХ.
Теорема1. Для любых чисел l и t можно построить циклический код с длиной кодовой комбинации n=2l-1. Число избыточных элементов n-k = l*t. Минимальное кодовое расстояние d ³ 2t +1.
Эта теорема говорит о потенциальной возможности построения кода с указанными параметрами.
Теорема2 (эта теорема говорит как реализовать теорему1). Если среди корней порождающего многочлена есть числа вида
αm0 , αm0 +1 , αm0 +2 , … , αm0 +d-2 , то минимальное кодовое расстояние циклического кода с данным g(x) :
dmin ³ d , где d -конструктивное расстояние.
Пример1: пусть l =3, t =1. при l =3 : n =7
при t =1: n-k =3. Следовательно получили код (7,4)
g1(x) = x 3+x+1 , корни многочлена: α1, α2, α4 (два подряд идущих корня α1 и α2 )
m0 =1 m0+d-2=2; d =3
g2(x) = x 3+x 2+1 , корни многочлена: : α3, α5, α6 (два подряд идущих корня α5 и α6 )
m0 =5 m0+d-2=6; d =3
Для кода (7,6): g(x) =1+x (один корень), dmin =2;
Для кода (7,3): g(x) = (1+x) (1+x+x3) , корни: α0, α1, α2, α4 (три подряд идущих корня α0, α1, α2), dmin =4;
Укорочение кодов.
Из любого группового (n,k)-кода можно получить (n-i,k-i)-код. Для этого необходимо в порождающей матрице (n,k)-кода, записанной в
канонической форме G(n,k) =[Rk , (n-k) Ik] ,вычеркнуть i крайних справа столбцов и i нижних строк. Оставшаяся часть порождающей матрицы даст порождающую матрицу кода (n-i,k-i) в канонической форме.
Рассмотрим код (5,3):
G(5,3)=
é10100ù êê11010úú , êë01001úû
é1010ù
следовательно G(4,2)=ê ú
ë1101û
Укорочение проверочной матрицы происходит по следующему правилу: необходимо в проверочной матрице (n,k)-кода, H(n,k) =[ In-k RT ], вычеркнуть i крайних справа столбцов (проверочные элементы не вычёркиваются, только информационные). Оставшаяся часть проверочной матрицы даст проверочную матрицу кода (n-i,k-i).
é10110ù
H(5,3) = ê ú ,
ë01011û
é1011ù
следовательно H(4,2)=ê ú
ë0101û
У укороченных кодов минимальное кодовое расстояние не меньше, чем у кодов естественной длины, так как отбрасывание столбцов проверочной матрицы не может уменьшить числа линейно зависимых столбцов(не может уменьшится вес кодовой комбинации). Всё это относится и к циклическим кодам.
Процедуры кодирования и декодирования для циклических кодов.
1) Процедуры на основе g(x).
Кодовая комбинация циклического кода f(x):
|
x 0 |
xn-k-1 |
|
xn-k |
xn-1 |
|
|
|
|
||||
|
избыточные элементы (n-k) |
|
информационные элементы (k) |
|
||
|
|
|
|
|
|
|
а) Процедура кодирования.
Есть комбинация k(x), а хотим сделать f(x). Для этого размещаем комбинацию k(x) на месте информационных элементов, а потом находим избыточные элементы. Таким образом получаем f(x).
k(x)= x0 … x k-1 |
, а нам надо |
k(x)= x n – k … x n -1 |
|
Для этого k(x)*x n - k |
-первый шаг кодирования. |
Таким образом, разместили k(x). Теперь находим избыточные элементы. Любая кодовая комбинация циклического кода должна делиться на порождающий многочлен:
(k(x) * x n - k ) / g(x)= q(x) (частное от деления) + r (x) / g(x) (остаток от деления) -второй шаг кодирования.
k(x) * x n - k = q(x) r (x) + k(x) * x n - k
* g(x) + r (x) |
|
= q(x) * g(x) |
-третий шаг кодирования. |
Вкачестве избыточных элементов берётся остаток от деления r (x).
Вэтом случае, реализуя эту процедуру, получаем разделимый код, у которого места информационных и избыточных элементов известны. По аналогии с рассмотренным методом кодирования групповых кодов на основе порождающей матрицы, можно использовать аналогичный метод кодирования для циклических кодов:
f (x) =k(x) / g(x) по mod (x n +1)
Вэтом случае получаем неразделимый код. б) Процедура декодирования.
Воснове процедуры декодирования лежит вычисление синдрома S(x). Есть 3 способа вычисления синдрома:
1.S (x) = f (x) * HT
2.S (x) = остаток от деления f (x) на g(x)
3. S (x) = f (x= a i), где a i -корни g(x)
Если код используется в режиме обнаружения ошибок, то синдром даёт основание решать: есть ошибки в принятой комбинации или нет.
Если S(x) = 0, то ошибок нет или они не обнаруживаются кодом Если S(x) ¹ 0, то в принятой комбинации есть ошибки.
При исправлении ошибок поступают также как и в групповых кодах. По S(x) находят e(x) и тогда:
f '(x)+e(x) = f(x), где f '(x) -принятая комбинация.
х° |
хn-k-1 |
х n-k |
х n-1 |
Избыток |
Информация |
|
|
|
|
|
|
n-k |
k |
|
|
1.Кодирование
g(х)
2.Декодирование. Вычисление синдрома.
1. |
S (x) = f (x) H T |
f (x) |
|
|
2. |
S(x) = 2(x) =остаток от деления |
|||
g(x) |
||||
|
|
|||
3. |
αi * S(x) = f (x −αi ) для всех корней g(x) |
Пример Рассмотреть процедуру кодирования и декодирования для кода БЧХ (7,4) с g(x)=1+х+х³
Числа, соответствующие кодовой комбинации:
Элемент |
Частное от |
|
|
|
кодовой |
деления |
r(x) |
|
Двоичная |
комбина |
|
|
|
посл-ть |
ции |
|
|
|
остатка |
хº |
q(x)g(x)=0*g(x |
xº=1 |
|
100 |
|
) |
|
|
|
х¹ |
0*g(x) |
x |
α¹ |
010 |
х² |
0*g(x) |
x² |
α² |
001 |
х³ |
1*g(x) |
1+x |
|
110 |
х4 |
x*g(x) |
x+x² α4 |
011 |
|
х5 |
(x²+1)g(x) |
1+x+x² |
111 |
|
х6 |
(x³+x+1)g(x) |
1+x² |
|
101 |
случайно |
|
элементы поля GF(2³) |
каноническая форма порождающей матрицы G(7,4)
Декодирование:
1.Сумма строк HT соответствующих f(x) 2.Сумма строк HT соответствующих f(x) 3. Сумма строк HT соответствующих f(x)
é1000ù
êê0100úú
ê0010ú
êë0001úû
Теорема:
Справедливо рав-во (a+b)p=a p+b p,если GF(p m ) (a+b+c)p=a p+b p +c p Т.е.все 3 способа вычисления синдрома -одно и тоже
f '(x)=f(x)+e(x)
S(x)= f '(x) HT=(f(x)+e(x))HT=e(x) HT,т.е.синдром полностью определяется многочленом ошибок
Если е(х)=1, то инвертирование принятой комбинации
ПРОЦЕДУРА КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ НА ОСНОВЕ h(x)
Только для кодов n=2l−1(коды естественной длины) Если f(x)=q(x)*g(x)
f(x)h(x)=0(=C(x)−пусть)
Ci = fi h0 + fi −1+... + fi k − hk = 0
Процедура кодирования: известны все информационные элементы К(х), по ним найти n-k
fi − k = fi h0 + fi −1h1 +... + fi − k +1hk −1
Пусть i=n-1
fn − k −1 = fn −1h0 + fn − 2h1 +... + fn − khk −1
Дальше: i=n−2 и тд
В общем виде: