１６個の要素をもつ体 GF (2^4) を用いて符号を構成する。

α は (α^4) + α + 1 をみたす数とする。

minimal = α^4 + α + 1

GF (2^4) のすべての要素を加法表示と乗法表示したもののリストを作る。

additive=Table[
PolynomialMod[α^(14-i),{minimal ,2}],
{i,0,14}]~
Join~{0}

multiplicative=Table[α^(14-i),{i,0,14}]~
Join~{0}

toA は加法表示に直すため、toM は乗法表示に直すための関数。

toA[elem_]:=PolynomialMod[elem,{minimal ,2}]

For[i= 1, i<16,i++,toM0[additive[[i]]]=α^(15-i)];
toM0[0]=0;
toM[elem_]:=toM0[PolynomialMod[elem,{minimal ,2}]]

符号を生成する多項式を10次式とし、情報ビット数５，訂正能力３の符号を作る。

generator =  (1+x+(x^2)+(x^3)+(x^4)) (1+x+(x^4))(1+x+(x^2))

encode は５次元ベクトルを１５次の符号多項式 （符号語） に直す関数。
まず５次元ベクトルから４次多項式を作り、それに x^10 をかけ１４次多項式を作る。
これを１０次の生成多項式で割ったあまりを誤り訂正のために付け加える。
さらに、マスクとして x^14 + x^12 + x^10 + x^4 + x を加える
decode はこれを元に戻す関数。生成多項式による商を取る。

マスク：101010000010010

mask=x+(x^4)+(x^10)+(x^12)+(x^14)

Off[General::spell1]

encode[vector_]:=
PolynomialMod[
vector.Table[x^(Length[vector]+10-i),{i,1,Length[vector]}]+
PolynomialMod[vector.Table[x^(Length[vector]+10-i),{i,1,Length[vector]}],{generator,2}]
+mask,2]

decode[polynomial_]:=
Table[Coefficient[PolynomialMod[polynomial+mask,2],
x,14-i],{i,0,4}]

１−Ｑ型　マスク０００

Table[Coefficient[encode[{1,1,0,0,0}],x,14-i],{i,0,14}]