ピーターソン法を検討中
地デジ用の場合
誤りが8個あるかないかの計算にシンドローム8個の積を8!= 40320回計算し
それぞれEXORをとることになる。
しかし、余因子展開の過程の結果が計算コストを減らすアルゴリズムになっていて
最後はサラスの展開までもっていくと
サラスの展開は3個のシンドロームの積を6個EXORという計算が基本になる。
この計算がいくついるかを考えよう。
4x4の行列式は、サラスの展開が4セット。
5x5の行列式は4x4の行列式の計算を5セット ここで(5X4)回のサラス展開4回の積の計算4個のEXOR
6x6の行列式は5x5の行列式の計算を6セット ここで(6x5x4)回のサラス展開
7x7の行列式は6x6の行列式の計算を7セット ここで(7X6X5X4)回のサラス展開
8x8の行列式は7x7の行列式の計算を8セット ここで(8X7X6X5X4)回のサラス展開
これをビルディングブロック式のハードでつくるとハードウェアの規模が大きくなりすぎる。
これをさけるための
簡単な考え方は、サラス展開モジュールをつくり、これを1命令とするCPUを作ればよいことになる。
その他のCPUの命令は8ビットのEXOR命令とガロア体の元どうしの積をとる命令、しかしハードなので規模の限界まで、並列計算させれば速度を上げられるので、プログラム式のハードウェア制御回路をつくればいい。
CPUの命令は、単純だが、大規模なハードの制御をプログラムでやらせてもいいのである。
もうひとつは、8x8行列式計算モジュール(7x7の行列式の結果8個を次々読み込み8x8行列式計算結果へと計算させるだけ)7x7の行列式計算モジュール(6x6の行列式の結果7個を次々読み込み7x7行列式計算結果へと計算させるだけ)6x6の行列式計算モジュール(5x5の行列式の結果6個を次々読み込み6x6の行列式計算結果へと計算させるだけ)
5x5の行列式計算モジュール(4x4の行列式の結果5個を次々読み込み5x5の行列式計算結果へと計算させるだけ)4x4の行列式計算モジュール(サラスの展開結果を4個次々読み込み4x4の行列式計算結果へと計算させるだけ)というのがある。
この方法を使うと7個以下の誤りが発生したかどうか調べる場合の行列式の計算結果も計算の途中で
発生するので、誤り1~8個の計算が終わることになり、効率がよい。
これでいこう。
さて、誤り位置多項式の係数σn(0<=n<=7)を計算するには、クラメルの公式を使う。
上で検討した、誤りブロック数を求める回路を使いまわし、計算する。最大8ブロックの誤りが発生するわけだが、そのときの計算コストは、行列式は1個だけでよい、分子の行列式は8回で9回の8x8行列式を計算すればよい。
誤りの個数は決定しているので、いくつ誤りが発生したかで、1個だけ回路をまわせばよいので、
ここは誤りの個数ごとの計算を並列にやる必要はない。
パイプラインが回るように8個の誤り位置多項式の係数を求める演算が終わる時間にあわせて7個以下の誤りブロックのときの計算をまたせる。
ほぼできた。
まず8x8の行列式の計算をする。その途中で7x7,6x6,5x5,4x4、3x3,2x2、1x1(1)の計算結果も現れるので、誤りブロック数がわかる。(行列式の計算結果が0でないときその行列式の次数個の誤りがあるということ。
そしたら、誤りの個数に応じたクラメルの公式計算回路に制御をうつし、8x8の計算にかかる時間
たったら次のパイプラインステージ、チェン探索へまわせばいいわけである。
できた。あとは、つくるだけ。
予定では今日つくるつもりだったけど、ギター弾きたいのでまた明日に順延