Matematyka cyklicznych kontroli redundancji
Cykliczna kontrola redundancji (CRC) opiera się na dzieleniu w pierścieniu wielomianów po ciele skończonym GF(2) (liczby całkowite modulo 2 ), czyli zbiorze wielomianów , w których każdy współczynnik jest równy zero lub jeden, oraz operacjach arytmetycznych owinąć.
Dowolny ciąg bitów można zinterpretować jako współczynniki wielomianu wiadomości tego rodzaju i aby znaleźć CRC, mnożymy wielomian wiadomości przez, a następnie znajdujemy resztę z dzielenia przez stopień - generator wielomianu . Współczynniki reszty wielomianu to bity CRC.
Matematyka
Ogólnie rzecz biorąc, obliczenie CRC odpowiada euklidesowemu podziałowi wielomianów przez GF(2) :
Tutaj oryginalnej wiadomości a wielomianem Bity oryginalną _ „Suma kontrolna” CRC jest tworzona przez współczynniki reszty wielomianu , którego stopień jest ściśle mniejszy niż . ilorazowy nie Korzystając z operacji modulo , można stwierdzić, że
W komunikacji nadawca dołącza oryginalnych bitach M, co można wykazać jako równoważne z wysłaniem (słowo kodowe ). Odbiorca, wiedząc, i dlatego , oddziela M od R i powtarza obliczenia, sprawdzając, czy otrzymane i obliczone R są równe. Jeśli tak, to odbiorca zakłada, że otrzymane bity wiadomości są poprawne.
W praktyce obliczenia CRC najbardziej przypominają długie dzielenie w systemie binarnym, z wyjątkiem tego, że odejmowania nie zapożyczają się z bardziej znaczących cyfr, a tym samym stają się wyłącznymi lub operacjami.
CRC jest sumą kontrolną w ścisłym sensie matematycznym, ponieważ można ją wyrazić jako ważoną sumę modulo-2 syndromów na bit , ale to słowo jest ogólnie zarezerwowane bardziej konkretnie dla sum obliczanych przy użyciu większych modułów, takich jak 10, 256, lub 65535.
CRC mogą być również wykorzystywane jako część kodów korekcji błędów , które umożliwiają nie tylko wykrycie błędów transmisji, ale także odtworzenie poprawnej wiadomości. Kody te są oparte na ściśle powiązanych zasadach matematycznych.
Wielomian arytmetyczny modulo 2
Ponieważ współczynniki są ograniczone do jednego bitu, każda operacja matematyczna na wielomianach CRC musi odwzorować współczynniki wyniku na zero lub jeden. Na przykład dodatkowo:
Zauważ, że w powyższym jest równoważne zeru, ponieważ dodawanie współczynników odbywa się modulo
Dodawanie wielomianów modulo 2 jest tym samym, co bitowe XOR . Ponieważ XOR jest odwrotnością samego siebie, odejmowanie wielomianowe modulo 2 jest takie samo jak bitowe XOR.
Mnożenie jest podobne (iloczyn bez przenoszenia ):
Możemy również podzielić wielomiany mod 2 i znaleźć iloraz i resztę. Załóżmy na przykład, że dzielimy przez przez . Znaleźlibyśmy to
Innymi słowy,
Dzielenie daje iloraz x 2 + 1 z resztą -1, który, ponieważ jest nieparzysty, ma ostatni bit równy 1.
W powyższych równaniach reprezentuje oryginalne bity wiadomości 111
, jest wielomianem generatora a reszta równoważnie to CRC pomnożyliśmy wiadomość przez .
Wariacje
Istnieje kilka standardowych odmian CRC, z których każda lub wszystkie mogą być używane z dowolnym wielomianem CRC. Odmiany implementacji, takie jak endianowość i prezentacja CRC, wpływają tylko na mapowanie ciągów bitów na współczynniki i nie wpływają na i właściwości algorytmu.
- Aby sprawdzić CRC, zamiast obliczania CRC w wiadomości i porównywania go z CRC, można uruchomić obliczenie CRC na całym słowie kodowym. Jeśli wynik (nazywany resztą) wynosi zero, kontrola przechodzi pomyślnie. To działa, ponieważ słowo kodowe to , która jest zawsze podzielna przez .
- Upraszcza to wiele implementacji, unikając konieczności specjalnego traktowania ostatnich kilku bajtów wiadomości podczas sprawdzania CRC.
- Rejestr przesuwny może być inicjowany jedynkami zamiast zerami. Jest to z odwróceniem pierwszych wiadomości przed podaniem ich do algorytmu. Równanie CRC przyjmuje postać , gdzie to długość wiadomości w bitach. Zmiana, jaką to nakłada na jest funkcją wielomianu generującego i długości wiadomości .
- Powodem zastosowania tej metody jest to, że niezmodyfikowany CRC nie rozróżnia dwóch komunikatów, które różnią się jedynie liczbą wiodących zer, ponieważ wiodące zera nie wpływają na wartość . Kiedy ta inwersja jest wykonywana, CRC rozróżnia takie komunikaty.
- CRC można odwrócić przed dołączeniem do strumienia komunikatów. Chociaż niezmodyfikowany CRC rozróżnia komunikaty z różną liczbą końcowych , nie wykrywa końcowych zer dodanych po Dzieje się tak, ponieważ wszystkie prawidłowe słowa kodowe są wielokrotnościami , więc sol razy to słowo kodowe jest również wielokrotnością. (W rzeczywistości właśnie dlatego pierwszy opisany powyżej wariant działa).
W praktyce dwie ostatnie odmiany są niezmiennie używane razem. Zmieniają transmitowany CRC, więc muszą być zaimplementowane zarówno po stronie nadajnika, jak i odbiornika. Chociaż ustawienie rejestru przesuwnego na jedynki jest łatwe do wykonania na obu końcach, odwrócenie wpływa na odbiorniki wdrażające pierwszą odmianę, ponieważ CRC pełnego słowa kodowego, które już zawiera CRC, nie wynosi już zero. Zamiast tego jest to stały niezerowy wzór, CRC wzorca .
CRC można zatem sprawdzić albo za pomocą oczywistej metody obliczania CRC w wiadomości, odwrócenia jej i porównania z CRC w strumieniu wiadomości, albo przez obliczenie CRC na całym słowie kodowym i porównanie go z oczekiwaną stałą wartością , zwany wielomianem kontrolnym, resztą lub magiczną liczbą . Można to obliczyć jako lub równoważnie przez obliczenie niezmodyfikowanego CRC wiadomości składającej się z , .
Te inwersje są niezwykle powszechne, ale nie są powszechnie wykonywane, nawet w przypadku wielomianów CRC-32 lub CRC-16-CCITT.
Reprezentacje odwrotne i wielomiany odwrotne
Reprezentacje wielomianowe
Przykład 16-bitowego wielomianu CCITT w opisanych postaciach (bity w nawiasach kwadratowych są zawarte w reprezentacji słowa; bity na zewnątrz oznaczają 1 bit; pionowe kreski wyznaczają granice nibble ):
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 współczynnik 1 [0 0 0 1 |0 0 0 0 |0 0 1 0 |0 0 0 1] Normalny [ 1 | 0 | 2 | 1 ] Nibbles of Normal 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 Odwrotny [ 8 | 4 | 0 | 8 ] Nibbles of Reverse 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] Odwrotność [ 0 | 8 | 1 | 1 ] Nibbles odwrotności 0x0811 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Odwrotność odwrotności 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Koopman [1 0 0 0 |1 0 0 0 |0 0 0 1 |0 0 0 0] 1 [ 8 | 8 | 1 | 0 ] Nibbles 0x8810
Wszystkie dobrze znane wielomiany generatora CRC stopnia . W obu współczynnik jest i rozumiany jako 1
- Reprezentacja msbit-first to liczba szesnastkowa z Najbardziej znaczący bit reprezentuje współczynnik , a najmniej znaczący bit reprezentuje współczynnik .
- Reprezentacja pierwszego bitu to liczba szesnastkowa z , z których najbardziej znaczącym bitem jest zawsze 1. Najbardziej znaczący bit reprezentuje współczynnik i najmniej znaczący bit bit reprezentuje współczynnik .
Forma msbit-first jest często określana w literaturze jako normalna reprezentacja, podczas gdy lsbit-first jest nazywana reprezentacją odwróconą . Przy wdrażaniu CRC konieczne jest użycie poprawnej formy. Jeśli współczynnik pierwszy rzut oka, widząc, który koniec ma
Aby jeszcze bardziej zagmatwać sprawę, artykuł P. Koopmana i T. Chakravarty'ego konwertuje wielomiany generatora CRC na liczby szesnastkowe w jeszcze inny sposób: najpierw msbit, ale z uwzględnieniem współczynnika i pomijając współczynnik. Ta reprezentacja „Koopmana” ma tę zaletę, że stopień można określić na podstawie postaci szesnastkowej, a współczynniki można łatwo odczytać w kolejności od lewej do prawej. Jednak nigdzie indziej nie jest używany i nie jest zalecany ze względu na ryzyko pomyłki.
Wielomiany odwrotne
Odwrotny wielomian jest tworzony przez przypisanie współczynników wielomianu do do współczynniki nowego wielomianu. Oznacza to że odwrotność wielomianu stopnia wynosi sol x .
Najbardziej interesującą właściwością wielomianów odwrotnych, gdy są używane w CRC, jest to, że mają one dokładnie taką samą siłę wykrywania błędów, jak wielomiany, których są odwrotnościami. Odwrotność wielomianu generuje te same słowa kodowe , tylko odwrócone bity - to znaczy, jeśli wszystkie oprócz pierwszych bitów słowa kodowego pod oryginalnym wielomianem są pobierane, odwracane i używane jako nowa wiadomość, CRC z n {\ displaystyle ta wiadomość pod wielomianem odwrotnym jest równa odwrotności pierwszego bitów oryginalnego słowa kodowego. Ale wielomian odwrotny nie jest tym samym, co oryginalny wielomian, a CRC wygenerowane przy jego użyciu nie są takie same (nawet odwrócenie bitów modulo), jak te wygenerowane przez oryginalny wielomian.
Siła wykrywania błędów
Zdolność CRC do wykrywania błędów zależy od stopnia jego kluczowego wielomianu i od konkretnego zastosowanego kluczowego wielomianu. „Wielomian błędu” to symetryczna różnica słowa kodowego odebranej wiadomości i Błąd pozostanie niewykryty przez algorytm CRC wtedy i tylko wtedy, gdy wielomian błędu jest podzielny przez wielomian CRC.
- Ponieważ CRC opiera się na dzieleniu, żaden wielomian nie może wykryć błędów składających się z ciągu zer dołączonego do danych lub brakujących zer wiodących. Jednak zobacz Wariacje .
- Wszystkie błędy pojedynczego bitu zostaną wykryte przez dowolny wielomian z co najmniej dwoma wyrazami o niezerowych współczynnikach. Wielomian błędu to i podzielny tylko przez wielomiany gdzie .
- Wykryte zostaną wszystkie dwa błędy bitowe oddalone od siebie o odległość mniejszą niż rząd pierwotnego wielomianu, który jest współczynnikiem wielomianu generatora . Wielomian błędu w przypadku dwubitowym to . powyżej, będzie podzielny przez który definicji najmniejszą wartością że wielomian . Wielomiany o największym rzędzie nazywane są wielomianami pierwotnymi , a dla wielomianów stopnia ze współczynnikami binarnymi mają rząd .
- nieparzystej liczbie bitów zostaną wykryte przez wielomian, który Jest to równoważne z wielomianem mającym parzystą liczbę wyrazów o niezerowych współczynnikach. Ta pojemność zakłada, że generator wielomianu jest iloczynem wielomianu pierwotnego stopnia, oprócz mają nieparzystą liczbę niezerowych współczynników.
- Wszystkie błędy serii długości wykryte przez dowolny wielomian stopnia ma niezerowy .
(Nawiasem mówiąc, nigdy nie ma powodu, aby używać wielomianu z terminem zerowym Przypomnijmy, że CRC to reszta wielomianu wiadomości razy przez wielomian CRC. Wielomian z terminem zerowym czynnik jako czynnik. Więc jeśli ( oryginalny wielomian CRC i , wtedy
to, że suma kontrolna dowolnej wiadomości z wielomianem x ) dopisane zero. To tylko trochę strata.)
Połączenie tych czynników oznacza, że dobre wielomiany CRC to często prymitywne wielomiany (które mają najlepsze 2-bitowe wykrywanie błędów) lub prymitywne wielomiany stopnia + (który wykrywa wszystkie nieparzyste liczby błędów bitowych i ma połowę dwubitowej zdolności wykrywania błędów pierwotnego wielomianu .
filtry bitowe
Technika analizy z wykorzystaniem filtrów bitowych pozwala na bardzo efektywne wyznaczenie własności danego wielomianu generatora. Wyniki są następujące:
- generatora można wykryć za pomocą . Obejmuje to błędy 1-bitowe (wybuch długości 1). Maksymalna długość to , gdy jest wielomianu generatora (który sam ma długość ). Wyjątkiem od tego wyniku jest wzorzec bitowy taki sam jak w przypadku wielomianu generatora.
- Wszystkie błędy nieparzystych bitów są wykrywane przez wielomiany generatora o parzystej liczbie wyrazów.
- 2-bitowe błędy w (wielokrotnej) odległości najdłuższego filtra bitowego o parzystości do wielomianu generatora nie są wykrywane; wszystkie inne są wykrywane. Dla stopni do 32 istnieje optymalny wielomian generatora o tym stopniu i parzystej liczbie wyrazów; w tym przypadku wspomniany powyżej okres to . Dla oznacza to, że bloki o długości 32 767 bitów nie zawierają nieodkrytych błędów 2-bitowych. Dla nieparzystej liczby wyrazów w wielomianie generatora może istnieć kropka ; jednak te wielomiany generatora (z nieparzystą liczbą wyrazów) nie wykrywają wszystkich nieparzystych liczb błędów, dlatego należy ich unikać. Listę odpowiednich generatorów z parzystą liczbą terminów można znaleźć w linku wymienionym na początku tej sekcji.
- Wszystkie pojedyncze błędy bitowe we wspomnianym powyżej okresie filtra bitów (dla parzystych wyrazów w wielomianie generatora) można jednoznacznie zidentyfikować na podstawie ich pozostałości. Tak więc metodą CRC można również korygować błędy jednobitowe (w tych granicach np. 32 767 bitów przy optymalnym generatorze wielomianów stopnia 16). Ponieważ wszystkie nieparzyste błędy pozostawiają nieparzystą resztę, można rozróżnić wszystkie parzyste błędy resztkowe, błędy 1-bitowe i błędy 2-bitowe. Jednak, podobnie jak inne SECDED , CRC nie zawsze mogą odróżnić błędy 1-bitowe od błędów 3-bitowych. Gdy w bloku wystąpią 3 lub więcej błędów bitowych, bitowa korekcja błędów CRC sama w sobie będzie błędna i spowoduje więcej błędów.
Zobacz też
- redukcja Barretta
- Kod poprawiający błąd
- Lista algorytmów sum kontrolnych
- Parzystość (telekomunikacja)
- Wielomianowe reprezentacje cyklicznych kontroli redundancji
- ^ abc Koopman , Philip (lipiec 2002). 32-bitowe cykliczne kody redundancji dla aplikacji internetowych (PDF) . Międzynarodowa konferencja na temat niezawodnych systemów i sieci . s. 459–468. CiteSeerX 10.1.1.11.8323 . doi : 10.1109/DSN.2002.1028931 . ISBN 978-0-7695-1597-7 . Źródło 14 stycznia 2011 r . - weryfikacja wyników Castagnoliego poprzez wyczerpujące poszukiwania i kilka nowych dobrych wielomianów
- ^ Koopman, Filip; Chakravarty, Tridib (czerwiec 2004). Cykliczny kod redundancji (CRC) Wybór wielomianu dla sieci wbudowanych (PDF) . Międzynarodowa konferencja na temat niezawodnych systemów i sieci . s. 145–154. CiteSeerX 10.1.1.648.9080 . doi : 10.1109/DSN.2004.1311885 . ISBN 978-0-7695-2052-0 . Źródło 14 stycznia 2011 r . – analiza krótkich wielomianów CRC dla aplikacji wbudowanych
Linki zewnętrzne
- Koopman, Phil. „Blog: suma kontrolna i CRC Central” . — wymienia wielomiany CRC dające najlepsze odległości Hamminga .