Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дрейзин В.Э., Кочура А.В. - Управление качество...doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
3.62 Mб
Скачать

8.3.3. Циклические корректирующие коды

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

Математический аппарат циклических кодов базируется на алгебраической записи кодового слова в виде полинома степени (n – 1), где n – число разрядов кодового слова, некоторой фиктивной переменной x. При этом, содержание двоичных разрядов кодового слова (0 или 1) представляют собой коэффициенты при соответствующих членах полинома, определяемых номером разряда. Естественно, что члены полинома, соответствующие нулевым коэффициентам опускаются. Например, двоичное число 1001101 представляется полиномом 1+x3+x4+x6, число 0101011 – полиномом x+x3+x5+x6, число 1100110 – 1+x+x4+x5.

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

(1100110); (1010101); (0110011).

С такими полиномами могут выполняться все алгебраические действия как с обычными полиномами, только при почленном сложении полиномов оно осуществляется по модулю 2, то есть без единиц переносов. Циклические коды являются систематическими, причём контрольные разряды группируются вместе и занимают k левых позиций кодовых слов – являются младшими разрядами. При последовательной передаче информации они всегда передаются последними.

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

Процедура процесса кодирования заключается в следующем. Информационная часть кодовых слов (m правых разрядов) образуется безызбыточным двоичным кодом, а, следовательно, будет выражаться полиномом Р(х), степень которого не превышает (m – 1). Для кодирования контрольных разрядов этот полином Р(х) умножается на xk, что соответствует k – кратному сдвигу вправо. Полученный таким образом полином xkP(x) делится на порождающий полином Q(x), а полученный при этом остаток R(x) складывается почленно с xkP(x), образуя полином F(x), являющийся разрешённым кодовым словом:

. (8.14)

Поскольку процедура деления полиномов довольно громоздка, а практически используется лишь остаток от деления R(x), в то время как частное от деления не используется, то при практической реализации кодирования операция деления полиномов заменяется последовательным вычитанием по модулю два из делимого xkP(x) делителя Q(x) до тех пор, пока разность не будет иметь более низкую степень, чем делитель. Эта разность и будет остатком R(x).

Выбор порождающего полинома определяется требуемой корректирующей способностью кода. При этом порождающий полином должен являться делителем многочлена xn+1, где n – число разрядов циклического кода. Очевидно, чем больше будет степень порождающего полинома k, тем выше будет корректирующая способность порождаемого им циклического кода, но тем больше и его избыточность.

Поскольку опознавателями ошибок являются остатки от деления принятых кодовых комбинаций на порождающий полином, то число исправляемых ошибок данным циклическим кодом определяется числом остатков, которые может дать деление на порождающий полином всех возможных кодовых комбинаций с числом разрядов, равных n. Так, например, для исправления всех однократных ошибок в коде с числом разрядов n все 2n возможных кодовых комбинаций должны давать при делении их на порождающий полином не менее, чем n различных остатков. Если мы хотим получить код с исправлением и однократных, и любых двукратных ошибок, то число различных остатков должно быть не менее и т.д.

Следовательно, из всех сомножителей разложения двучлена xn+1 в качестве порождающего полинома надо выбирать те, которые при минимальной степени k дают максимальное число различных остатков, а для этого данный полином не должен входить в разложение любого другого полинома степени меньше n, и, к тому же, быть неприводимым, то есть должен делиться без остатка только на 1 и на самого себя. В теории циклических кодов рассматриваются различные методы выбора порождающего полинома, однако мы ограничимся лишь тем, что приведём таблицу порождающих полиномов степени k = 2…5 с указанием предельно возможной разрядности n порождаемых ими кодов с исправлением однократных ошибок (табл. 8.1). Эти же коды способны обнаруживать без исправления одиночные и двойные ошибки.

В качестве примера построим код, исправляющий однократные ошибки, порождаемый полиномом Q(x)= x3+x+1. Из табл. 8.1 следует, что данный код может использоваться при максимальном числе разрядов n = 7, т.к. даёт только 7 различных остатков. При этом число контрольных разрядов k = 3, а, следовательно, число информационных разрядов m = n – k = 7 – 3 = 4 может быть не более 4-х. Таблица 8.1

k

Порождающий полином

Число разрядов

nmax

Число остатков

R(x)

2

x2+x+1

3

3

3

x3+x+1

7

7

3

x3+x2+1

7

7

4

x4+x3+1

15

15

4

x4+x+1

15

15

5

x5+x2+1

31

31

5

x5+x3+1

31

31

Информационные (старшие) P(x) разряды образуются безызбыточным 4-раз-рядным кодом (всего их 24=16, включая нулевое кодовое слово). Для образования разрешённых кодовых слов полиномы, соответствующие Р(х), умножаются на xk = x3 и к ним прибавляются остатки от деления соответствующих произведений xkP(x) на Q(x).

Например, для кодовой комбинации 1011, которой соответствует полином Р(х)= 1+x2+x3, получим xkP(x) =x3(1+x2+x3)= x3+x5+x6. Чтобы определить значения контрольных разрядов проведём его деление на порождающий полином:

R(x)=1; F(x)=x3+x5+x61=1+ x3+x5+x6.

Соответствующее кодовое слово будет 1001011. Убедимся, что оно без остатка делится на Q(x):

Если же в каком-то разряде произошла ошибка, то полученный остаток от деления ошибочного слова на порождающий полином является опознавателем ошибки, т.е. определит разряд, в котором произошла ошибка. Пусть, например, ошибка произошла в третьем разряде, т.е. вместо слова 1001011 мы получили слово 1011011 (вектор ошибки 0010000, а соответствующий ему полином – x2).

Проведём деление ошибочного слова на порождающий полином:

Остаток R(x) = x2 соответствует вектору ошибки в 3-м разряде.

Покажем, что тот же код будет обнаруживать любые двойные ошибки, но не исправлять их.

Пусть в том же кодовом слове произошла двойная ошибка во 2-м и в 6-м разряде, то есть вместо слова 1001011 получено слово 1101001, чему соответствует полином: 1+x+x3+x6.

Разделим его на Q(x):

Остаток R(x)= x2+1, представлен двучленом, тогда как все векторы однократных ошибок – одночлены. Значит, произошла двукратная ошибка. Однако вид этого двучлена не соответствует разрядам, в которых произошла ошибка, а, следовательно, исправить эти ошибки мы не можем.

Кроме кодов с исправлением однократных и обнаружением двойных ошибок могут быть построены циклические коды с исправлением или обнаружением ошибок произвольной кратности. Однако такие коды являются неоптимальными, так как содержат избыточное количество проверочных разрядов по сравнению с требуемым для получения необходимого минимального кодового расстояния между разрешёнными кодовыми словами. Более экономичными являются циклические коды Боуза-Чоудхури. Однако процедуры кодирования и декодирования в них более сложны.

Особый случай представляют коды, предназначенные для обнаружения и исправления пачек ошибок. Пачкой ошибок называют t-кратную ошибку, при которой все ошибочные разряды соседствуют друг с другом. При этом длиной пачки C называют количество ошибок в пачке. Степень порождающего многочлена для обнаружения и исправления пачек ошибок зависит от C и от n, но общей методики определения Q(x) по заданным значениям C и n не существует. Тем не менее, для конкретных значений C и n разработаны циклические коды, позволяющие обнаруживать и исправлять эти ошибки. Среди этих кодов наиболее известными являются циклические коды Файра, Абрамсона, Миласа-Абрамсона и Рида-Соломона.