NexxDigital - компьютеры и операционные системы

6. Исправление ошибок с помощью циклических кодов

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

Поскольку циклические коды являются линейными, то процесс обнаружения и исправления ошибок связан с нахождением синдрома принятого вектора. Напомним, что синдром вектора u вычисляется как произведение вектора на транспонированную проверочную матрицу кода, т. е. s u = uH T . В случае циклического кода синдром равен остатку от деления соответствующего многочлена на порождающий многочлен кода, если проверочная матрица строится определенным образом. Иными словами, если g (x ) - порождающий многочлен кода, то синдром вектора u равен остатку от деления u (x ) на g (x ). Если ошибок не было, то остаток, а следовательно, и синдром принятого вектора, равен 0.

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

1. Для принятого слова находим синдром многочлена, соответствующего принятому слову.

2. Если синдром не равен 0, то по полученному синдрому (остатку от деления) находим в таблице соответствующий ему вектор ошибок.

3. Исправляем принятое слово путем сложения по модулю 2 с вычисленным вектором ошибок.

Первый шаг, который выполняется умножением принятого слова на транспонированную проверочную матрицу, для циклических кодов очень простой, если матрица H является проверочной матрицей систематического кода. В этом случае, j -я строка транспонированной матрицы H T соответствует остатку от деления многочлена x n -1- j на порождающий многочлен кода, и синдром равен остатку от деления многочлена, соответствующего принятому слову, на порождающий многочлен кода.

Пример: Рассмотрим циклический (7,1)-код, порожденный многочленом g (x ) = x 6 + x 5 + x 4 + x 3 + x 2 + x +1. Код состоит из двух слов 0000000 и 1111111 и исправляет все комбинации из 3 или менее ошибок. Образующими являются все булевы векторы длины 7 веса 0, 1, 2 и 3. Проверочная матрица строится по частному (x +1) от деления x 7 +1 на x 6 + x 5 + x 4 + x 3 + x 2 + x +1 и имеет вид

Пусть принято слово 11101101, которое соответствует многочлену x 6 + x 5 + x 4 + x 2 + 1. Остаток от деления этого многочлена на порождающий многочлен кода равен x 3 + x . Непосредственной проверкой можно убедиться, что при умножении вектора u = 1110101 на транспонированную матрицу H T , так же как и при умножении вектора 0001010 на H T получается вектор 0001010, который соответствует многочлену x 3 + x . Вектор, соответствующий многочлену x 3 + x , имеет вес 2, т. е. является образующим смежного класса. Сложив принятый вектор 11101101 с образующим 0001010, мы получим кодовое слово 1111111, т. е. ошибка будет исправлена.

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

Теорема 6.1 . (Меггит). Пусть s - синдром вектора u длины n . Синдром циклического сдвига вектора u совпадает с синдромом вектора, соответствующего полиному xs (x ).

Пример: Рассмотрим (7,4)-код Хэмминга, который является циклическим кодом, порожденным многочленом g (x ) = x 3 + x + 1. двоичный вектор 1011000 является кодовым словом, так как соответствующий многочлен x 6 + x 4 + x 3 делится на g (x ). Предположим, что при передаче этого кодового слова произошла одна ошибка в разряде, соответствующем x 4 , и принято слово u = 1001000. Синдром s принятого вектора равен 110, что соответствует многочлену x 2 + x .

Рассмотрим циклический сдвиг 0010001 вектора u . Ему соответствует многочлен x 4 + 1. Непосредственной проверкой можно убедиться, что остаток от деления многочлена x 4 + 1 на многочлен x 3 + x + 1 равен x 2 + x + 1, т. е. синдром вектора 0010001 равен 111. Остаток от деления полинома xs (x ) = x 3 + x 2 на x 3 + x + 1 также равен x 2 + x + 1.

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

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

2. Если остаток совпал с одним из синдромов таблицы, то прибавляем соответствующий вектор ошибок к принятому слову, делим полученное слово на порождающий многочлен кода; частное от деления есть искомое информационное слово. Если остаток xs (x ) не совпадает ни с одним из синдромов таблицы, умножаем s (x ) на x и делим многочлен xs (x ) на порождающий многочлен кода.

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

Пример: Рассмотрим циклический (7,4)-код Хэмминга, порожденным многочленом g (x ) = x 3 + x + 1. Соответствующая таблица декодирования с синдромами имеет следующий вид.

и предположим, что в переданном кодовом слове 0001011 произошла одна ошибка, т. е. принято, например, слово 0101011, которому соответствует многочлен x 5 + x 3 + x + 1. Остаток от деления многочлена x 5 + x 3 + x + 1 на порождающий многочлен кода g (x ) = x 3 + x + 1 равен x 2 + x + 1, т. е. синдром принятого вектора отличен от 0 и равен 111. Такого синдрома в таблице нет, и следовательно, в старшем разряде ошибок нет. Умножаем многочлен x 2 + x + 1, соответствующий синдрому 111, на x и делим полученный многочлен x 3 + x 2 + x на g (x ). Остаток от деления многочлена x 3 + x 2 + x на x 3 + x + 1 равен x 2 + 1, т. е. синдром 101, соответствующий остатку, совпадает с синдромом в сокращенной таблице декодирования. Соответственно, образующий 100000 смежного класса сдвигается на один разряд влево, и полученный вектор 0100000 складывается с принятым вектором 0101011. В результате получается слово 0001011, которое и является переданным кодовым словом, т. е. ошибка будет исправлена.

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

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

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

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

Предположим, требуется закодировать одну из комбинаций четырехзначного двоичного кода. Предположим также, что эта комбинация G(x) = x 3 + x 2 + 1 ® 1011. Пока не обосновывая свой выбор, берем из таблицы неприводимых многочленов в качестве образующего многочлен P(x) = x 3 + x + 1 ® 1011. Затем умножим G(x) на одночлен той же степени, что и образующий многочлен. От умножения многочлена на одночлен степени n степень каждого члена многочлена повысится на n , что эквивалентно приписыванию n нулей со стороны младших разрядов многочлена. Так как степень выбранного неприводимого многочлена равна трем, то исходная информационная комбинация умножается на одночлен трех степеней

G(x) x n = (x 3 + x 2 + 1 ) x 3 =x 6 + x 5 + x 3 = 1101000.

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

Значение корректирующих разрядов находят по результатам от деления G(x) x n на P(x) :

x 6 +x 5 +0+x 3 +0+0+0 ½x 3 +x+1

x 6 +0+x 4 +x 3

x 5 +x 4 +0+0 x 3 +x 2 +x+1+ x 5 +0+x 3 +x 2

x 4 + x 3 +x 2 +0

x 4 + 0 +x 2 +x

x 3 +0+x+0

x 3 +0+x+1

Таким образом,

или в общем виде

где Q(x) ¾ частное, а R(x) ¾ остаток от деления G(x)×x n на P(x).



Так как в двоичной арифметике 1 Å 1 = 0, а значит, -1 = 1, то можно при сложении двоичных чисел переносить слагаемые из одной части в другую без изменения знака (если это удобно), поэтому равенство вида a Å b = 0 можно записать и как a = b , и как a - b = 0. Все три равенства в данном случае означают, что либо a и b равны 0, либо a и b равны 1, т.е. имеют одинаковую четность.

Таким образом, выражение (5.1) можно записать как

F(x)=Q(x) P(x)= G(x) x n +R(x),

что в случае нашего примера даст

F(x)= (x 3 + x 2 + x + 1) (x 3 + x + 1)= (x 3 + x 2 + 1) x 3 + 1,

F(x)= 1111 1011 = 1101000 + 001 = 1101001.

Многочлен 1101001 и есть искомая комбинация, где 1101‑ информационная часть, а 001 ‑ контрольные символы. Заметим, что искомую комбинацию мы получили бы и как в результате умножения одной из комбинаций полного четырехзначного двоичного кода (в данном случае 1111) на образующий многочлен, так и умножением заданной комбинации на одночлен, имеющий ту же степень, что и выбранный образующий многочлен (в нашем случае таким образом была получена комбинация 1101000) с последующим добавлением к полученному произведению остатка от деления этого произведения на образующий многочлен (в нашем примере остаток имеет вид 001).

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

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

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

01100 11111+

начиная с восьмого, остатки будут повторяться.

Остатки от деления используются для построения образующих матриц, которые, благодаря своей наглядности и удобству получения производных комбинаций, получили широкое распространение для построения циклических кодов. Построение образующей матрицы сводится к составлению единичной транспонированной и дополнительной матрицы, элементы которой представляют собой остатки от деления единицы с нулями на образующий многочлен P(x) . Напомним, что единичная транспонированная матрица представляет собой квадратную матрицу, все элементы которой ‑ нули, кроме элементов расположенных по диагонали справа налево сверху вниз (в нетранспонированной матрице диагональ с единичными элементами расположена слева направо сверху вниз). Элементы дополнительной матрицы приписываются справа от единичной транспонированной матрицы. Использоваться могут лишь те остатки, вес которых W ³ d 0 - 1, где d 0 ‑ минимальное кодовое расстояние. Длина остатков должна быть не менее количества контрольных разрядов, а число остатков должно равняться числу информационных разрядов.

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

Пример.

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

Решение.

По таблице 5.12 выбираем ближайшее значение k ³ 10 .

Таблица 5.12 – Соотношения между информационными и проверочными символами для кода длиной до 16 разрядов

n k ρ n k ρ

Согласно таблице таким значением будет k = 11, при этом r = 4, а

n = 15. Также выбираем образующий многочлен x 4 + x 3 +1.

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

Транспонированная матрица для k = 11 имеет вид:

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

Полная образующая матрица будет иметь вид:

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

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

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

Идея исправления ошибок базируется на том, что ошибочная комбинация после определенного числа циклических сдвигов “подгоняется” под остаток таким образом, что в сумме с остатком она дает исправленную кодовую комбинацию. Остаток при этом представляет собой не что иное, как разницу между искаженными и правильными символами, единицы в остатке стоят как раз на местах искаженных разрядов в подогнанной циклическими сдвигами комбинации. Подгоняют искаженную комбинацию до тех пор, пока число единиц в остатке не будет равно числу ошибок в коде. При этом, естественно, число единиц может быть либо равно числу ошибок s, исправляемых данным кодом (код исправляет 3 ошибки и в искаженной комбинации 3 ошибки), либо меньше s (код исправляет 3 ошибки, а в принятой комбинации 1 ошибка).

Место ошибки в кодовой комбинации не имеет значения. Если k ³ (n / 2) , то после определенного количества сдвигов все ошибки окажутся в зоне “разового” действия образующего многочлена, т. е. достаточно получить один остаток, вес которого W £ s , и этого уже будет достаточно для исправления искаженной комбинации.

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

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

Циклические коды относятся к числу блоковых систематических кодов, в которых каждая комбинация кодируется самостоятельно (в виде блока) таким образом, что информационные k и контрольные т символы всегда нах

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

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

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

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

Многочлен (полином), который можно представить в виде произведения многочленов низших степеней, называют приводимым (в данном поле), в противном случае -- неприводимым. Неприводимые многочлены играют роль, сходную с простыми числами в теории чисел. Неприводимые многочлены Р (Х) можно записать в виде десятичных или двоичных чисел либо в виде алгебраического многочлена.

Процесс циклического кодирования

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

В качестве информационных символов k для построения циклических кодов берут комбинации двоичного кода на все сочетания. В общем случае, если заданную кодовую комбинацию Q(x) умножить на образующий многочлен Р(х), получиться циклический код, обладающий теми или иными корректирующими свойствами в зависимости от выбора Р(х). Однако в этом коде контрольные символы m будут располагаться в самых разнообразных местах кодовой комбинации. Такой код не является систематическим, что затрудняет его схемную реализацию. Ситуацию можно значительно упростить, если контрольные символы приписать в конце, то есть после информационных символов. Для этой цели целесообразно воспользоваться следующим методом:

Умножаем кодовую комбинацию G(x), которую нужно закодировать, на одночлен Х m , имеющий ту же степень, что и образующий многочлен Р(х);

Делим произведение G(x)Х m на образующий многочлен Р(х m):

где Q(x) - частное от деления; R(x) - остаток.

Умножая выражение (2.1) на Р(х) и перенося R(x) в другую часть равенства без перемены знака на обратный, получаем:

Таким образом, согласно равенству (2.2), циклический код, то есть закодированное сообщение F(x), можно образовать двумя способами:

Умножение одной кодовой комбинаций двоичного кода на все сочетания на образующий полином Р(х);

Умножением заданной кодовой комбинации G(x) на одиночный многочлен Х m , имеющий туже степень, что и образующий многочлен Р(х), с добавлением остатка R(x), полученного после деления произведения G(x)Х m на образующий многочлен Р(х).

Кодирование сообщения

Требуется закодировать кодовую комбинацию 1100, что соответствует G(x)=х 3 +х 2 с помощью Р(х)=х 3 +х+1.

Умножаем G(x) на Х m , который имеет третью степень, получим:

Разделив произведение G(x)Х m на образующий многочлен Р(х m), согласно (2.1) получим:

или в двоичной эквиваленте:

Таким образом, в результате получаем частное Q(x) той же степени, что и G(x):

Q(x)=x 3 +x 2 +x>1110

и остаток:

В итоге комбинация двоичного кода, закодированная циклическим кодом, согласно (2.2) примет вид:

F(x)=1110 1011=1100010

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

Получение остатка свидетельствует о наличие ошибки. Остаток от деления в циклических кодах играет роль синдрома.

Например, переданная кодовая комбинация F(x)=1100010, построенная с помощью образующего полинома Р(х)=1011. Под воздействием помехи кодовая комбинация трансформировалась в комбинацию F"(x)=1000010

Делим принятую комбинацию на образующий полином

Наличие остатка R(x)=001 свидетельствует об ошибке. Однако он не указывает непосредственно на место ошибки в комбинации. Для определения ошибки существует несколько методов, основанных на анализе синдрома.

Определим место нахождения ошибки, для этого единицу с произвольным количеством нулей делим на Р(х)=1011.

Ошибка произошла в элементе с номером:

Количество остатков -2>4-2=2

То есть,ошибка во втором элементе.

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

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

Для построения дополнительной матрицы находим остатки от деления поаледней строки единичной транспонированной матрицы, дополненной нулями, на выбранный полином:

Таким образом, дополнительная матрица С, к имеет вид

Теперь строим производящую матрицу

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

Таблица 39 (см. скан)

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

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

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

единичной матрицы (для нахождения дополнительной матрицы образуется. три вида остатков: 11, 01 и 10. Следовательно, вес каждой комбинации полученного -кода будет не менее двух. Минимальное кодовое расстояние между двумя любыми комбинациями также равно двум. Но такими же величинами характеризуется и простейший код с одной проверкой на четность, образованный двучленом первой степени Однако корректирующая способность обоих кодов неодинакова. Рассматриваемый код имеет большую избыточность и позволяет обнаруживать не только любые ошибки нечетной кратности, но и любые парные смежные ошибки, а также все ошибки, разделенные одним неискаженным элементом .

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

Комбинация циклического кода;

Также комбинация циклического кода.

При рассмотрении циклических кодов двоичные числа представляют в виде многочлена, степень которого (п - 1), п - длина кодовой комбинации.

Например, комбинация 1001111 (п= 7) будет представлена многочленом

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

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

Построение комбинаций циклического кода возможно путем умножения исходной комбинации А (х ) на образующий полином G (x )с приведением подобных членов по модулю 2:

  • если старшая степень произведения не превышает (п - 1), то полученный полином будет представлять кодовую комбинацию циклического кода;
  • если старшая степень произведения больше или равна п , то полином произведения делится на заранее выбранный полином степени п и результатом умножения считается полученный остаток от деления.

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

Часто в качестве полинома, на который осуществляется деление, берется полином G (x )= +1. При таком формировании кодовых комбинаций позиции информационных и контрольных символов заранее определить нельзя.

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

Число разрядов регистра выбирается равным степени образующего полинома.

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

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

Рисунок 17 - Схема кодирующего регистра


В табл. 4 показано, как путем сдвигов исходной комбинации 0101 получается комбинация циклического кода 1010011.п= 7, k =4. Комбинация 0101, ключ в положении 1. В течение первых четырех тактов регистр будет заполнен, затем ключ переводится в положение 2. Обратная связь замыкается. Под действием семи сдвигающих тактов проходит формирование семиразрядного циклического кода.

Таблица 4

Свойства циклического кода :

1) циклический код обнаруживает все одиночные ошибки, если образующий полином содержит более одного члена. Если G (x )=x+ 1, то код обнаруживает одиночные ошибки и все нечетные;

2) циклический код с G (x )= (x+ 1)G (x ) обнаруживает все одиночные, двойные и тройные ошибки;

3) циклический код с образующим полиномом G (x ) степени r = n - k обнаруживает все групповые ошибки длительностью в r символов.

Контрольные вопросы



Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ:
NexxDigital - компьютеры и операционные системы