4・1 シフトレジスタ を 使った 符号器, 復号器線形符号 は、パリティ検査行列 H に対し H w T = 0 ――― (4・1) を 満足する 符号 である。符号器 では、式(4・1) を 満足する 符号語 w を 通報 i から 次式 で 作り、通信路 に 出す。 w = i G ――― (4・2) 復号器 では 受信語 y から シンドローム s = H y T ――― (4・3) を 計算し、s に従い 誤りの検出・訂正 を行う。 3章 で 紹介した 符号器, 復号器 は 並列器 の 符号器, 復号器 と 呼ばれる。 この回路 は 高速であるが、符号長 n や 情報点数 k が 増えると 回路の規模 が 大きくなる欠点 を もつ。 ある種 の 線形符号 においては 式(4・2), (4・3) の 計算 が シフトレジスタ により 行え、符号器, 復号器 が 簡単 となる。 そのような 符号 として 巡回符号 がある。 以下、この節では ハミング (7, 4) 巡回符号 を 例に 説明 を 行う。 [1] シンドロームの計算式3・2節 [3]項 の 例3c の H 行列
を少し変形した、次のパリティ検査行列 H' を使う。
ここで、α6 , ... , α0 は h1 , ... , h7 と同じく各列ベクトルを表している記号であり、肩の添え字 6 , ... , 0 は 行列 H ' の列の番号であると、とりあえず理解していただきたい。 考察 : 図4・1 の シフトレジスタが発生する 巡回コード H' を使うため。 式(4・5) の H ' も組織符号を与える。H と H ' の違いは P と P ' の部分であり、1列目の列ベクトル h1 が4番目の α3 , h2 が α6 , ... と順番が入れ替わっているだけである。パリティ検査行列 H に対し符号語を w = ( x1 x2 x3 x4 x5 x6 x7 ) ――― (4・6) とすれば、式(4・1) の検査方程式は x1 h1 + x2 h2 + ... + x7 h7 = 0 ――― (4・7) を表し、H ' の符号語を w ' = ( c6 c5 c4 c3 c2 c1 c0 ) ――― (4・8) とすれば(添え字に注意)、同じく検査方程式は c6 α6 + c5 α5 + ... + c0 α0 = 0 ――― (4・9) となる。符号語のビット位置を H と H ' の関係と同じく x1 を c3 に、x2 を c6 に、... と入れ替えてみれば、同一の方程式である。区別する場合、検査行列 H ' をもつ符号を巡回ハミング ( 7 , 4 ) 符号と呼ぶ。 復号器では、受信語 y ' = ( d6 d5 d4 d3 d2 d1 d0 ) ――― (4・10) に対し、式(4・3) のシンドローム s = H ' y ' = d6 α6 + d5 α5 + ... + d0 α0 ――― (4・11) を計算する。列ベクトル α6 , ... , α0 に d6 , ... , d0 を掛け算した和がシンドローム s である。 [2] H 行列 の 列ベクトル の 発生列ベクトル α0 から α6 までを 図 4・1 の 回路 で 発生することができる。これは 3段 の シフトレジスタ回路 となっている。 図において、□ は 1ビット の 記憶素子 (1タイムスロット の 遅延素子) であり、クロックごとに データ は 矢印のほうに 移動する。⊕ は mod2 の 加算回路、すなわち 排他的論理和 exOR を表す。
表4・1 シフトレジスタの状態
初期状態として、1 0 0 が入っていたとする。この内容から縦に見て α0 である。 一般に、m 段のシフトレジスタを使えば、m 行からなる H 行列の列ベクトルが発生できる。図4・1 のように mod2 の加算回路 ⊕ で結線されたフィードバック接続で構成されるシフトレジスタ回路を 線形フィードバックシフトレジスタ (LFSR : Linear Feedback Shift Register) という。LFSR の内容(状態)が初期状態 a0 から始めれば、a1 , a2 , a3 , ... と変化し、同じく初期状態 b0 から始めれば、b1 , b2 , b3 , ... になったとする。この LFSR を初期状態 a0 + b0 から始めれば、状態は a1 + b1 , a2 + b2 , a3 + b3 , ... のように変化する。このような線形関係が成り立つので、"線形" フィードバックシフトレジスタ と呼ぶ。 [3] シフトレジスタ による シンドローム の 計算 図 4・1 の 左端 に 入力部を付けた 図 4・2 の 回路 を 考える。レジスタ の 初期状態 は 0 0 0 とする。 d6 α6 + d5 α5 + ... + d0 α0 であり、これは 式(4・11) のシンドローム s である。 図 4・2 シンドローム 計算回路 一般にいうならば、H 行列 の 列ベクトル を 発生する m 段 の LFSR に、図 4・2 と 同じように 入力部 を 設けて 受信語 y を 入力すれば、入力 が 終了したときの レジスタ の状態(内容)が シンドローム s となる。この形の シンドローム計算回路 を もつ 復号器 を、直列型 の 復号器 という。 [4] シフトレジスタによる符号器パリティ検査行列 H ' は既約台形正準形であり、式(4・2) の符号語 w は、通報 i に検査ビット列 p p = P ' i T = [ α6 α5 α4 α3 ] iT ――― (4・12) を付加したものである(3章の 式(3・28) 参照)。通報を i = ( i3 i2 i1 i0 ) ――― (4・13) とすれば、p は次式であり p = i3 α6 + i2 α5 + i1 α4 + i0 α3 ――― (4・14) 式(4・11) で d6 = i3 , d5 = i2 , ... , d3 = i0 , d2 = d1 = d0 = 0 とおいたものに等しい。同じ 図4・2 の回路に y ' の代わりに i ' = ( i3 i2 i1 i0 0 0 0 ) ――― (4・15) の 7ビット を入れれば、LFSR の最後の状態が p となる。したがって、符号器も、受信側のシンドローム計算回路と同じものでよい。工夫するならば、入力部を右端に移動した 図4・3 に、式(4・13) の i を入力してもよい。i3 = ( 1 0 0 0 ) ならば、最初の 1 が入力された段階で LFSR の状態は 1 1 0 = α3 であり、その後の 3個の 0 で LFSR は 3回シフトするので、最後の状態は α6 となる。以下、4・1節 [3]項 と同じ議論で LFSR の最後の状態は p になる。図4・2 で、LFSR のシフト回数は符号長に等しい 7回であり、図4・3 では情報点数に等しい 4回と少なく、図4・3 のほうが計算速度が速い。 図4・3 検査ビット列計算回路 一般に、H 行列の列ベクトルを発生する m 段の LFSR に、図4・3 のように入力部を設けて通報 i を入力すれば、入力が終了したときのレジスタの状態(内容)が検査ビット列 p となる。符号語 w は、i の後ろに p をつなげたものである。この形の符号器を、直列型の符号器という。 [5] ハミング符号の復号器巡回ハミング ( 7 , 4 ) 符号の復号器を 図4・4 に示す。図4・2 のシンドローム計算レジスタ Rs , シンドロームパターン検出回路、バッファレジスタ Rb と R0 , 誤り訂正回路から構成される。シンドロームパターン検出回路は、シンドローム計算レジスタ Rs の内容が 1 0 0 = α0 であるときのみ出力 1 を出す。 図4・4 ハミング(7,4)符号の復号器 通信路では符号長7ビット中1か所以下の誤りしか生じないものとして、この回路で誤りが正しく訂正されることを確認してみよう。たとえば、受信語 y ' の d3 の位置が誤りとする。図4・4 に示す初期状態からスタートし、 y ' の7ビットが入力し終わったときにレジスタ Rs にはシンドローム α3 , Rb , R0 には、y ' および 0 が入っている。そこからさらにクロックを供給してシフトを続ければ、表4・2 となる。なお、y ' が入力し終わった時刻を 0 とし、それ以降は入力として 0 が入るものとする。
Rs の内容が α0 になったときの R0 内のビットが誤りであり、R0 の出力 d3 はシンドロームパターン検出回路からの出力 1 とともに訂正回路の exOR に入り、誤りが訂正されて出力される。このとき以外はシンドロームパターン検出回路の出力は 0 であり、受信語 y ' の各ビットはそのまま出力される。y ' の 7ビット中任意の 1ビット di が誤りの場合、シンドロームは αi であり、さらにシフトして α0 となるのに必要なシフト数は 7 - i 回である。したがって、任意の 1ビットの誤りが訂正される。 ここで例に取り上げたハミング符号のように、LFSR を用いて符号器や復号器が構成できる線形符号が巡回符号である。回路が簡単であること、実用的な符号長において符号の効率も比較的高いことから、いちばんよく使われる符号である。 |