Outline
Kodierung
AG - Codes
Algorithmus
Singular
|
AG-Codes: Ein Beispiel
LIB "brnoeth.lib"; |
ring s=2,(x,y),lp; |
// Charakteristik 2 |
poly f=x3y+y3+x; |
// die Quartik von Klein
|
list KLEIN=Adj_div(f); |
// Berechne den Konduktor
|
KLEIN=NSplaces(2,KLEIN);
| // Berechnet die Stellen bis Ordnung 3
|
KLEIN=extcurve(3,KLEIN);
| // Konstruiere Kleinquartik ueber F_8
|
// -> Total number
of rational places : NrRatPl = 24
KLEIN[3];
| // Anzeige der Stellen (jeweils: Ordnung, Nummer)
|
// -> [1]: 1,1
// -> [2]: 1,2
// -> [3]: 1,3
// -> [4]: 2,1
// -> [5]: 3,1
// -> [6]: 3,2
// -> [7]: 3,3
// -> [8]: 3,4
// -> [9]: 3,5
// -> [10]: 3,6
// -> [11]: 3,7
intvec G=6,0,0,4,0,0,0,0,0,0,0;
| // Eingabe der Multiplizitaeten fuer G
|
| // G ist Divisor vom Grad 14=6*1+4*2
|
Berechnung des evaluierenden Codes
(Auswertung an allen rationalen Stellen außerhalb supp(G)):
def ER=KLEIN[1][4];
| // Wechsle in Ringerweiterung F_8[x,y,z]
|
setring ER;
|
|
matrix C=AGcode_L(G,D,KLEIN);
| // Ergebnis: 12 x 23 Matrix in F_8
|
| // 12 Funktionen ausgewertet an 23 Stellen
|
Berechnung des residuellen Codes (orthogonales Komplement zu C):
matrix CO=AGcode_Omega(G,D,KLEIN);
| // Ergebnis: 11 x 23 Matrix in F_8
|
Vorbereitungen für die Dekodierung:
intvec F=6,0,0;
| // Divisor F vom Grad mind. 6 noetig
|
list K=prepSV(G,D,F,KLEIN);
|
|
K[size(K)][1];
| // Anzahl behebbarer Fehler
|
// -> 3
Kodierung:
matrix word[1][11];
| // Woerter der Laenge 11 werden verschluesselt
|
word = 1,1,1,1,1,1,1,1,1,1,1;
|
|
def y=word*CO;
| // das Codewort (Laenge: 23)
|
Fehlerbehebung:
matrix disturb[1][23];
| // Eine Stoerung
|
disturb[1,1]=1;
|
|
disturb[1,10]=a;
|
|
disturb[1,12]=1+a;
|
|
y=y+disturb;
| // Stoerung des Codewortes
|
def yy=decodeSV(y,K);
| // Behebung der Stoerung
|
yy-y;
| // gibt die Stoerung wider
|
// -> _[1,1]=1
// -> _[1,2]=0
// -> _[1,3]=0
// -> _[1,4]=0
// -> _[1,5]=0
// -> _[1,6]=0
// -> _[1,7]=0
// -> _[1,8]=0
// -> _[1,9]=0
// -> _[1,10]=(a)
// -> _[1,11]=0
// -> _[1,12]=(a+1)
// -> _[1,13]=0
// -> _[1,14]=0
// -> _[1,15]=0
// -> _[1,16]=0
// -> _[1,17]=0
// -> _[1,18]=0
// -> _[1,19]=0
// -> _[1,20]=0
// -> _[1,21]=0
// -> _[1,22]=0
// -> _[1,23]=0
|