20.10.2015 Views

METODY WERYFIKACJI POPRAWNOŚCI KODOWANIA Algorytm CRC

Pracownia nr 3

Pracownia nr 3

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Podstawy Informatyki – EiT, zajęcia 2 08.10.2015 r.<br />

<strong>METODY</strong> <strong>WERYFIKACJI</strong> <strong>POPRAWNOŚCI</strong><br />

<strong>KODOWANIA</strong><br />

<strong>Algorytm</strong> <strong>CRC</strong><br />

n-bitowy cykliczny kod nadmiarowy (n-bitowy <strong>CRC</strong>) definiuje się jako resztę z dzielenia ciągu<br />

danych przez (n+1)-bitowy dzielnik <strong>CRC</strong>, zwany również wielomianem <strong>CRC</strong>.<br />

Przykład<br />

Załóżmy n = 3.<br />

Ustalmy (n+1)-bitowy dzielnik w postaci liczby 1011.<br />

Weźmy 14-bitowy ciąg danych: 11010011101110.<br />

<strong>Algorytm</strong> postępowania w celu obliczenia 3-bitowego <strong>CRC</strong> jest następujący:<br />

1. dodajemy do ciągu danych 3 wyzerowane bity,<br />

2. w linii poniżej wpisujemy 4-bitowy dzielnik <strong>CRC</strong>,<br />

3. jeżeli mamy 0 nad najstarszą pozycją dzielnika, to przesuwamy dzielnik w prawo o<br />

jedną pozycję, aż do napotkania 1,<br />

4. wykonujemy operację XOR pomiędzy bitami dzielnika i odpowiednimi bitami ciągu<br />

danych, uwzględniając dopisane 3 bity<br />

5. wynik zapisujemy w nowej linii poniżej,<br />

6. jeżeli liczba bitów danych jest większa lub równa 4, przechodzimy do kroku 2,<br />

7. 3 najmłodsze bity stanowią szukane <strong>CRC</strong>, czyli cykliczny kod nadmiarowy:<br />

11010011101110 000


Podstawy Informatyki – EiT, zajęcia 2 08.10.2015 r.<br />

Po stronie odbiorczej wykonywane jest sprawdzenie poprawności otrzymanych<br />

danych, przy wykorzystaniu, utworzonego po stronie nadawczej, kodu<br />

nadmiarowego <strong>CRC</strong>. Jeżeli w przesłanych danych nie ma przekłamań, to po<br />

wykonaniu powyższej procedury reszta z dzielenia przez dany dzielnik <strong>CRC</strong><br />

wynosi 0:<br />

11010011101110 010


Podstawy Informatyki – EiT, zajęcia 2 08.10.2015 r.<br />

Wprowadzenie znaków kontrolnych przy<br />

kodowaniu danych<br />

PESEL (cyfra kontrolna)<br />

Przykład:<br />

440514 0145 8<br />

<br />

<br />

<br />

cyfry [1-6] – data urodzenia z określeniem stulecia urodzenia<br />

cyfry [7-10] – numer serii z oznaczeniem płci, cyfra [10] – płeć<br />

cyfra [11] – cyfra kontrolna<br />

Zadanie:<br />

Sprawdź cyfrę kontrolną swojego numeru PESEL wg podanego wyżej<br />

algorytmu.<br />

3


Podstawy Informatyki – EiT, zajęcia 2 08.10.2015 r.<br />

Kodowanie liczb wymiernych<br />

Definicja formatu zmiennoprzecinkowego - cecha i mantysa<br />

Niech słowo kodowe FP będzie zbudowane z 8 bitów ponumerowanych od 0 do 7, które<br />

podzielimy na dwie części:<br />

Słowo kodowe FP<br />

b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0<br />

c - cecha<br />

m - mantysa<br />

Cecha zawarta będzie w bitach od b 4 do b 7 . Ustalmy, iż cecha jest liczbą całkowitą ze<br />

znakiem w kodzie U2.<br />

(Uwaga - ten sposób kodowania przyjęliśmy dla prostoty - rzeczywiste systemy<br />

zmiennoprzecinkowe stosują tutaj kodowanie z nadmiarem).<br />

Wartość cechy obliczamy wg wzoru:<br />

c = (-2 3 ) ∙ b 7 + 2 2 ∙ b 6 + 2 1 ∙ b 5 + 2 0 ∙ b 4 = (-8) ∙ b 7 + 4 ∙ b 6 + 2 ∙ b 5 + b 4<br />

Przykład:<br />

W słowie kodowym 10111101( FP ) cecha ma wartość c= 1011( U2 ) = -8 + 2 + 1 = -5( 10 ).<br />

Mantysa zawarta jest w bitach od b 0 do b 3 . Ustalamy, iż mantysa jest 4-bitową liczbą<br />

stałoprzecinkową w kodzie U2 (rzeczywiste systemy stosują kodowanie mantysy w<br />

stałoprzecinkowym kodzie ZM – Znak Moduł) Pozycję przecinka umieszczamy pomiędzy<br />

bitami b 1 i b 2 (jest to tylko taka nasza umowa, w rzeczywistości przecinek nie jest<br />

umieszczany w zapisie liczby, ale my wiemy, gdzie on powinien być i o to właśnie chodzi!)<br />

Zatem wartość mantysy obliczamy według wzoru:<br />

m = b 3 b 2 , b 1 b 0(U2) =<br />

= (-2 1 ) ∙ b 3 + 2 0 ∙ b 2 + 2 -1 ∙ b 1 + 2 -2 ∙ b 0 = -2b 3 + b 2 + 1 / 2 b 1 + 1 / 4 b 2<br />

4


Podstawy Informatyki – EiT, zajęcia 2 08.10.2015 r.<br />

Czyli:<br />

W słowie kodowym 10111101 (FP) mantysa ma wartość<br />

m =11,01 (U2) = -2 + 1 + 1 / 4 = - 3 / 4(10) .<br />

Obliczanie wartości liczby zmiennoprzecinkowej<br />

Znając sposób kodowania cechy i mantysy można już obliczyć wartość dowolnej liczby<br />

zapisanej w tym systemie zmiennoprzecinkowym.<br />

Zadanie 1:<br />

L (FP) = m ∙ 2 c<br />

Obliczyć wartość liczby zmiennoprzecinkowej 00010100 (FP) .<br />

c = …………. (U2)<br />

…….. (U2) = ………………….. (10)<br />

m = …..…,….... (U2)<br />

..…..,……. (U2) = ……………………... (10)<br />

L (FP) =m ∙ 2 c =…………………………….<br />

wynik: 00010100 (FP) = …………….<br />

Zadanie 2:<br />

Obliczyć wartość liczby zmiennoprzecinkowej 11010111 (FP) .<br />

c = ………….. (U2)<br />

………. (U2) = ……………………. (10)<br />

m = …….,...... (U2)<br />

………,……… (U2) = ………………………………. (10)<br />

L (FP) =m ∙ 2 c =…………………………………….<br />

wynik: 11010111 (FP) = ……………….<br />

5


Podstawy Informatyki – EiT, zajęcia 2 08.10.2015 r.<br />

Zadanie 3:<br />

Obliczyć wartość liczby zmiennoprzecinkowej 11111001 (FP) .<br />

c = …….. (U2)<br />

1111 (U2) = ………………………… (10)<br />

L (FP) =m ∙ 2 c<br />

m =……….,……… (U2)<br />

10,01 (U2) = …………………………. (10)<br />

=………………………………………..<br />

wynik: 11111001 (FP) = ……………<br />

KOD „ZNAK MODUŁ”<br />

Kod znak-moduł to sposób zapisu liczb całkowitych oznaczany jako ZM (bądź SM – ang. signmagnitude).<br />

Wszystkie bity poza najstarszym mają takie same znaczenie jak w naturalnym<br />

kodzie binarnym. Wyróżniony bit w tym zapisie jest bitem znaku. Jeżeli ma on wartość 0 to<br />

dana liczba jest nieujemna, jeżeli 1, to liczba jest niedodatnia. W związku z tym występują<br />

dwie reprezentacje zera: +0 (0000) i -0 (1000) – patrz tabela. Jednocześnie wpływa to na<br />

zakres liczb jaki można przedstawić używając kodowania ZM na n bitach:<br />

Dla 8 bitów (bajta) są to liczby od -127 do 127. Liczby zapisane w kodzie ZM na 4 bitach:<br />

znak-moduł dziesiętnie<br />

0000 0<br />

0001 1<br />

0010 2<br />

0011 3<br />

0100 4<br />

0101 5<br />

0110 6<br />

0111 7<br />

1000 0<br />

1001 -1<br />

1010 -2<br />

1011 -3<br />

1100 -4<br />

1101 -5<br />

1110 -6<br />

1111 -7<br />

6


Podstawy Informatyki – EiT, zajęcia 2 08.10.2015 r.<br />

KOD „Z NADMIAREM”<br />

Jest to jeszcze inny sposób zapisu liczb całkowitych.<br />

Wartość dziesiętna liczby zapisanej w dwójkowym kodzie z nadmiarem:<br />

b N-1 b N-2 ...b 2 b 1 b 0 (BIAS) = b N-1 2 N-1 + b N-2 2 N-2 + ... + b 2 2 2 + b 1 2 1 + b 0 2 0 - bias<br />

gdzie:<br />

b - bit, cyfra dwójkowa 0 lub 1<br />

N - liczba bitów w zapisie liczby<br />

bias - nadmiar, odchyłka w stosunku do naturalnych wartości słów kodowych<br />

Przykład:<br />

Dla kodu z nadmiarem bias = 129 (10) oblicz wartość słowa kodowego<br />

11111111 (BIAS=129) .<br />

11111111 (BIAS=129) = 2 7 + 2 6 + 2 5 + 2 4 + 2 3 + 2 2 + 2 1 + 2 0 - 129<br />

11111111 (BIAS=129) = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 - 129<br />

11111111 (BIAS=129) = 255 - 129<br />

11111111 (BIAS=129) = 126 (10) .<br />

Zadanie:<br />

Dla kodu z nadmiarem bias = 63 (10) oblicz wartość słowa kodowego<br />

00011111 (BIAS=63) .<br />

00011111 (BIAS=63) = ……………………………………………………………..<br />

00011111 (BIAS=63) = ……………………………………………………………..<br />

00011111 (BIAS=63) = ……………………..<br />

00011111 (BIAS=63) = ………… (10) .<br />

7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!