Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Копия ПДС.doc
Скачиваний:
41
Добавлен:
15.03.2015
Размер:
1.33 Mб
Скачать

Важнейшие групповые коды.

Из групповых кодов наиболее известны:

  • Коды Хемминга

  • Коды Голея

  • Коды с единственной проверкой на чётность (нечётность)

Коды Хемминга.

Код Хемминга наиболее удобно определяется через число избыточных элементов. Пусть n-k = r, тогда n = 2r – 1, k = 2r – r – 1, dmin = 3. В качестве проверочной матрицы H Хемминг предложил использовать матрицу размером n столбцов и n – k = r строк, у которой в качестве столбцов записаны все ненулевые r разрядные двоичные числа в упорядоченной записи.

“1”“2””3””4””5””6””7”

Сумма “1”, “2”, “3” = 0 dmin = 3

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

Таблица декодирования состоит из 2n-k строк и 2k столбцов. Синдром совпадает с номером ошибки.

Код Голея.

(23,12) dmin = 7 – двоичный код

(11,6) dmin = 5 – троичный код

Коды строго лежат на границе Хемминга:

- для двоичного кода

- для троичного кода

Коды с единственной проверкой на чётность: (n , n-1).

Это коды с максимально разнесённым расстоянием:

d-1 = n-k

d = n-k+1

Коды с единственной проверкой на чётность задаются с помощью проверочной матрицы:

H(n ,n-1) = [111...1], где

а) число строк равно числу проверочных элементов (=1);

б) единицы на местах тех элементов, которые охвачены проверкой (n единиц);

в) d=2, так как при сложении двух любых столбцов получаем 0.

При d=2 можно только обнаруживать однократные ошибки. Никакие ошибки чётной кратности этот код обнаруживать не будет, только ошибки нечётной кратности. Следовательно, код обнаруживает половину ошибок.

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

Циклические коды появились в 1959 году. Для их получения применяют регистры сдвига с обратной связью.

Циклические коды -это разновидность групповых кодов. Обозначение:(n,k).

Два определения циклического кода:

1) Циклическим (n,k)-кодом называют такой групповой код, для которого справедливо: если последовательность (a0, a1, ... , an-1) принадлежит коду, то и n-последовательность вида (an-1, a0, a1, ... , an-2), полученная путём циклического сдвига элементов, указанных в комбинации, на единицу вправо, также принадлежит этому коду (циклический сдвиг делается с помощью умножения на x).

Обычно комбинации циклических кодов представляют в виде многочленов f(x), степень которых не превышает (n-1):

(a0, a1, ... , an-1) соответствует a0x0+a1x1+a2x2+…+an-1xn-1

Такое представление даёт возможность не только складывать кодовые комбинации, но и умножать и делить по соответствующим правилам для многочленов.

2) Здесь используется возможность умножения и деления. Циклическим (n , k)-кодом называют множество многочленов степени (n-1) и менее, каждый из которых делится без остатка на некоторый многочлен g(x), степень которого равна (n-k). Этот многочлен g(x) должен быть сомножителем (делителем) двучлена (xn+1). Многочлен называют порождающим многочленом.

Если получаем xn+1=0, то два эти определения сходятся (xn=1).

Кодовые комбинации циклического кода представляются в виде многочленов. Сложение многочленов не изменяет их степени и эквивалентно сложению векторов, поэтому множество векторов (n-1) и менее по операции сложения многочленов представляет собой группу, т.е. групповой код. Однако умножение и деление векторов изменяет их степень. Для того чтобы обеспечить замкнутость по операции умножения векторов производят умножение многочленов по модулю многочлена(x(n-1)).

В этом случае многочлен (xn+1) является нулём, также как двойка является нулём при действиях по mod2.

Понятие о кольце и поле.

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

1. Замкнутость.

a,bR, то ab=cR, где R- кольцо.

2. Операция умножения ассоциативна.

a(bc)=(ab)c

3. Элементы кольца удовлетворяют дистрибутивному закону.

a(b+c)= ab+ac

Роль подгруппы в группе в кольце выполняет идеал. Если элемент кольца умножить на элемент идеала, то получим идеал.

Рассмотрим множество всех целых чисел, а идеал возьмём следующим образом: выпишем все чётные числа.

... -4 -2 {0} 2 4 6 8 ... -идеал (1)

(mod 2)

... -3 -1 {1} 3 5 7 9 ... (2)

{}-минимальные положительные элементы

{1}-минимальное число, не вошедшее в идеал

Вводя действие над числами (mod2), получили два класса вычетов, следовательно, получили кольцо.

Идеал как подгруппа по операции сложения. Если умножить (2) на (1), то результаты будут во множестве (1).

... -3 {0} 3 6 9 12 ... (3)

... -2 {1} 4 7 10 13 ... (mod 3)

... -1 {2} 5 8 11 14 ...

Если 3*4 =12, а 12 по mod 3 является нулём, а ноль входит в (3).

Множество классов вычетов кольца, также образуют кольцо.

Поле - множество элементов произвольной природы, для которых задано два действия: сложение и умножение и по этим действиям удовлетворяются все групповые аксиомы.

Классы вычетов кольца при действиях по модулю простого числа образуют поле.

Классы вычетов {0} и {1} по mod 2.

Наличие единичного элемента:

0 1

Наличие обратных элементов:

Обратные элементы существуют только не для нулевых элементов.

По аналогии с кольцом классов вычетов целых чисел, можно построить кольцо классов вычетов многочлена по модулю многочлена (xn +1). Этих классов вычетов будет ровно 2n , если коэффициенты многочлена взяты из двоичного кода. Для этого кольца классов вычетов можно построить идеал, если взять все многочлены (классы вычетов), кратные некоторому многочлену g(x)(многочлен g(x) образует свой класс вычетов).

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

h(x)= образует нулевое пространство для этого идеала.

Код Рида - Соломона.

n = q-1, где q-основание кода.

Если q =2, то получаем код, состоящий из одного элемента (n = 2-1).

Расширенные коды: p=qm, где p-число элементов поля. Тогда при q =2: n=2m-1 (т.е. берём не числовое поле, а поле из последовательностей нулей и единиц).

Запишем множество многочленов по mod (xn+1):

{0}, xn +1, x (xn +1), …

{1}, xn +1+1, xn+1 +x+1, …

{x}, …

{x+1}, …

{x2}, …

{x2 +1}, …

{x2 +x+1}, …

:

{xn-1 +xn-2 +x+1}, …

Всего получили 2n различных кодовых комбинаций. Надо из 2n кодовых комбинаций выбрать 2k< 2n .Для этого: если это множество построено по модулю многочлена f(x) и при этом этот многочлен состоит из:

f(x)=g(x)*h(x)=0, то идеал будет включать все многочлены, кратные g(x), а его размер будет k.

Можно построить идеал на основе h(x). Идеал будет кратен h(x), а его пространство будет (n-k).

Мы получили циклический код, у которого каждый многочлен кратен многочлену g(x) или h(x).

Рассмотрим поле. Хотим перейти к полю с большим основанием. Это можно сделать либо расширением (p=2m), либо увеличением основания q.

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

Простыми полями называют поля, сформированные по модулю простого числа (простое число делится на 1 и на себя).

Простое поле представляет собой кольцо классов вычетов по модулю простого числа с конечным числом элементов. Для конечных полей используется обозначение GF(q), где q- число элементов поля, q = p (простое число).

Для конечных полей справедливо следующее свойство: мультиплексированная группа поля Галуа является циклической. Это означает: все элементы поля могут быть получены как степени одного из элементов поля. Элемент поля, который порождает все остальные элементы, называют примитивным элементом поля.

Пример:

Есть GF(q), q=5

Элементами этого поля являются {0}

{1}

{2}

{3}

{4}

20=1

21=2

22=4

23=8 (8 по mod 5 будет 3)

Следовательно, 2 –это примитивный элемент поля.

Расширенным полем называют такое поле, элементами которого являются последовательности заданной длины, состоящие из элементов основного поля.

q = p=2 GF(2) (элементы поля: 0 и 1)

Как построить элементы расширенного поля?

GF(qm) GF(2m) (для расширенного поля)

Возьмём m=2:

GF(2)=0,1 -простое поле

GF(22)=00, 10, 01, 11 -расширенное поле (все последовательности нулей и единиц).

Обозначим многочлены:

f(x) = 00=0

f(x) =10=1

f(x) =01=x

f(x) =11=x+1

Элементы расширенного поля можно получить как кольцо классов вычетов по модулю неприводимого многочлена степени m, коэффициенты которого взяты из основного поля.

Для того чтобы построить поле GF(2m), надо построить кольцо классов вычетов неприводимого многочлена (xm + … +1) с коэффициентами основного поля.

m=2 x2 +x+1

П(a)=α2 +α+1 (вместо x подставляем α).

Строим элементы поля:

0 = 0 = 00

α0 = 1 = 10

α1 = α = 01

α2 = 1+α = 11 (т.к. α2 по модулю (α2 +α+1) равно 1+α)

Если α0 разделить на(α2 +α+1),то остатком будет α0

(т.к. деление начнётся с α2)

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

Циклические коды являются групповыми кодами. Множество многочленов, кратных некоторому многочлену является замкнутым. Среди кодовых комбинаций всегда есть нулевой многочлен. Таким образом, все изложенные выше способы описания групповых кодов применимы и для циклических кодов.

Порождающая матрица циклического кода строится как множество из k многочленов, кратных многочлену 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

Для кода Хемминга: G(7,4)= =приведём к канонической

форме и получим:G(7,4)=

Проверочная матрица: H=[I3 RT] =,где I3 –единичная матрица 3 3

Последовательности (α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(n,r) =

Для нашего примера H(7,4)==приведём к канонической

форме и получим H(7,4)=

Пример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 = g(x)h(x)=0 mod(x n+1)

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 = α75 = 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)= , следовательно G(4,2)=

Укорочение проверочной матрицы происходит по следующему правилу: необходимо в проверочной матрице (n,k)-кода, H(n,k)=[In-kRT ], вычеркнуть i крайних справа столбцов (проверочные элементы не вычёркиваются, только информационные). Оставшаяся часть проверочной матрицы даст проверочную матрицу кода (n-i,k-i).

H(5,3)= , следовательно H(4,2)=

У укороченных кодов минимальное кодовое расстояние не меньше, чем у кодов естественной длины, так как отбрасывание столбцов проверочной матрицы не может уменьшить числа линейно зависимых столбцов(не может уменьшится вес кодовой комбинации). Всё это относится и к циклическим кодам.

Процедуры кодирования и декодирования для циклических кодов.