Циклічний надлишковий код: відмінності між версіями
[перевірена версія] | [перевірена версія] |
Вилучено вміст Додано вміст
Dgho (обговорення | внесок) Немає опису редагування |
|||
Рядок 2:
== Введення ==
Поняття [[Циклічний код|циклічні коди]] достатньо широке. У англомовній літературі CRC розшифровується двояко в залежності від контексту: ''Cyclic Redundancy Code''
== Завадостійке кодування ==
Рядок 17:
== Математичний опис ==
Алгоритм CRC базується на властивості [[ділення з остачею]] двійкових [[Многочлен|многочленів]], тобто многочленів над [[Скінченне поле|скінченним полем]] <math>GF(2)</math>. Значення CRC є по суті остачею від ділення многочлена, відповідного вхідним даним, на деякий фіксований породжувальний
Кожній послідовності бітів <math>a_0, a_1, ..., a_{N-1}</math> взаємно однозначно зіставляється двійковий многочлен
x^6 + x^4 + x^3 + x^1.</math></blockquote>Кількість різних многочленів степені меншої <math>N</math> дорівнює <math>2^N</math>, що збігається з числом всіх двійкових послідовностей довжини <math>N</math>.
Значення контрольної суми в алгоритмі з породжуючим многочленом <math>G(x)</math> степені <math>N</math> задається як бітова послідовність довжини <math>N</math>, яка представляє многочлен <math>R(x)</math>, отриманий в остачі при діленні многочлена <math>P(x)</math>, який представляє вхідний потік біт, на многочлен <math>G(x)</math>:<blockquote><math>R(x) = P(x)\cdot x^N\bmod\ G(x) </math></blockquote>де
: <math>R(x)</math>
: <math>P(x)</math>— многочлен, коефіцієнти якого представляють вхідні дані;
: <math>G(x)</math>
: <math>N</math>
Множення <math>x^N</math> здійснюється приписуванням нульових бітів до вхідної послідовності, що покращує якість гешування для коротких вхідних послідовностей.
Рядок 36:
Одним з основних параметрів CRC є породжувальний многочлен.
З породжувальним многочленом пов'язаний інший параметр
Ще одним параметром є початкове (стартове) значення слова. Вказані параметри повністю визначають «традиційний» алгоритм обчислення CRC. Існують також модифікації алгоритму, наприклад, які використовують [[Порядок байтів|зворотний порядок]] обробки бітів.
=== Опис процедури ===
З файлу береться перше слово
== Популярні й стандартизовані многочлени ==
В той час, як циклічні надлишкові коди є частиною стандартів, у цього терміну не існує загальноприйнятого визначення
Цей парадокс стосується й вибору многочлена-генератора: найчастіше [[Стандартизація|стандартизовані]] многочлени не є найбільш ефективними в плані [[Неперервний рівномірний розподіл|статичних]] властивостей відповідного їм ''check redundancy code''.
При цьому багато широко використовуваних многочленів не є найефективнішими із всіх можливих. У 1993—2004 роках група вчених займалася дослідженням
Найпопулярніший та рекомендований [[IEEE]] многочлен для CRC-32 використовується в [[Ethernet]], [[FDDI]]; також цей многочлен є генератором [[Коди Гемінга|коду Геммінга]]. Використання іншого многочлену
Нижче в таблиці приведені найбільш розповсюджені многочлени
{| class="wikitable"
! rowspan="2" |Назва
Рядок 61:
!Нормальне
!Реверсоване
!Реверсоване
від зворотнього
|-
|CRC-1
|<math>x + 1</math>
|використовується в апаратному контролі помилок;
також відомий як [[біт парності]]
|0x1
Рядок 102:
|-
|CRC-6-ITU
|<math>x^6 + x + 1</math>
|[[ITU]] G.704<ref>{{Cite web|url=http://www.itu.int/rec/T-REC-G.704-199810-I/en|title=G.704 : Synchronous frame structures used at 1544, 6312, 2048, 8448 and 44 736 kbit/s hierarchical levels p.3|last=tsbmail|first=|date=|website=www.itu.int|publisher=|language=|accessdate=}}</ref>
|0x03
Рядок 109:
|-
|CRC-7
|<math>x^7 + x^3 + 1</math>
|системи телекомунікації, [[ITU]]-T G.707<ref>{{Cite web|url=http://www.itu.int/rec/T-REC-G.707/en|title=G.707 : Network node interface for the synchronous digital hierarchy (SDH) P. 7|last=tsbmail|first=|date=|website=www.itu.int|publisher=|language=|accessdate=}}</ref>, [[ITU]]-T G.832<ref>{{Cite web|url=http://www.itu.int/rec/T-REC-G.832/en|title=G.832 : Transport of SDH elements on PDH networks - Frame and multiplexing structures|last=tsbmail|first=|date=|website=www.itu.int|publisher=|language=|accessdate=}}</ref>, [[MultiMediaCard|MMC]], [[Secure Digital|SD]]
|0x09
Рядок 174:
|CRC-16-[[IBM]]
|<math>x^{16} + x^{15} + x^2 + 1</math>
|Bisync, [[Modbus]], [[USB]], [[ANSI]] X3.28<sup>[20]</sup>, багато інших;
також відомий як ''CRC-16'' та ''CRC-16-ANSI''
|0x8005
Рядок 182:
|CRC-16-CCITT
|<math>x^{16} + x^{12} + x^5 + 1</math>
|[[X.25]], [[HDLC]],
|0x1021
|0x8408
Рядок 188:
|-
|CRC-16-T10-DIF
|<math>x^{16} + x^{15} + x^{11} + x^9 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1</math>
|[[SCSI]] DIF
|0x8BB7
Рядок 239:
<math>x^{14} + x^{13} + x^{11} + x^{10} + x^9 + x^8 + x^6 + 1 </math>
|[[iSCSI]],
|0x1EDC6F41
|0x82F63B78
Рядок 262:
|CRC-64-ISO
|<math>x^{64} + x^4 + x^3 + x + 1 </math>
|HDLC
|0x000000000000001B
|0xD800000000000000
Рядок 286:
* Ступінь породжує контрольну суму многочлена (width);
* Сам виготовляючий поліном (poly). Для того, щоб записати його у вигляді значення, його спочатку записують як бітову послідовність, при цьому старший біт опускається
* Стартові дані (init), тобто значення регістрів на момент початку обчислень;
* Прапор (RefIn), який вказує на початок і напрямок обчислень. Існує два варіанти: False
* Прапор (RefOut), що визначає, інвертується чи порядок бітів регістра при вході на елемент XOR;
Рядок 1030:
* [http://posibnyky.vntu.edu.ua/e_s/index.htm Електронні системи: навчальний посібник / Й. Й. Білинський, К. В. Огороднік, М. Й. Юкиш. — Вінниця: ВНТУ, 2011. — 208 с.]
{{Хеш-функції навігація}}
{{програмування-доробити}}
|