4. KODIRANJE, DETEKCIJA I KOREKCIJA...

17
4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKA Uobičajeno je da se interakcija između čoveka i računara ostvaruje preko tastature. Pri ovome, svaki pritisak neke dirke ima za posledicu generisanje određene informacije, kao što su alfanaumerički znaci (karakteri) ili upravljački znaci (tabulacija, CR, LF i dr.). Pre nego što računar počne sa obradom koda pritisnute dirke, pritisak dirke se mora konvertovati u neki pogodan oblik. Ovo se obično izvodi tako što se svakoj dirci dodeli specifičan kod. Jedan od tih kodova je ASCII kod o kome smo već govorili u glavi 3. Informacija može takođe da se unese u računar i preko spoljnih senzora (kakvi su termometri, merači pritiska), prekidača, raznih davača i drugih uređaja. Svaka od ovih informacija se mora konvertovati na određeni način u binarni oblik sa ciljem da se istom korektno manipuliše od strane računara. Sa druge strane, čoveku je svojstvena manipulacija za decimalnim brojevima, a digitalnim sistemima, kakvi su računari, manipulacija sa ekvivalentnim binarnim brojevima. To znači da, i pored toga što računari za izvođenje internih operacija koriste binarne brojeve, komunikacija sa spoljnim svetom se ostvaruje u decimalnom brojnom sistemu. Sa ciljem da se pojednostavi komunikacija, svaki decimalni broj se predstavlja jedinstvenom sekvencom binarnih cifara. Ovakav način prezentacije poznat je kao binarno kodiranje. S obzirom da postoji deset decimalnih cifara (0, 1, 2, ... , 9), za njihovu prezentaciju u binarnoj formi su potrebne četiri binarne cifre. Sa četiri cifre moguće su 16=2 4 kombinacija od kojih se koriste samo deset. Binarni kodovi se dele na težinske (ponderisane) i netežinske (neponderisane). Pored nabrojanih razloga, postoje i drugi koji se odnose na neminovnost uvođenja kodiranja. Između ostalih, značajniji su oni koji se tiču šifriranja podataka, kao i detekcije i korekcije grešaka koje se javljaju tokom prenosa podataka. U ovoj glavi ćemo opisati standardne tehnike kodiranja i ukazati na neke od metoda za korekciju i detekciju grešaka. 4.1. Težinski kodovi Kod težinskog koda svakoj binarnoj cifri se dodeljuje težina t. Zbir težina čija je vrednost 1 ekvivalentna je decimalnom broju predstavljen četvorobitnom kombinacijom. Drugim rečima, ako su d i (i = 0, . . .,3) cifarske vrednosti a t i predstavljaju odgovarajuće težine, tada je decimalni ekvivalent 4-bitnog binarnog broja dat kao d 3 t 3 + d 2 t 2 + d 1 t 1 + d 0 t 0 . Za slučaj kada je t 0 = 2 0 =1, t 1 = 2 1 =2, t 2 = 2 2 =4 i t 3 = 2 3 =8 dobija se kod koji se naziva BCD (Binary-Coded- Decimal) kod. U odnosu na standardnu binarnu prezentaciju kod BCD kodiranja svaku decimalnu cifru kodiramo binarno. Na primer, decimalni broj 14 kod standardne binarne prezentacije oblika je: 1110 a odgovarajućem BCD kodu ima oblik: { { 0001 0100 1 4 Obe cifre, 1 i 4, su kodirane binarno. U Tabeli 4.1 prikazana je forma nekoliko težinskih kodova. Tab. 4.1. Težinski binarni kodovi. decimalni broj 8421 7421 4221 8421 0 0000 0000 0000 0000 1 0001 0001 0001 0111 2 0010 0010 0010 0110 3 0011 0011 0011 0101 4 0100 0100 1000 0100 5 0101 0101 0111 1011 6 0110 0110 1100 1010 7 0111 1000 1101 1001 8 1000 1001 1110 1000 9 1001 1010 1111 1111

Transcript of 4. KODIRANJE, DETEKCIJA I KOREKCIJA...

Page 1: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKA

Uobičajeno je da se interakcija između čoveka i računara ostvaruje preko tastature. Pri ovome, svaki pritisak neke dirke ima za posledicu generisanje određene informacije, kao što su alfanaumerički znaci (karakteri) ili upravljački znaci (tabulacija, CR, LF i dr.). Pre nego što računar počne sa obradom koda pritisnute dirke, pritisak dirke se mora konvertovati u neki pogodan oblik. Ovo se obično izvodi tako što se svakoj dirci dodeli specifičan kod. Jedan od tih kodova je ASCII kod o kome smo već govorili u glavi 3. Informacija može takođe da se unese u računar i preko spoljnih senzora (kakvi su termometri, merači pritiska), prekidača, raznih davača i drugih uređaja. Svaka od ovih informacija se mora konvertovati na određeni način u binarni oblik sa ciljem da se istom korektno manipuliše od strane računara. Sa druge strane, čoveku je svojstvena manipulacija za decimalnim brojevima, a digitalnim sistemima, kakvi su računari, manipulacija sa ekvivalentnim binarnim brojevima. To znači da, i pored toga što računari za izvođenje internih operacija koriste binarne brojeve, komunikacija sa spoljnim svetom se ostvaruje u decimalnom brojnom sistemu. Sa ciljem da se pojednostavi komunikacija, svaki decimalni broj se predstavlja jedinstvenom sekvencom binarnih cifara. Ovakav način prezentacije poznat je kao binarno kodiranje. S obzirom da postoji deset decimalnih cifara (0, 1, 2, ... , 9), za njihovu prezentaciju u binarnoj formi su potrebne četiri binarne cifre. Sa četiri cifre moguće su 16=24 kombinacija od kojih se koriste samo deset. Binarni kodovi se dele na težinske (ponderisane) i netežinske (neponderisane). Pored nabrojanih razloga, postoje i drugi koji se odnose na neminovnost uvođenja kodiranja. Između ostalih, značajniji su oni koji se tiču šifriranja podataka, kao i detekcije i korekcije grešaka koje se javljaju tokom prenosa podataka. U ovoj glavi ćemo opisati standardne tehnike kodiranja i ukazati na neke od metoda za korekciju i detekciju grešaka.

4.1. Težinski kodovi

Kod težinskog koda svakoj binarnoj cifri se dodeljuje težina t. Zbir težina čija je vrednost 1 ekvivalentna je decimalnom broju predstavljen četvorobitnom kombinacijom. Drugim rečima, ako su di (i = 0, . . .,3) cifarske vrednosti a ti predstavljaju odgovarajuće težine, tada je decimalni ekvivalent 4-bitnog binarnog broja dat kao

d3⋅t3 + d2⋅t2 + d1⋅t1 + d0⋅t0. Za slučaj kada je t0 = 20 =1, t1 = 21 =2, t2 = 22 =4 i t3 = 23 =8 dobija se kod koji se naziva BCD (Binary-Coded-Decimal) kod. U odnosu na standardnu binarnu prezentaciju kod BCD kodiranja svaku decimalnu cifru kodiramo binarno. Na primer, decimalni broj 14 kod standardne binarne prezentacije oblika je:

1110 a odgovarajućem BCD kodu ima oblik:

{ {0001 01001 4

Obe cifre, 1 i 4, su kodirane binarno. U Tabeli 4.1 prikazana je forma nekoliko težinskih kodova.

Tab. 4.1. Težinski binarni kodovi. decimalni broj 8421 7421 4221 842 1

0 0000 0000 0000 0000 1 0001 0001 0001 0111 2 0010 0010 0010 0110 3 0011 0011 0011 0101 4 0100 0100 1000 0100 5 0101 0101 0111 1011 6 0110 0110 1100 1010 7 0111 1000 1101 1001 8 1000 1001 1110 1000 9 1001 1010 1111 1111

Page 2: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

RAČUNARSKI SISTEMI: Principi digitalnih sistema 36

Neki kodovi imaju osobinu da se devetični komplement kodne reči neke cifre (tj. 9-N ako je N cifra) dobija kao jedinični komplement njegove kodne prezentacije. Na primer, kod koda 4221 decimalnom broju 7 ekvivalentna kodna reč je 1101, devetični komplement broju 7 je 2 (=9-7) za koga odgovarajuća kodna reč je 0010 koja je jedinični komplement od 1101. Kodove koji imaju ovu osobinu zovemo autokomplementarnim kodovima. Kod 842 1 je takođe autokomplementarni kod. BCD kod je najčešće korišćeni težinski kod. Proces sabiranja BCD brojeva je isti kao i kod binarnih brojeva sve dok je decimalna suma 9 ili manja.

decimalni BCD 5 0101

+ 4 + 0100 9 1001

Za slučaj kada suma premašuje decimalni broj 9, rezultat se podešava dodavanjem decimalnog broja 6. Tako na primer, sabiranjem 8 i 6 imamo

decimalni BCD 8 1000

+ 6 + 0110 14 1110 (14 nije legalni BCD broj) + 0100 dodaje se 6 { {0001 0100

1 4

Drugi primer je sabiranje 9 i 7.

decimalni BCD 9 1001

+ 7 + 0111 16 { {0001 0000

1 0

I pored toga što rezultat čine dva važeća BCD broja, suma nije korektna. Ona se koriguje dodavanjem 6. Ovo je potrebno izvesti kada se javi prenos na mestu MS bita BCD broja na naredni viši BCD broj. Zbog toga je korektan rezultat

0001 0000 + 0110

{ {0001 01101 6

Nad BCD brojevima mogu se obavljati i druge aritmetičke operacije.

4.2. Netežinski kodovi

Kod netežinskih kodova ne postoji specifična težina koja se pridružuje ciframa kao što je to bio slučaj sa težinskim kodovima.

4.2.1. Kod ″višak 3″

Tipičan netežinski kod je kod ″višak 3″. Dobija se dodavanjem 3 decimalnom broju a zatim se vrši konverzija rezultata u 4-bitni binarni broj. U Tabeli 4.2 prikazana je prezentacija decimalnih cifara u kodu ″višak 3″. Kod ″višak 3″ je autokomplemenataran i koristan je kod aritmetičkih operacija. Na primer, analizirajmo slučaj sabiranja dve decimalne cifre čija je suma veća od 9. Ako se u konkretnom primeru koristi BCD kod neće se generisati bit prenosa. No, kada se koristi kod ″višak 3″ javiće se prenos ka narednoj cifri veće težine. Rezultantna suma se, nakon toga, podešava dodavanjem 3. Ilustracije radi, sabiranjem 6 i 8 imaćemo

Page 3: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

4. Kodiranje, detekcija i korekcija grešaka 37

Decimalni višak-3 8 1011

+ 6 1001 14 1 0100 prenos 0011 0011 na obe sume se dodaje 3 { {0100 0111

1 4

Tab. 4.2. Kod ″višak 3″.

decimalni višak-3 0 0011 1 0100 2 0101 3 0110 4 0111 5 1000 6 1001 7 1010 8 1011 9 1100

Ako kod koda ″višak 3″ saberemo dve decimalne cifre čija je suma 9 ili manja, sumu treba da podesimo tako što od nje oduzmemo 3. Konkretnije,

decimalno višak-3 5 1000

+ 3 + 0110 8 1110 0011 oduzima se 3 {1011

8

Kod operacije oduzimanja u kodu ″višak 3″, razlika se podešava kada joj se doda 3. Na primer:

decimalno višak-3 17 0100 1010

- 11 - 0100 0100 6 0000 0110 + 0011 dodaje se 3 {1001

6

4.2.2. Ciklični kod Drugi netežinski kod koji za predstavu decimalnih brojeva koristi netežinske binarne cifre je ciklični kod. Ciklične kodove karakteriše osobina da se uzastopne kodne reči razlikuju samo u jednoj bit poziciji. U Tabeli 4.3 prikazan je jedan tipičan ciklični kod.

Tab. 4.3. Ciklični kod. decimalni ciklični

0 0000 1 0001 2 0011 3 0010 4 0110 5 0100 6 1100 7 1110 8 1010 9 1000

Page 4: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

RAČUNARSKI SISTEMI: Principi digitalnih sistema 38

4.2.3. Grejov kod Drugi karakteristični tip cikličnog koda je reflektivni kod poznat pod imenom Grejov (Gray) kod, a prikazan je u Tabeli 4.4. Uočimo da su, sa izuzetkom MS bit pozicije, sve kolone "reflektivne" (simetrične) u odnosu na srednju tačku. Kod MS bit pozicije, u gornjoj polovini imamo sve nule a u donjoj sve jedinice. Decimalni broj se konvertuje u Grejov kod najpre konverzijom u binarni. Binarni broj se konvertuje u Grejov kod formiranjem sume po modulu 2 između tekuće cifre (počevši od LS cifre) i susedne cifre veće težine. Na primer, ako je binarna prezentacija decimalnog broja data u obliku

b3b2b1b0,

tada se odgovarajuća kodna reč iz Grejovog koda, G3G2G1G0, određuje kao

G3= b3 G2= b3 ⊕ b2 G1= b2 ⊕ b1 G0= b1 ⊕ b0

gde simbol ⊕ ukazuje na ExOR operaciju, tj sabiranje po modulu 2.

Tab. 4.4. Grejov kod. decimalni binarni Grejov

0 0000 0000 1 0001 0001 2 0010 0011 3 0011 0010 4 0100 0110 5 0101 0111 6 0110 0101 7 0111 0100 8 1000 1100 9 1001 1101

10 1010 1111 11 1011 1110 12 1100 1010 13 1101 1011 14 1110 1001 15 1111 1000

Ilustracije radi, analizirajmo konverziju decimalnog broja 11 u Grejov kod.

decimalni 11 b3 b2 b1 b0 1 0 1 1 ⊕ ⊕ ⊕ 1 1 1 0

Grejova kodna reč za decimalno 11 je oblika

G3 G2 G1 G0 1 1 1 0

Konverzija Grejove kodne reči u decimalni ekvivalent se izvodi sledećom sekvencom. Prvo se Grejov kod konvertuje u binarni a zatim se rezultujući binarni broj konvertuje u decimalni. Ilustracije radi, razmatrajmo konverziju broja 1110 iz Grejovog koda u decimalni.

Page 5: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

4. Kodiranje, detekcija i korekcija grešaka 39

G3 G2 G1 G0 1 1 1 0

b3 = G3=1 G2= b3 ⊕ b2=1=1 ⊕ b2 jer je b3 =1 ∴ b2=0

G1= b2 ⊕ b1=1=0 ⊕ b1 jer je b2 =0

∴ b1=1 G0= b1 ⊕ b0=0=1 ⊕ b0 jer je b1 =1

∴ b0=1 Prema tome, binarni ekvivalent Grejove kodne reči 1110 je 1011, što je ekvivalentno decimalnom broju 11.

4.3. Detekcija grešaka

U okviru digitalnog sistema, greška se javlja usled povremenih ili permanentnih fizičkih otkaza, a definiše se kao razlika između podataka na predajnoj i prijemnoj strani.

4.3.1. Definicija rastojanja Da bi razumeli kodove za detekciju (kasnije i korekciju) grešaka, razmotrimo koncept Bulovog (Boole) rastojanja, koji nameće potrebu za uvođenjem definicije pojma n-dimenzionalne kocke (kuba). Proizvoljni n-tobitni niz se može vizuelno predstaviti kao binarna n-kocka koja ima 2n čvorova, pri čemu svaki čvor odgovara pojedinom n-tobitnom nizu. U okviru kocke, dva čvora su povezana potegom ako i samo ako se nizovi koji odgovaraju tim čvorovima razlikuju na jednoj bit poziciji. Na slici 4.1a-d prikazane su četiri kocke dimenzije n=1, 2, 3 i 4, respektivno. U okviru n-kocke postoji veći broj m-subkocki pri čemu svaku subkocku čine 2m čvorova. Kod svake od m-subkocki, n-m bitova posmatranog čvora ima istu vrednost a ostatak od m-bitova prima vrednost ostalih 2m kombinacija binarnih vrednosti 0 i 1. Primera radi, na slici 4.1c, čvorovi 000, 001, 010, 011 formiraju 2-subkocku u okviru 3-kocke. Svaku subkocku karakteriše n-m bitova koji su isti za svaki čvor u okviru te subkocke. Ovakve subkocke se zbog toga mogu koristiti za specifikaciju n-tobitnog niza, koga čini n-m karakterističnih binarnih vrednosti, dok ostalih m-pozicija predstavljaju bitove koji nisu od važnosti. To znači da, bilo koja binarna vrednost koja se nalazi na poziciji bitova koji nisu od važnosti generiše nizove koji pripadaju toj subkocki. Koncepcijski posmatrano, n-kocka obezbeđuje geometrijsku interpretaciju koncepta rastojanja, koje ponekad zovemo Hemingovo (Hamming) rastojanje. Rastojanje između dva čvora odgovara najkraćem putu koji ih povezuje i jednako je broju bit pozicija u kojima se ove dve binarne vrednosti razlikuju. Rastojanje između dva susedna čvora je 1, a rastojanje između dva nesusedna čvora u okviru bilo koje 2-subkocke je uvek 2.

4.3.2. Kodovi za detekciju grešaka Bilo koji n-tobitni kod možemo posmatrati kao podskup koga čine svi mogući n-tobitni nizovi. Nizovi koji pripadaju tom podskupu zovu se kodne reči a one koji ne pripadaju nazivamo ne-kodne reči. Kod za detekciju grešaka karakteriše osobina da određeni tipovi podataka promene kodnu reč u ne-kodnu reč. To znači da, kod korektnog prenosa podataka primljeni niz predstavlja kodnu reč, a kod nekorektnog ne-kodnu reč.

Page 6: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

RAČUNARSKI SISTEMI: Principi digitalnih sistema 40

Sl. 4.1. n-kocka za n=1, 2, 3 i 4 (Napomena: kocke veće dimenzije je teže vizuelino predstaviti).

a) uobičajen kod b) kod parne parnosti c) kod neparne parnosti

Sl. 4.2. Tri različita načina kodiranja.

Page 7: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

4. Kodiranje, detekcija i korekcija grešaka 41

Da bi uspešno detektovali grešku na jednoj bit poziciji, tj. promenu vrednosti bita sa 1 na 0 ili sa 0 na 1, kodne reči u kodu moraju da imaju rastojanje ≥ 2. Drugim rečima, izbor kodne reči mora biti takav da u odgovarajućoj n-kocki ne postoje dva susedna čvora koja predstavljaju kodne reči. Primera radi, kako je prikazano na slici 4.2, neka 3-bitni kod čine sledeće kodne reči: 000, 011, 100 i 110. S obzirom da greška na jednoj bit poziciji može da promeni kodnu reč 100 u kodnu reč 000 ili 110, to znači da ovaj kod ne može detektovati sve greške na jednoj bit poziciji. Ako sada iz skupa kodnih reči izostavimo 100 a umesto toga dodamo 101 tada je moguće generisati kod koji ima mogućnost da detektuje sve greške na jednoj bit poziciji. Kao što se vidi sa slike 4.2b, sve kodne reči se nalaze na rastojanju 2, pa zbog toga usled greške na jednoj bit poziciji ne može da dođe do promene jedne kodne reči u drugu.

4.3.3. Kod za proveru parnosti U opštem slučaju, da bi se u proizvoljnom kodu očuvalo rastojanje 2 potrebno je izjednačiti broj kodnih i nekodnih reči. Ovaj cilj se ostvaruje na taj način što se podatku koga čini n informacionoh bitova doda jedan bit i formira (n+1)-bitni kod. Bit koji se dodaje zove se bit parnosti. Vrednost bita parnosti može biti postavljena tako da je broj jedinica u kodu paran, pa tada taj kod zovemo kod parne parnosti. Sa druge strane, kod kod koga je ukupan broj jedinica neparan nazivamo kod neparne parnosti. Na slici 4.2b prikazan je n-bitni kod parne parnosti koga čine sledeće četiri reči: 000, 011, 101, 110. Kod ovog koda dva MS bita čine informaciju a LS bit je bit parnosti. Alternativno, na slici 4.2c prikazan je 3-bitni kod neparne parnosti koji takođe sadrži četiri kodne reči.

4.3.4. M_izlaza_od_N kodovi Druga klasa kodova, nazvana m_izlaza_od_n (m_out_of_n) kodovi, takođe može da detektuje grešku na jednoj bit poziciji. Kod koda m_izlaza_od_n, sve važeće kodne reči imaju n-bitova, pri tome je m-bitova postavljeno na 1.

Tab. 4.5. Kod 2_izlaza_od_5. decimalni 2-izlaza-od-5

težina 63210 0 01001 1 00011 2 00101 3 00110 4 01010 5 01100 6 10001 7 10010 8 10100 9 11000

Za predstavljanje deset decimalnih cifara pogodan je kod 2_izlaza_od_5, s obzirom da postoji tačno 10 kombinacija sa po dva bita. Ovaj kod je poznat kao (C 5 ) a karakteriše se time da za svih deset kodnih reči nije moguće odrediti korektne težine. U Tabeli 4.5 prikazan je kod 2_izlaza_od_5 sa naznačenim težinama. Svaka greška koja uzrokuje prelaz 0→1 ili 1→0 rezultiraće u pojavi ne-kodne reči, pa se shodno tome ta greška može detektovati. Greške na dve bit pozicije tipa dva-prelaza sa 1→0 ili 0→1 se mogu detektovati, ali dvostruke greške od kojih jedna predstavlja prelaza sa 0→1 a druga sa 1→0 nije moguće detektovati.

2

4.3.5. Bikvinari kodovi Ovo je 7-bitni težinski kod. Sastoji se od dva dela. Prvi deo je težinski kod 1_izlaz_od_2, a drugi deo je takođe težinski kod 1_izlaz_od-5. U Tabeli 4.6 prikazan je bikvinari (biquinary) kod. Svaku jednostruku grešku je lako detektovati ovim kodom. Višestruke greške se takođe mogu detektovati.

Page 8: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

RAČUNARSKI SISTEMI: Principi digitalnih sistema 42

Tab. 4.6. Bikvinari kod. 50 43210 0 01 00001 1 01 00010 2 01 00100 3 01 01000 4 01 10000 5 10 00001 6 10 00010 7 10 00100 8 10 01000 9 10 10000

4.3.6. Kodovi sa ostatkom Kodovi sa ostatkom (residue codes) zasnivaju se na aritmetici po modulu. Na primer, ako podelimo neki broj N sa drugim brojem p (nazvan moduo) dobijamo količnik i ostatak ili rezidijum R, a operacija je oblika

R(N)=N mod p.

Tab. 4.7. Ostatak brojeva. broj N ostatak za moduo

2 3 5 7 0 0 0 0 0 1 1 1 1 1 2 0 2 2 2 3 1 0 3 3 4 0 1 4 4 5 1 2 0 5 6 0 0 1 6 7 1 1 2 0 8 0 2 3 1 9 1 0 4 2

10 0 1 0 3 11 1 2 1 4 12 0 0 2 5 13 1 1 3 6 14 0 2 4 0 15 1 0 0 1 16 0 1 1 2 17 1 2 2 3 18 0 0 3 4 19 1 1 4 5 20 0 2 0 6

Ostaci broja na jedinstven način identifikuju taj broj i oni se mogu koristiti kao kodovi za predstavljanje tih brojeva. Ilustracije radi, u Tabeli 4.7 prikazani su brojevi od 0 do 20 i njihovi ostaci za slučaj kada je moduo 2, 3, 5 i 7. Nad brojevima sa ostatkom moguće je obavljati operacije. Na primer, kod operacije sabiranja vrši se samo sabiranje odgovarajućih ostataka u pripadajućem brojnom sistemu (što odgovara operaciji sabiranja po modulu p), a pri tome se ignorišu prenosi.

2 3 5 7 moduo 13 ≡ 1 1 3 6 7 ≡ 1 1 2 0 ostaci po modulu 13+7=20 ≡ 0 2 0 6

2 3 5 7 moduo 9 ≡ 1 0 4 2 8 ≡ 0 2 3 1 ostaci po modulu 9+8=17 ≡ 1 2 2 3

Page 9: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

4. Kodiranje, detekcija i korekcija grešaka 43

Množenje brojeva sa ostatkom se takođe obavlja veoma jednostavno na taj način što se množe (po modulu p) odgovarajući ostaci, pri čemu se ponovo ignorišu prenosi. Na primer,

2 3 5 7 moduo 3 ≡ 1 0 3 3 6 ≡ 0 0 1 6 ostaci po modulu 3*6=18 ≡ 0 0 3 4

2 3 5 7 moduo 5 ≡ 1 2 0 5 4 ≡ 0 1 4 4 ostaci po modulu 5*4=20 ≡ 0 2 0 6

Imajući u vidu da je operacija množenja brojeva sa ostatkom izuzetno brza, ova tehnika se koristi kao osnova za realizaciju brzih hardverskih množača kod digitalnih FIR filtara. Ova ideja se takođe koristi kao kod aritmetike-za-proveru tipa "casting out of nines". Tako na primer,

N1 = 256 R(N1) = 256 mod 9 = 4 N2 = 345 R(N2) = 345 mod 9 = 3 N1+N2 = 601 R(N1+N2) = 601 mod 9 = 7

Na ovaj način, ako se obavlja odgovarajuća aritmetika po modulu nad brojevima sa ostatkom, je moguće vršiti proveru korektnosti rezultata aritmetičkih operacija. Ako se koristi moduo p=r-1, gde je r osnova brojnog sistema, izračunavanje zasnovano na aritmetici sa ostacima se može znatno pojednostaviti. U konkretnom slučaju imaćemo

R(N1) = (2+5+6) mod 9 = (13) mod 9 = 4 R(N2) = (3+4+5) mod 9 = (12) mod 9 = 3

Uočimo da ako je izbor modula broja takav da je on jednak brojnoj osnovi, tada je ostatak jednak zadnjoj cifri tog broja. Tehnike koje se zasnivaju na proveri ostatka standardno se ugrađuju u hardver sa ciljem da se detektuju greške kod aritmetičkih operacija. Kodovi sa ostatkom se mogu koristiti za proveru podataka. U praksi se koriste dve metode. Prva se sastoji u sledećem: za izabrani moduo određuje se ostatak broja koji se konvertuje u cifre za proveru koje se pridružuju početnom broju. Tako na primer,

N = 101 110 R(N) = N mod 3 = 46 mod 3 = 01 pa je kodna reč oblika:

kodna reč = { 101110 01N R(N)

123

Drugi metod se zasniva na sledećoj tehnici: Množi se broj koga treba kodirati odgovarajućim modulom m, pri čemu rezultantni broj mN ima ostatak jednak nuli. Na primer, za

N = 101 110, m = 3 imaćemo

kodna reč = 10001010 Naglasimo da prvi metod obezbeđuje da se sa bitovima provere i brojevima manipuliše odvojeno, dok drugi metod karakterišu osobine samoprovere (self-checking).

4.4. Kodovi za korekciju i detekciju grešaka

4.4.1. Bergerovi kodovi Bergerovi kodovi se koriste za projektovanje logičkih kola koja mogu detektovati svoje sopstvene greške, ili tzv. samoproveravajućih kola (self-checking circuits). Ovi kodovi se formiraju na sledeći način: 1. formira se binarni broj koji odgovara broju jedinica u podatku 2. formira se komplement svakog bita u ovom broju 3. rezultujući binarni broj sastoji se od bitova provere koji se pridružuju bitovima podataka sa ciljem da formiraju

kodnu reč. Ako postoji n bitova podataka, tada je za formiranje Bergerove kodne reči potrebno K=⎡log2 (n+1)⎤ bitova provere.

Page 10: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

RAČUNARSKI SISTEMI: Principi digitalnih sistema 44

Na primer, ako je N=101011, K = ⎡log2 (6+1)⎤ = 3, pa će shodno tome Bergerova kodna reč imati 9 (=6+3) bitova. Tri bita provere se određuju na sledeći način:

Broj jedinica u bitovima podataka = 4 Binarni ekvivalenat od 4 = 100 Komplement od 100 je 011 Kodna reč = 101011 011 bitovi bitovi podataka provere

Ukupan broj bitova provere koji se pridružuje n-tobitnom podatku zadaje se kao broj koji može imati maksimalnu vrednost 2k-1. Primera radi, neka je N=1000110, pa imamo da je K=⎡log2 (7+1)⎤ = 3. Kako je ukupan broj bitova u N jednak 7 (=2k-1), bitovi provere se zadaju binarnim ekvivalentom broja nula prisutnom u bitovima podataka. Konkretno u broju N ima četri nule pa je vrednost bitova provere 100 (=4). Shodno tome

kodna reč = 1000110 100 bitovi bitovi podataka provere

Da bi ukazali na mogućnost detekcije greške kod Bergerovog koda usvojimo da postoje dva pogrešna bita u delu bitova podataka kodne reči. Zbog ovih grešaka kodna reč će biti oblika

1011110 100 bitovi bitovi podataka provere

Kao što se može uočiti, postoje dve nule u bitovima podataka, pa će zbog toga bitovi provere sada biti 010. S obzirom da se novi bitovi provere razlikuju od početnih bitova provere (=100) indiciraće se greška. Ukažimo da ako se u polaznoj kodnoj reči jedan bit promeni sa 1 na 0 a drugi sa 0 na 1, tada do indikacije greške neće doći. Na primer, ako kodna reč 1000110100 ima dva pogrešna bita kao što je to u slučaju reči

1010010100, tada neće doći do promene u bitovima provere, pa saglasno tome detekcija greške nije moguća. Zbog toga su Bergerovi kodovi pogodni za detekciju grešaka na jednoj bit poziciji i grešaka kod kojih se bitovi menjaju sa 0 na 1 ili sa 1 na 0, ali ne kada se istovremeno jave oba tipa greške.

4.5. Kodovi za korekciju

U suštini, da bi korigovali grešku na jednoj bit poziciji potrebno je više od jednog bita parnosti, jer jednim bitom može samo da se ukaže da li je cela primljena kodna reč korektna ili ne. Da bi se dobila preciznija informacija o tome potrebno je dodatnih log2n bitova parnosti za svaki od n informacionih bitova. Na ovaj način moguće je tačno odrediti koji je informacioni bit pogrešan. Nakon toga sledi korekcija koja se sprovodi promenom vrednosti te bit pozicije sa 1 na 0 ili sa 0 na 1. Sa ciljem da ukažemo kako se vrši korekcija analizirajmo slučaj da se informacioni bit 0 kodira kao 000 a informacioni bit 1 kao 111. Kao što se vidi sa slike 4.3, za ovaj 3-bitni kod minimalno kodno rastojanje iznosi 3. Ako se u toku prenosa javi greška na jednoj bit poziciji tada će doći do promene kodne reči u nekodnu reč. U konkretnom slučaju, u odnosu na kodnu reč na prednjoj strani, ne-kodna reč biće na rastojanju 1 u odnosu na drugu kodnu reč koja je na rastojanju 2. Na osnovu ovoga lako je identifikovati pogrešan bit i promeniti primljenu ne-kodnu reč u kodnu.

Page 11: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

4. Kodiranje, detekcija i korekcija grešaka 45

111101

100

001

000 010

110

011

Sl. 4.3. Primer koda za korekciju greške.

Primera radi, ako je predmet informacija 000, greška na jednoj bit poziciji može da primeni predajnu informaciju na 100, 010 ili 001. Kada se primi ne-kodna reč sa jednom jedinicom ona se menja u 000. Alternativno, ako se primi koda reč sa dve jedinice ona se menja u 111. Ovakvim načinom kodiranja moguće je detektovati i korigovati grešku u prenosu samo na jednoj bit poziciji, ili samo detektovati a ne i korigovati dvostruke greške (tj. greške na dve bit pozicije). Iz literature su poznati i kodovi za korekciju greška koji omogućavaju detekciju i korekciju višestrukih grešaka. U principu, kodu je potrebno minimalno rastojanje od 2x+1 da bi mogao da se iskoristi za korekciju x grešaka na različitim bit pozicijama. Kod primera sa slike 4.3 x=1. Alternativno moguće je koristiti kod minimalnog rastojanja 2x+y+1 radi korekcije do x grešaka na različitim bit pozicijama i za detekciju dodatnih y grešaka.

4.5.1. Hemingovi kodovi Najčešći tipovi kodova za korekciju grešaka kod RAM-ova su Hemingovi kodovi. Kod Hemingovog koda n-tobitnoj reči dodaje se k bitova parnosti i formira nova reč od m=n+k bitova. Bitovi u sekvenci su numerisani počev od 1 do m. Bitovi parnosti se uvek nalaze na pozicijama 1, 2, 4, 8, ... , 2m-1, tj. na bit pozicijama stepena dva. Ostali bitovi su bitovi podataka. Kod se može koristiti za reč proizvoljne dužine. U opštem slučaju, vrednost svakog bita parnosti se bira tako da je ukupan broj jedinica u specifičnoj grupi bit pozicija paran, a grupe su tako odabrane da se informacioni bit ne pokriva od strane iste kombinacije bitova parnosti. Preciznije kazano, svaki bit parnosti na poziciji 2p, 0 ≤ p ≤ m-1 prati odgovarajuća grupa informacionih bitova koja uključuje sve one bitove na pozicijama čija binarna predstava ima 1 na poziciji 2p. Ukazaćemo na karakteristike Hemingovog koda na primeru 8-bitne reči 1100 0100. Uvode se četiri bita parnosti, pa je 12 bitova uređeno na sledeći način:

Bit pozicija 1 2 3 4 5 6 7 8 9 10 11 12 P1 P2 1 P4 1 0 0 P8 0 1 0 0

Svaki bit parnosti se izračunava na sledeći način:

P1=ExOR bitova (3, 5, 7, 9, 11) = 1 ⊕ 1 ⊕ 0 ⊕ 0 ⊕ 0 = 0 P2=ExOR bitova (3, 6, 7, 10, 11) = 1 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 0 = 0 P4=ExOR bitova (5, 6, 7, 12) = 1 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 0 = 0 P8=ExOR bitova (9, 10, 11, 12) = 0 ⊕ 1 ⊕ 0 ⊕ 0 = 0

gde ExOR predstavlja logičku isključivo ILI operaciju. Zamenom vrednosti za P1, P2, P4 i P8 dobijamo sledeću 12-tobitnu informaciju.

Bit pozicija 1 2 3 4 5 6 7 8 9 10 11 12 0 0 1 1 1 0 0 1 0 1 0 0

12-bitna informacija se nakon toga, recimo, upisuje u memoriju. Kada se 12-bitna informacija pročita iz memorije ponovo se vrši provera radi grešaka. Proverava se parnost reči nad istom grupom bitova uključujući i bit parnosti. Sva četiri bita se proveravaju na sledeći način:

C1 = ExOR bitova (1, 3, 5, 7, 9, 11) C2 = ExOR bitova (2, 3, 6, 7, 10, 11) C4 = ExOR bitova (4, 5, 6, 7, 12) C8 = ExOR bitova (8, 9, 10, 11, 12)

Page 12: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

RAČUNARSKI SISTEMI: Principi digitalnih sistema 46

S obzirom da su u konkretnom slučaju bitovi upisani sa parnom parnošću, vrednost rezultata C=C8C4C2C1 = 0000 ukazuje da do greške nije došlo. U slučaju kada se javi jednostruka greška nakon provere dobićemo C≠0 pa je tada na osnovu sadržaja 4-bitnog binarnog broja koga formiraju bitovi provere moguće tačno odrediti pogrešnu bit poziciju. Primera radi, posmatrajmo sledeća tri slučaja.

Bit pozicija 1 2 3 4 5 6 7 8 9 10 11 12 0 0 1 1 1 0 0 1 0 1 0 0 nema greške 1 0 1 1 1 0 0 1 0 1 0 0 greška u bitu 1 0 0 1 1 0 0 0 1 0 1 0 0 greška u bitu 5

U prvom slučaju ne postoji greška, u drugom došlo je do promene bit pozicije 1 sa 0 na 1, a u trećem do promene bit pozicije 5 sa 1 na 0. Na osnovu sadržaja bitova C8, C4, C2, i C1 moguće je tačno odrediti mesto gde se javila greška, shodno sledećoj tabeli

C8 C4 C2 C1 komentar 0 0 0 0 greška ne postoji 0 0 0 1 greška na bit poziciji 1 0 1 0 1 greška na bit poziciji 5

Greška se može korigovati komplementiranjem vrednosti odgovarajućeg bita. Treba istaći da se greška može ravnopravno javiti kako u bitovima za podatke tako i u bitovima za proveru parnosti.

Primer 4.1.

Analizirajmo sledeće dvobitne kodne reči

a 0 0

: rastojanje 1

b rastojanje 1 0 1

: rastojanje 2 rastojanje 2

c rastojanje 1 1 0

: rastojanje 1

d 1 1

Minimalno rastojanje kodnih reči je 1. Greška u kodnoj reči rezultiraće prelaskom u drugu kodnu reč. Primera radi, neka je prvi bit u kodnoj reči a pogrešan (bit se promenio sa 0 na 1); to znači da se kodna reč a konvertuje u kodnu reč c. Kod kodova koji imaju minimalno rastojanje 2, jednostruka greška u kodnoj reči dovešće do konverzije u ne-kodnu reč, zbog toga što se novodobijena reč neće slagati sa ostalim kodnim rečima. Ipak, dve ili veći broj grešaka na bit pozicijama može konvertovati kodnu reč u važeću kodnu reč, pa se zbog toga ove greške ne mogu detektovati. Na osnovu prethodnog možemo zakljućiti sledeće: Kodovi sa minimalnom Hemingovom distancom 2 predstavljaju kodove koji mogu detektovati jednostruke greške.

Hemingov kod se može koristiti za podatke bilo koje dužine. U opštem slučaju, za k bitova provere i n bitova podataka, ukupan broj bitova, n + k, koji se u reči može kodirati je najviše 2k - 1. Drugim rečima, mora da se sačuva odnos n + k = 2k - 1. Na osnovu ovog odnosa se dobija da je broj bitova u reči n ≤ 2k – 1 - k. Na primer, za k = 3, ukupan broj bitova u kodnoj reči iznosi n + k = 23 - 1 = 7, što daje n ≤ 7 - 3 = 4. Za k = 4, imamo n + k ≤ 15 što daje n ≤ 11. To znači da reč podatka može da ima manje od 11 bitova, ali mora da ima najmanje 5 bitova; ako ne, potrebna su samo tri bita provere. Osnovni Hemingov kod može da detektuje i koriguje jednostruku grešku. Neke višestruke greške se mogu detektovati, ali se ne mogu ispravno korigovati kao što je to bio slučaj sa jednostrukim greškama. Dodavanjem još jednog bita parnosti kodnoj reči Hemingov kod se može koristiti za korekciju jednostrukih grešaka a detekciju dvostrukih. Uvođenjem dodatnog bita parnosti, prethodna 12-tobitno kodirana reč postaje 001110010 100P13, gde P13 predstavlja ExOR operaciju nad ostalih 12 bitova. Na ovaj način se dobija 13-bitna reč 001110010 001 (parna parnost). Kada se ova reč čita iz memorije, bitovi provere, a takođe i bit parnosti P, se određuju nad svih 13 bitova. Ako je P=0, parnost je korektna (parna parnost), ali ako je P=1 parnost kod svih 13 bitova nije korektna. Pri ovome se mogu javiti sledeća četiri slučaja:

Page 13: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

4. Kodiranje, detekcija i korekcija grešaka 47

a) ako je C=0 i P=0 ne postoji greška b) ako je C≠0 i P=1 postoji jednostruka greška koja se može korigovati c) ako je C≠0 i P=0 javila se dvostruka greška koja je detektovana ali se ne može korigovati d) ako je C=0 i P=1 javila se greška na bit poziciji P13.

Primer 4.2.

Analizirajmo sledeće četverobitne kodne reči

a 0001

b 0110

c 1010

d 1111

Minimalno rastojanje 2 u kodnoj reči dobija se dodavanjem dva ekstra bita kodnoj reči u Primeru 4.1. Pretpostavimo da se krajnji desni bit kodne reči b promenio na 1. Rezultatna reč će biti sada 0111, a ona se razlikuje u odnosu na ostale kodne reči. Na ovaj način detektuje se pojava greške. Sa druge strane, ako su prvi i treći bit u kodnoj reči c pogrešni, rezultujuća reč postaće d a to znači da se greška na dve bit pozicije ne može detektovati.

Tab. 4.8. Odnos između Hemingove distance i mogućnosti za detekciju/korekciju grešaka.

Hemingova Mogućnost

distanca Detekcije Korekcije

1 0 0

2 1 0

3 1 1

2 0

4 3 0

2 1

5 4 0

3 1

2 2

Kod kodova kod kojih je minimalno rastojanje 3, sve kodne reči se razlikuju najmanje za tri bit pozicije. Jednostruka greška u kodnoj reči rezultiraće u ne-kodnu reč, tj. oblik koji ima rastojanje 1 od jedne kodne reči, a rastojanje 2 ili više od ostalih. Kod sledećih kodnih reči minimalno rastojanje je 3:

a 00111

b 11010

c 01001

d 10100

Ako uzmemo da je drugi bit u kodnoj reči a pogrešan, tada će se kodna reč a promeniti u 00101. S obzirom da 00101 nije kodna reč biće ukazano na grešku. Na sličan, način dvobitna greška rezultira u ne-kodnu reč. U najvećem broju slučajeva usvaja se da će se javiti jednostruka greška, tako da se kodnim rastojanjem 3 ovaj tip greške može korigovati i detektovati.

Primer 4.3.

Ukazaćemo na princip korekcije jednostruke greške (tj. greške na jednoj bit poziciji) kod n-tobitne reči. Ključni faktor korekcije je mogućnost indentifikacije bit lokacije na kojoj je došlo do greške. Sa ciljem da se ostvari ovo potrebno je n-tobitnoj reči pridružiti k bitova provere, ck, ..., c2, c1 pomoću kojih se na jedinstven

Page 14: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

RAČUNARSKI SISTEMI: Principi digitalnih sistema 48

način indentifikuje koji je od (n+k) - bitova modifikovan (pogrešan), ili pak ne postoji greška. k bitova provere za korekciju jednostruke greške određuje se na osnovu relacije, poznate kao Hemingova relacija,

2k = m + k +1, gde je m broj bitova podataka a k broj bitova provere. Rezultujući kod je poznat kao Hemingov kod. Primera radi analizirajmo Hemingov kod za informacione bitove dužine 4 (d4 d3 d2 d1), tj. m = 4. Na osnovu Hemingove relacije za m = 4 dobijamo k = 3. To znači da se tri bita provere pridružuju 4-bitnim podacima sa ciljem da kod bude u stanju da detektuje jednostruku grešku. Ako se bitovi provere označe sa c1, c2 i c3, tada se pozicije bita u kodu označavaju brojevima od 1 do 7

bit pozicija 7 6 5 4 3 2 1

oznaka bita d4 d3 d2 c3 d1 c2 c1

Bit pozicije koje odgovaraju lokacijama stepena 2 koriste se kao bitovi provere c1, c2 i c3. To znači da se pozicija 20 (=1) dodeljuje bitu c1, pozicija 21 (=2) dodeljuje bitu provere c2, a pozicija 22 (=4), bitu provere c3. Ostale bit pozicije odgovaraju bitovima podataka d1 do d4. Bit c1 predstavlja parnu parnost za pozicije 1, 3, 5, 7, a na sličan način, c2 i c3 formiraju parnu parnost za pozicije 2, 3, 6, 7 i 4, 5, 6, 7, respektivno.

Primer 4.4.

Konstruisaćemo Hemingov kod za informacione bitove d4d3d2d1=1110. Bitovi provere se generišu na sledeći način

7 6 5 4 3 2 1

d4 d3 d2 c3 d1 c2 c1

1 1 1 0 informacioni bitovi

1 1 0 0 generisanje c1

1 1 0 0 generisanje c1

1 1 1 1 generisanje c1

1 1 1 1 0 0 0 kodna reč

Primer 4.5.

Usvojimo da se bit pozicija 5 u kodnoj reči 1111000 promenila sa 1 na 0. Zbog toga se menja i kodna reč u

7 6 5 4 3 2 1

1 1 0 1 0 0 0 ↑promena vrednosti bita Binarni broj koji u kodnoj reči odgovara bit poziciji kod koje je došlo do greške može se izdvojiti na sledeći način

7 6 5 4 3 2 1

1 1 0 1 0 0 0 kodna reč kod koje je došlo do greške

1 0 0 0 neparna (netačna) parnost

1 1 0 0 parna (tačna) parnost

1 1 0 1 neparna (netačna) parnost Shodno prethodnom bitu, pozicija kod koje je došlo do greške je

22 21 20

1 0 1 tj. pozicija 5

Greška se može korigovati promenom bita na ovoj poziciji, tj. d2 menja vrednost sa 0 na 1.

Page 15: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

4. Kodiranje, detekcija i korekcija grešaka 49

Za slučaj da je rezultantni binarni broj kod provere parnosti jednak nuli (000), to znači da ne postoji greška ni na jednoj bit poziciji u kodnoj reči (Tabela 4.9).

Tab. 4.9. Generisanje bitova provere kada je broj informacionih bitova 4 a greška ne postoji.

7 6 5 4 3 2 1

d4 d3 d2 c3 d1 c2 c1

↑ ↑ ↑ ↑ parna parnost

↑ ↑ ↑ ↑ parna parnost

↑ ↑ ↑ ↑ parna parnost

Primer 4.6.

Kodiraj informacione bitove d8d7d6d5d4d3d2d1=10010111. Za osam informacionih bitova, potrebna su četiri bita provere, c1c2c3c4. Kodirani podatak biće dužine 12 bitova. Bitu provere c1 se dodeljuje vrednost tako da parnost za bitove na pozicijama 1, 3, 5, 7, 9 i 11 bude parna. Na sličan način c2, c3 i c4 se biraju tako da obezbede parnu parnost za bitove na pozicijama (2, 3, 6, 7, 10, 11), (4, 5, 6, 7, 12) i (8, 9, 10, 11, 12) respektivno.

12 11 10 9 8 7 6 5 4 3 2 1

d8 d7 d 6 d5 c4 d4 d3 d2 c3 d1 c2 c1

↑ ↑ ↑ ↑ ↑ parna (korektna) panost

↑ ↑ ↑ ↑ ↑ ↑ parna (korektna) panost

↑ ↑ ↑ ↑ ↑ parna (korektna) panost

↑ ↑ ↑ ↑ ↑ parna (korektna) panost Bitovi provere za d8d7d6d5d4d3d2d1=10010111 se izdvajaju na sledeći način c1 = parna parnost bitova d7d5d4d2d1 (=01011)=1 c2 = parna parnost bitova d7d6d4d3d1 (=00011)=0 c3 = parna parnost bitova d8d4d3d2 (=1011)=1 c4 = parna parnost bitova d8d7d6d5 (=1001)=0 Shodno prethodnom, rezultujuća kodna reč biće

100100111101 Usvojimo sada da je c1 (tj. bit 1 u kodnoj reči) promenio vrednost sa 1 na 0. Binarni broj koji identifikuje pogrešan bit se izdvaja na sledeći način

12 11 10 9 8 7 6 5 4 3 2 1

d8 d7 d6 d5 c4 d4 d3 d2 c3 d1 c2 c1

1 0 0 1 0 0 1 1 1 1 0 0

↑ ↑ ↑ ↑ ↑ ↑ neparna (nekorektna) parnost

↑ ↑ ↑ ↑ ↑ ↑ parna (korektna) parnost

↑ ↑ ↑ ↑ ↑ parna (korektna) parnost

↑ ↑ ↑ ↑ ↑ parna (korektna) parnost

Pozicija pogrešnog bita je

23 22 21 20

0 0 0 1

Bit pozicija 1, tj. bit c1, mora da se invertuje.

Page 16: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

RAČUNARSKI SISTEMI: Principi digitalnih sistema 50

Primer 4.7.

Ako je Hemingov kod distance 3, bilo kakav pokušaj da se izvrši korekcija dvostruke greške rezultiraće pogrešnoj korekciji. Neka su u kodnoj reči iz Primera 4.6 bit 4 (c3) i bit 7 (d4) pogrešni, što dovodi do promene kodne reči

12 11 10 9 8 7 6 5 4 3 2 1

d8 d7 d6 d5 c4 d4 d3 d2 c3 d1 c2 c1

1 0 0 1 0 1 1 1 0 1 0 1

↑ ↑ ↑ ↑ ↑ ↑ neparna (nekorektna) parnost

↑ ↑ ↑ ↑ ↑ ↑ neparna (nekorektna) parnost

↑ ↑ ↑ ↑ ↑ parna (korektna) parnost

↑ ↑ ↑ ↑ ↑ parna (korektna) parnost

Lokacija pogrešnog bita se indentifikuje na sledeći način: 23 22 21 20

0 0 0 1 → pozicija 3, tj. bit d1

Očigledno je da je ovo pogrešan zaključak, jer smo usvojili da su bitovi c3 i d4 pogrešni.

Primer 4.8.

Neka je broj informacionih bitova 4 a koristi se Hemingovo kodiranje. Pokaži sve kodne reči za minimalnu Hemingovu distancu 3 i 4. (Hemingov kod distance 3 jednostavno se modifikuje u kod distance 4 dodavanjem još jednog bita parnosti odabranoj vrednosti tako da je broj jedinica na svim bit pozicijama, uključujući i novouvedenu, paran). Hemingovi kodovi distance 3 i distance 4 uobičajeno se koriste za detekciju i korekciju grešaka kod memorijskog podsistema računara. Sa aspekta povećanja pouzdanosti sistema, Hemingovi kodovi su po ceni efikasni, jer broj bitova parnosti koji se koristi za korekciju memorijskih grešaka logaritamski raste sa povećanjem obima reči memorije.

minimalna kodna distanca 3 minimalna kodna distanca 4

informacioni bitovi

bitovi parnosti informacioni bitovi

parnosti bitovi

0000 000 0000 0000

0001 011 0001 0111

0010 101 0010 1011

0011 110 0011 1100

0100 110 0100 1101

0101 101 0101 1010

0110 011 0110 0110

0111 000 0111 0001

1000 111 1000 1110

1001 100 1001 1001

1010 010 1010 0101

1011 001 1011 0010

1100 001 1100 0011

1101 010 1101 0100

1110 100 1110 1000

1111 111 1111 1111

Page 17: 4. KODIRANJE, DETEKCIJA I KOREKCIJA GREŠAKAstarisajt.elfak.ni.ac.rs/phptest/new/html/informacije/vesti/resenja... · svojstvena manipulacija za decimalnim brojevima, a digitalnim

4. Kodiranje, detekcija i korekcija grešaka 51

4.6. Problemi

1.Dati su sledeći težinski kodovi: a) (8,4,-3,-2), b) (7,5,3,-6), c) (6,2,2,1). Odrediti da li je neki od njih autokomplementaran. 2. Predstaviti decimalne brojeve 535 i 637 u a) BCD kodu, b) kodu višak 3. Saberi kodirane brojeve i proveri da li je suma korektno kodirana. 3. Oduzmi 423 od 721 usvajajući da su brojevi predstavljeni u kodu višak 3. 4. Odredi broj kodnih reči kod kodirajuće šeme m-out-of-n, kada je a) n=5, m=2; b) n=6, m=3; c) n=8, m=1. 5. Izračunati ostatak za sledeće decimalne brojeve koristeći moduo 9: a) 1472943, b) 236798, c) 124011. 6. Napiši kodne reči za kod 2_out_of_5 i izvedi Bergerovu kodnu reč za svaki rezultujući oblik. 7. Kodiraj deset decimalnih cifara koristeći m_out_of_n kod, gde je n = 2m - 1. Za kodiranje koristiti minimalan broj bitova. 8. Neka je dat 10-bitni Bergerov kod. Za svaki od sledećih brojeva odrediti da li postoji ili ne pogrešan bit (tri zadnja bita u svakoj kodnoj reči su bitovi provere). a) 0100100011, b) 1111000100, c) 0101111111, d) 1000000010. 9. Sedmobitni Hemingov kod čine 4 informaciona bita i 3 bita provere. Za svaku od sledećih 7-bitno kodiranih reči odrediti da li postoji pogrešna bit pozicija i identifikuj je. a) 1110010, b) 0111100, c) 0101001, d) 1000001. 10. Predstavi decimalni broj 9876 u: a) kodu 8421, b) kodu 2421, c) kodu višak 3, d) bikvinari kodu. 11. Odredi koliko različitih subkocki sledećih dimenzija može imati bilo koja n-kocka. a) n-1, b) m. 12. Koliko grešaka se može detektovati kodom čija je minimalna distanca d ? 13. Definiši distancu 3 kod Hemingovog koda ako je informacija oblika 11.