Из Википедии, свободной энциклопедии
Перейти к навигацииПерейти к поиску

Проверка циклического избыточного кода (CRC) , основана на разделении в кольце многочленов над конечным полем GF (2) (целые числа по модулю 2 ), то есть множество полиномов , где каждый коэффициент равно либо нуль , либо один, и арифметические операции обернуть.

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

Математика

В общем, вычисление CRC соответствует евклидову делению многочленов над GF (2) :

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

При общении отправитель прикрепляет биты R после битов исходного сообщения M, которые могут быть показаны как эквивалентные отправке ( кодовое слово .) Получатель, зная и поэтому , отделяет M от R и повторяет вычисление, проверяя, что полученное и вычисленное R равны. Если да, то получатель предполагает, что биты полученного сообщения верны.

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

CRC - это контрольная сумма в строгом математическом смысле, поскольку она может быть выражена как взвешенная по модулю 2 сумма побитовых синдромов , но это слово обычно зарезервировано более конкретно для сумм, вычисляемых с использованием больших модулей, таких как 10, 256, или 65535.

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

Полиномиальная арифметика по модулю 2

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

Обратите внимание, что эквивалентно нулю в приведенном выше уравнении, поскольку сложение коэффициентов выполняется по модулю 2:

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

Умножение аналогично ( продукт без переноса ):

Мы также можем разделить многочлены по модулю 2 и найти частное и остаток. Например, предположим, что мы делим по . Мы бы обнаружили, что

Другими словами,

Деление дает частное x 2  + 1 с остатком -1, который, поскольку он нечетный, имеет последний бит 1.

В приведенных выше уравнениях представляет биты исходного сообщения 111, - порождающий полином, а остаток (эквивалентно, ) - это CRC. Степень порождающего полинома равна 1, поэтому мы сначала умножили сообщение на получить .

Варианты

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

  • Чтобы проверить CRC, вместо вычисления CRC для сообщения и сравнения его с CRC, вычисление CRC может выполняться для всего кодового слова. Если результат (называемый остатком) равен нулю, проверка проходит. Это работает, потому что кодовое слово, который всегда делится на .
Это упрощает многие реализации, избавляя от необходимости обрабатывать последние несколько байтов сообщения специально при проверке CRC.
  • Регистр сдвига может быть инициализирован единицами вместо нулей. Это эквивалентно инвертированию первогобиты сообщения перед подачей их в алгоритм. Уравнение CRC становится, куда - длина сообщения в битах. Изменение, которое это налагает на является функцией производящего полинома и длины сообщения, .
Причина использования этого метода заключается в том, что немодифицированный CRC не различает два сообщения, которые отличаются только количеством начальных нулей, потому что начальные нули не влияют на значение . Когда эта инверсия выполняется, CRC действительно различает такие сообщения.
  • CRC может быть инвертирован перед добавлением к потоку сообщений. В то время как немодифицированный CRC различает сообщенияс разным количеством конечных нулей он не обнаруживает конечных нулей, добавленных после самого остатка CRC. Это потому, что все допустимые кодовые слова кратны, так раз это кодовое слово также является кратным. (Собственно, именно поэтому первый вариант, описанный выше, работает.)

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

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

Эти инверсии чрезвычайно распространены, но выполняются не повсеместно, даже в случае полиномов CRC-32 или CRC-16-CCITT.

Обратные представления и обратные многочлены

Полиномиальные представления

Пример 16-битного многочлена CCITT в описанных формах (биты внутри квадратных скобок включены в представление слова; биты снаружи подразумеваются как 1 бит; вертикальные полосы обозначают границы полубайта ):

16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 коэффициент 1 [0 0 0 1 | 0 0 0 0 | 0 0 1 0 | 0 0 0 1] Нормальный [1 | 0 | 2 | 1] Нормальные полубайты 0x1021 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[1 0 0 0 | 0 1 0 0 | 0 0 0 0 | 1 0 0 0] 1 Реверс
[8 | 4 | 0 | 8] Полубайты реверса 0x8408
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 [0 0 0 0 | 1 0 0 0 | 0 0 0 1 | 0 0 0 1] Взаимный [0 | 8 | 1 | 1] Полубайты взаимности 0x0811 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Обратный обратный
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Купман
[1 0 0 0 | 1 0 0 0 | 0 0 0 1 | 0 0 0 0] 1
[8 | 8 | 1 | 0] Полубайты 0x8810

Все известные полиномы генератора CRC степени имеют два общих шестнадцатеричных представления. В обоих случаях коэффициент опускается и понимается как 1.

  • Представление msbit-first - это шестнадцатеричное число с биты, младший бит которых всегда равен 1. Самый старший бит представляет собой коэффициент а младший бит представляет собой коэффициент .
  • Представление lsbit-first - это шестнадцатеричное число с биты, самый старший бит из которых всегда равен 1. Самый старший бит представляет собой коэффициент а младший бит представляет собой коэффициент .

Форма msbit-first часто упоминается в литературе как нормальное представление, а lsbit-first - обратное представление. При реализации CRC важно использовать правильную форму. Если коэффициент оказывается равным нулю, формы можно различить с первого взгляда, посмотрев, на каком конце установлен бит.

Чтобы еще больше запутать этот вопрос, статья П. Купмана и Т. Чакраварти [1] [2] преобразует полиномы генератора CRC в шестнадцатеричные числа еще одним способом: сначала msbit, но включая коэффициент и без учета коэффициент. Это представление «Купмана» имеет то преимущество, что степень может быть определена в шестнадцатеричной форме, а коэффициенты легко считываются в порядке слева направо. Однако он больше нигде не используется и не рекомендуется из-за риска путаницы.

Взаимные полиномы

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

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

Уровень обнаружения ошибок

Способность CRC обнаруживать ошибки зависит от степени ключевого полинома и от конкретного используемого ключевого полинома. «Полином ошибок»- симметричная разность кодового слова принятого сообщения и правильного кодового слова сообщения. Ошибка не будет обнаружена алгоритмом CRC тогда и только тогда, когда полином ошибки делится на полином CRC.

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

(Кстати, нет причин использовать полином с нулевым срок. Напомним, что CRC - это остаток полиномиального времени сообщения.делится на полином CRC. Многочлен с нулем термин всегда имеет как фактор. Так что если является исходным полиномом CRC и , потом

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

Комбинация этих факторов означает, что хорошие полиномы CRC часто являются примитивными полиномами (которые имеют лучшее обнаружение 2-битных ошибок) или примитивными полиномами степени , умножается на (который обнаруживает все нечетные числа битовых ошибок и имеет вдвое меньшую способность обнаружения двухбитовых ошибок, чем у примитивного полинома степени ). [1]

Битовые фильтры

Методика анализа с использованием битовых фильтров [1] позволяет очень эффективно определять свойства заданного порождающего полинома. Результаты следующие:

  1. Все пакетные ошибки (кроме одной), длина которых не превышает порождающего полинома, могут быть обнаружены любым порождающим полиномом. . Это включает в себя 1-битные ошибки (пакет длиной 1). Максимальная длина составляет, когда является степенью порождающего полинома (длина которого ). Исключением из этого результата является битовый шаблон, такой же, как у генераторного полинома.
  2. Все нечетные битовые ошибки обнаруживаются генератором полиномов с четным числом членов.
  3. 2-битные ошибки на (кратном) расстоянии от самого длинного битового фильтра четной четности до полинома генератора не обнаруживаются; все остальные обнаружены. Для степеней до 32 существует оптимальный порождающий полином с этой степенью и четным числом членов; в этом случае указанный выше период составляет. Дляэто означает, что блоки длиной 32 767 битов не содержат неоткрытых 2-битных ошибок. Для нечетного числа членов в образующем полиноме может быть период; однако эти порождающие полиномы (с нечетным числом членов) не обнаруживают все нечетное количество ошибок, поэтому их следует избегать. Список соответствующих генераторов с четным числом терминов можно найти по ссылке, указанной в начале этого раздела.
  4. Все одиночные битовые ошибки в пределах периода битового фильтра, упомянутого выше (для четных членов в полиноме генератора), могут быть однозначно идентифицированы по их невязке. Таким образом, метод CRC может использоваться и для исправления однобитовых ошибок (в этих пределах, например, 32 767 битов с оптимальными порождающими полиномами степени 16). Поскольку все нечетные ошибки оставляют нечетный остаток, можно различать все четные, четные остатки, 1-битные ошибки и 2-битные ошибки. Однако, как и другие методы SECDED , CRC не всегда может отличить 1-битные ошибки от 3-битных ошибок. Когда в блоке возникают 3 или более битовых ошибок, исправление битовых ошибок CRC само будет ошибочным и приведет к большему количеству ошибок.

См. Также

Ссылки

  1. ^ a b c Купман, Филипп (июль 2002 г.). 32-битные циклические коды избыточности для интернет-приложений (PDF) . Международная конференция по надежным системам и сетям . С. 459–468. CiteSeerX  10.1.1.11.8323 . DOI : 10,1109 / DSN.2002.1028931 . ISBN 978-0-7695-1597-7. Проверено 14 января 2011 года . - проверка результатов Кастаньоли исчерпывающим перебором и некоторыми новыми хорошими полиномами
  2. ^ Купман, Филипп; Чакраварти, Тридиб (июнь 2004 г.). Выбор полинома циклического избыточного кода (CRC) для встроенных сетей (PDF) . Международная конференция по надежным системам и сетям . С. 145–154. CiteSeerX 10.1.1.648.9080 . DOI : 10,1109 / DSN.2004.1311885 . ISBN   978-0-7695-2052-0. Проверено 14 января 2011 года . - анализ коротких полиномов CRC для встроенных приложений

Внешние ссылки

  • Купман, Фил. «Блог: Контрольная сумма и CRC Central» .- перечисляет полиномы CRC, дающие наилучшие расстояния Хэмминга .