Практическая 1-6 Циклические коды Теория информации
Циклические коды
Цикломатические классы
Циклический код Циклический код – такой групповой код, все базовые комбинации которого могут быть получены из одной путем циклического сдвига ее элементов. Циклический сдвиг кодовой комбинации – перемещение ее элементов справа налево без нарушения порядка их следования, так что крайний левый элемент занимает место крайнего правого.
Кодовые комбинации В теории циклических кодов принято записывать кодовые комбинации в виде полинома некоторой фиктивной переменной x: где a i – значение символа кодовой комбинации на позиции i при нумерации справа налево; x i – 1 – фиктивная переменная в степени номера позиции i без единицы.
Пример Представить в виде полинома кодовую комбинацию a
Задание Задание 1. а) Представить в виде полинома кодовую комбинацию a б) Представить в виде полинома кодовую комбинацию a в) Представить в виде полинома кодовую комбинацию a
Порождающий полином Неприводимым называется многочлен, который не может быть представлен в виде произведения многочленов низших степеней, т. е. такой многочлен делится только на самого себя или на единицу и не делится ни на какой другой многочлен. На такой многочлен делится без остатка двучлен x n + 1. Неприводимые многочлены в теории циклических кодов играют роль образующих полиномов.
Порождающая матрица Можно записать порождающую матрицу циклического кода в следующем виде: p(x) p(x) · x C 2 (x n 1) V = p(x) · x 2 C 3 (x n 1) … p(x) · x m1 C m (x n 1), где p(x) исходная кодовая комбинация, на базе которой получены все остальные (m 1) базовые комбинации, C i = 0 или C i = 1 («0», если результирующая степень полинома p(x) · x i не превосходит (n 1), «1», если превосходит).
Порождающий полином Комбинация p(x) называется порождающей (генераторной) комбинацией. Для построения циклического кода достаточно верно выбрать p(x). Затем все остальные кодовые комбинации получаются такими же, как и в групповом коде. Порождающий полином должен удовлетворять следующим требованиям: 1.p(x) должен быть ненулевым; 2. вес p(x) не должен быть меньше минимального кодового расстояния: v(p(x)) d min ; 3.p(x) должен иметь максимальную степень k (k число избыточных элементов в коде); 4.p(x) должен быть делителем полинома (x n 1).
Степень порождающего полинома Выполнение условия 4 приводит к тому, что все рабочие кодовые комбинации циклического кода приобретают свойство делимости на p(x) без остатка. Циклический код код, все рабочие комбинации которого делятся на порождающий без остатка. Для определения степени порождающего полинома можно воспользоваться выражением r log2(n+1), где n размер передаваемого пакета за раз, т. е. длина строящегося циклического кода.
Примеры порождающих полиномов r, степень полинома P(x), порождающий полином , , , , , , ,
Разрешенные кодовые комбинации Пусть задан полином P(x) = a r1 x r + a r2 x r1 + … + 1, определяющий корректирующую способность кода и число проверочных разрядов r, а также исходная комбинация простого k-элементного кода в виде многочлена A k1 (x). Требуется определить разрешенную кодовую комбинацию циклического кода (n, k).
Алгоритм 1. Умножаем многочлен исходной кодовой комбинации на x r : A k1 (x) · x r 2. Определяем проверочные разряды, дополняющие исходную информационную комбинацию до разрешенной, как остаток от деления полученного в предыдущем пункте произведения на порождающий полином: A k1 (x) · x r P r (x) R(x) 3. Окончательно разрешенная кодовая комбинация циклического кода определится так: A n1 (x) = A k1 (x) · x r + R(x) 4. Для обнаружения ошибок в принятой кодовой комбинации достаточно поделить ее на производящий полином. Если принятая комбинация разрешенная, то остаток от деления будет нулевым. Ненулевой остаток свидетельствует о том, что принятая комбинация содержит ошибки. По виду остатка (синдрома) можно в некоторых случаях также сделать вывод о характере ошибки, ее местоположении и исправить ошибку.
Пример Закодировать комбинацию вида 1101, что соответствует A(х) = х 3 + х Определяем число контрольных символов r = 3. Из таблицы возьмем многочлен P(х) = х 3 + х + 1, т. е Умножим A(х) на х r : 3.A(x) · x r = (x 3 + x 2 + 1) · x 3 = x 6 + x 5 + x Разделим полученное произведение на образующий полином g(х): 5.A(x) · x r P(x) = (x 6 + x 5 + x 3 ) (х 3 + х + 1) = х 3 + х 2 + х (х 3 + х + 1) При делении необходимо учитывать, что вычитание производится по модулю 2. Остаток суммируем с h(х) · х r. В результате получим закодированное сообщение: 7.F(x) = (x 3 + x 2 + 1) · (x 3 + x + 1) = (x 3 + x 2 + 1) · x В полученной кодовой комбинации циклического кода информационные символы A(х) = 1101, а контрольные R(х) = 001. Закодированное сообщение делится на образующий полином без остатка.
Задание 2 а) Закодировать комбинацию вида 110. б) Закодировать комбинацию вида в) Закодировать комбинацию вида г) Закодировать комбинацию вида
Определение ошибки Пусть имеем n-элементные комбинации (n = k + r) тогда: Получаем остаток от деления Е(х) соответствующего ошибке в старшем разряде [ ], на порождающий полином P r (x): E 1 (x) P r (x) = R 0 (x) Делим полученный полином Н(х) на P r (x) и получаем текущий остаток R(x). Сравниваем R 0 (x) и R(x). – Если они равны, то ошибка произошла в старшем разряде. – Если нет, то увеличиваем степень принятого полинома на x и снова проводим деления: H(x) · x P r (x) = R(x)
Определение ошибки Опять сравниваем полученный остаток с R 0 (x). – Если они равны, то ошибки во втором разряде. – Если нет, то умножаем Н(х) · х 2 и повторяем эти операции до тех пор, пока R(x) не будет равен R 0 (x). Ошибка будет в разряде, соответствующем числу, на которое повышена степень Н(х), плюс один. Например: H(x) · x 3 P r (x) = R 0 (x)
Пример Полином g(x) = 1 + x 2 + x 3 генерирует бинарный (7,4)- циклический код, d min = 3 (т.е. 1-ошибку исправляет). Рассмотрим кодовое слово 1 + x + x 5 = (1 + x + x 2 ) g(x). Пусть после передачи многочлен R(x) = 1 + x + x 5 + x 6 был получен. Декодируем его. Разделим R(x) на g(x) для нахождения синдрома, R(x) = (x 3 + 1)g(x) + (x + x 2 ), так S(x) = x + x 2. Так как вес S(x) > 1 (= t), вычислим синдром s 1 (x) * x r (x). Так как S(x) = 2 = n - k - 1, умножаем S(x) на x и делим на g(x), что дает s 1 (x) = 1. Поскольку вес 1, маска ошибки e(x) = x 7-1 (s 1,0) = x 6 ( ) = x 6. Так как n = 7 все ошибки веса 1 имеют циклический сдвиг на шесть 0's и 6 > k = 4, исправляются все единичные ошибки..
Задание 3 Принятая кодовая комбинация ЦК(7,4) имеет вид Bi'(X)= Определить и исправить ошибку в Bi(X),если она имеется. Задание 4 Выполнить кодирование чисел(даны в 10-й с.с.) циклическим кодом с заданным порождающим полиномом(дан в 8-й с.с.) по вариантам на следующем слайде.
Задания по вариантам варианта Порождающий полином Числа для кодирования
Учебные материалы es.htm es.htm rekurrentnyh-kodov.html rekurrentnyh-kodov.html htm 53.htm
Конец Если вы выполнили все задания, вы получаете 10 баллов