Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика — курс лекций.pdf
Скачиваний:
540
Добавлен:
11.03.2015
Размер:
2.18 Mб
Скачать

разрядная операция отрицания равнозначности), и если он отличен от нуля, то его значение и есть номер искажённого информационного разряда.

Применение корректирующего кода Хэмминга означает, что каждое слово памяти содержит не 16 бит, а 21 бит. Пять лишних битов в каждом слове — это биты чётности. Они недоступны пользователю, так как зарезервированы для образования корректирующего кода.

Линейные групповые коды

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

Линейным групповым кодом называется конечная аддитивная коммутативная группа , элементами которой являются двоичные векторы, в качестве операции группы выбрана операция суммы по модулю 2.

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

перечислением векторов;

матричным представлением.

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

 

Линейно-независимыми двоичными векторами , , …, называются векторы, для кото-

рых выполняется соотношение

 

,

где

{ } — скаляры, а — знак операции суммы по модулю 2.

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

Линейные групповые коды обычно задаются порождающей матрицей, представленной в так называемой левой канонической форме:

 

,

 

где — единичная матрица информационных разрядов линейного кода формата

(как было по-

казано выше, такая матрица порождает натуральный двоичный код длины

);

— матрица прове-

рочных разрядов линейного кода, содержащая (

) столбцов и строк.

 

 

Так как единичная матрица (

) порождает натуральный двоичный код длины , мощность

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

107

Минимальное расстояние линейного группового кода

может быть определено в соот-

ветствии со следующим простым алгоритмом:

 

1.Выписать все векторы линейного группового кода.

2.Для каждого ненулевого вектора найти его вес в смысле Хэмминга. Минимальный вес нену-

левого вектора и равен .

Справедливость алгоритма вытекает из принадлежности нулевого вектора линейному групповому коду. Действительно, расстояние в смысле Хэмминга между нулевым вектором и вектором с

минимальным числом единиц определяет

рассматриваемого кода.

 

 

Так как минимальный вес в смысле Хэмминга

, то код имеет

и позволяет об-

наруживать ошибки кратностью

, корректировать ошибки кратностью

. Действительно, для

обнаружения -кратных ошибок должно выполняться условие

или

 

. Для коррекции -кратных ошибок должно выполняться условие

или

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

Порождающую матрицу группового линейного кода длины с информационными разрядами можно построить, руководствуясь следующими правилами:

1.Все векторы порождающей матрицы должны быть различны и линейно-независимы.

2.Нулевой вектор не должен входить в число векторов порождающей матрицы.

3.

Каждый вектор порождающей матрицы должен иметь вес в смысле Хэмминга

.

4.

Расстояние в смысле Хэмминга между любыми двумя векторами и порождающей мат-

 

рицы должно удовлетворять соотношению (

)

.

 

 

Проверочная часть порождающей матрицы (матрица

) строится в соответствии со следую-

щими правилами:

 

 

 

1.

Вес в смысле Хэмминга каждого проверочного вектора должен удовлетворять соотношению

 

.

 

 

 

2.

Вес проверочного вектора , являющегося суммой по модулю 2 двух любых проверочных

 

векторов, должен удовлетворять соотношению

 

.

 

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

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

1. Если — требуемая мощность линейного кода

, то формат информационной части его по-

рождающей матрицы равен (

), где

]

[.

 

 

108

 

2.

Любой проверочный столбец порождающей матрицы формируется как сумма по модулю 2

 

некоторого числа её информационных столбцов. При этом любой информационный столбец

 

должен присутствовать в качестве компоненты суммы хотя бы для организации одного про-

 

верочного столбца.

 

 

 

3.

Каждый вектор

порождающей матрицы должен иметь вес в смысле Хэмминга

.

4.

Кодовое расстояние в смысле Хэмминга между двумя любыми векторами и

порождаю-

 

щей матрицы должно быть (

)

, а между любыми двумя проверочными векто-

 

рами и — (

)

.

 

 

5.

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

 

выписать все векторы и определить

 

полученного кода.

 

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

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

Для упрощения объяснения в порождающей матрице

произвольного линейного кода информаци-

онные разряды любого вектора обозначим буквами

с соответствующими индексами, а провероч-

ные разряды — буквами с одномерными индексами. Очевидно, любой проверочный разряд не-

которого вектора линейного кода удовлетворяет соотношению

p

j

 

pij i 1k

, где ∑ — знак операции

«сумма mod 2»; — значение соответствующих проверочных разрядов векторов порождающей матрицы из проверочного столбца, соответствующего символу , при условии, что пробегает толь-

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

справедливо соотношение

k

 

k

p

a

ij

 

i

i 1

 

i 1

, или

j

 

k

 

i

p

a

 

 

i 1

,

̅̅̅̅̅̅̅̅̅̅, где принимает только те

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

Выбрать проверочный столбец порождающей матрицы. Записать уравнение для , заменяя все значения этого проверочного столбца (в правой части уравнения) через информационные разряды . Замену осуществить следующим образом: каждую единицу проверочного столбца за-

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

109

В ходе вычислений находят вектор ( ), который в общем случае называется синдромом и его вид характеризует наличие или отсутствие ошибок в векторе кода. Если синдром нулевой, то ошибок нет, если синдром ненулевой, то ошибки есть.

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

Значение синдрома совпадает с одной из строк проверочной матрицы. Номер этой строки и

является номером искажённого разряда.

 

Исправление ошибок кратности большей, чем

, связано со значительными расчётами,

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

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

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

( )

,

где — основание системы счисления, а

— коэффициенты, принадлежащие множеству { } в

случае двоичной системы счисления.

 

Представление двоичных векторов в виде полиномов позволяет свести действие над векторами к действиям над многочленами. При этом:

сложение многочленов сводится к сумме по модулю 2 коэффициентов при равных степенях переменной ;

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

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

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

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

110

Векторы циклического кода строятся в соответствии со следующими правилами. Пусть ( )

— любой двоичный вектор некоторого натурального кода; — одночлен степени ;

( ) неприво-

димый полином степени . Тогда любой вектор ( ) циклического кода образуется с

помощью соот-

ношения:

 

 

 

 

 

 

 

 

 

 

( )

( )

(

),

где (

) — остаток от деления

(

)

.

 

 

 

(

)

 

 

 

 

 

 

 

 

 

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

произведению остатка от деления

(

)

. При построении циклических кодов указанным способом

(

)

расположение информационных разрядов в каждом векторе кода строго упорядочено — они зани-

мают

старших разрядов вектора кода, а остальные

 

 

разрядов являются проверочными.

 

Циклический код, как и всякий систематический код, удобно задавать в матричном виде с

помощью порождающей матрицы , имеющей вид:

 

 

 

 

 

 

( ) ( )

(

 

)‖,

 

 

где (

) — транспонированная единичная матрица формата (

); (

) — матрица прове-

рочных разрядов, образованная остатком от деления

( )

.

 

 

 

( )

 

 

 

Любой вектор циклического кода получается как сумма по модулю 2 векторов его порождающей матрицы. Так как циклический код является групповым, то нулевой вектор всегда приписывается циклическому коду как единичный элемент группы.

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

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

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

Рекомендации для построения кода следующие:

1.

Так как мощность

циклического кода задана,

то число его информационных разрядов

 

определяется в соответствии с формулой

.

 

2.

Оптимальное число проверочных разрядов

 

циклического кода определяется по

 

специальным таблицам.

 

 

 

 

111

 

 

3.

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

4.

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

 

числом членов) степени строится порождающая матрица циклического кода. Каждый век-

тор ( ) кода вычисляется по формуле

 

 

 

 

( )

( )

(

(

)

)

 

 

(

)

где ( ) — полином информационного вектора порождающей матрицы; — одночлен степени ;

— остаток от деления

(

)

.

 

 

(

)

5. Построенная порождающая матрица проверяется на выполнение следующих условий:

а) вес в смысле Хэмминга любого вектора порождающей матрицы должен удовлетворять соотношению , где — минимальное расстояние в смысле Хэмминга рассматриваемого циклического кода;

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

ношению

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

Обнаружение ошибок с помощью циклических кодов производится следующим образом. Любой вектор циклического кода делится на образующий полином без остатка. Поэтому критерием наличия ошибки в векторе циклического кода является появление ненулевого остатка от деления вектора циклического кода на образующий полином. Ненулевой остаток является опознавателем ошибки в векторе циклического кода, однако его вид не указывает на место расположения ошибки в кодовом векторе. Исправление ошибок базируется на следующем алгоритме:

1.Принятый кодовый вектор разделить на образующий полином.

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

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

112

ко был сдвинут влево исходный принятый вектор с ошибкой. В итоге получается исправленный кодовый вектор.

113