//---[CLO, Using Algebraic Geometry, p. 432] // 2-dimensional cyclic code [9,7] // codifica di w |--> c ring r = (2,a),(x,y),lp; minpoly = a^2+a+1; ideal I = x^3-1, y^3-1; qring q = std(I); ideal J = x^2+a^2*x*y+a*y, y+1; option(redSB); ideal G = std(J); poly w = x^2*y^2; poly resto = reduce(w,G); poly c = w - resto; c; x2y2+(a+1)*x+(a) lead(J); //posizioni di informazione: x^2,y, xy, x^2y,y^2,xy^2,x^2y^2 _[1]=x2 _[2]=y //--- posizioni di controllo: 1,x G;// base di Groebner di J G[1]=y+1 G[2]=x2+(a+1)*x+(a) a^2; (a+1) //---[CLO, Using ..., p. 445], Reed-Solomon [8,4,8-4+1] //--- si possono correggere 2 errori //--- c = x^7 + 2*x^5 + x^2 + 2x +1 //--- y = x^7 + a*x^5 + (a-1)*x^2 + 2*x + 1 //--- posizioni di informazione: x^7,x^6,x^5,x^4 //--- posizioni di controllo: x^3,x^2,x^1,1 ring s = (3,a),x,(lp,c); minpoly = a^2+a+2; //procedura per la codifica proc codifica (poly w) { poly g = (x-a)*(x-a^2)*(x-a^3)*(x-a^4); return(w - division(w,g)[2][1]); }; poly w = x^7 + 2*x^5; poly g = (x-a)*(x-a^2)*(x-a^3)*(x-a^4); // output del comando division: division(w,g); [1]: _[1,1]=x3+(-a-1)*x2+(-a)*x+(a-1) [2]: _[1]=-x2+x-1 [3]: _[1,1]=1 codifica(w); x7-x5+x2-x+1 //procedura decodifica proc decodifica (poly y) { poly syndrome = subst(y,x,a)+subst(y,x,a^2)*x+subst(y,x,a^3)*x^2+subst(y,x,a^4)*x^3; vector v1 = [x^4,0]; // 2*t = 4, d = 5 vector v2 = [syndrome,1]; module K = v1, v2; option(redSB); module G = std(K); //base ridotta di Groebner per il modulo K if (G[1]