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

LEKTsIYa_10

.pdf
Скачиваний:
0
Добавлен:
22.04.2024
Размер:
594.55 Кб
Скачать

ЛЕКЦИЯ № 14.

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

Достоинства циклических кодов: простота в реализации и при невысокой избыточности обладают хорошими свойствами обнаружения ошибок. Они получили очень широкое распространение в технике связи и в компьютерных средствах хранения информации.

Циклические коды – подкласс класса линейных кодов, которые удовлетворяют

следующему условию:

если Ci

сn 1

 

сn 2

 

 

 

с1

с0 - кодовое слово, то

Cj сn 2

сn 3

 

 

 

с0

сn 1

 

 

-

тоже кодовое, полученное циклическим

сдвигом элементов кода С1 . С кодовым словом

С связан полином:

 

 

 

 

 

 

C( p) c

 

 

pn 1 c

 

pn 2

 

c p c

 

(6.10)

 

 

 

 

 

 

 

 

 

 

n 1

 

 

 

 

n 2

 

 

 

 

 

 

1

0

 

 

Для двоичного кода ck 0;1 , k 0,1,..., n 1 .

 

 

 

 

 

Пусть

pC( p) c

 

pn c

 

pn 1

 

c p2 c p

. Этот полином

не

может

 

 

 

 

n 1

 

 

n 2

 

 

 

 

 

 

1

 

 

 

 

 

0

 

 

 

 

 

 

представлять кодовое слово, т.к. его степень больше n 1 при cn 1

1. Но

 

 

 

 

 

 

 

 

 

pC( p)

Q( p)

C1 ( p)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

 

pn 1

 

pn 1

 

 

 

где Q( p) c

,

C ( p) c

n 2

pn 1

 

c p2 c p c

представляет

кодовое

 

 

n 1

 

 

1

 

 

 

 

 

 

 

 

 

 

1

 

 

 

0

 

 

n 1

 

 

 

слово сn 2

сn 3

 

 

с0

 

 

сn 1 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p2C( p)

Q( p)

C ( p)

 

 

 

 

Q( p) cn 1 p cn 2 ,

Аналогично

 

 

 

 

 

 

 

 

2

 

 

 

,

 

 

где

 

 

 

pn 1

pn 1

 

 

C ( p) c

pn 1

 

c p3 c p2

c

p c

представляет кодовое

слово

2

n 3

 

 

 

 

1

 

 

 

 

0

 

 

 

 

n 1

 

 

n 2

 

 

 

 

 

 

 

сn 3

сn 4

 

 

с0

 

сn 1 cn 2 , и т.д.

 

 

 

 

 

 

 

 

 

 

 

 

 

В общем виде

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

piC( p)

Q( p)

C ( p)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

(6.11)

 

 

 

 

 

 

 

 

pn 1

pn 1

 

 

 

 

 

Здесь остаточный полином Ci ( p) представляет кодовое слово в циклическом коде, Q( p) - частное.

Можно сгенерировать (n, k ) код, используя порождающий полином g( p)

степени n k

с двоичными коэффициентами,

который является множителем

при факторизации полинома pn 1:

 

 

 

 

 

g( p) pn k g

n k

1

pn k 1

 

g p 1

(6.12)

 

 

 

 

 

 

 

1

 

Определим полином информационного сообщения X ( p) :

 

 

X ( p) x

pk 1 x

 

 

pk 2

 

x p x ,

(6.13)

 

k 1

 

k 2

 

 

1

0

 

где X xk 1

xk 2

x1 x0

- информационное двоичное кодовое слово,

состоящее из k бит. Тогда помехоустойчивое кодовое слово можно получить

с помощью умножения информационного полинома X ( p)

на порождающий

полином g( p) с последующим сложением по модулю 2:

 

C ( p) X

m

( p)g( p), m 1,2,...,2k

(6.14)

m

 

 

Кодовые слова (6.14) удовлетворяют циклическому сдвигу (6.11), рассмотренному выше.

В общем случае полином pn 1 можно факторизовать следующим образом:

pn 1 g( p)h( p)

(6.15)

Здесь h( p) - проверочный полином степени k :

h( p) pk h

pk 1

h p 1.

k 1

 

1

Пример 1. Пусть n 7 . Надо синтезировать код (7,4).

Порождающий полином должен быть третьей степени (7-4=3). Тогда

p7 1 ( p 1)( p3 p2 1)( p3

p 1) .

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

можно взять g ( p) p3 p2

1

или

g

2

( p) p3 p 1. Коды, генерируемые

1

 

 

 

 

 

 

полиномами g1( p), g2 ( p) эквивалентны.

 

 

Пусть X (0101) (x3 x2

x1 x0 ) .

Тогда запишем информационный полином

степени 4-1=3: X ( p) x

p3 x

p2 x p x p2 1. Полином степени 7-1=6,

3

 

2

1

 

 

0

 

соответствующий помехоустойчивому кодовому слову, имеет вид:

C( p) X ( p)g ( p) ( p2 1)( p3

p2 1) p5 p3 p4 p2

p2 1

1

 

 

 

 

 

 

 

p5 p4 p3 p2 (1 1) 1 0 p6 1 p5 1 p4 1 p3 0 p2 0 p 1

Тогда помехоустойчивое кодовое слово C 0 1 1 1 0

0 1 .

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

 

h ( p) pk h( p 1) pk ( p k h

p k 1

h p 1 1)

 

 

 

обр

 

 

 

 

 

k 1

 

1

 

 

(6.16)

 

1 h

p h

 

p2

h pk 1 pk

 

 

 

 

2

 

 

 

 

 

k 1

k

 

 

1

 

 

 

 

 

 

Для

примера

1:

обратный

полином

определяется

как

h ( p) p4h ( p 1) 1 p p2

p4 . Этот полином генерирует дуальный код

обр

1

 

 

 

 

 

 

 

 

 

 

 

(7,3).

Пусть

X (011) (x

x

x ) .

Тогда

X ( p) 0 p2

1 p 1 p 1.

 

 

 

 

 

2

1

0

 

 

 

 

 

Дуальный

код

 

 

определяется

следующим

образом:

D( p) X ( p)h

( p) ( p 1)(1 p p2 p4 ) p p2 p3

p5 1 p p2 p4

 

обр

 

 

 

 

 

 

 

 

 

 

 

p5 p4 p3 p2 (1 1) p(1 1) 1 p5 p4 p3 1

 

 

 

0 p6 1 p5 1 p4 1 p3 0 p2 0 p 1

 

 

 

 

Значит кодовое слово дуального кода имеет вид: D

0 1

1 1 0

0 1 .

Кодовые слова дуального кода (7,3) ортогональны кодовым словам кода (7.4) из примера 1.

Циклический код можно задать порождающей матрицей G . Вернемся к примеру 1: g1( p) p3 p2 1. Четыре строки порождающей матрицы кода (7,4) можно получить из полиномов:

 

 

1

 

 

0

Тогда G1

 

 

 

0

 

 

 

 

0

pi g1 ( p) p3 i p2 i pi , i 3,2,1,0 .

1

0

1

0

0

0

 

 

1

1

0

1

0

0

 

 

 

.

0

1

1

0

1

0

 

 

 

 

0

0

1

1

0

1

 

 

Например,

как

формировалась

первая строка порождающей матрицы:

i 3 p3 g ( p) p6

p5

p3 . Т.е. на 6-ой, 5-ой и 3-ей позиции 1, на остальных

 

 

1

 

 

 

 

 

 

 

 

(4-ой, 2-ой, 1-ой и 0-ой) -0.

 

 

 

 

Аналогично можно создать проверочную матрицу H из обратного полинома:

pl h ( p) pl

p4h( p 1) pl (1 p p2 p4 ) p4 l p2 l p1 l pl , l 2,1,0.

обр

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

1

1

1

0

0

 

Тогда

H

0

1

0

1

1

1

0

 

1

 

 

 

 

 

 

 

 

.

 

 

 

0

0

1

0

1

1

1

 

 

 

 

 

В общем виде:

 

 

pk 1g( p)

 

1 gn k 1 gn k 2

g1 1 0

0

 

 

 

 

 

 

0 1 gn k 1 gn k 2

g1 1 0 ...0

 

G

pk 2 g( p)

 

 

 

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

 

 

 

g( p)

 

 

 

0

0 1 gn k 1

gn k 2

g1 1

 

 

 

 

 

 

 

 

 

pn k 1hобр

( p)

 

 

1 h1

h2

hk 1 1 0

0

 

 

 

 

n k 2

hобр

 

 

 

 

0 1 h1 h2

hk 1 1 0 ...0

 

H

p

 

( p)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hобр ( p)

 

 

0

0 1 h1 h2

hk 1 1

 

 

 

 

 

 

Так же можно сконструировать порождающую матрицу G в систематической

форме. Для этого разделим

pn l на g( p) :

 

pn l

Ql ( p)

R ( p)

, l 1,2,..., k .

 

 

 

l

 

g( p)

g( p)

 

 

 

Или pn l Q ( p)g( p) R ( p), Q ( p)

- частное, тогда

Q ( p)g( p) pn l R ( p)

l

l

 

 

l

 

 

l

 

l

- кодовое слово. В этом случае желательный полином,

соответствующий l -

ой строке матрицы G равен

pn l R ( p) .

 

 

 

 

 

 

 

 

 

l

 

 

 

 

Рассмотрим пример 1 с

 

g

2

( p) p3

p 1

, n 7, k 4 . Тогда

 

 

 

 

 

 

 

 

 

 

 

l 1 p6 ( p3 p 1)g

2

( p) p2 1,

p6 p2

1

-

полином,

 

 

 

 

 

 

 

 

 

 

соответствующий первой строке: 1 на 6-ой, 2-ой и 0- ой позиции, 0 – на остальных.

l 2 p5

( p2 1)g

2

( p) p2 p 1,

p5 p2 p 1-

полином,

 

 

 

 

 

 

 

 

 

 

соответствующий второй строке: 1 на 5-ой, 2-ой, 1-ой, 0-ой позициях.

l 3 p4

pg

2

( p) p2 p ,

p4 p2

p - полином, соответствующий

 

 

 

 

 

 

 

 

 

 

третьей строке: 1 на 4-ой, 2-ой и 1-ой позициях.

 

l 4 p3

g

2

( p) p 1 p3

p 1 - полином, соответствующий четвертой

 

 

 

 

 

 

 

 

 

 

строке: 1 на 3 –ей, 1-ой и 0-ой позициях.

 

 

 

1

0

0

0

1

0

1

1

0

1

 

 

0

1

0

0

1

1

1

 

 

1

1

1

 

G

 

, P

.

2

 

0

0

1

0

1

1

0

 

 

1

1

0

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

1

0

1

1

 

 

0

1

1

 

 

 

1

1

1

0

1

0

0

 

H2

 

 

 

 

 

 

 

 

 

 

0

1

1

1

0

1

0

.

 

 

1

1

0

1

0

0

1

 

 

 

 

Для формирования помехоустойчивого слова в систематической форме можно воспользоваться следующим алгоритмом:

1)умножим полином сообщения на pn k : X ( p) pn k ,

2)делим X ( p) pn k на g( p) , чтобы получить остаток r( p) ,

3)добавим r( p) к X ( p) pn k , т.е. r( p)+X ( p) pn k - систематический код

(«+» - по модулю 2).

Некоторый циклические коды.

1)Циклические коды Хемминга. Они эквиваленты кодам Хемминга, рассмотренным ранее.

2)Циклический код Голея: линейный (23,12) –код с порождающим

полиномом g( p) p11 p9 p7 p6 p5 p 1 и минимальным кодовым

расстоянием dmin 7 .

3) Коды Боуза – Чоудхури - Хоквингема (БЧХ коды) - это двоичные и недвоичные коды. Двоичные БЧХ коды можно построить с параметрами

n 2m 1, n k mt,

dmin 2t 1,

где m (m 3) и t - произвольные положительные целые числа. Порождающие полиномы для БЧХ кодов можно получить из множитьелей полинома pn 1 p2m 1 1. Существуют таблицы, где приведены коэффициенты порождающих полиномов для БЧХ кодов. Коэффициенты даны в восьмеричной форме, причем, самая левая цифра соответствует слагаемому полинома с наивысшей степенью. Например, для (15,5) кода коэффициентами полинома являются 2 4 6 7. Тогда в двоичной форме:

10 100 110 111. Значит порождающий полином имеет вид g( p) p10 p8 p5 p4 p2 p 1.

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

Для циклического кода синдром можно вычислить с помощью регистра сдвига. Рассмотрим систематический циклический код. Пусть Y принимаемое помехоустойчивое кодовое слово. Его можно представить полиномом Y ( p) . Так как Y C e , где C - переданное кодовое слово, e - вектор ошибки в канала, то

 

 

 

 

Y ( p) C( p) e( p) X ( p)g( p) e( p) .

(*)

Тогда

 

Y ( p)

Q( p)

R( p)

или

 

 

 

 

 

 

 

g( p)

 

g( p)

 

 

 

 

 

Y ( p) Q( p)g( p) R( p) .

(**)

Объединяя (*) с (**), получим

 

 

 

 

 

e( p) X ( p) Q( p) g( p) R( p) .

 

Остаток R( p)

- полином степени n k 1 и зависит от полинома ошибки.

Т.е.

R( p) S ( p) - полином, соответствующий синдрому S

. Тогда можно

записать:

 

 

 

 

 

 

 

 

 

Y ( p) Q( p)g( p) S ( p)

(6.17)

Если Y ( p) делится на g( p) без остатка, то S ( p) 0 и C Y .

+

Рисунок 6.1. Структурная схема формирования синдрома.

Пример. Задан циклический код Хемминга (7,4) с порождающим полиномом g( p) p3 p 1 . Пусть принято помехоустойчивое кодовое слово

Y 1 0 0 1 1 0 1 .

Порождающий полином можно записать в виде: g( p) p3 0 p2 1 p 1, т.е. g1 1, g2 0 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сдвиг

Содержимое регистра

Сдвиг

 

Содержимое регистра

0

 

 

 

 

 

 

 

 

000

 

 

5

 

101

1

 

 

 

 

 

 

 

 

100

 

 

6

 

100

2

 

 

 

 

 

 

 

 

010

 

 

7

 

110

3

 

 

 

 

 

 

 

 

001

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

010

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сначала регистры обнулены (ключ в верхнем положении). После того, как n - ый бит вошел в регистр, содержимое n k ячеек образует синдром.

Метод справочной таблицы можно использовать, если n k мало, например, n k 10 . Если n k 20 , то таблица имеет 220 записей. Такой метод декодирования непрактичен для длинных кодов, т.к. требует огромного объема памяти и времени.

Соседние файлы в предмете Основы теории информации