Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
93
Добавлен:
31.01.2021
Размер:
696.83 Кб
Скачать

Лекция 7 циклические коды

7.1 Способы описания циклических кодов

7.2 Матричное задание кодов

7.3 Декодирование циклического кода

7.4. Принципы построения кодирующих и декодирующих

устройств циклических кодов

7.1 Способы описания циклических кодов

Циклические коды получили широкое распространение благодаря их эффективности при обнаружении и исправлении ошибок. Схемы кодирующих и декодирующих устройств для этих кодов чрезвычайно просты и строятся на основе обычных регистров сдвига.

Циклическим кодом называется линейный блочный (n,m)-код, который характеризуется свойством цикличности, т.е. сдвиг влево на один шаг любого разрешенного кодового слова дает также разрешенное кодовое слово, принадлежащее этому же коду. Название кода произошло от его свойства, заключающегося в том, что каждая кодовая комбинация может быть получена путем циклической перестановки символов комбинации, принадлежащей этому же коду. Это означает, что если кодовая комбинация а0 а1 а2аn-1 является разрешенной комбинацией циклического кода, то комбинация вида аn-1 а0 а1 а2аn-2 так же является разрешенной комбинацией и принадлежит этому коду. Запись а0а1аn-1 означает, что кодовая комбинация состоит из n разрядов, первый из которых а0 , последний аn-1.

Отличие комбинации аn-1 а0 а1 а2аn-2 от комбинации а0 а1 а2аn-1 состоит в том, что последний разряд аn-1 становится первым, а предпоследний аn-2 становится последним. Такая перестановка называется циклической.

Циклические коды часто описываются с использованием многочленов (полиномов) переменной X

X = Р(x); Р(x) = an-1xn-1 + … + a1x+a0, (7.1)

где аi – цифры данной системы исчисления (в двоичной системе 0 и 1). Так, например, двоичное семиразрядное число 1010101 может быть записано в виде полинома:

Р(x) = 1x6 + 0x5 + 1x4 + 0x3 + 1x2 + 0x1 + 1x0 = x6 + x4 + x2 + 1. (7.2)

То есть цифры двоичного кода рассматриваются как коэффициенты многочлена Р(x). Наибольшая степень х в слагаемом с ненулевым коэффициентом называют степенью многочлена (полинома). Представление кодовых комбинаций в виде (7.1) позволяет свести действия над комбинациями к действиям над многочленами. При этом сложение двоичных многочленов сводится к сложению по модулю 2 коэффициентов при равных степенях переменной х

ха + ха = 0 ; ха+0 = ха ; 0 + 0 = 0. (7.3)

Умножение производится по обычному правилу перемножения степенных функций, но полученные при этом коэффициенты при равных степенях переменой х складываются по модулю 2:

(24.4)

Рассмотрим пример умножения многочленов

и

Либо умножение можно произвести следующим образом

1 1 0

1 1

1 1 0

1 1 0

1 0 1 0.

Деление осуществляется по правилу деления степенных функций, при этом операции вычитания заменяются операциями суммирования по модулю 2.

Рассмотрим пример деления многочлена

на бином

Вначале рассмотрим деление комбинаций

1 1 1 0 1 0

1 0 0 1

1 0 0 1

1 1 1

- результат деления –

новый многочлен

0 1 1 1 1 0

1 0 0 1

новый многочлен

0 1 1 0 0

1 0 0 1

0 1 0 1

- остаток.

А теперь рассмотрим деление полиномов

х5+х4+х3+х

х3+1

х5+х2

х2+х+1

- результат деления – 1 1 1

х4+х2+х3+х

новый многочлен

х4+ х

х3+х2

новый многочлен

х3+ 1

х2+1

- остаток- 0 1 0 1.

Представления комбинаций в формах (7.1) и (7.2) удобно еще тем, что упомянутая ранее циклическая перестановка есть результат простого умножения данного полинома на х. Если одна из кодовых комбинаций выражается полиномом

Р(x) = a0 + a1x + a2x2 + a3x3 + … + an-1xn-1, (7.5)

то новая комбинация за счет циклического сдвига будет xР(x):

xР(x) = a0x + a1x2 + a2x3 + a3x4 + an-2xn-1 + an-1xn. (7.6)

В последнем члене необходимо заменить хn на х0. Новую комбинацию обозначим Р1(x)

Р1(x) = an-1х0 + a0x + a1x2 + a2x3 + … + an-2xn-1. (7.7)

Пример. Рассмотрим, как получить новую комбинацию из кодовой комбинации

1010101 = x6 + x4 + x2+1

путем циклического сдвига. Циклический сдвиг получается умножением многочлена, соответствующего исходной комбинации на х

Р(x)х = х(x6 + x4 + x2+1) = x7 + х5 + x3 + x. (7.8)

Заменив х7 на х0 т.е. на «1» получим новую кодовую комбинацию Р1(x) в виде полинома:

Р1(x) = х5 + x3 + x + 1. (7.9)

Р1(x) соответствует кодовой комбинации 0101011. Таким образом, в результате циклической перестановки исходной кодовой комбинации 1010101 получена новая кодовая комбинация 0101011 также принадлежащая циклическому коду. Заметим, что запись кода в виде многочлена получается более компактной, чем в матричном виде.

Циклический сдвиг на один разряд соответствует алгебраическому умножению некоторого многочлена g(x), который выбран в качестве исходного на х. Процесс получения новых комбинаций кода можно представить следующим образом g(x), х g(x), х2 g(x), х3 g(x),…, хn-1 g(x).

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

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

Принцип обнаружения ошибок при помощи циклического кода заключается в том, что в качестве разрешенных принимаются только те комбинации, которые без остатка делятся на заранее выбранный образующий многочлен g(x). Если принимаемая комбинация искажена, то это условие на приемной стороне не будет выполнено. В результате этого формируется сигнал, указывающий на наличие ошибки.

Задача состоит в том, чтобы сформировать кодовые комбинации на передаче, удовлетворяющие указанному условию. Метод построения кодовых комбинаций используется следующий. В процессе кодирования многочлен Р(x) отображающий двоичный код передаваемого сообщения (примитивный код) умножаются на хk. При этом длина кодовой комбинации увеличивается на k разрядов. Эти дополнительные разряды будут проверочными. Полученное произведение Р(x)xk делят на специально подобранный образующий многочлен g(x). При этом получают остаток R(x). Данный остаток R(x) суммируют с произведением Р(x)xk. Получают кодовую комбинацию F(x)= Р(x)xk +R(x), которая будет без остатка делиться на g(x). Алгоритм формирования комбинаций циклического кода показан на рис. 7.1.

Рис. 7.1. Алгоритм формирования циклического кода

Покажем справедливость такого способа формирования циклического кода. Обозначим частное от деления Р(x)xk на g(x) как f(x). Тогда справедливо равенство Р(x)xk = f(x) g(x) – R(x) где R(x) остаток деления P(x)xk на g(x).

Перенося R(x) за знак равенства получим:

Р(x)xk + R(x) = f(x)g(x)

При таком методе построения коэффициенты при высших степенях являются обозначениями информационных разрядов, а коэффициенты при степенях порядка k-1 и ниже – проверочными.

Рассмотрим использование описанного алгоритма формирования комбинаций циклического кода на примере.

Пример. Требуется закодировать сообщение 1011. Дано: порождающий полином g(x) = х3 + х2 + 1, общее число разрядов n = 7, число информационных разрядов m =4, число избыточных разрядов k = 3.

Решение:

1. Для кодирования сообщения 1011 определим, какому многочлену оно соответствует: P(x) = 1x3 + 0x2 + 1x1 + 1x0 = x3 + x + 1.

2. Разделим полином P(x)xk на порождающий g(x) для определения остатка R(x):

P(x)xk = P(x)x3 = (x3 + x + 1)x3 = x6 + x4 + x3 (7.10)

х 6+х4+х3

х 3+х2+1

х 6+х 5+ х 3

х 3+х2

х5+х4

(7.11)

х5+ х4+ х2

х2

- остаток

R(x)=x2

3. Суммируем произведение P(x)x3 с полученным остатком x2 получим кодовый многочлен F(x)

F(x) = P(x) x3 + R(x) = x6+х4+х3 + х2 (7.12)

В двоичном коде этому многочлену соответствует кодовая комбинация (а6 = 1, а5 = 0, а4 = 1, а3 = 1, а2 = 1, а1 = 0, а0 = 0) - 1011100. В этой кодовой комбинации последние три позиции занимают проверочные разряды (выделены).

Проверим, возможно, ли обнаружить ошибку при приеме кодовой комбинации циклического кода указанным выше алгоритмом. Пусть принимается рассмотренная выше комбинация F(x)=1011100. Порождающий полином должен быть известен на приеме. Вынесение решения о наличии ошибки основывается на анализе остатка R(x) от деления комбинации на порождающий полином g(x) если R(x) = 0 , то ошибки нет.

Кодовой комбинации 1011100 соответствует многочлен F(x)= x6+x4+x3+х2.

Делим F(x) на g(x)

х 6+х4+х3+х2

х 3+х2+1

х 6+ х 5+ х 3

х 3+х2

х5+х4+х2

(7.13)

х5+ х4+ х2

0

Остаток R(x)=0, следовательно ошибки нет.

Допустим, в результате воздействия помех в канале связи вместо комбинации 1011100 принято 0011100. Этой комбинации соответствует многочлен х432. Деление на g(x) дает:

х 4+х3+х2

х 3+х2+1

х 4+х3

х

х 2+х

Остаток R(x) 0

(7.14)

Ошибка обнаружена.

Возможно применение циклического кода в качестве кода с исправлением ошибок. В этом случае на приеме получают остаток от деления принятой комбинации кода на порождающий многочлен. Места искаженных разрядов определяются путем анализа остатка.

Соседние файлы в папке Лекции