Циклический избыточный код

Разнообразные циклические избыточные коды (CRC – Cyclic Redundancy Cod) используются почти всеми канальными протоколами для формирования контрольных последовательностей кадров. Определение этих кодов как циклических связано с тем, что если Bk(b0,b1,…,bn-1) - кодовое слово, то и Bi(bn-1,b0,…,bn-2) – также допустимое кодовое слово. Эти коды относится к классу, так называемых, полиномиальных кодов. Такое название они получили потому, что формирование кодового слова реализуется посредством алгебры полиномов с двоичными коэффициентами.

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

· Сложение Циклический избыточный код - student2.ru

· Умножение

Циклический избыточный код - student2.ru

· Деление

Циклический избыточный код - student2.ru Циклический избыточный код - student2.ru

Циклический избыточный код - student2.ru Циклический избыточный код - student2.ru - частное

Циклический избыточный код - student2.ru

Циклический избыточный код - student2.ru

Циклический избыточный код - student2.ru

Циклический избыточный код - student2.ru

x ← остаток

Итак, k информационных бит ( Циклический избыточный код - student2.ru ) используются для формирования информационного полинома степени k-1

Циклический избыточный код - student2.ru .

В результате кодирования последовательности ( Циклический избыточный код - student2.ru ) формируется кодовое слово из n бит. Из битов кодового слова можно сформировать полиномом b(x) степени n-1>k-1.

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

Будем считать, что формируется кодовое слово длиной n бит, из которых k - информационные и (n - k) – контрольные биты. Такой код будем обозначать дуплетом (n, k). Для формирования кодового слова используется порождающий полином степени n – k

Циклический избыточный код - student2.ru ,

где Циклический избыточный код - student2.ru - двоичные числа.

Формирование полинома b(x), т.е. вычисление проверочных битов (битов CRC), производится по следующему алгоритму.

Ш1. Умножить Циклический избыточный код - student2.ru на Циклический избыточный код - student2.ru . В результирующем полиноме степени (n-1) коэффициенты при Циклический избыточный код - student2.ru положить равными нулю.

Ш2. Разделить полином Циклический избыточный код - student2.ru на порождающий полином g(x) и определить остаток Циклический избыточный код - student2.ru .

Циклический избыточный код - student2.ru .

Ш3. Прибавить остаток Циклический избыточный код - student2.ru к Циклический избыточный код - student2.ru , т.е. добавить биты CRC в (n – k) младших разрядов представления полинома Циклический избыточный код - student2.ru .

Полином Циклический избыточный код - student2.ru делится без остатка на Циклический избыточный код - student2.ru . Действительно

Циклический избыточный код - student2.ru .

Здесь учтена особенность арифметики по модулю 2, при которой

Циклический избыточный код - student2.ru .

Коэффициенты полинома Циклический избыточный код - student2.ru образуют кодовое слово, подлежащее передаче по коммуникационному каналу. При этом, любое кодовое слово кратно порождающему полиному.

Проиллюстрируем процесс формирования CRC-последовательности на примере кода (7,4) с порождающим полиномом Циклический избыточный код - student2.ru и информационной последовательностью вида (1,1,0,0). Информационный полиномом в этом случае имеет вид Циклический избыточный код - student2.ru .

Ш1. n – k = 3 Циклический избыточный код - student2.ru

Коэффициенты этого полинома образуют последовательность (1,1,0,0,0,0,0).

Ш2. Циклический избыточный код - student2.ru (смотри приведенный выше пример деления полиномов).

Следовательно, Циклический избыточный код - student2.ru .

Ш3. Циклический избыточный код - student2.ru , что соответствует кодовому слову (1,1,0,0,0,1,0). Заметим, что в полученном кодовом слове старшие четыре разряда соответствуют информационным битам, а младшие три – биты CRC.

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

Рассмотрим виды ошибок, которые не могут быть обнаружены проверкой CRC-битов кодовых слов. Представим канал аддитивной моделью (рис.3.3), в которой кодовое слово Циклический избыточный код - student2.ru суммируется по модулю 2 без переноса с полиномом ошибок Циклический избыточный код - student2.ru .

Для аддитивной модели будет справедливым выражение

Циклический избыточный код - student2.ru .

Циклический избыточный код - student2.ru Из него хорошо видно, что если полином Циклический избыточный код - student2.ru делится без остатка на Циклический избыточный код - student2.ru , то ошибки обнаружены не будут.

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

Циклический избыточный код - student2.ru .

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

Парные ошибки. Полином ошибки имеет вид

Циклический избыточный код - student2.ru .

Как отмечено выше, Циклический избыточный код - student2.ru не делится без остатка на Циклический избыточный код - student2.ru . Следовательно, Циклический избыточный код - student2.ru разделится на Циклический избыточный код - student2.ru только в случае, когда Циклический избыточный код - student2.ru будет кратен Циклический избыточный код - student2.ru . Таким образом, необходимо использовать порождающий полином Циклический избыточный код - student2.ru , не являющийся делителем полинома Циклический избыточный код - student2.ru . Существует класс, так называемых, примитивных полиномов, одним из свойств которых является их невозможность быть делителями полиномов вида Циклический избыточный код - student2.ru , где N – степень примитивного полинома. Следовательно, для обнаружения всех парных ошибок в кодовых словах длинной n, порождающий полином Циклический избыточный код - student2.ru следует выбрать из класса примитивных полиномов степени N, удовлетворяющей неравенству Циклический избыточный код - student2.ru .

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

По этим критериям сформирован ряд широко использующихся на практике порождающих полиномов вида Циклический избыточный код - student2.ru , где Циклический избыточный код - student2.ru - примитивный полином. Так, например, порождающий полином кода CRC-16 имеет вид

Циклический избыточный код - student2.ru .

Еще одним важным видом ошибок является поражение последовательности L бит в кодовом слове длиной n бит. Можно показать, что если степень порождающего полинома (n-k) и Циклический избыточный код - student2.ru , то все ошибки будут обнаружены. При Циклический избыточный код - student2.ru не будет обнаружена (1/2n-k) часть всех возможных ошибок.

Применение приведенного выше порождающего полинома 16 порядка позволяет детектировать все одинарные и парные ошибки, а также ошибки в нечетном количестве бит в кодовых словах, длина которых не превосходит Циклический избыточный код - student2.ru = 32767 бит. Заметим, что в последовательности из 32767 бит контрольными являются не более 16 бит, т.е. избыточность такого кода оказывается весьма низкой.

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

Таблица 3.1

Название Полином Используется в
CRC-8 Циклический избыточный код - student2.ru ATM, заголовок
CRC-10 Циклический избыточный код - student2.ru ATM, кадр подуровня AAL
CCITT CRC-16 Циклический избыточный код - student2.ru HDLC, V.41
CCITT CRC-32 Циклический избыточный код - student2.ru IEEE 802, V.42

Контрольные задания

Наши рекомендации