Coduri corectoare de erori (1)

Download Report

Transcript Coduri corectoare de erori (1)

Coduri corectoare de erori (1)
-pe lângă fiecare bloc de date trimis se include suficientă
informaţie redundantă pentru ca receptorul să poată deduce care
a fost caracterul transmis – coduri corectoare de erori
( corectare de erori în avans – forward error correction );
-se include suficientă redundanţă pentru a permite receptorului să
constate că a apărut o eroare, dar nu care este eroarea, şi să
ceară o retransmisie – coduri detectoare de erori;
-pe canale cu siguranţă mare - cod detector de erori şi
retransmiterea blocului în care s-au detectat erori;
-pe canale nesigure ( comunicaţie fără fir ) – coduri corectoare de
erori;
Coduri corectoare de erori (2)
n – cuvânt de cod de n biţi ( n-bit codeword );
n = m + r;
m – biţi de date ( mesaj )
r – biţi redundanţi sau de control
10001001 OR EXCLUSIV
10110001
00111000
distanţă Hamming
Obs. Numărul de poziţii binare în care două cuvinte de cod diferă
– distanţă Hemming; dacă două cuvinte de cod sunt despărţite de
o distanţă Hemming d, sunt necesare d erori de un singur bit
pentru a-l converti pe unul în celălat.
Coduri corectoare de erori (3)
-pentru a detecta d erori este nevoie de un cod cu distanţa d+1,
deoarece cu un asemenea cod nu există nici o modalitate ca d
erori de un singur bit să poată modifica un cuvânt de cod corect
într-un alt cuvânt de cod corect;
-pentru a corecta d erori este nevoie de un cod cu distanţa 2d+1,
deoarece în acest mod cuvintele de cod corecte sunt atât de
distanţate, încât, chiar cu d modificări, cuvântul de cod originar
este totuşi mai apropiat decât alte cuvinte de cod şi va fi unic
determinat;
Coduri corectoare de erori (4)
Exemple:
Cod detector de erori: adăugarea la date a unui bit de paritate – un cod
cu un singur bit de paritate are distanţa 2, deoarece orice eroare pe un
singur bit produce un cuvânt de cod cu paritatea greşită ( poate fi folosit
pentru detectarea erorilor singulare );
Cod corector de erori: fie un cod cu patru cuvinte de cod corecte:
0000000000, 0000011111, 1111100000 şi 1111111111; codul are distanţa 5
şi poate corecta erori duble; dacă soseşte cuvântul de cod 0000000111,
cel ce recepţionează ştie că originalul trebuie să fi fost 0000011111; dacă
totuşi o eroare triplă modifică 0000000000 în 0000000111, eroarea nu va
fi corectată corespunzător;
Coduri corectoare de erori (5)
Proiectarea unui cod cu m biţi de mesaj şi r biţi de control pentru
corectarea tuturor erorilor singulare ( 1 ):
-pentru fiecare din cele 2m mesaje corecte există n cuvinte de cod
eronate, aflate la distanţa 1 de el; acestea sunt formate prin inversarea
2 din cuvântul de cod de n biţi format
sistematică a fiecăruia dintre cei n biţi
din el; astfel, fiecare din cele 2m mesaje corecte necesită n+1 şabloane
asociate;
m
-cum numărul total de şabloane este 2n, trebuie să avem (n+1)2m<=2n;
utilizând n=m+r, această condiţie devine (m+r+1)<=2r; dându-se m,
acesta impune o limită inferioară asupra numărului de biţi de control
necesari pentru a corecta erorile singulare;
Coduri corectoare de erori (6)
Proiectarea unui cod cu m biţi de mesaj şi r biţi de control pentru
corectarea tuturor erorilor singulare ( 2 ):
-atingerea limitei inferioare amintite ( Hamming ): biţii cuvântului de cod
sunt numerotaţi consecutiv, începând cu bitul 1 de la marginea din
stânga, bitul 2 imediat la dreapta sa ş.a.m.d. Biţii care sunt puteri ale lui 2
( 1, 2, 4, 8 etc.) sunt biţi de control; restul ( 3, 5, 6, 7, 9 etc. ) sunt
completaţi cu cei m biţi de date; fiecare bit de control forţează ca paritatea
unui grup de biţi, inclusiv el însuşi, să fie pară ( sau impară );
-un bit poate fi inclus în mai multe calcule de paritate; pentru a se vedea
la care biţi de control contribuie bitul de date din poziţia k, se rescrie k ca
o sumă de puteri ale lui 2 ( ex: 11=1+2+8 ); un bit este verificat de acei biţi
de control care apar în dezvoltarea sa ( ex: bitul 11 este verificat de biţii 1,
2 şi 8 );
Coduri corectoare de erori (7)
Proiectarea unui cod cu m biţi de mesaj şi r biţi de control pentru
corectarea tuturor erorilor singulare ( 3 ):
-când soseşte un cuvânt de cod, receptorul iniţializează un contor la 0;
acesta examinează apoi fiecare bit de control k ( k=1, 2, 4, 8…) pentru a
vedea dacă are paritatea corectă; dacă nu, adaugă k la contor;
-dacă, după ce au fost examinaţi toţi biţii de control, contorul este 0
( adică dacă toţi biţii au fost corecţi ), cuvântul de cod este acceptat ca
valid;
-dacă valoarea contorului este nenulă, ea reprezintă numărul bitului
incorect ( ex: dacă biţii de control 1, 2 şi 8 sunt eronaţi, atunci bitul
inversat este 11, deoarece este singurul verificat de biţii 1, 2 şi 8 );
Coduri corectoare de erori (8)
Caractere ASCII pe 7 biţi codificate prin cuvinte
de cod pe 11 biţi, utlizând codul Hamming
Coduri corectoare de erori (9)
-informaţia este regăsită în biţii de pe poziţiile 3, 5, 6, 7, 9, 10 şi 11;
-codurile Hamming pot corecta doar erori singulare;
-artificiu pentru a permite codurilor Hamming să corecteze erorile în
rafală:
-o secvenţă de k cuvinte de cod consecutive este aranjată ca o matrice, având
câte un cuvânt de cod pe fiecare linie; în mod normal, datele sunt transmise linie
cu linie, de la stânga la dreapta; pentru a corecta erorile în rafală, datele vor
trebui transmise pe coloane, începând cu coloana cea mai din stânga; când au
fost trimişi toţi cei k biţi, este transmisă a doua coloană şi aşa mai departe
( figura din slide-ul anterior ); atunci când un cadru ajunge la receptor , matricea
este reconstruită, coloană cu coloană;
-dacă a apărut o eroare în rafală, de lungime k, va fi afectat cel mult un bit din
fiecare dintre cele k cuvinte de cod, dar codul Hamming poate corecta o eroare pe
cuvânt de cod, astfel că întregul bloc poate fi refăcut;
-metoda utilizează kr biţi de control pentru a face blocuri de km biţi de date imune
la erorile în rafală de lungime k sau mai mică.
Coduri corectoare de erori (1)
-dacă unui bloc i se adaugă un singur bit de paritate şi blocul e
puternic deformat de o eroare în rafală lungă, probabilitatea ca
eroarea să fie detectată este de numai 0.5; şansele pot fi
îmbunătăţite dacă fiecare bloc transmis este privit ca o matrice
dreptunghiulară de n biţi lăţime şi k biţi înălţime ; pentru fiecare
coloană e calculat un bit de paritate, care este adăugat într-o nouă
linie de la sfârşitul matricei. Matricea este apoi transmisă linie cu
linie; la sosirea blocului, receptorul verifică toţi biţii de paritate;
dacă oricare idn ei e greşit, va cere o retransmisie a blocului;
-dacă este nevoie, sunt cerute retransmisii succesive, până când
întregul bloc este recepţionat fără erori de paritate;
Coduri corectoare de erori (2)
-metoda anterioară poate detecta o singură rafală de lungime n, cu
numai un bit pe coloanaă modificat;
-o rafală de lungime n+1 va trece nedetectată dacă primul şi
ultimul bit sunt inversaţi, iar toţi ceilalţi biţi sunt corecţi ( o eroare în
rafală nu înseamnă că toţi biţii sunt greşiţi, ci că cel puţin primul şi
ultimul sunt greşiţi );
-dacă blocul e puternic deformat de o rafală lungă sau de rafale
scurte multiple, probabilitatea ca oricare din cele n coloane să
aibă, accidental, paritatea corectă este 0.5, deci probabilitatea ca
un bloc eronat să fie acceptat atunci când nu ar trebui este 2-n;
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (1)
-bazate pe tratarea şirurilor de biţi ca reprezenatări de polinoame
cu coeficienţi 0 şi 1;
-un cadru de k biţi e văzut ca o listă de coeficienţi pentru un
polinom cu k termeni, de la xk-1 la x0
polinom de gradul k-1;
-bitul cel mai semnificativ e coeficientul lui xk-1;
-ex: 110001 reprezintă polinomul x5 + x4 + x0 ( coeficienţii sunt 1,
1, 0, 0, 0 şi 1 );
-aritmetica polinomială este de tip modulo 2;
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (2)
-nu există transport la adunare şi nici împrumut la scădere ( adunările
şi scăderile sunt identice cu SAU EXCLUSIV );
-ex: 10011011
+11001010
01010001
00110011
+11001101
11111110
-scăderea este realizată modulo 2;
11110000
-10100110
01010110
01010101
-10101111
11111010
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (3)
-emiţătorul şi receptorul se pun de acord în avans asupra unui polinom
generator G(x);
-bitul cel mai semnificativ şi cel mai puţin semnificativ trebuie să fie 1;
-pentru a calcula suma de control pentru un cadru cu m biţi,
corespunzător polinomului M(x), cadrul trebuie să fie mai lung decât
polinomul generator;
-se adaugă o sumă de control la sfârşitul cadrului, astfel încât polinomul
reprezentat de cadrul cu sumă de control să fie divizibil prin G(x);
-când receptorul preia cadrul cu suma de control, încearcă să-l împartă la
G(x); dacă se obţine un rest, înseamnă că a avut loc o eroare de
transmisie;
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (4)
Algoritmul pentru calculul sumei de control:
1.
fie r gradul lui G(x); se adaugă r biţi la capătul mai puţin
semnificativ al cadrului, aşa încât acesta va conţine acum n+r
biţi şi va corespunde polinomului xrM(x);
2.
se împarte şirul de biţi ce corespund lui G(x) într-un şir de biţi
corespunzând lui xrM(x), utilizând împărţirea modulo 2;
3.
se scade restul ( care are întotdeauna r sau mai puţini biţi ) din
şirul de biţi corespunzând lui xrM(x), utilizând scăderea modulo
2. Rezultatul este cadrul cu sumă de control ce va fi transmis.
Polinomul său va fi T(x).
Obs. T(x) este divizibil (modulo 2) cu G(x).
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (5)
Calculul sumei de control în cod polinomial pentru
cadrul 1101011011 şi G(x) = x4+x+1
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (6)
-apariţia unei erori de transmisie: în loc să soseacsă şirul de biţi
pentru T(x), ajunge T(x) + E(x); fiecare bit din E(x) corespunde unui
bit care a fost inversat; dacă în E(x) există k biţi 1, aceasta înseamnă
că au apărut k erori de un singur bit;
-o singură eroare în rafală este caracterizată de un 1 iniţial, un
amestec de 0 şi 1 şi un 1 final, toţi ceilalţi biţi fiind 0;
-la recepţia cadrului cu sumă de control, receptorul îl împarte prin
G(x); înseamnă că se va calcula [T(x) + E(x)] / G(x); T(x) / G(x) este
0, aşa încât rezultatul calculului este E(x) / G(x); acele erori care se
întâmplă să corespundă unor polinoame care îl au ca factor pe G(x)
vor scăpa; toate celelalte vor fi detectate;
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (7)
-dacă a apărut o eroare pe un singur bit, E(x)=xi, unde i determină
care bit este eronat; dacă G(x) conţine doi sau mai mulţi termeni, nu
poate fi divizor al lui E(x), aşa încât toate erorile pe un singur bit vor
fi detectate;
-dacă au apărut două erori izolate pe un singur bit, atunci E(x)=xi +
xj, unde i>j; dacă presupunem că G(x) nu este divizibil prin x, o
condiţie suficientă pentru detectarea erorilor duble este ca G(x) să
nu se dividă prin xk+1 pentru orice k până la valoarea maximă i-j
( adică până la lungimea maximă a cadrului );
-sunt cunoscute polinoame simple, de grad mic, care asigură
protecţie cadrelor de lungime mare ( ex: x15+x14+1 nu se va divide
cu xk+1 pentru nici o valoare a lui k mai mică de 32768 );
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (8)
-dacă există un număr impar de biţi eronaţi, E(x) conţine un număr
impar de termeni ( adică x5+x2+1, dar nu x2+1 );
-în sistemul modulo 2 nu există nici un polinom cu număr impar de
termeni care să îl aibă pe x+1 ca factor; făcându-l pe x+1 factor al lui
G(x), se vor putea depista toate erorile constituite dintr-un număr
impar de biţi inversaţi;
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (9)
Nici un polinom cu număr impar de termeni nu este divizibil cu x+1.
Demonstraţie:
-
presupunem că E(x) are un număr impar de termeni şi este
divizibil cu x+1; se factorizează în (x+1)Q(x);
-
se evaluează E(1)=(1+1)Q(1); deoarece 1+1=0(modulo 2),
E(1) trebuie să fie 0;
-
dacă E(x) are un număr impar de termeni, substituind fiecare x
cu 1, rezultatul obţinut va fi întotdeauna 1; rezultă că nici un
polinom cu număr impar de termeni nu este divizibil cu x+1;
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (10)
-un cod polinomial cu r biţi de control va detecta toate erorile în
rafală de lungime ≤ r;
-o eroare în rafală de lungime k poate fi reprezentată de xj(xk-1+..+1),
unde i determină cât de departe este localizată rafala faţă de capătul
din dreapta al cadrului recepţionat;
-dacă G(x) conţine termenul x0, atunci nu îl va avea ca factor pe xj,
aşa că dacă gradul expresiei dintre paranteze este mai mic decât
gradul lui G(x), restul nu poate fi niciodată 0;
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (11)
-dacă lungimea rafalei este r+1, restul împărţirii cu G(x) va fi zero
dacă şi numai dacă rafala este identică cu G(x);
-prin definiţia rafalei, primul şi ultimul bit trebuie să fie 1, astfel că
potrivirea depinde de cei r-1 biţi intermediari;
-dacă toate combinaţiile sunt privite ca egal posibile, atunci
probabilitatea ca un cadru incorect să fie acceptat ca valid este 1/2r-1;
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (12)
Polinomul folosit în IEEE 802:
x32 + x26 + x23 + x22 + x16 + x12 + x11 +
+ x10 + x8 + x7 + x5 + x4 + x2 + x1 + 1
Coduri corectoare de erori coduri polinomiale ( coduri cu redundanţă ciclică ) (13)
-în practică, pentru calcularea şi verificarea sumei de control se
utilizează un simplu registru de deplasare ( circuitul este folosit în
aproape toate reţelele locale, şi uneori şi în cazul liniilor punct-lapunct );
-analize recente au arătat că presupunerea conform căreia cadrele
pentru care se calculează suma de control conţin biţi aleatori este
incorectă; ca o consecinţă, în unele circumstanţe, erorile nedetectate
sunt mult mai obişnuite decât s-a crezut anterior;