Sunteți pe pagina 1din 4

Universitatea Politehnica Bucure ti Ingineria Informa iei i a Sistemelor de Calcul Transmiterea Informa iei n Re ele Wireless

Algoritmi pentru controlul erorilor in retele Wireless - codare/decodare RS+BCH Coduri BCH
Codul Bose, Chaudhuri si Hocquenghem, BCH, este un cod ciclic, corector de erori, cu mai multe niveluri si de lungime variabil . Codurile BCH pot fi binare sau non-binare si pot s fie folosite mpreun cu modulatia PSK ori de cte ori num rul de niveluri este prim sau o putere a unui num r prim.Capacitatea de corectie oferit este de pn la 25% din num rul total de digiti continuti ntr-un bloc. Construc ia polinomului generator al codului Codurile BCH sunt coduri ciclice corectoare de erori multiple . Structura cuvntului de cod BCH, rela ia de codare, algoritmul cod rii i implementarea sa, sunt identice cu cele pentru codul ciclic corector de o eroare. Deosebirea const n construc ia i propriet ile polinomului generator, g(x). Pentru a se corecta t erori dintr-un cuvnt este necesar a se preciza pozi ia fiec reia. Dac ne referim la un cuvnt de lungime n, unde:  atunci informa ia necesar pentru a preciza un caracter eronat ntre cele n este:

Pentru a include i varianta cuvnt f r eroare, consider m c n acest caz seeroneaz un al n+1lea caracter, fictiv, astfel nct informa ia necesar pentru a preciza pozi ia unui caracter eronat (dintre n+1 caractere) este:  Ultima rela ie furnizeaz num rul de bi i de control, m = q, dintr-un cuvnt de cod necesar pentru a se putea face corec ia unei erori .Dac se dore te a se corecta mai mult de o eroare, atunci cantitatea de informa ie furnizat de bi ii de control, de valoare m(bi i), necesar corec iei a t erori, cu t >1 ,trebuie s fie peste valoarea q. * Spre exemplu, dorind a construi un cod corector de t = 2 erori, cantitatea de informa ie necesar a fi furnizat de bi ii de control, n num r de m, trebuie s fie:m i [1 + n + (n +1) n/2] 2 q 1,

tef nescu Cristina T2 S3 Bucure ti 2011

Universitatea Politehnica Bucure ti Ingineria Informa iei i a Sistemelor de Calcul Transmiterea Informa iei n Re ele Wireless

adic o informa ie aproape dubl ( i implicit un num r dublu de bi i de control) fa de cazul corec iei unei erori. Deoarece precizarea unui caracter din cele n+1 ale cmpului Galois GF( ) reprezint o informa ie de q bi i, rezult posibilitatea de a crea leg turi ntre bi ii de informa ie i cei de control pentru un cuvnt de cod BCH, construind polinomul generator, g(x), astfel nct s aib r d cini t elemente ale cmpului respectiv. Aceast proprietate a cuvntului de cod furnizeaz informa ia necesar i suficient pentru ca decodorul s afle pozi ia a t erori necesar i suficient pentru ca decodorul s afle pozi ia a t erori.

Pentru BCH s-a implementat:

codarea si decodarea in toate modurile oferite de functiile MATLAB:

n = 15; k = 5; %lungimea cuvantului de cod si a mesajului dat = randint(4,k); % generarea unei matrici de 4x5 intregi msg = gf(dat); %reprezentarea datelor folosind o matrice Gallois % Sintaxa pentru codare c1 = bchenc(msg,n,k); d1 = bchdec(c1,n,k); % Adaugarea simbolurilor de paritate la inceput("end" este default). c2 = bchenc(msg,n,k,'beginning'); d2 = bchdec(c2,n,k,'beginning'); % Verificarea ca decodarea a functionat chk = isequal(d1,msg) & isequal(d2,msg)

detectarea si corectarea erorilor:

n= 15; k = 5; % lungimea cuvantului de cod si a mesajului [gp,t] = bchgenpoly(n,k); % t reprezinta cpabilitatea de a detecta erori nw = 4; %numarul de cuvinte de procesat msgw = gf(randint(nw,k)); % mesaje aleatoare de k simboluri c = bchenc(msgw,n,k); % codarea noise = randerr(nw,n,t); % t erori/rand cnoisy = c + noise; % Adaugarea zgomotului la meajul codat [dc,nerrs,corrcode] = bchdec(cnoisy,n,k); % decodarea mesajului cu zgomot % Verificarea ca decodarea a functionat chk2 = isequal(dc,msgw) & isequal(corrcode,c) nerrs % Numarul de erori corectate

tef nescu Cristina T2 S3 Bucure ti 2011

Universitatea Politehnica Bucure ti Ingineria Informa iei i a Sistemelor de Calcul Transmiterea Informa iei n Re ele Wireless

Codurile Reed-Solomon
Codurile Reed-Solomon (RS) fac parte din categoria codurilor ciclice, ns sunt coduri nebinare .Spre deosebire de celelalte coduri ciclice, alfabetul codului RS nu este cmpul binar {0, 1} ci un cmp finit de ordin superior, numit cmp Galois n acest fel, cuvintele codului RS nu sunt secven e(succesiuni) de bi i, ci de caractere. Aceste caractere pot fi reprezentate, la rndul lor, prin secven e binare, ns sunt indivizibile din punct de vedere al cod rii i decod riiReed-Solomon. Structural, cuvintele de cod RS au aceea i alc tuire ca i cele de cod ciclic:




unde: u q

cuvantul de cod, format din n caractere;

ordinul campului; polinomul generator al campului GF.

p(x)

Rela ia de codare are aceea i form ca i la codurile ciclice:

unde g(x) este polinomul generator al codului, iar

este polinomul de informa ie.

Decodarea codurilor Reed-Solomon Decodarea codurilor RS este n mare parte asem n toare decod rii codurilor BCH, deosebirea constnd n necesitatea de a afla pentru fiecare eroare pe lng pozi ie i valoarea ei. De remarcat c un cuvnt de cod RS este format din n caractere, adic q n bi i. Astfel o eroare de caracter poate nsemna pn la q erori de bit. La decodare, spre deosebire de codurile ciclice, ntr-un cuvnt de cod RS recep ionat, n vederea corec iei, este necesar att localizarea erorii, ct i stabilirea valorii ei.
tef nescu Cristina T2 S3 Bucure ti 2011

Universitatea Politehnica Bucure ti Ingineria Informa iei i a Sistemelor de Calcul Transmiterea Informa iei n Re ele Wireless

Pentru Reed-Solomon, am implementat: y codarea si decodarea in toate modurile oferite de MATLAB:

m = 4; % numarul de biti din fiecare simbol n = 2^m-1; k = 13; % lungimea cuvantului de cod si a mesajului data = randint(4,k,2^m); % generarea unei matrici de 4x13 intregi msg = gf(data,m); % reprezentarea datelor folosind un vector Gallois % Sintaxa pentru codare c1 = rsenc(msg,n,k); d1 = rsdec(c1,n,k); % generator polinomial pentru cod - variere: se produce un alt generator c2 = rsenc(msg,n,k,rsgenpoly(n,k,19,2)); d2 = rsdec(c2,n,k,rsgenpoly(n,k,19,2)); % primitiva polinomiala pentru GF(16)-variere folosind argumentul gf msg2 = gf(data,m,25); c3 = rsenc(msg2,n,k); d3 = rsdec(c3,n,k); % Adaugarea simbolurilor de paritate la inceput("end" este default). c4 = rsenc(msg,n,k,'beginning'); d4 = rsdec(c4,n,k,'beginning'); % Verificarea ca decodarea a functionat chk = isequal(d1,msg) & isequal(d2,msg) & isequal(d3,msg2) & isequal(d4,msg)

detectarea si corectarea erorilor:

m = 3; % numarul de biti din fiecare simbol n = 2^m-1; k = 3; % lungimea cuvantului de cod si a mesajului t = (n-k)/2; % t reprezinta cpabilitatea de a corecta erori nw = 4; %numarul de cuvinte de procesat msgw = gf(randint(nw,k,2^m),m); %mesaje aleatoare de k simboluri c = rsenc(msgw,n,k); % codarea noise = (1+randint(nw,n,2^m-1)).*randerr(nw,n,t); % t erori/rand cnoisy = c + noise; % Adaugarea zgomotului la meajul codat [dc,nerrs,corrcode] = rsdec(cnoisy,n,k); % decodarea mesajului cu zgomot % Verificarea ca decodarea a functionat isequal(dc,msgw) & isequal(corrcode,c) nerrs % Numarul de erori corectate

tef nescu Cristina T2 S3 Bucure ti 2011