前回、「原始多項式の原始元」のαという実体不明、性質だけが利用できるというものを説明しました。今回はこれを使った計算例を挙げてみます。
数学的扱いだけ考えるならこういった例は不要なのかも知れませんが、実際に誤り訂正を行う場合はソフトウェアで処理したり、ハードウェアで演算したりすることを考えると、例題を見ておくことは設計的には有益だと思います。
で、0 以外の 8 ビットデータはαのべき乗で表すことが出来るとしました。書籍などではそれはシフトレジスタを回すことで得られるとなっていますが、前回のように手計算でも得られます。まずはαのべき乗表現と 8 ビットデータとの対応表を挙げてみます。
となります。実はこの表のような 8 ビットデータを 16 進数で表す方法は誤解を招きそうなので良いとは思っていません。スペースの関係でこうしていますが、16 進数で表してしまうと本来のビット列ではなく数値に見えてしまう可能性があるからです。
たとえばα^86 というのを見て B1h = 10110001 と見てくれれば良いのですが、177 と連想してしまうともう次の計算が出来なくなります。
くれぐれも HEX 表現はビット表現を視覚的に省スペースにしただけであって、数値を表すものではないと思って下さい。
255 番目が色が変わっていますが、これはα^255 = α^0 であることを示しています。以下 α^256 = α^1 と続き巡回します。
では、適当に表から値をピックアップして計算例を挙げてみます。
(1000 1001) = 89h と (0101 0100) = 54h を掛け算します。
表から、
89h = α^74, 54h = α^143 だから、
89h * 54h = α^74 * α^143 = α^(74 + 143) = α^217
表から、
α^217 = 98h = (1001 1000)
と求めることが出来ます。
(0100 1011) = 4Bh と (1100 0101) = C5h を掛け算します。
表から、
4Bh = α^179, C5h = α^123 だから、
4Bh * C5h = α^179 * α^123 = α^(179 + 123) = α^302
254 で巡回するので、
α^302 = α^(302 - 255) = α^47
表から、
α^47 = 23h = (0010 0011)
となります。
(0001 0110) = 16h を (1100 0010) = C2h で割り算します。
表から、
16h = α^239, C2h = α^67 だから、
16h / C2h = α^239 / α^67 = α^(239 - 67) = α^172
表から、
α^172 = 7Bh = (0111 1011)
となります。
(0011 1100) = 3Ch を (0010 1010) = 2Ah で割り算します。
表から、
3Ch = α^77, 2Ah = α^142 だから、
3Ch / 2Ah = α^77 / α^142 = α^(77 - 142) = α^(-65)
254 で巡回するので、
α^(-65) = α^(-65 + 255) = α^190
表から、
α^190 = AEh = (1100 1110)
となります。
ついでに積和演算も見ておきます。
上記の計算の延長で行きます。
89h * 54h + 4Bh * C5h = α^217 + α^47
= 98h + 23h
= (1001 1000) + (0010 0011)
= (1011 1011)
= BBh
= α^83
という要領です。足し算するためにはビット単位で表現して XOR で演算することになります。
割り算が絡んでも同様にいけると思います。
軽~く慣れておくといいと思います。
次回は多項式同士の計算をやってみます。
数学的扱いだけ考えるならこういった例は不要なのかも知れませんが、実際に誤り訂正を行う場合はソフトウェアで処理したり、ハードウェアで演算したりすることを考えると、例題を見ておくことは設計的には有益だと思います。
で、0 以外の 8 ビットデータはαのべき乗で表すことが出来るとしました。書籍などではそれはシフトレジスタを回すことで得られるとなっていますが、前回のように手計算でも得られます。まずはαのべき乗表現と 8 ビットデータとの対応表を挙げてみます。
![イメージ 1](https://stat.ameba.jp/user_images/20190808/13/an-engineer2019/27/d1/j/o0772070714526085456.jpg?caw=800)
となります。実はこの表のような 8 ビットデータを 16 進数で表す方法は誤解を招きそうなので良いとは思っていません。スペースの関係でこうしていますが、16 進数で表してしまうと本来のビット列ではなく数値に見えてしまう可能性があるからです。
たとえばα^86 というのを見て B1h = 10110001 と見てくれれば良いのですが、177 と連想してしまうともう次の計算が出来なくなります。
くれぐれも HEX 表現はビット表現を視覚的に省スペースにしただけであって、数値を表すものではないと思って下さい。
255 番目が色が変わっていますが、これはα^255 = α^0 であることを示しています。以下 α^256 = α^1 と続き巡回します。
では、適当に表から値をピックアップして計算例を挙げてみます。
(1000 1001) = 89h と (0101 0100) = 54h を掛け算します。
表から、
89h = α^74, 54h = α^143 だから、
89h * 54h = α^74 * α^143 = α^(74 + 143) = α^217
表から、
α^217 = 98h = (1001 1000)
と求めることが出来ます。
(0100 1011) = 4Bh と (1100 0101) = C5h を掛け算します。
表から、
4Bh = α^179, C5h = α^123 だから、
4Bh * C5h = α^179 * α^123 = α^(179 + 123) = α^302
254 で巡回するので、
α^302 = α^(302 - 255) = α^47
表から、
α^47 = 23h = (0010 0011)
となります。
(0001 0110) = 16h を (1100 0010) = C2h で割り算します。
表から、
16h = α^239, C2h = α^67 だから、
16h / C2h = α^239 / α^67 = α^(239 - 67) = α^172
表から、
α^172 = 7Bh = (0111 1011)
となります。
(0011 1100) = 3Ch を (0010 1010) = 2Ah で割り算します。
表から、
3Ch = α^77, 2Ah = α^142 だから、
3Ch / 2Ah = α^77 / α^142 = α^(77 - 142) = α^(-65)
254 で巡回するので、
α^(-65) = α^(-65 + 255) = α^190
表から、
α^190 = AEh = (1100 1110)
となります。
ついでに積和演算も見ておきます。
上記の計算の延長で行きます。
89h * 54h + 4Bh * C5h = α^217 + α^47
= 98h + 23h
= (1001 1000) + (0010 0011)
= (1011 1011)
= BBh
= α^83
という要領です。足し算するためにはビット単位で表現して XOR で演算することになります。
割り算が絡んでも同様にいけると思います。
軽~く慣れておくといいと思います。
次回は多項式同士の計算をやってみます。