(57)【要約】【課題】従来よりも少ない計算量でパリティを計算することができる符号化装置および符号化プログラムを提供する。【解決手段】行列記憶部１８は、行列Ｕi、Ｌi（i=1〜m）、Ａのデータを記憶する。行列積計算部は、要素数ｋの情報ベクトルＸから式（Ｙ≡Ｕ1Ｕ2・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ2Ｌ1ＡＸ）で表わされるパリティ生成式にしたがって２を法とする演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する。パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T＝０を満たし、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、行列Ｌi（ｉ＝１〜ｍ）は、行列ＢをＬＵ分解した下三角行列Ｌの基本下三角行列であり、行列Ｕi（ｉ＝１〜ｍ）は、行列ＢをＬＵ分解した上三角行列Ｕの基本上三角行列である。【選択図】図２
2011244500.tif 000002
【特許請求の範囲】
【請求項１】
要素数ｋの情報ベクトルＸから式（Ａ１）で表わされるパリティ生成式にしたがって２を法とする演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化装置であって、
Ｙ≡Ｕ1Ｕ2・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ2Ｌ1ＡＸ  ・・・（Ａ１）
ただし、（Ｘ，Ｙ）Tは、ベクトル（Ｘ，Ｙ）の転置を表わし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T≡０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、
行列Ｌi（ｉ＝１〜ｍ）は、前記行列ＢをＬＵ分解した下三角行列Ｌの基本下三角行列であって、第ｉ列目が前記下三角行列Ｌの第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、
行列Ｕi（ｉ＝１〜ｍ）は、前記行列ＢをＬＵ分解した上三角行列Ｕの基本上三角行列であって、第ｉ行目が前記上三角行列Ｕの第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、
前記符号化装置は、
前記パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、
前記パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、
前記パリティベクトルＹを算出するために、前記パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部とを備え、
前記行列積計算部は、前記情報ベクトルＸ、前記行列記憶部内の行列を表わすデータ、または前記中間結果記憶部内の中間結果を表わすデータを用いて、前記パリティ生成式に含まれる各行列乗算を実行して、前記パリティ生成式に含まれる前記複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして前記中間結果記憶部内に記憶させ、前記パリティ生成式に含まれる前記複数回の行列乗算が終了したら、前記パリティ生成式に含まれる前記複数回の行列乗算の終了後に得られるベクトルをパリティベクトルＹとして出力する、符号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化装置および符号化プログラムに関し、特に低密度パリティ検査符号を生成する符号化装置および符号化プログラムに関する。
【背景技術】
【０００２】
データの通信システムを構築する場合には、高速通信、低消費電力、高通信品質（低ビット誤り率）等が要求される。受信符号の誤りを検出して訂正する誤り訂正技術は、これらの要求を満たす１つの技術として、無線、有線および記録システム等において幅広く利用されている。
【０００３】
近年、この誤り訂正技術の１つとして、低密度パリティ検査（ＬＤＰＣ：Low-Density Parity-Check）符号と、sum-product復号法とが注目されている。このＬＤＰＣ符号を利用する復号操作は、非特許文献１において議論されている。この非特許文献１においては、符号化率１／２のイレギュラーＬＤＰＣ符号を利用して白色ガウス通信路のシャノン（Shannon）限界まで０．００４ｄＢという復号特性が得られることが示されている。イレギュラーＬＤＰＣ符号は、パリティ検査行列の行重み（行において１が立つ数）および列重み（列において１が立つ数）が、一定ではない符号を示す。行重みおよび列重みが各行および各列において一定のＬＤＰＣ符号は、レギュラーＬＤＰＣ符号と呼ばれる。
【０００４】
このＬＤＰＣの符号化処理、つまりパリティを計算する処理の処理負荷を軽減するための手法が検討されている。たとえば、非特許文献２には、近似三角行列を利用したエンコード手法が開示されている。また、非特許文献３には、三角分解を用いたエンコード手法が開示されている。これらのエンコード手法では、下三角行列および上三角行列を含む方程式を解くことによって、パリティを得ることができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】S. Y. Chung et al.,“On the Design of Low-Density Parity-Check Codes within 0.0045dB of the Shannon Limit”, IEEE COMUNICATIONS LETTERS, VOL.5, No.2, Feb. 2001, pp.58-60
【非特許文献２】Thomas J. Richardson et al.,“Efficient Encoding of Low-Density Parity-Check Codes", IEEE TRANSACTIONS ON INFORMATION THEORY, VOL.47, No.2, Feb. 2001, pp.638-656
【非特許文献３】楫勇一、「三角分解を用いたＬＤＰＣ符号化法の計算量について」、The 27th Symposium on Information Theory and Its Applications (SITA2004) Gero, Gifu, Japan, Dec 14-17, 2004
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、非特許文献２および非特許文献３のエンコード手法では、方程式の解法に後退代入などが用いられているため、計算量が多くなる。
【０００７】
それゆえに、本発明の目的は、従来よりも少ない計算量でパリティを計算することができる符号化装置および符号化プログラムを提供することである。
【課題を解決するための手段】
【０００８】
本発明のある局面に係る符号化装置は、要素数ｋの情報ベクトルＸから式（Ａ１）で表わされるパリティ生成式にしたがって２を法とする演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化装置であって、
Ｙ≡Ｕ1Ｕ2・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ2Ｌ1ＡＸ  ・・・（Ａ１）
ただし、（Ｘ，Ｙ）Tは、ベクトル（Ｘ，Ｙ）の転置を表わし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T≡０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、行列Ｌi（ｉ＝１〜ｍ）は、行列ＢをＬＵ分解した下三角行列Ｌの基本下三角行列であって、第ｉ列目が下三角行列Ｌの第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、行列Ｕi（ｉ＝１〜ｍ）は、行列ＢをＬＵ分解した上三角行列Ｕの基本上三角行列であって、第ｉ行目が上三角行列Ｕの第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、符号化装置は、パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、パリティベクトルＹを算出するために、パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部とを備え、行列積計算部は、情報ベクトルＸ、行列記憶部内の行列を表わすデータ、または中間結果記憶部内の中間結果を表わすデータを用いて、パリティ生成式に含まれる各行列乗算を実行して、パリティ生成式に含まれる複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部内に記憶させ、パリティ生成式に含まれる複数回の行列乗算が終了したら、パリティ生成式に含まれる複数回の行列乗算の終了後に得られるベクトルをパリティベクトルＹとして出力する。
【０００９】
好ましくは、符号化装置は、パリティベクトルＹを生成する前に、パリティ生成式に含まれる行列を生成する符号化装置であって、中間結果記憶部は、さらに、パリティ生成式に含まれる行列を生成する処理の中間結果を表わすデータを記憶し、符号化装置は、さらに、パリティ検査行列Ｈを行列Ａと行列Ｂとに分解して、行列Ａを表わすデータを行列記憶部に記憶させる検査行列分解部と、行列Ｂを下三角行列Ｌと上三角行列Ｕの積にＬＵ分解して、下三角行列Ｌを表わすデータおよび上三角行列Ｕを表わすデータを中間結果記憶部に記憶させるＬＵ分解部と、中間結果記憶部から上三角行列Ｕおよび下三角行列Ｌを表わすデータを読み出して、上三角行列Ｕをｍ個の基本上三角行列Ｕi（ｉ＝１〜ｍ）の積に分解し、下三角行列Ｌをｍ個の基本下三角行列Ｌi（ｉ＝１〜ｍ）の積に分解し、分解された行列Ｕi（ｉ＝１〜ｍ）および行列Ｌi（ｉ＝１〜ｍ）を表わすデータを行列記憶部に記憶させる基本行列分解部とを備える。
【００１０】
本発明の別の局面に係る符号化装置は、要素数ｋの情報ベクトルＸから式（Ａ２）で表わされるパリティ生成式にしたがって実数演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化装置であって、
Ｙ＝−Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1ＡＸ  ・・・（Ａ２）
ただし、（Ｘ，Ｙ）Tは、ベクトル（Ｘ，Ｙ）の転置を表わし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T＝０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、行列Ｌi-1（ｉ＝１〜ｍ）は行列Ｌiの逆行列であり、行列Ｌiは行列ＢをＬＵ分解した下三角行列Ｌの基本下三角行列であって、第ｉ列目が下三角行列Ｌの第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、行列Ｕi-1（ｉ＝１〜ｍ）は行列Ｕiの逆行列であり、行列Ｕiは、行列ＢをＬＵ分解した上三角行列Ｕの基本上三角行列であって、第ｉ行目が上三角行列Ｕの第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、符号化装置は、パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、パリティベクトルＹを算出するために、パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部と、行列積計算部から出力されるベクトルの符号を反転してパリティベクトルＹとして出力する符号反転部とを備え、行列積計算部は、情報ベクトルＸ、行列記憶部内の行列を表わすデータ、または中間結果記憶部内の中間結果を表わすデータを用いて、パリティ生成式に含まれる各行列乗算を実行して、パリティ生成式に含まれる複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部内に記憶させ、パリティ生成式に含まれる複数回の行列乗算が終了したら、パリティ生成式に含まれる複数回の行列乗算の終了後に得られるベクトルを符号反転部に出力する。
【００１１】
好ましくは、符号化装置は、パリティベクトルＹを生成する前に、パリティ生成式に含まれる行列を生成する符号化装置であって、中間結果記憶部は、さらに、パリティ生成式に含まれる行列を生成する処理の中間結果を表わすデータを記憶し、符号化装置は、さらに、パリティ検査行列Ｈを行列Ａと行列Ｂとに分解して、行列Ａを表わすデータを行列記憶部に記憶させる検査行列分解部と、行列Ｂを下三角行列Ｌと上三角行列Ｕの積にＬＵ分解して、下三角行列Ｌを表わすデータおよび上三角行列Ｕを表わすデータを中間結果記憶部に記憶させるＬＵ分解部と、中間結果記憶部から上三角行列Ｕおよび下三角行列Ｌを表わすデータを読み出して、上三角行列Ｕをｍ個の基本上三角行列Ｕi（ｉ＝１〜ｍ）の積に分解し、下三角行列Ｌをｍ個の基本下三角行列Ｌi（ｉ＝１〜ｍ）の積に分解し、分解された行列Ｕi（ｉ＝１〜ｍ）および行列Ｌi（ｉ＝１〜ｍ）を表わすデータを中間結果記憶部に記憶させる基本行列分解部と、中間結果記憶部から行列Ｕi（ｉ＝１〜ｍ）および行列Ｌi（ｉ＝１〜ｍ）を表わすデータを読み出して、行列Ｕi（ｉ＝１〜ｍ）および行列Ｌi（ｉ＝１〜ｍ）の非対角項の要素の符号を反転することによって、逆行列Ｕi-1（ｉ＝１〜ｍ）および逆行列Ｌi-1（ｉ＝１〜ｍ）を算出し、逆行列Ｕi-1（ｉ＝１〜ｍ）および逆行列Ｌi-1（ｉ＝１〜ｍ）を表わすデータを行列記憶部に記憶させる逆行列計算部とを備える。
【００１２】
本発明の別の局面に係る符号化装置は、要素数ｋの情報ベクトルＸから、ｕ≧１かつｖ≧１のときには式（Ａ３−１）、ｕ≧１かつｖ＝０のときには式（Ａ３−２）、ｕ＝０かつｖ≧１のときには式（Ａ３−３）で表わされるパリティ生成式にしたがって２を法とする演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化装置であって、
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ａ３−１）
Ｙ≡Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ａ３−２）
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1ＡＸ  ・・・（Ａ３−３）
ただし、（Ｘ，Ｙ）Tは、ベクトル（Ｘ，Ｙ）の転置を表わし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T≡０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、ｕ≧１かつｖ≧１の場合には、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替え、およびｖ回の列の入れ替えを行なったものであり、行列Ａ(u)は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なったものであり、行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものであり、ｕ≧１かつｖ＝０の場合には、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替えを行なったものであり、行列Ａ(u)は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なったものであり、ｕ＝０かつｖ≧１の場合には、行列Ｂ′は、行列Ｂに対して、ｖ回の列の入れ替えを行なったものであり、行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものであり、行列Ｌ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列であって、第ｉ列目が下三角行列Ｌ′の第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、行列Ｕ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列であって、第ｉ行目が上三角行列Ｕ′の第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、符号化装置は、パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、パリティベクトルＹを算出するために、パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部とを備え、行列積計算部は、情報ベクトルＸ、行列記憶部内の行列を表わすデータ、または中間結果記憶部内の中間結果を表わすデータを用いて、パリティ生成式に含まれる各行列乗算を実行して、パリティ生成式に含まれる複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部内に記憶させ、パリティ生成式に含まれる複数回の行列乗算が終了したら、パリティ生成式に含まれる複数回の行列乗算の終了後に得られるベクトルをパリティベクトルＹとして出力する。
【００１３】
好ましくは、符号化装置は、パリティベクトルＹを生成する前に、パリティ生成式に含まれる行列を生成する符号化装置であって、中間結果記憶部は、さらに、パリティ生成式に含まれる行列を生成する処理の中間結果を表わすデータを記憶し、符号化装置は、さらに、パリティ検査行列Ｈを行列Ａと行列Ｂに分解して、ｕ＝０かつｖ≧１のときには、行列Ａを表わすデータを行列記憶部に記憶させる検査行列分解部と、ｕ≧１かつｖ≧１の場合、行列Ｂのオーダリングを行ない、行列Ｂに対してｕ回の行の入れ替えおよびｖ回の列の入れ替えを行なった行列Ｂ′を生成し、行列Ａに対して行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なった行列Ａ(u)を生成して行列記憶部に記憶させ、単位行列Ｅに対して行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なった行列Ｅ(v)を生成して行列記憶部に記憶させ、ｕ≧１かつｖ＝０の場合、行列Ｂのオーダリングを行ない、行列Ｂに対してｕ回の行の入れ替えを行なった行列Ｂ′を生成し、行列Ａに対して行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なった行列Ａ(u)を生成して行列記憶部に記憶させ、ｕ＝０かつｖ≧１の場合、行列Ｂのオーダリングを行ない、行列Ｂに対してｖ回の列の入れ替えを行なった行列Ｂ′を生成し、単位行列Ｅに対して行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なった行列Ｅ(v)を生成して行列記憶部に記憶させるオーダリング部と、行列Ｂ′を下三角行列Ｌ′と上三角行列Ｕ′の積にＬＵ分解して、下三角行列Ｌ′を表わすデータおよび上三角行列Ｕ′を表わすデータを中間結果記憶部に記憶させるＬＵ分解部と、中間結果記憶部から上三角行列Ｕ′および下三角行列Ｌ′を表わすデータを読み出して、上三角行列Ｕ′をｍ個の基本上三角行列Ｕ′i（ｉ＝１〜ｍ）の積に分解し、下三角行列Ｌ′をｍ個の基本下三角行列Ｌ′i（ｉ＝１〜ｍ）の積に分解し、分解された行列Ｕ′i（ｉ＝１〜ｍ）および行列′Ｌi（ｉ＝１〜ｍ）を表わすデータを行列記憶部に記憶させる基本行列分解部とを備える。
【００１４】
本発明のある局面に係る符号化装置は、要素数ｋの情報ベクトルＸから、ｕ≧１かつｖ≧１のときには式（Ａ４−１）、ｕ≧１かつｖ＝０のときには式（Ａ４−２）、ｕ＝０かつｖ≧１のときには式（Ａ４−３）で表わされるパリティ生成式にしたがって２を法とする演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化装置であって、
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ  ・・・（Ａ４−１）
Ｙ＝−Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(V)Ｘ  ・・・（Ａ４−２）
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1ＡＸ  ・・・（Ａ４−３）
ただし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T＝０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、ｕ≧１かつｖ≧１の場合には、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替え、およびｖ回の列の入れ替えを行なったものであり、行列Ａ(u)は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なったものであり、行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものであり、ｕ≧１かつｖ＝０の場合には、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替えを行なったものであり、行列Ａ(u)は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なったものであり、ｕ＝０かつｖ≧１の場合には、行列Ｂ′は、行列Ｂに対して、ｖ回の列の入れ替えを行なったものであり、行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものであり、行列Ｌ′i-1（ｉ＝１〜ｍ）は行列Ｌ′iの逆行列であり、行列Ｌ′iは、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列であって、第ｉ列目が下三角行列Ｌ′の第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、行列Ｕ′i-1（ｉ＝１〜ｍ）は行列Ｕ′iの逆行列であり、行列Ｕ′iは、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列であって、第ｉ行目が上三角行列Ｕ′の第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、符号化装置は、パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、パリティベクトルＹを算出するために、パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部と、行列積計算部から出力されるベクトルの符号を反転してパリティベクトルＹとして出力する符号反転部とを備え、行列積計算部は、情報ベクトルＸ、行列記憶部内の行列を表わすデータ、または中間結果記憶部内の中間結果を表わすデータを用いて、パリティ生成式に含まれる各行列乗算を実行して、パリティ生成式に含まれる複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部内に記憶させ、パリティ生成式に含まれる複数回の行列乗算が終了したら、パリティ生成式に含まれる複数回の行列乗算の終了後に得られるベクトルを符号反転部に出力する含まれる複数回の行列乗算の終了後に得られるベクトルを符号反転部に出力する。
【００１５】
好ましくは、符号化装置は、パリティベクトルＹを生成する前に、パリティ生成式に含まれる行列を生成する符号化装置であって、中間結果記憶部は、さらに、パリティ生成式に含まれる行列を生成する処理の中間結果を表わすデータを記憶し、符号化装置は、さらに、パリティ検査行列Ｈを行列Ａと行列Ｂに分解して、ｕ＝０かつｖ≧１のときには、行列Ａを表わすデータを行列記憶部に記憶させる検査行列分解部と、ｕ≧１かつｖ≧１の場合、行列Ｂのオーダリングを行ない、行列Ｂに対してｕ回の行の入れ替えおよびｖ回の列の入れ替えを行なった行列Ｂ′を生成し、行列Ａに対して行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なった行列Ａ(u)を生成して行列記憶部に記憶させ、単位行列Ｅに対して行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なった行列Ｅ(v)を生成して行列記憶部に記憶させ、ｕ≧１かつｖ＝０の場合、行列Ｂのオーダリングを行ない、行列Ｂに対してｕ回の行の入れ替えを行なった行列Ｂ′を生成し、行列Ａに対して行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なった行列Ａ(u)を生成して行列記憶部に記憶させ、ｕ＝０かつｖ≧１の場合、行列Ｂのオーダリングを行ない、行列Ｂに対してｖ回の列の入れ替えを行なった行列Ｂ′を生成し、単位行列Ｅに対して行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なった行列Ｅ(v)を生成して行列記憶部に記憶させるオーダリング部と、行列Ｂ′を下三角行列Ｌ′と上三角行列Ｕ′の積にＬＵ分解して、下三角行列Ｌ′を表わすデータおよび上三角行列Ｕ′を表わすデータを中間結果記憶部に記憶させるＬＵ分解部と、中間結果記憶部から上三角行列Ｕ′および下三角行列Ｌ′を表わすデータを読み出して、上三角行列Ｕ′をｍ個の基本上三角行列Ｕ′i（ｉ＝１〜ｍ）の積に分解し、下三角行列Ｌ′をｍ個の基本下三角行列Ｌ′i（ｉ＝１〜ｍ）の積に分解し、分解された行列Ｕ′i（ｉ＝１〜ｍ）および行列′Ｌi（ｉ＝１〜ｍ）を表わすデータを中間結果記憶部に記憶させる基本行列分解部と、中間結果記憶部から行列Ｕ′i（ｉ＝１〜ｍ）および行列Ｌ′i（ｉ＝１〜ｍ）を表わすデータを読み出して、行列Ｕ′i（ｉ＝１〜ｍ）および行列Ｌ′i（ｉ＝１〜ｍ）の非対角項の要素の符号を反転することによって、逆行列Ｕ′i-1（ｉ＝１〜ｍ）および逆行列Ｌ′i-1（ｉ＝１〜ｍ）を算出し、逆行列Ｕ′i-1（ｉ＝１〜ｍ）および逆行列Ｌ′i-1（ｉ＝１〜ｍ）を表わすデータを行列記憶部に記憶させる逆行列計算部とを備える。
【００１６】
本発明の別の局面に係る符号化装置は、要素数ｋの情報ベクトルＸから、式（Ａ５）に含まれる少なくとも１セットの隣接する２個以上の行列が、２個以上の行列の乗算結果である行列Ｃで置換されたパリティ生成式にしたがって２を法とする演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化装置であって、
Ｙ≡Ｕ1Ｕ2・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ2Ｌ1ＡＸ  ・・・（Ａ５）
ただし、（Ｘ，Ｙ）Tは、ベクトル（Ｘ，Ｙ）の転置を表わし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T≡０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、行列Ｌi（ｉ＝１〜ｍ）は、行列ＢをＬＵ分解した下三角行列Ｌの基本下三角行列であって、第ｉ列目が下三角行列Ｌの第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、行列Ｕi（ｉ＝１〜ｍ）は、行列ＢをＬＵ分解した上三角行列Ｕの基本上三角行列であって、第ｉ行目が上三角行列Ｕの第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、符号化装置は、パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、パリティベクトルＹを算出するために、パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部とを備え、行列積計算部は、情報ベクトルＸ、行列記憶部内の行列を表わすデータ、または中間結果記憶部内の中間結果を表わすデータを用いて、パリティ生成式に含まれる各行列乗算を実行して、パリティ生成式に含まれる複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部内に記憶させ、パリティ生成式に含まれる複数回の行列乗算が終了したら、パリティ生成式に含まれる複数回の行列乗算の終了後に得られるベクトルをパリティベクトルＹとして出力する。
【００１７】
好ましくは、パリティ生成式に含まれるすべての行列の非対角項の非零要素数の和は、式（Ａ５）に含まれるすべての行列の非対角項の非零要素数の和以下である。
【００１８】
好ましくは、符号化装置は、パリティベクトルＹを生成する前に、パリティ生成式に含まれる行列を生成する符号化装置であって、中間結果記憶部は、さらに、パリティ生成式に含まれる行列を生成する処理の中間結果を表わすデータを記憶し、行列積計算部は、さらに、式（Ａ５）に含まれる隣接する２個以上の行列の乗算を実行して、乗算結果である行列Ｃを表わすデータを出力し、符号化装置は、さらに、パリティ検査行列Ｈを行列Ａと行列Ｂに分解して、行列Ａを表わすデータを行列記憶部に記憶させる検査行列分解部と、行列Ｂを下三角行列Ｌと上三角行列Ｕの積にＬＵ分解して、下三角行列Ｌを表わすデータおよび上三角行列Ｕを表わすデータを中間結果記憶部に記憶させるＬＵ分解部と、中間結果記憶部から上三角行列Ｕおよび下三角行列Ｌを表わすデータを読み出して、上三角行列Ｕをｍ個の基本上三角行列Ｕi（ｉ＝１〜ｍ）の積に分解し、下三角行列Ｌをｍ個の基本下三角行列Ｌi（ｉ＝１〜ｍ）の積に分解し、分解された行列Ｕi（ｉ＝１〜ｍ）および行列Ｌi（ｉ＝１〜ｍ）を表わすデータを中間結果記憶部に記憶させる基本行列分解部と、乗算結果である行列Ｃの非零要素数と式（Ａ５）に含まれる行列のうち隣接する２個以上の行列を除いた行列の非対角項の非零要素数の和が、式（Ａ５）に含まれるすべての行列の非対角項の非零要素数の和以下である場合に、中間結果記憶部に記憶されている式（Ａ５）に含まれる行列のうち隣接する２個以上の行列を除いた行列を表わすデータと、行列Ｃを表わすデータとを行列記憶部に記憶する行列乗算数削減部とを備える。
【００１９】
本発明の別の局面に係る符号化装置は、要素数ｋの情報ベクトルＸから、式（Ａ６）に含まれる少なくとも１セットの隣接する２個以上の行列が、２個以上の行列の乗算結果である行列Ｃで置換されたパリティ生成式にしたがって実数演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化装置であって、
Ｙ＝−Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1ＡＸ  ・・・（Ａ６）
ただし、（Ｘ，Ｙ）Tは、ベクトル（Ｘ，Ｙ）の転置を表わし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T＝０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、行列Ｌi-1（ｉ＝１〜ｍ）は行列Ｌiの逆行列であり、行列Ｌiは行列ＢをＬＵ分解した下三角行列Ｌの基本下三角行列であって、第ｉ列目が下三角行列Ｌの第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、行列Ｕi-1（ｉ＝１〜ｍ）は行列Ｕiの逆行列であり、行列Ｕiは、行列ＢをＬＵ分解した上三角行列Ｕの基本上三角行列であって、第ｉ行目が上三角行列Ｕの第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、符号化装置は、パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、パリティベクトルＹを算出するために、パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部と、行列積計算部から出力されるベクトルの符号を反転してパリティベクトルＹとして出力する符号反転部とを備え、行列積計算部は、情報ベクトルＸ、行列記憶部内の行列を表わすデータ、または中間結果記憶部内の中間結果を表わすデータを用いて、パリティ生成式に含まれる各行列乗算を実行して、パリティ生成式に含まれる複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部内に記憶させ、パリティ生成式に含まれる複数回の行列乗算が終了したら、パリティ生成式に含まれる複数回の行列乗算の終了後に得られるベクトルを符号反転部に出力する。
【００２０】
好ましくは、パリティ生成式に含まれるすべての行列の非対角項の非零要素数の和は、式（Ａ６）に含まれるすべての行列の非対角項の非零要素数の和以下である。
【００２１】
好ましくは、符号化装置は、パリティベクトルＹを生成する前に、パリティ生成式に含まれる行列を生成する符号化装置であって、中間結果記憶部は、さらに、パリティ生成式に含まれる行列を生成する処理の中間結果を表わすデータを記憶し、行列積計算部は、さらに、式（Ａ６）に含まれる隣接する２個以上の行列の乗算を実行して、乗算結果である行列Ｃを表わすデータを出力し、符号化装置は、さらに、パリティ検査行列Ｈを行列Ａと行列Ｂに分解して、行列Ａを表わすデータを行列記憶部に記憶させる検査行列分解部と、行列Ｂを下三角行列Ｌと上三角行列Ｕの積にＬＵ分解して、下三角行列Ｌを表わすデータおよび上三角行列Ｕを表わすデータを中間結果記憶部に記憶させるＬＵ分解部と、中間結果記憶部から上三角行列Ｕおよび下三角行列Ｌを表わすデータを読み出して、上三角行列Ｕをｍ個の基本上三角行列Ｕi（ｉ＝１〜ｍ）の積に分解し、下三角行列Ｌをｍ個の基本下三角行列Ｌi（ｉ＝１〜ｍ）の積に分解し、分解された行列Ｕi（ｉ＝１〜ｍ）および行列Ｌi（ｉ＝１〜ｍ）を表わすデータを中間結果記憶部に記憶させる基本行列分解部と、中間結果記憶部から行列Ｕi（ｉ＝１〜ｍ）および行列Ｌi（ｉ＝１〜ｍ）を表わすデータを読み出して、行列Ｕi（ｉ＝１〜ｍ）および行列Ｌi（ｉ＝１〜ｍ）の非対角項の要素の符号を反転することによって、逆行列Ｕi-1（ｉ＝１〜ｍ）および逆行列Ｌi-1（ｉ＝１〜ｍ）を算出し、逆行列Ｕi-1（ｉ＝１〜ｍ）および逆行列Ｌi-1（ｉ＝１〜ｍ）を表わすデータを中間結果記憶部に記憶させる逆行列計算部と、乗算結果である行列Ｃの非零要素数と式（Ａ６）に含まれる行列のうち隣接する２個以上の行列を除いた行列の非対角項の非零要素数の和が、式（Ａ６）に含まれるすべての行列の非対角項の非零要素数の和以下である場合に、中間結果記憶部に記憶されている式（Ａ６）に含まれる行列のうち隣接する２個以上の行列を除いた行列を表わすデータと、行列Ｃを表わすデータとを行列記憶部に記憶する行列乗算数削減部とを備える。
【００２２】
本発明の別の局面に係る符号化装置は、要素数ｋの情報ベクトルＸから、ｕ≧１かつｖ≧１のときには式（Ａ７−１）、ｕ≧１かつｖ＝０のときには式（Ａ７−２）、ｕ＝０かつｖ≧１のときには式（Ａ７−３）に含まれる少なくとも１セットの隣接する２個以上の行列が、２個以上の行列の乗算結果である行列Ｃで置換されたパリティ生成式にしたがって２を法とする演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化装置であって、
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ａ７−１）
Ｙ≡Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ａ７−２）
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1ＡＸ  ・・・（Ａ７−３）
ただし、（Ｘ，Ｙ）Tは、ベクトル（Ｘ，Ｙ）の転置を表わし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T≡０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、ｕ≧１かつｖ≧１の場合には、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替え、およびｖ回の列の入れ替えを行なったものであり、行列Ａ(u)は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なったものであり、行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものであり、ｕ≧１かつｖ＝０の場合には、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替えを行なったものであり、行列Ａ(u)は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なったものであり、ｕ＝０かつｖ≧１の場合には、行列Ｂ′は、行列Ｂに対して、ｖ回の列の入れ替えを行なったものであり、行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものであり、行列Ｌ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列であって、第ｉ列目が下三角行列Ｌ′の第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、行列Ｕ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列であって、第ｉ行目が上三角行列Ｕ′の第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、符号化装置は、パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、パリティベクトルＹを算出するために、パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部とを備え、行列積計算部は、情報ベクトルＸ、行列記憶部内の行列を表わすデータ、または中間結果記憶部内の中間結果を表わすデータを用いて、パリティ生成式に含まれる各行列乗算を実行して、パリティ生成式に含まれる複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部内に記憶させ、パリティ生成式に含まれる複数回の行列乗算が終了したら、パリティ生成式に含まれる複数回の行列乗算の終了後に得られるベクトルをパリティベクトルＹとして出力する。
【００２３】
好ましくは、パリティ生成式に含まれるすべての行列の非対角項の非零要素数の和は、式（Ａ７−１）、（Ａ７−２）、または（Ａ７−３）に含まれるすべての行列の非対角項の非零要素数の和以下である。
【００２４】
好ましくは、符号化装置は、パリティベクトルＹを生成する前に、パリティ生成式に含まれる行列を生成する符号化装置であって、中間結果記憶部は、さらに、パリティ生成式に含まれる行列を生成する処理の中間結果を表わすデータを記憶し、行列積計算部は、さらに、式（Ａ７−１）、（Ａ７−２）、または（Ａ７−３）に含まれる隣接する２個以上の行列の乗算を実行して、乗算結果である行列Ｃを表わすデータを出力し、符号化装置は、さらに、パリティ検査行列Ｈを行列Ａと行列Ｂに分解して、行列Ａおよび行列Ｂを表わすデータを中間結果記憶部に記憶させる検査行列分解部と、ｕ≧１かつｖ≧１の場合、中間結果記憶部から行列Ａおよび行列Ｂを表わすデータを読み出して、行列Ｂのオーダリングを行ない、行列Ｂに対してｕ回の行の入れ替えおよびｖ回の列の入れ替えを行なった行列Ｂ′を生成し、行列Ａに対して行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なった行列Ａ(u)を生成して中間結果記憶部に記憶させ、単位行列Ｅに対して行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なった行列Ｅ(v)を生成して中間結果記憶部に記憶させ、ｕ≧１かつｖ＝０の場合、中間結果記憶部から行列Ａおよび行列Ｂを表わすデータを読み出して、行列Ｂのオーダリングを行ない、行列Ｂに対してｕ回の行の入れ替えを行なった行列Ｂ′を生成し、行列Ａに対して行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なった行列Ａ(u)を生成して中間結果記憶部に記憶させ、ｕ＝０かつｖ≧１の場合、中間結果記憶部から行列Ｂを表わすデータを読み出して、行列Ｂのオーダリングを行ない、行列Ｂに対してｖ回の列の入れ替えを行なった行列Ｂ′を生成し、単位行列Ｅに対して行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なった行列Ｅ(v)を生成して中間結果記憶部に記憶させるオーダリング部と、行列Ｂ′を下三角行列Ｌ′と上三角行列Ｕ′の積にＬＵ分解して、下三角行列Ｌ′を表わすデータおよび上三角行列Ｕ′を表わすデータを中間結果記憶部に記憶させるＬＵ分解部と、中間結果記憶部から上三角行列Ｕ′および下三角行列Ｌ′を表わすデータを読み出して、上三角行列Ｕ′をｍ個の基本上三角行列Ｕ′i（ｉ＝１〜ｍ）の積に分解し、下三角行列Ｌ′をｍ個の基本下三角行列Ｌ′i（ｉ＝１〜ｍ）の積に分解し、分解された行列Ｕ′i（ｉ＝１〜ｍ）および行列′Ｌi（ｉ＝１〜ｍ）を表わすデータを中間結果記憶部に記憶させる基本行列分解部と、乗算結果である行列Ｃの非零要素数と式（Ａ７−１）、（Ａ７−２）、または（Ａ７−３）に含まれる行列のうち隣接する２個以上の行列を除いた行列の非対角項の非零要素数の和が、式（Ａ７−１）、（Ａ７−２）、または（Ａ７−３）に含まれるすべての行列の非対角項の非零要素数の和以下である場合に、中間結果記憶部に記憶されている式（Ａ７−１）、（Ａ７−２）、または（Ａ７−３）に含まれる行列のうち隣接する２個以上の行列を除いた行列を表わすデータと、行列Ｃを表わすデータとを行列記憶部に記憶する行列乗算数削減部とを備える。
【００２５】
本発明の別の局面に係る符号化装置は、要素数ｋの情報ベクトルＸから、ｕ≧１かつｖ≧１のときには式（Ａ８−１）、ｕ≧１かつｖ＝０のときには式（Ａ８−２）、ｕ＝０かつｖ≧１のときには式（Ａ８−３）に含まれる少なくとも１セットの隣接する２個以上の行列が、２個以上の行列の乗算結果である行列Ｃで置換されたパリティ生成式にしたがって実数演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化装置であって、
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ  ・・・（Ａ８−１）
Ｙ＝−Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(V)Ｘ  ・・・（Ａ８−２）
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1ＡＸ  ・・・（Ａ８−３）
ただし、（Ｘ，Ｙ）Tは、ベクトル（Ｘ，Ｙ）の転置を表わし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T＝０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、ｕ≧１かつｖ≧１の場合には、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替え、およびｖ回の列の入れ替えを行なったものであり、行列Ａ(u)は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なったものであり、行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものであり、ｕ≧１かつｖ＝０の場合には、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替えを行なったものであり、行列Ａ(u)は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なったものであり、ｕ＝０かつｖ≧１の場合には、行列Ｂ′は、行列Ｂに対して、ｖ回の列の入れ替えを行なったものであり、行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものであり、行列Ｌ′i-1（ｉ＝１〜ｍ）は行列Ｌ′iの逆行列であり、行列Ｌ′iは、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列であって、第ｉ列目が下三角行列Ｌ′の第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、行列Ｕ′i-1（ｉ＝１〜ｍ）は行列Ｕ′iの逆行列であり、行列Ｕ′iは、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列であって、第ｉ行目が上三角行列Ｕ′の第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、符号化装置は、パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、パリティベクトルＹを算出するために、パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部と、行列積計算部から出力されるベクトルの符号を反転してパリティベクトルＹとして出力する符号反転部とを備え、行列積計算部は、情報ベクトルＸ、行列記憶部内の行列を表わすデータ、または中間結果記憶部内の中間結果を表わすデータを用いて、パリティ生成式に含まれる各行列乗算を実行して、パリティ生成式に含まれる複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部内に記憶させ、パリティ生成式に含まれる複数回の行列乗算が終了したら、パリティ生成式に含まれる複数回の行列乗算の終了後に得られるベクトルを符号反転部に出力する。
【００２６】
好ましくは、パリティ生成式に含まれるすべての行列の非対角項の非零要素数の和は、式（Ａ８−１）、（Ａ８−２）、または（Ａ８−３）に含まれるすべての行列の非対角項の非零要素数の和以下である。
【００２７】
好ましくは、符号化装置は、パリティベクトルＹを生成する前に、パリティ生成式に含まれる行列を生成する符号化装置であって、中間結果記憶部は、さらに、パリティ生成式に含まれる行列を生成する処理の中間結果を表わすデータを記憶し、行列積計算部は、さらに、式（Ａ８−１）、（Ａ８−２）、または（Ａ８−３）に含まれる隣接する２個以上の行列の乗算を実行して、乗算結果である行列Ｃを表わすデータを出力し、符号化装置は、さらに、パリティ検査行列Ｈを行列Ａと行列Ｂに分解して、行列Ａおよび行列Ｂを表わすデータを中間結果記憶部に記憶させる検査行列分解部と、ｕ≧１かつｖ≧１の場合、中間結果記憶部から行列Ａおよび行列Ｂを表わすデータを読み出して、行列Ｂのオーダリングを行ない、行列Ｂに対してｕ回の行の入れ替えおよびｖ回の列の入れ替えを行なった行列Ｂ′を生成し、行列Ａに対して行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なった行列Ａ(u)を生成して中間結果記憶部に記憶させ、単位行列Ｅに対して行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なった行列Ｅ(v)を生成して中間結果記憶部に記憶させ、ｕ≧１かつｖ＝０の場合、中間結果記憶部から行列Ａおよび行列Ｂを表わすデータを読み出して、行列Ｂのオーダリングを行ない、行列Ｂに対してｕ回の行の入れ替えを行なった行列Ｂ′を生成し、行列Ａに対して行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なった行列Ａ(u)を生成して中間結果記憶部に記憶させ、ｕ＝０かつｖ≧１の場合、中間結果記憶部から行列Ｂを表わすデータを読み出して、行列Ｂのオーダリングを行ない、行列Ｂに対してｖ回の列の入れ替えを行なった行列Ｂ′を生成し、単位行列Ｅに対して行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なった行列Ｅ(v)を生成して中間結果記憶部に記憶させるオーダリング部と、行列Ｂ′を下三角行列Ｌ′と上三角行列Ｕ′の積にＬＵ分解して、下三角行列Ｌ′を表わすデータおよび上三角行列Ｕ′を表わすデータを中間結果記憶部に記憶させるＬＵ分解部と、中間結果記憶部から上三角行列Ｕ′および下三角行列Ｌ′を表わすデータを読み出して、上三角行列Ｕ′をｍ個の基本上三角行列Ｕ′i（ｉ＝１〜ｍ）の積に分解し、下三角行列Ｌ′をｍ個の基本下三角行列Ｌ′i（ｉ＝１〜ｍ）の積に分解し、分解された行列Ｕ′i（ｉ＝１〜ｍ）および行列′Ｌi（ｉ＝１〜ｍ）を表わすデータを中間結果記憶部に記憶させる基本行列分解部と、中間結果記憶部から行列Ｕ′i（ｉ＝１〜ｍ）および行列Ｌ′i（ｉ＝１〜ｍ）を表わすデータを読み出して、行列Ｕ′i（ｉ＝１〜ｍ）および行列Ｌ′i（ｉ＝１〜ｍ）の非対角項の要素の符号を反転することによって、逆行列Ｕ′i-1（ｉ＝１〜ｍ）および逆行列Ｌ′i-1（ｉ＝１〜ｍ）を算出し、逆行列Ｕ′i-1（ｉ＝１〜ｍ）および逆行列Ｌ′i-1（ｉ＝１〜ｍ）を表わすデータを中間結果記憶部に記憶させる逆行列計算部と、乗算結果である行列Ｃの非零要素数と式（Ａ８−１）、（Ａ８−２）、または（Ａ８−３）に含まれる行列のうち隣接する２個以上の行列を除いた行列の非対角項の非零要素数の和が、式（Ａ８−１）、（Ａ８−２）、または（Ａ８−３）に含まれるすべての行列の非対角項の非零要素数の和以下である場合に、���間結果記憶部に記憶されている式（Ａ８−１）、（Ａ８−２）、または（Ａ８−３）に含まれる行列のうち隣接する２個以上の行列を除いた行列を表わすデータと、行列Ｃを表わすデータとを行列記憶部に記憶する行列乗算数削減部とを備える。
【００２８】
好ましくは、行列積計算部は、パリティ生成式に含まれる複数回の行列乗算のうち、パリティ生成式の右側にある行列乗算から順次実行する。
【００２９】
好ましくは、行列積計算部は、パリティ生成式に含まれる複数回の行列乗算のうち２個以上の行列乗算を並行して実行する。
【００３０】
本発明の別の局面に係る符号化プログラムは、要素数ｋの情報ベクトルＸから式（Ａ９）で表わされるパリティ生成式にしたがって２を法とする演算を行なうことによって、要素数ｍのパリティベクトルＹを生成する符号化プログラムであって、
Ｙ≡Ｕ1Ｕ2・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ2Ｌ1ＡＸ  ・・・（Ａ９）
ただし、（Ｘ，Ｙ）Tは、ベクトル（Ｘ，Ｙ）の転置を表わし、パリティ検査行列Ｈは、Ｈ（Ｘ，Ｙ）T≡０を満たすｍ行ｎ列の行列であり、行列Ａは、パリティ検査行列Ｈの第１列目〜第ｋ列目からなり、行列Ｂは、パリティ検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなり、ｎ＝ｋ＋ｍであり、行列Ｌi（ｉ＝１〜ｍ）は、行列ＢをＬＵ分解した下三角行列Ｌの基本下三角行列であって、第ｉ列目が下三角行列Ｌの第ｉ列目と一致し、その他の列は非対角項が０、対角項が１である行列であり、行列Ｕi（ｉ＝１〜ｍ）は、行列ＢをＬＵ分解した上三角行列Ｕの基本上三角行列であって、第ｉ行目が上三角行列Ｕの第ｉ行目と一致し、その他の行は非対角項が０、対角項が１である行列であり、符号化プログラムは、コンピュータを、パリティ生成式に含まれる複数個の行列を表わすデータを記憶する行列記憶部と、パリティ生成式に含まれる複数回の行列乗算の中間結果を表わすデータを記憶する中間結果記憶部と、パリティベクトルＹを算出するために、パリティ生成式に含まれる複数回の行列乗算を実行する行列積計算部として機能させ、行列積計算部は、情報ベクトルＸ、行列記憶部内の行列を表わすデータ、または中間結果記憶部内の中間結果を表わすデータを用いて、パリティ生成式に含まれる各行列乗算を実行して、パリティ生成式に含まれる複数回の行列乗算が終了するまでの間は、該計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部内に記憶させ、パリティ生成式に含まれる複数回の行列乗算が終了したら、パリティ生成式に含まれる複数回の行列乗算の終了後に得られるベクトルをパリティベクトルＹとして出力する。
【００３１】
好ましくは、  符号化プログラムは、パリティベクトルＹを生成する前に、パリティ生成式に含まれる行列を生成する符号化プログラムであって、中間結果記憶部は、さらに、パリティ生成式に含まれる行列を生成する処理の中間結果を表わすデータを記憶し、符号化プログラムは、コンピュータを、さらに、パリティ検査行列Ｈを行列Ａと行列Ｂに分解して、行列Ａを表わすデータを行列記憶部に記憶させる検査行列分解部と、行列Ｂを下三角行列Ｌと上三角行列Ｕの積にＬＵ分解して、下三角行列Ｌを表わすデータおよび上三角行列Ｕを表わすデータを中間結果記憶部に記憶させるＬＵ分解部と、中間結果記憶部から上三角行列Ｕおよび下三角行列Ｌを表わすデータを読み出して、上三角行列Ｕをｍ個の基本上三角行列Ｕi（ｉ＝１〜ｍ）の積に分解し、下三角行列Ｌをｍ個の基本下三角行列Ｌi（ｉ＝１〜ｍ）の積に分解し、分解された行列Ｕi（ｉ＝１〜ｍ）および行列Ｌi（ｉ＝１〜ｍ）を表わすデータを行列記憶部に記憶させる基本行列分解部として機能させる。
【発明の効果】
【００３２】
本発明によれば、従来よりも少ない計算量でパリティを計算することができる。
【図面の簡単な説明】
【００３３】
【図１】本発明の実施形態の通信システムの構成の一例を示す図である。
【図２】第１の実施形態の符号化器の構成を表わす図である。
【図３】第１の実施形態の行列分解処理のフローチャートである。
【図４】第１の実施形態の符号化ベクトル生成処理のフローチャートである。
【図５】第１の実施形態の変形例１の符号化器の構成を表わす図である。
【図６】第１の実施形態の変形例１の行列分解処理のフローチャートである。
【図７】第１の実施形態の変形例１の符号化ベクトル生成処理のフローチャートである。
【図８】第２の実施形態の符号化器の構成を表わす図である。
【図９】第２の実施形態の行列分解処理のフローチャートである。
【図１０】第２の実施形態の符号化ベクトル生成処理のフローチャートである。
【図１１】第２の実施形態の変形例１の符号化器の構成を表わす図である。
【図１２】第２の実施形態の変形例１の行列分解処理のフローチャートである。
【図１３】第２の実施形態の変形例１の符号化ベクトル生成処理のフローチャートである。
【図１４】第３の実施形態の符号化器の構成を表わす図である。
【図１５】第３の実施形態の行列分解処理のフローチャートである。
【図１６】第３の実施形態の符号化ベクトル生成処理のフローチャートである。
【図１７】第３の実施形態の変形例１の符号化器の構成を表わす図である。
【図１８】第３の実施形態の変形例１の行列分解処理のフローチャートである。
【図１９】第３の実施形態の変形例１の符号化ベクトル生成処理のフローチャートである。
【図２０】第４の実施形態の符号化器の構成を表わす図である。
【図２１】第４の実施形態の行列分解処理のフローチャートである。
【図２２】第４の実施形態の符号化ベクトル生成処理のフローチャートである。
【図２３】第４の実施形態の変形例１の符号化器の構成を表わす図である。
【図２４】第４の実施形態の変形例１の行列分解処理のフローチャートである。
【図２５】第４の実施形態の変形例１の符号化ベクトル生成処理のフローチャートである。
【図２６】第５の実施形態の符号化器の構成を表わす図である。
【図２７】第５の実施形態の符号化ベクトル生成処理のフローチャートである。
【発明を実施するための形態】
【００３４】
（全体構成）
以下、本発明に係る実施の形態について図面を参照して説明する。
【００３５】
図１は、本発明の実施形態の通信システムの構成の一例を示す図である。
図１の通信システムにおいて、送信装置１は、符号化器２と変調器３とを備え、受信装置４は、復調器６と誤り訂正復号化器７とを備える。
【００３６】
符号化器２は、ｋビットの情報ビットからなる情報ベクトルＸに対し、ｍビットのパリティビットからなるパリティベクトルＹを付加して、ｎ（＝（ｋ＋ｍ））ビットのＬＤＰＣ符号（低密度パリティ検査符号）Ｚを生成する。パリティベクトルＹの生成のために用いられるパリティ検査行列Ｈ（ｍ行、ｎ列）においては、行数ｍが冗長ビット数に対応し、列数ｎが符号ビット数に対応する。
【００３７】
変調器３は、通信路７の構成に応じて、ＬＤＰＣ符号Ｚに対して、振幅変調、位相変調、コード変調、周波数変調または直行周波数分割多重変調などの変調を行なう。
【００３８】
復調器６は、通信路７を介して受信した変調信号に対して、この通信路７における送信形態に応じて復調処理を行なうことによって、ｎビットの多値量子化（Ｌを多値数とすると、Ｌ≧２）されたデジタル符号を出力する。たとえば、振幅変調、位相変調、コード変調、周波数変調および直行周波数分割多重変調等の場合、復調器において、振幅復調、位相復調、コード復調、および周波数復調等の処理が行なわれる。
【００３９】
誤り訂正復号化器５は、復調器から出力されるｎビットの符号にパリティ検査行列Ｈを適用して、ｋビットの情報ビットからなる情報ベクトルＸを復元する。
【００４０】
［第１の実施形態］
第１の実施形態の符号化器は、２を法とする演算を行なう。
【００４１】
（符号化アルゴリズム）
符号化器は、ｋ個の情報ビットｘ1、ｘ2、・・・、ｘkからなる情報ベクトルＸを受けて、２を法とする演算を行なうことによって、以下の式を満たすようなｍ個のパリティビットｙ1、ｙ2、・・・、ｙmからなるパリティベクトルＹを生成する。
【００４２】
Ｈ（Ｘ，Ｙ）T≡０  ・・・（Ｂ１）
ここで、Ｈはパリティ検査行列（以下、検査行列とも言う）であり、ｍ行ｎ列（＝ｋ＋ｍ）の行列である。
【００４３】
（Ｘ，Ｙ）Tは、情報ベクトルとパリティベクトルからなるベクトルの転置を表わす。
式（Ｂ１）は、２を法とする演算の場合には、次のように変形される。
【００４４】
ＢＹ≡ＡＸ  ・・・（Ｂ２）
ここで、行列Ａは、検査行列Ｈの第１列目〜第ｋ列目からなるｍ行ｋ列の行列である。行列Ｂは、検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなるｍ行ｍ列の行列である。
【００４５】
行列ＢをＬＵ分解すると、式（Ｂ２）は以下の式に変形される。
ＬＵＹ≡ＡＸ  ・・・（Ｂ３）
ここで、Ｌは下三角行列であり、Ｕは上三角行列である。
【００４６】
式（Ｂ３）より、列ベクトルＹは、以下の式で表わされる。
Ｙ≡Ｕ-1Ｌ-1ＡＸ  ・・・（Ｂ４）
上三角行列Ｕは、以下の式のように、基本上三角行列Ｕi（i＝1〜m）の積に分解される。
【００４７】
Ｕ≡ＵmＵm-1・・・Ｕ2Ｕ1  ・・・（Ｂ５）
式（Ｂ５）より、逆行列Ｕ-1は、以下の式で表わされる。
【００４８】
Ｕ-1≡Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1  ・・・（Ｂ６）
下三角行列Ｌは、以下の式のように、基本下三角行列Ｌi（i＝1〜m）の積に分解される。
【００４９】
Ｌ≡Ｌ1Ｌ2・・・Ｌm-1Ｌm  ・・・（Ｂ７）
式（Ｂ７）より、逆行列Ｌ-1は、以下の式で表わされる。
【００５０】
Ｌ-1≡Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1  ・・・（Ｂ８）
式（Ｂ６）および式（Ｂ８）によって、式（Ｂ４）は以下の式に変形される。
【００５１】
Ｙ≡（Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1）（Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1）ＡＸ  ・・・（Ｂ９）
ところで、２を法とする演算の場合には、基本上三角行列Ｕi(i=1〜m)、基本下三角行列Ｌi(i=1〜m)は、以下のような性質を有する。
【００５２】
Ｕi≡（Ｕi）-1  ・・・（Ｂ１０）
Ｌi≡（Ｌi）-1  ・・・（Ｂ１１）
式（Ｂ１０）および式（Ｂ１１）によって、式（Ｂ９）は以下の式に変形される。
【００５３】
Ｙ≡Ｕ1Ｕ2・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ2Ｌ1ＡＸ  ・・・（Ｂ１２）
式（Ｂ１２）で算出されるパリティベクトルＹと、情報ベクトルＸを用いて、符号化ベクトルＺは、以下の式で表わされる。
【００５４】
Ｚ≡（Ｘ，Ｙ）  ・・・（Ｂ１３）
ここで、符号化ベクトルＺの第１ビット〜第ｋビットは、情報ベクトルＸのビットであり、符号化ベクトルＺの第（ｋ＋１）ビット〜第ｎビットは、パリティベクトルＹのビットである。
【００５５】
（構成）
図２は、第１の実施形態の符号化器の構成を表わす図である。
【００５６】
図２を参照して、この符号化器２ａは、検査行列分解部１０と、ＬＵ分解部１４と、基本行列分解部１６と、中間結果記憶部１２と、行列記憶部１８と、行列積計算部１１と、配列部２０と、行列積計算制御部１２１とを備える。
【００５７】
検査行列分解部１０は、検査行列Ｈを行列Ａ、Ｂに分解して、行列Ａを表わすデータを行列記憶部１８に記憶させ、行列Ｂを表わすデータを中間結果記憶部１２に記憶させる。情報ベクトルＸの次元をｋ、パリティベクトルＹの次元をｍとし、ｋ＋ｍ＝ｎとしたときに、検査行列Ｈは、ｍ×ｎの行列である。検査行列分解部１０は、検査行列Ｈから第１列目〜第ｋ列目を抜き出して、行列Ａとし、第（ｋ＋１）列目から第ｎ列目までを抜き出して、行列Ｂとする。Ａは、ｍ×ｋの行列であり、Ｂは、ｍ×ｍの行列である。
【００５８】
ＬＵ分解部１４は、加算器１３および乗算器１５を備える。ＬＵ分解部１４は、Ｃｒｏｕｔ（クラウト）のアルゴリズムにしたがって、行列ＢをＬＵ分解して、下三角行列Ｌと、上三角行列Ｕとを生成する。
【００５９】
基本行列分解部１６は、上三角行列Ｕを式（Ｂ５）のように、基本上三角行列Ｕi（i＝1〜m）の積に分解する。また、基本行列分解部１６は、下三角行列Ｌを式（Ｂ７）のように、基本下三角行列Ｌi（i＝1〜m）の積に分解する。
【００６０】
基本上三角行列Ｕiは、第ｉ行が上三角行列Ｕの第i行であり、第ｉ行以外の行は、対角項の要素が１で、非対角項の要素が０であるような行列である。
【００６１】
たとえば、上三角行列Ｕが式（１）で表わされる場合には、基本上三角行列Ｕ1、Ｕ2、Ｕ3は、それぞれ、式（２）、式（３）、式（４）で表わされる。
【００６２】
【数１】
2011244500.tif 000003
【００６３】
基本下三角行列Ｌiは、第ｉ列が下三角行列Ｌの第i列であり、第ｉ列以外の列は、対角項の要素が１であり、非対角項の要素が０であるような行列である。
【００６４】
たとえば、下三角行列Ｌが式（５）で表わされる場合には、基本下三角行列Ｌ1、Ｌ2、Ｌ3は、それぞれ、式（６）、式（７）、式（８）で表わされる。
【００６５】
【数２】
2011244500.tif 000004
【００６６】
行列記憶部１８は、基本上三角行列Ｕ1、Ｕ2、・・・、Ｕmを表わすデータ、基本下三角行列Ｌm、Ｌm-1、・・・、Ｌ1を表わすデータ、および行列Ａを表わすデータを記憶する。
【００６７】
行列積計算部１１は、加算器１７および乗算器１９を備える。行列積計算部１１は、パリティベクトルＹを算出するために、式（Ｂ１２）に含まれる（２ｍ＋１）回の行列乗算を行列積計算制御部１２１に指示された順序で実行する。行列積計算部１１は、入力される情報ベクトルＸ、行列記憶部１８内の行列Ｕ1、Ｕ2、・・・、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ1、Ａを表わすデータ、および中間結果記憶部１２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行する。行列積計算部１１は、式（Ｂ１２）に含まれる（２ｍ＋１）回の行列乗算が終了するまでの間は、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部１２に記憶させる。
【００６８】
行列積計算制御部１２１は、パリティベクトルＹを算出するために、行列記憶部１８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕ2、Ｕ1の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部１１を制御する。また、行列積計算制御部１２１は、式（Ｂ１２）に含まれる（２ｍ＋１）回の行列乗算の終了後に、行列積計算部１１から計算結果であるパリティベクトルＹを出力させる。
【００６９】
中間結果記憶部１２は、式（Ｂ１２）に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部１２は、パリティベクトルＹの生成処理時に、式（Ｂ１２）に含まれる（２ｍ＋１）回の行列乗算の中間結果を表わすデータを記憶する。
【００７０】
配列部２０は、ｋビットの情報ベクトルＸと、算出されたｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する。
【００７１】
（行列分解処理）
図３は、第１の実施形態の行列分解処理のフローチャートである。
【００７２】
図３を参照して、検査行列分解部１０は、検査行列Ｈを行列Ａ、Ｂに分解する。検査行列分解部１０は、行列Ａを表わすデータを行列記憶部１８に記憶させ、行列Ｂを表わすデータを中間結果記憶部１２に記憶させる（ステップＳ１０１）。
【００７３】
次に、ＬＵ分解部１４は、中間結果記憶部１２から行列Ｂを表わすデータを読み出して、行列ＢをＬＵ分解して、下三角行列Ｌを表わすデータと、上三角行列Ｕを表わすデータとを中間結果記憶部１２に記憶させる（ステップＳ１０２）。
【００７４】
次に、基本行列分解部１６は、中間結果記憶部１２から上三角行列Ｕを表わすデータを読み出して、上三角行列Ｕを基本上三角行列Ｕ1、Ｕ2、・・・、Ｕmの積に分解して、基本上三角行列Ｕ1、Ｕ2、・・・、Ｕmを表わすデータを行列記憶部１８に記憶させる。また、基本行列分解部１６は、中間結果記憶部１２から下三角行列Ｌを表わすデータを読み出して、下三角行列Ｌを基本下三角行列Ｌ1、Ｌ2、・・・、Ｌmの積に分解して、基本下三角行列Ｌ1、Ｌ2、・・・、Ｌmを表わすデータを行列記憶部１８に記憶させる（ステップＳ１０３）。
【００７５】
（符号化ベクトル生成処理）
図４は、第１の実施形態の符号化ベクトル生成処理のフローチャートである。
【００７６】
図４を参照して、行列積計算制御部１２１は、行列記憶部１８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕ2、Ｕ1の順となるように行列間の順序を設定する（ステップＳ２０１）。
【００７７】
次に、行列積計算制御部１２１は、制御変数ｉを１に設定する（ステップＳ２０２）。
行列積計算制御部１２１は、行列積計算部１１を指示して、行列記憶部１８から第ｉ（＝１）順位の行列Ａを表わすデータを読み出させて、行列Ａと、入力された情報ベクトルＸとの積ＡＸを計算させる。行列積計算部１１は、乗算結果であるベクトルを中間結果Ｒとし、中間結果Ｒを表わすデータを中間結果記憶部１２に記憶させる（ステップＳ２０３）。
【００７８】
次に、行列積計算制御部１２１は、制御変数ｉをインクリメントする（ステップＳ２０４）。
【００７９】
行列積計算制御部１２１は、制御変数ｉが（２ｍ＋１）未満の場合には（ステップＳ２０５でＹＥＳ）、行列積計算部１１を指示して、行列記憶部１８から第ｉ順位の行列（これをＭａｔiとする）を表わすデータを読み出させるとともに、中間結果記憶部１２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部１１は、乗算結果であるベクトルを新たな中間結果Ｒとし、中間結果記憶部１２内の中間結果Ｒを表わすデータを更新する（ステップＳ２０６）。その後、ステップＳ２０４からの処理が繰返される。
【００８０】
制御変数ｉが（２ｍ＋１）となった場合には（ステップＳ２０５でＮＯ）、行列積計算制御部１２１は、行列積計算部１１を指示して、行列記憶部１８から第ｉ順位の行列（Ｍａｔi）を表わすデータを読み出させるとともに、中間結果記憶部１２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部１１は、乗算結果であるベクトルをパリティべクトルＹとして出力する（ステップＳ２０７）。
【００８１】
その後、配列部２０は、ｋビットの情報ベクトルＸとｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する（ステップＳ２０８）。
【００８２】
（第１の実施形態の効果）
以上のように、第１の実施形態によれば、符号化ベクトル生成処理時において、後退代入を行わずに、式（Ｂ１２）に従ってパリティベクトルＹを算出するので、少ない計算量で情報ベクトルＸの符号化を行なうことができる。特に、基本上三角行列Ｕi(i=1〜m)および基本下三角行列Ｌi(i=1〜m)は非零要素数が少ない行列のため、式（Ｂ１２）の演算の計算量が少ない。また、式（Ｂ１２）の右側にある行列乗算から順次実行してパリティベクトルＹを算出するので、各行列乗算の結果はベクトルとなり、中間結果を記憶するための容量を小さくすることができる。
【００８３】
また、行列分解処理時において、行列Ｂの逆行列を計算するという計算量の多い演算を行なうことなく、行列ＢのＬＵ分解、ＬＵ分解された上三角行列の基本上三角行列の積への分解、ＬＵ分解された下三角行列の基本下三角行列の積への分解を行なえばよいので、少ない計算量でパリティベクトルＹを生成するのに必要な行列を算出することができる。
【００８４】
［第１の実施形態の変形例１］
第１の実施形態の変形例１の符号化器は、実数演算を行なう。
【００８５】
（符号化アルゴリズム）
符号化器は、ｋ個の情報ビットｘ1、ｘ2、・・・、ｘkからなる情報ベクトルＸを受けて、実数演算を行なうことによって、以下の式を満たすようなｍ個のパリティビットｙ1、ｙ2、・・・、ｙmからなるパリティベクトルＹを生成する。
【００８６】
Ｈ（Ｘ，Ｙ）T＝０  ・・・（Ｃ１）
ここで、Ｈはパリティ検査行列（以下、検査行列とも言う）であり、ｍ行ｎ列（＝ｋ＋ｍ）の行列である。
【００８７】
（Ｘ，Ｙ）Tは、情報ベクトルとパリティベクトルからなるベクトルの転置を表わす。
式（Ｃ１）は、実数演算の場合には、次のように変形される。
【００８８】
ＢＹ＝−ＡＸ  ・・・（Ｃ２）
ここで、行列Ａは、検査行列Ｈの第１列目〜第ｋ列目からなるｍ行ｋ列の行列である。行列Ｂは、検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなるｍ行ｍ列の行列である。
【００８９】
行列ＢをＬＵ分解すると、式（Ｃ２）は以下の式に変形される。
ＬＵＹ＝−ＡＸ  ・・・（Ｃ３）
ここで、Ｌは下三角行列であり、Ｕは上三角行列である。
【００９０】
式（Ｃ３）より、列ベクトルＹは、以下の式で表わされる。
Ｙ＝−Ｕ-1Ｌ-1ＡＸ  ・・・（Ｃ４）
上三角行列Ｕは、以下の式のように、基本上三角行列Ｕi（i＝1〜m）の積に分解される。
【００９１】
Ｕ＝ＵmＵm-1・・・Ｕ2Ｕ1  ・・・（Ｃ５）
式（Ｃ５）より、逆行列Ｕ-1は、以下の式で表わされる。
【００９２】
Ｕ-1＝Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1  ・・・（Ｃ６）
ここで、Ｕi-1は、対角項の要素が１であり、かつ非対角項の要素はＵiの要素の符号を反転したものである。
【００９３】
下三角行列Ｌは、以下の式のように、基本下三角行列Ｌi（i＝1〜m）の積に分解される。
【００９４】
Ｌ＝Ｌ1Ｌ2・・・Ｌm-1Ｌm  ・・・（Ｃ７）
式（Ｃ７）より、逆行列Ｌ-1は、以下の式で表わされる。
【００９５】
Ｌ-1＝Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1  ・・・（Ｃ８）
ここで、Ｌi-1は、対角項の要素が１であり、かつ非対角項の要素はＬiの要素の符号を反転したものである。
【００９６】
式（Ｃ６）および式（Ｃ８）によって、式（Ｃ４）は以下の式に変形される。
Ｙ＝−Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1ＡＸ  ・・・（Ｃ９）
式（Ｃ９）で算出されるパリティベクトルＹと、情報ベクトルＸを用いて、符号化ベクトルＺは、以下の式で表わされる。
【００９７】
Ｚ＝（Ｘ，Ｙ）  ・・・（Ｃ１０）
ここで、符号化ベクトルＺの第１ビット〜第ｋビットは、情報ベクトルＸのビットであり、符号化ベクトルＺの第（ｋ＋１）ビット〜第ｎビットは、パリティベクトルＹのビットである。
【００９８】
（構成）
図５は、第１の実施形態の変形例１の符号化器の構成を表わす図である。
【００９９】
図５を参照して、この符号化器２ｂは、第１の実施形態と同様の、検査行列分解部１０と、ＬＵ分解部１４と、基本行列分解部１６と、配列部２０とを備える。これらについては説明を繰返さない。
【０１００】
また、符号化器２ｂは、行列記憶部２８と、逆行列計算部２３と、行列積計算部２１と、中間結果記憶部２２と、符号反転部９９と、行列積計算制御部１２２とを備える。
【０１０１】
逆行列計算部２３は、中間結果記憶部２２から基本上三角行列Ｕ1、Ｕ2、・・・、Ｕmおよび基本下三角行列Ｌ1、Ｌ2、・・・、Ｌmを表わすデータを読み出して、行列Ｕ1、Ｕ2、・・・、Ｕm、Ｌ1、Ｌ2、・・・、Ｌmの非対角項の要素の符号を反転することによって、行列Ｕ1、Ｕ2、・・・、Ｕm、Ｌ1、Ｌ2、・・・、Ｌmの逆行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1を算出し、逆行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1を表わすデータを行列記憶部２８に記憶させる。
【０１０２】
たとえば、行列Ｕ4が式（９）で表わされる場合には、逆行列Ｕ4-1は、式（１０）で表わされる。
【０１０３】
【数３】
2011244500.tif 000005
【０１０４】
たとえば、行列Ｌ4が式（１１）で表わされる場合には、逆行列Ｌ4-1は、式（１２）で表わされる。
【０１０５】
【数４】
2011244500.tif 000006
【０１０６】
行列記憶部２８は、基本上三角行列の逆行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1を表わすデータ、基本下三角行列の逆行列Ｌm-1、Ｌm-1-1、・・・、Ｌ1-1を表わすデータ、および行列Ａを表わすデータを記憶する。
【０１０７】
行列積計算部２１は、加算器２７および乗算器２９を備える。行列積計算部２１は、パリティベクトルＹを算出するために、式（Ｃ９）に含まれる（２ｍ＋１）回の行列乗算を行列積計算制御部１２２に指示された順序で実行する。行列積計算部２１は、入力される情報ベクトルＸ、行列記憶部２８内の行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1、Ｌm-1、Ｌm-1-1、・・・、Ｌ1-1、Ａを表わすデータ、および中間結果記憶部２２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行する。行列積計算部２１は、式（Ｃ９）に含まれる（２ｍ＋１）回の行列乗算が終了するまでの間は、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部２２に記憶させる。
【０１０８】
行列積計算制御部１２２は、パリティベクトルＹを算出するために、行列記憶部２８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1-1、Ｌm-1、Ｕm-1、Ｕm-1-1、・・・、Ｕ2-1、Ｕ1-1の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部２１を制御する。また、行列積計算制御部１２２は、式（Ｃ９）に含まれる（２ｍ＋１）回の行列乗算の終了後に、行列積計算部２１から計算結果であるベクトルＹ′（＝Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1ＡＸ）を符号反転部９９へ出力させる。
【０１０９】
中間結果記憶部２２は、式（Ｃ９）に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部２２は、パリティベクトルＹの生成処理時に、式（Ｃ９）に含まれる（２ｍ＋１）回の行列乗算の中間結果を表わすデータを記憶する。
【０１１０】
符号反転部９９は、ベクトルＹ′の符号を反転して（つまり、ベクトルの各要素の符号を反転して）、それをパリティベクトルＹとして出力する。
【０１１１】
（行列分解処理）
図６は、第１の実施形態の変形例１の行列分解処理のフローチャートである。
【０１１２】
図６を参照して、検査行列分解部１０は、検査行列Ｈを行列Ａ、Ｂに分解する。検査行列分解部１０は、行列Ａを表わすデータを行列記憶部２８に記憶させ、行列Ｂを表わすデータを中間結果記憶部２２に記憶させる（ステップＳ３０１）。
【０１１３】
次に、ＬＵ分解部１４は、中間結果記憶部２２から行列Ｂを表わすデータを読み出して、行列ＢをＬＵ分解して、下三角行列Ｌを表わすデータと、上三角行列Ｕを表わすデータとを中間結果記憶部２２に記憶させる（ステップＳ３０２）。
【０１１４】
次に、基本行列分解部１６は、中間結果記憶部２２から上三角行列Ｕを表わすデータを読み出して、上三角行列Ｕを基本上三角行列Ｕ1、Ｕ2、・・・、Ｕmの積に分解して、基本上三角行列Ｕ1、Ｕ2、・・・、Ｕmを表わすデータを中間結果記憶部２２に記憶させる。また、基本行列分解部１６は、中間結果記憶部２２から下三角行列Ｌを表わすデータを読み出して、下三角行列Ｌを基本下三角行列Ｌ1、Ｌ2、・・・、Ｌmの積に分解して、基本下三角行列Ｌ1、Ｌ2、・・・、Ｌmを表わすデータを中間結果記憶部２２に記憶させる（ステップＳ３０３）。
【０１１５】
逆行列計算部２３は、中間結果記憶部２２から基本上三角行列Ｕ1、Ｕ2、・・・、Ｕmおよび基本下三角行列Ｌ1、Ｌ2、・・・、Ｌmを表わすデータを読み出して、行列Ｕ1、Ｕ2、・・・、Ｕm、Ｌ1、Ｌ2、・・・、Ｌmの非対角項の要素の符号を反転することによって、行列Ｕ1、Ｕ2、・・・、Ｕm、Ｌ1、Ｌ2、・・・、Ｌmの逆行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1を算出し、逆行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1を表わすデータを行列記憶部２８に記憶させる（ステップＳ３０４）。
【０１１６】
（符号化ベクトル生成処理）
図７は、第１の実施形態の変形例１の符号化ベクトル生成処理のフローチャートである。
【０１１７】
図７を参照して、行列積計算制御部１２２は、行列記憶部２８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1-1、Ｌm-1、Ｕm-1、Ｕm-1-1、・・・、Ｕ2-1、Ｕ1-1の順となるように行列間の順序を設定する（ステップＳ４０１）。
【０１１８】
次に、行列積計算制御部１２２は、制御変数ｉを１に設定する（ステップＳ４０２）。
行列積計算制御部１２２は、行列積計算部２１を指示して、行列記憶部２８から第ｉ（＝１）順位の行列Ａを表わすデータを読み出させて、行列Ａと、入力された情報ベクトルＸとの積ＡＸを計算させる。行列積計算部２１は、乗算結果であるベクトルを中間結果Ｒとし、中間結果Ｒを表わすデータを中間結果記憶部２２に記憶させる（ステップＳ４０３）。
【０１１９】
次に、行列積計算制御部１２２は、制御変数ｉをインクリメントする（ステップＳ４０４）。
【０１２０】
行列積計算制御部１２２は、制御変数ｉが（２ｍ＋１）未満の場合には（ステップＳ４０５でＹＥＳ）、行列積計算部２１を指示して、行列記憶部２８から第ｉ順位の行列（これをＭａｔiとする）を表わすデータを読み出させるとともに、中間結果記憶部２２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部２１は、乗算結果であるベクトルを新たな中間結果Ｒとし、中間結果記憶部２２内の中間結果Ｒを表わすデータを更新する（ステップＳ４０６）。その後、ステップＳ４０４からの処理が繰返される。
【０１２１】
制御変数ｉが（２ｍ＋１）となった場合には（ステップＳ４０５でＮＯ）、行列積計算制御部１２２は、行列積計算部２１を指示して、行列記憶部２８から第ｉ順位の行列（Ｍａｔi）を表わすデータを読み出させるとともに、中間結果記憶部２２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部２１は、乗算結果であるベクトルＹ′を符号反転部９９に出力する。符号反転部９９は、ベクトルＹ′の符号を反転したものをパリティべクトルＹとして出力する（ステップＳ４０７）。
【０１２２】
その後、配列部２０は、ｋビットの情報ベクトルＸとｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する（ステップＳ４０８）。
【０１２３】
（第１の実施形態の変形例１の効果）
以上のように、第１の実施形態の変形例１によれば、符号化ベクトル生成処理時において、後退代入を行わずに、式（Ｃ９）に従ってパリティベクトルＹを算出するので、少ない計算量で情報ベクトルＸの符号化を行なうことができる。特に、基本上三角行列の逆行列Ｕi-1(i=1〜m)および基本下三角行列の逆行列Ｌi-1(i=1〜m)は非零要素数が少ない行列のため、式（Ｃ９）の演算の計算量が少ない。また、式（Ｃ９）の右側にある行列乗算から順次実行してパリティベクトルＹを算出するので、各行列乗算の結果はベクトルとなり、中間結果を記憶するための容量を小さくすることができる。
【０１２４】
また、行列分解処理時において、行列Ｂの逆行列を計算するという計算量の多い演算を行なうことなく、行列ＢのＬＵ分解、ＬＵ分解された上三角行列の基本上三角行列の積への分解、ＬＵ分解された下三角行列の基本下三角行列の積への分解、基本上三角行列および基本下三角行列の非対角項の符号の反転を行なえばよいので、少ない計算量でパリティベクトルＹを生成するのに必要な行列を算出することができる。
【０１２５】
［第２の実施形態］
第２の実施形態の符号化器は、２を法とする演算を行なう。
【０１２６】
（符号化アルゴリズム）
符号化器は、ｋ個の情報ビットｘ1、ｘ2、・・・、ｘkからなる情報ベクトルＸを受けて、２を法とする演算を行なうことによって、以下の式を満たすようなｍ個のパリティビットｙ1、ｙ2、・・・、ｙmからなるパリティベクトルＹを生成する。
【０１２７】
Ｈ（Ｘ，Ｙ）T≡０  ・・・（Ｄ１）
ここで、Ｈはパリティ検査行列（以下、検査行列とも言う）であり、ｍ行ｎ列（＝ｋ＋ｍ）の行列である。
【０１２８】
（Ｘ，Ｙ）Tは、情報ベクトルとパリティベクトルからなるベクトルの転置を表わす。
式（Ｄ１）は、２を法とする演算の場合には、次のように変形される。
【０１２９】
ＢＹ≡ＡＸ  ・・・（Ｄ２）
ここで、行列Ａは、検査行列Ｈの第１列目〜第ｋ列目からなるｍ行ｋ列の行列である。行列Ｂは、検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなるｍ行ｍ列の行列である。
【０１３０】
行列Ｂに対して、以下のようにオーダリングを行なうとする。
まず、行列Ｂの２つの行を交換するとすると、式（Ｄ２）は以下のように変形される。
【０１３１】
Ｐ1ＢＹ≡Ｐ1ＡＸ  ・・・（Ｄ３）
ここで、Ｐ1は、第１回目の行の入れ替えを表わす変換行列である。ｉ行とｊ行を変換する場合には、Ｐ1は、単位行列Ｅのｉ行とｊ行を入れ替えた行列となる。
【０１３２】
さらに、行列Ｂの２つの列を交換すると、式（Ｄ３）は以下のように変形される。
Ｐ1ＢＱ1Ｑ1-1Ｙ≡Ｐ1ＡＸ  ・・・（Ｄ４）
ここで、Ｑ1は、第１回目の列の入れ替えを表わす変換行列である。ｉ列とｊ列を変換する場合には、Ｑ1は、単位行列Ｅのｉ列とｊ列を入れ替えた行列となる。
【０１３３】
以下のように新たな行列を定義する。
Ｂ(1)≡Ｐ1ＢＱ1  ・・・（Ｄ５）
Ａ(1)≡Ｐ1Ａ  ・・・（Ｄ６）
式（Ｄ５）および式（Ｄ６）により、式（Ｄ４）は以下の式で表わされる。
【０１３４】
Ｂ(1)Ｑ1-1Ｙ≡Ａ(1)Ｘ  ・・・（Ｄ７）
さらに、行列Ｂ(1)の２つの行を交換するとすると、式（Ｄ７）は以下のように変形される。
【０１３５】
Ｐ2Ｂ(1)Ｑ1-1Ｙ≡Ｐ2Ａ(1)Ｘ  ・・・（Ｄ８）
ここで、Ｐ2は、第２回目の行の入れ替えを表わす変換行列である。
【０１３６】
さらに、行列Ｂ(1)の２つの列を交換すると、式（Ｄ８）は以下のように変形される。
Ｐ2Ｂ(1)Ｑ2Ｑ2-1Ｑ1-1Ｙ≡Ｐ2Ａ(1)Ｘ  ・・・（Ｄ９）
ここで、Ｑ2は、第２回目の列の入れ替えを表わす変換行列である。
【０１３７】
以下のように新たな行列を定義する。
Ｂ(2)≡Ｐ2Ｂ(1)Ｑ2  ・・・（Ｄ１０）
Ａ(2)≡Ｐ2Ａ(1)  ・・・（Ｄ１１）
式（Ｄ１０）および式（Ｄ１１）により、式（Ｄ９）は以下の式で表わされる。
【０１３８】
Ｂ(2)Ｑ2-1Ｑ1-1Ｙ≡Ａ(2)Ｘ  ・・・（Ｄ１２）
同様にして、行列Ｂに対して、第ｕ回（ｕ≧１）だけ行の入れ替えおよび第ｖ（ｖ≧１）だげ列の入れ替えを行なう。第ｓ回目（１≦s≦u）の行の入れ替えを表わす行列をＰs、第ｓ回目（１≦s≦v）の列の入れ替えを表わす行列をＱsとして、以下のように新たな行列を定義する。
【０１３９】
Ｂ′≡Ｐu・・・Ｐ2Ｐ1ＢＱ1Ｑ2・・・Ｑv  ・・・（Ｄ１３）
Ａ(u)≡Ｐu・・・Ｐ2Ｐ1Ａ  ・・・（Ｄ１４）
Ｅ(v)≡Ｑ1Ｑ2・・・Ｑv  ・・・（Ｄ１５）
式（Ｄ１３）、式（Ｄ１４）および式（Ｄ１５）により、以下の式が成り立つ。
【０１４０】
Ｂ′Ｅ(v)-1Ｙ≡Ａ(u)Ｘ  ・・・（Ｄ１６）
行列Ｂ′をＬＵ分解すると、式（Ｄ１６）は以下の式に変形される。
【０１４１】
Ｌ′Ｕ′Ｅ(v)-1Ｙ≡Ａ(u)Ｘ  ・・・（Ｄ１７）
ここで、Ｌ′は下三角行列であり、Ｕ′は上三角行列である。
【０１４２】
式（Ｄ１７）より、列ベクトルＹは、以下の式で表わされる。
Ｙ≡Ｅ(v)Ｕ′-1Ｌ′-1Ａ(u)Ｘ  ・・・（Ｄ１８）
上三角行列Ｕ′は、以下の式のように、基本上三角行列Ｕ′i（i＝1〜m）の積に分解される。
【０１４３】
Ｕ′≡Ｕ′mＵ′m-1・・・Ｕ′2Ｕ′1  ・・・（Ｄ１９）
式（Ｄ１９）より、逆行列Ｕ′-1は、以下の式で表わされる。
【０１４４】
Ｕ′-1≡Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1  ・・・（Ｄ２０）
下三角行列Ｌ′は、以下の式のように、基本下三角行列Ｌ′i（i＝1〜m）の積に分解される。
【０１４５】
Ｌ′≡Ｌ′1Ｌ′2・・・Ｌ′m-1Ｌ′m  ・・・（Ｄ２１）
式（Ｄ２１）より、逆行列Ｌ′-1は、以下の式で表わされる。
【０１４６】
Ｌ′-1≡Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1  ・・・（Ｄ２２）
式（Ｄ２０）および式（Ｄ２２）によって、式（Ｄ１８）は以下の式に変形される。
【０１４７】
Ｙ≡Ｅ(v)（Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1）（Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1）Ａ(u)Ｘ  ・・・（Ｄ２３）
ところで、２を法とする演算の場合には、基本上三角行列Ｕ′i(i=1〜m)、基本下三角行列Ｌ′i(i=1〜m)は、以下のような性質を有する。
【０１４８】
Ｕ′i≡（Ｕ′i）-1  ・・・（Ｄ２４）
Ｌ′i≡（Ｌ′i）-1  ・・・（Ｄ２５）
式（Ｄ２４）および式（Ｄ２５）によって、式（Ｄ２３）は以下の式に変形される。
【０１４９】
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ｄ２６）
式（Ｄ２６）で算出されるパリティベクトルＹと、情報ベクトルＸを用いて、符号化ベクトルＺは、以下の式で表わされる。
【０１５０】
Ｚ≡（Ｘ，Ｙ）  ・・・（Ｄ２７）
ここで、符号化ベクトルＺの第１ビット〜第ｋビットは、情報ベクトルＸのビットであり、符号化ベクトルＺの第（ｋ＋１）ビット〜第ｎビットは、パリティベクトルＹのビットである。
【０１５１】
（構成）
図８は、第２の実施形態の符号化器の構成を表わす図である。
【０１５２】
図８を参照して、この符号化器２ｃは、検査行列分解部３０と、オーダリング部４０と、ＬＵ分解部３４と、基本行列分解部３６と、中間結果記憶部３２と、行列記憶部３８と、行列積計算部３１と、配列部２０と、行列積計算制御部１２３とを備える。
【０１５３】
検査行列分解部３０は、検査行列Ｈを行列Ａ、Ｂに分解して、行列Ａを表わすデータおよび行列Ｂを表わすデータを中間結果記憶部３２に記憶させる。
【０１５４】
オーダリング部４０は、ＬＵ分解によって得られる上三角行列、下三角行列の非零要素数が少なくなるように、行列Ｂに対して、第ｕ回（ｕ≧１）の行の入れ替えおよび第ｖ回（ｖ≧１）の列の入れ替えを行なって、行列Ｂ′を生成する。オーダリングの手法としては、たとえば、最小次数順序法を用いることができる。また、オーダリング部４０は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なって行列Ａ(u)を生成し、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なって、行列Ｅ(v)を生成する。
【０１５５】
ＬＵ分解部３４は、加算器３３およ乗算器３５を備える。ＬＵ分解部３４は、Ｃｒｏｕｔ（クラウト）のアルゴリズムにしたがって、行列Ｂ′をＬＵ分解して、下三角行列Ｌ′と、上三角行列Ｕ′とを生成する。
【０１５６】
基本行列分解部３６は、上三角行列Ｕ′を式（Ｄ１９）のように、基本上三角行列Ｕ′i（i＝1〜m）の積に分解する。また、基本行列分解部３６は、下三角行列Ｌ′を式（Ｄ２１）のように、基本下三角行列Ｌ′i（i＝1〜m）の積に分解する。
【０１５７】
行列記憶部３８は、基本上三角行列Ｕ′1、Ｕ′2、・・・、Ｕ′mを表わすデータ、基本下三角行列Ｌ′m、Ｌ′m-1、・・・、Ｌ′1を表わすデータ、および行列Ａ(u)、Ｅ(v)を表わすデータを記憶する。
【０１５８】
行列積計算部３１は、加算器３７および乗算器３９を備える。行列積計算部３１は、パリティベクトルＹを算出するために、式（Ｄ２６）に含まれる（２ｍ＋２）回の行列乗算を行列積計算制御部１２３に指示された順序で実行する。行列積計算部３１は、入力される情報ベクトルＸ、行列記憶部３８内の行列Ｕ′1、Ｕ′2、・・・、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′1、Ａ(u)、Ｅ(v)を表わすデータ、および中間結果記憶部３２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行する。行列積計算部３１は、式（Ｄ２６）に含まれる（２ｍ＋２）回の行列乗算が終了するまでの間は、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部３２に記憶させる。
【０１５９】
行列積計算制御部１２３は、パリティベクトルＹを算出するために、行列記憶部３８にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1、Ｌ′2、・・・、Ｌ′m、Ｕ′m、Ｕ′m-1、・・・、Ｕ′1、Ｅ(v)の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部３１を制御する。また、行列積計算制御部１２３は、式（Ｄ２６）に含まれる（２ｍ＋２）回の行列乗算の終了後に、行列積計算部３１から計算結果であるパリティベクトルＹを出力させる。
【０１６０】
中間結果記憶部３２は、式（Ｄ２６）に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部３２は、パリティベクトルＹの生成処理時に、式（Ｄ２６）に含まれる（２ｍ＋２）回の行列乗算の中間結果を表わすデータを記憶する。
【０１６１】
配列部２０は、ｋビットの情報ベクトルＸと、算出されたｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する。
【０１６２】
（行列分解処理）
図９は、第２の実施形態の行列分解処理のフローチャートである。
【０１６３】
図９を参照して、検査行列分解部３０は、検査行列Ｈを行列Ａ、Ｂに分解する。検査行列分解部３０は、行列Ａを表わすデータおよび行列Ｂを表わすデータを中間結果記憶部３２に記憶させる（ステップＳ５０１）。
【０１６４】
オーダリング部４０は、行列Ｂに対して、第ｕ回（ｕ≧１）の行の入れ替えおよび第ｖ回（ｖ≧１）の列の入れ替えを行なう。オーダリング部４０は、第ｓ回目（１≦s≦u）の行の入れ替えを表わす行列をＰs、第ｓ回目（１≦s≦v）の列の入れ替えを表わす行列をＱsとして、以下のように新たな行列を生成する。
【０１６５】
Ｂ′≡Ｐu・・・Ｐ2Ｐ1ＢＱ1Ｑ2・・・Ｑv  ・・・（Ｄ１３）
Ａ(u)≡Ｐu・・・Ｐ2Ｐ1Ａ  ・・・（Ｄ１４）
Ｅ(v)≡Ｑ1Ｑ2・・・Ｑv  ・・・（Ｄ１５）
つまり、行列Ｂ′は、行列Ｂに対して、ｕ回（ｕ≧１）の行の入れ替え、およびｖ回（ｖ≧１）の列の入れ替えを行なったものである。行列Ａ(u)は、行列Ａに対して、行列Ｂに対するu回の行の入れ替えと同様の入れ替えを行なったものである。行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものである。オーダリング部４０は、行列Ａ(u)、Ｅ(v)を表わすデータを行列記憶部３８に記憶させ、行列Ｂ′を表わすデータを中間結果記憶部３２に記憶させる（ステップＳ５０２）。
【０１６６】
次に、ＬＵ分解部３４は、中間結果記憶部３２から行列Ｂ′を表わすデータを読み出して、行列Ｂ′をＬＵ分解して、下三角行列Ｌ′を表わすデータと、上三角行列Ｕ′を表わすデータとを中間結果記憶部３２に記憶させる（ステップＳ５０３）。
【０１６７】
次に、基本行列分解部３６は、中間結果記憶部３２から上三角行列Ｕ′を表わすデータを読み出して、上三角行列Ｕ′を基本上三角行列Ｕ′1、Ｕ′2、・・・、Ｕ′mの積に分解して、基本上三角行列Ｕ′1、Ｕ′2、・・・、Ｕ′mを表わすデータを行列記憶部３８に記憶させる。また、基本行列分解部３６は、中間結果記憶部３２から下三角行列Ｌ′を表わすデータを読み出して、下三角行列Ｌを基本下三角行列Ｌ′1、Ｌ′2、・・・、Ｌ′mの積に分解して、基本下三角行列Ｌ′1、Ｌ′2、・・・、Ｌ′mを表わすデータを行列記憶部３８に記憶させる（ステップＳ５０４）。
【０１６８】
（符号化ベクトル生成処理）
図１０は、第２の実施形態の符号化ベクトル生成処理のフローチャートである。
【０１６９】
図１０を参照して、行列積計算制御部１２３は、行列記憶部３８にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1、Ｌ′2、・・・、Ｌ′m、Ｕ′m、Ｕ′m-1、・・・、Ｕ′1、Ｅ(v)の順となるように行列間の順序を設定する（ステップＳ６０１）。
【０１７０】
次に、行列積計算制御部１２３は、制御変数ｉを１に設定する（ステップＳ６０２）。
行列積計算制御部１２３は、行列積計算部３１を指示して、行列記憶部３８から第ｉ（＝１）順位の行列Ａ(u)を表わすデータを読み出させて、行列Ａ(u)と、入力された情報ベクトルＸとの積Ａ(u)Ｘを計算させる。行列積計算部３１は、乗算結果であるベクトルを中間結果Ｒとし、中間結果Ｒを表わすデータを中間結果記憶部３２に記憶させる（ステップＳ６０３）。
【０１７１】
次に、行列積計算制御部１２３は、制御変数ｉをインクリメントする（ステップＳ６０４）。
【０１７２】
行列積計算制御部１２３は、制御変数ｉが（２ｍ＋２）未満の場合には（ステップＳ６０５でＹＥＳ）、行列積計算部３１を指示して、行列記憶部３８から第ｉ順位の行列（これをＭａｔiとする）を表わすデータを読み出させるとともに、中間結果記憶部３２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部３１は、乗算結果であるベクトルを新たな中間結果Ｒとし、中間結果記憶部３２内の中間結果Ｒを表わすデータを更新する（ステップＳ６０６）。その後、ステップＳ６０４からの処理が繰返される。
【０１７３】
制御変数ｉが（２ｍ＋２）となった場合には（ステップＳ６０５でＮＯ）、行列積計算制御部１２３は、行列積計算部３１を指示して、行列記憶部３８から第ｉ順位の行列（Ｍａｔi）を表わすデータを読み出させるとともに、中間結果記憶部３２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部３１は、乗算結果であるベクトルをパリティべクトルＹとして出力する（ステップＳ６０７）。
【０１７４】
その後、配列部２０は、ｋビットの情報ベクトルＸとｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する（ステップＳ６０８）。
【０１７５】
（第２の実施形態の効果）
以上のように、第２の実施形態によれば、符号化ベクトル生成処理時において、後退代入を行わずに、式（Ｄ２６）に従ってパリティベクトルＹを算出するので、少ない計算量で情報ベクトルＸの符号化を行なうことができる。特に、行列Ｂがオーダリングされるため、基本上三角行列Ｕ′i(i=1〜m)および基本下三角行列Ｌ′i(i=1〜m)は、第１の実施形態の基本上三角行列Ｕi(i=1〜m)および基本下三角行列Ｌi(i=1〜m)よりもさらに非零要素数が少ない行列となり、式（Ｄ２６）の演算の計算量を式（Ｂ１２）よりもさらに少なくできる。また、式（Ｄ２６）の右側にある行列乗算から順次実行してパリティベクトルＹを算出するので、各行列乗算の結果はベクトルとなり、中間結果を記憶するための容量を小さくすることができる。
【０１７６】
また、行列分解処理時において、行列Ｂの逆行列を計算するという計算量の多い演算を行なうことなく、行列Ｂのオーダリングによる行列Ｂ′、Ａ(u)、Ｅ(v)の生成、行列Ｂ′のＬＵ分解、ＬＵ分解された上三角行列の基本上三角行列の積への分解、ＬＵ分解された下三角行列の基本下三角行列の積への分解を行なえばよいので、少ない計算量でパリティベクトルＹを生成するのに必要な行列を算出することができる。
【０１７７】
［第２の実施形態の変形例１］
第２の実施形態の変形例１の符号化器は、実数演算を行なう。
【０１７８】
（符号化アルゴリズム）
符号化器は、ｋ個の情報ビットｘ1、ｘ2、・・・、ｘkからなる情報ベクトルＸを受けて、実数演算を行なうことによって、以下の式を満たすようなｍ個のパリティビットｙ1、ｙ2、・・・、ｙmからなるパリティベクトルＹを生成する。
【０１７９】
Ｈ（Ｘ，Ｙ）T＝０  ・・・（Ｅ１）
ここで、Ｈはパリティ検査行列（以下、検査行列とも言う）であり、ｍ行ｎ列（＝ｋ＋ｍ）の行列である。
【０１８０】
（Ｘ，Ｙ）Tは、情報ベクトルとパリティベクトルからなるベクトルの転置を表わす。
式（Ｅ１）は、実数演算の場合には、次のように変形される。
【０１８１】
ＢＹ＝−ＡＸ  ・・・（Ｅ２）
ここで、行列Ａは、検査行列Ｈの第１列目〜第ｋ列目からなるｍ行ｋ列の行列である。行列Ｂは、検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなるｍ行ｍ列の行列である。
【０１８２】
行列Ｂに対して、以下のようにオーダリングを行なうとする。
まず、行列Ｂの２つの行を交換するとすると、式（Ｅ２）は以下のように変形される。
【０１８３】
Ｐ1ＢＹ＝Ｐ1ＡＸ  ・・・（Ｅ３）
ここで、Ｐ1は、第１回目の行の入れ替えを表わす変換行列である。ｉ行とｊ行を変換する場合には、Ｐ1は、単位行列Ｅのｉ行とｊ行を入れ替えた行列となる。
【０１８４】
さらに、行列Ｂの２つの列を交換すると、式（Ｅ３）は以下のように変形される。
Ｐ1ＢＱ1Ｑ1-1Ｙ＝−Ｐ1ＡＸ  ・・・（Ｅ４）
ここで、Ｑ1は、第１回目の列の入れ替えを表わす変換行列である。ｉ列とｊ列を変換する場合には、Ｑ1は、単位行列Ｅのｉ列とｊ列を入れ替えた行列となる。
【０１８５】
以下のように新たな行列を定義する。
Ｂ(1)＝Ｐ1ＢＱ1  ・・・（Ｅ５）
Ａ(1)＝Ｐ1Ａ  ・・・（Ｅ６）
式（Ｅ５）および式（Ｅ６）により、式（Ｅ４）は以下の式で表わされる。
【０１８６】
Ｂ(1)Ｑ1-1Ｙ＝−Ａ(1)Ｘ  ・・・（Ｅ７）
さらに、行列Ｂ(1)の２つの行を交換するとすると、式（Ｅ７）は以下のように変形される。
【０１８７】
Ｐ2Ｂ(1)Ｑ1-1Ｙ＝−Ｐ2Ａ(1)Ｘ  ・・・（Ｅ８）
ここで、Ｐ2は、第２回目の行の入れ替えを表わす変換行列である。
【０１８８】
さらに、行列Ｂ(1)の２つの列を交換すると、式（Ｅ８）は以下のように変形される。
Ｐ2Ｂ(1)Ｑ2Ｑ2-1Ｑ1-1Ｙ＝−Ｐ2Ａ(1)Ｘ  ・・・（Ｅ９）
ここで、Ｑ2は、第２回目の列の入れ替えを表わす変換行列である。
【０１８９】
以下のように新たな行列を定義する。
Ｂ(2)＝Ｐ2Ｂ(1)Ｑ2  ・・・（Ｅ１０）
Ａ(2)＝Ｐ2Ａ(1)  ・・・（Ｅ１１）
式（Ｅ１０）および式（Ｅ１１）により、式（Ｅ９）は以下の式で表わされる。
【０１９０】
Ｂ(2)Ｑ2-1Ｑ1-1Ｙ＝−Ａ(2)Ｘ  ・・・（Ｅ１２）
同様にして、行列Ｂに対して、第ｕ回（ｕ≧１）だけ行の入れ替えおよび第ｖ（ｖ≧１）だげ列の入れ替えを行なう。第ｓ回目（１≦s≦u）の行の入れ替えを表わす行列をＰs、第ｓ回目（１≦s≦v）の列の入れ替えを表わす行列をＱsとして、以下のように新たな行列を定義する。
【０１９１】
Ｂ′＝Ｐu・・・Ｐ2Ｐ1ＢＱ1Ｑ2・・・Ｑv  ・・・（Ｅ１３）
Ａ(u)＝Ｐu・・・Ｐ2Ｐ1Ａ  ・・・（Ｅ１４）
Ｅ(v)＝Ｑ1Ｑ2・・・Ｑv  ・・・（Ｅ１５）
式（Ｅ１３）、式（Ｅ１４）および式（Ｅ１５）により、以下の式が成り立つ。
【０１９２】
Ｂ′Ｅ(v)-1Ｙ＝−Ａ(u)Ｘ  ・・・（Ｅ１６）
行列Ｂ′をＬＵ分解すると、式（Ｅ１６）は以下の式に変形される。
【０１９３】
Ｌ′Ｕ′ＱV-1・・・Ｑ2-1Ｑ1-1Ｙ＝Ａ(u)Ｘ  ・・・（Ｅ１７）
ここで、Ｌ′は下三角行列であり、Ｕ′は上三角行列である。
【０１９４】
式（Ｅ１７）より、列ベクトルＹは、以下の式で表わされる。
Ｙ＝−Ｅ(v)Ｕ′-1Ｌ′-1Ａ(u)Ｘ  ・・・（Ｅ１８）
上三角行列Ｕ′は、以下の式のように、基本上三角行列Ｕ′i（i＝1〜m）の積に分解される。
【０１９５】
Ｕ′＝Ｕ′mＵ′m-1・・・Ｕ′2Ｕ′1  ・・・（Ｅ１９）
ここで、逆行列Ｕ′i-1は、対角項の要素が１であり、かつ非対角項の要素はＵ′iの要素の符号を反転したものである。
【０１９６】
式（Ｅ１９）より、Ｕ′-1は、以下の式で表わされる。
Ｕ′-1＝Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1  ・・・（Ｅ２０）
下三角行列Ｌは、以下の式のように、基本下三角行列Ｌi（i＝1〜m）の積に分解される。
【０１９７】
Ｌ′＝Ｌ′1Ｌ′2・・・Ｌ′m-1Ｌ′m  ・・・（Ｅ２１）
ここで、逆行列Ｌ′i-1は、対角項の要素が１であり、かつ非対角項の要素はＬ′iの要素の符号を反転したものである。
【０１９８】
式（Ｅ２１）より、Ｌ′-1は、以下の式で表わされる。
Ｌ′-1＝Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1  ・・・（Ｅ２２）
式（Ｅ２０）および式（Ｅ２２）によって、式（Ｅ１８）は以下の式に変形される。
【０１９９】
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ  ・・・（Ｅ２３）
式（Ｅ２３）で算出されるパリティベクトルＹと、情報ベクトルＸを用いて、符号化ベクトルＺは、以下の式で表わされる。
【０２００】
Ｚ＝（Ｘ，Ｙ）  ・・・（Ｅ２４）
ここで、符号化ベクトルＺの第１ビット〜第ｋビットは、情報ベクトルＸのビットであり、符号化ベクトルＺの第（ｋ＋１）ビット〜第ｎビットは、パリティベクトルＹのビットである。
【０２０１】
（構成）
図１１は、第２の実施形態の変形例１の符号化器の構成を表わす図である。
【０２０２】
図１１を参照して、この符号化器２ｄは、第２の実施形態と同様の、検査行列分解部３０と、オーダリング部４０と、ＬＵ分解部３４と、基本行列分解部３６と、配列部２０とを備える。これらについては説明を繰返さない。
【０２０３】
また、符号化器２ｄは、行列記憶部４８と、逆行列計算部４３と、行列積計算部４１と、中間結果記憶部４２と、符号反転部９９と、行列積計算制御部１２４とを備える。
【０２０４】
逆行列計算部４３は、中間結果記憶部４２から基本上三角行列Ｕ′1、Ｕ′2、・・・、Ｕ′mおよび基本下三角行列Ｌ′1、Ｌ′2、・・・、Ｌ′mを表わすデータを読み出して、行列Ｕ′1、Ｕ′2、・・・、Ｕ′m、Ｌ′1、Ｌ′2、・・・、Ｌ′mの非対角項の要素の符号を反転することによって、行列Ｕ′1、Ｕ′2、・・・、Ｕ′m、Ｌ′1、Ｌ′2、・・・、Ｌ′mの逆行列Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1を算出し、逆行列Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1を表わすデータを行列記憶部４８に記憶させる。
【０２０５】
行列記憶部４８は、基本上三角行列の逆行列Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1を表わすデータ、基本下三角行列の逆行列Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′1-1を表わすデータ、および行列Ａ(u)、Ｅ(v)を表わすデータを記憶する。
【０２０６】
行列積計算部４１は、加算器４７および乗算器４９を備える。行列積計算部４１は、パリティベクトルＹを算出するために、式（Ｅ２３）に含まれる（２ｍ＋２）回の行列乗算を行列積計算制御部１２４に指示された順序で実行する。行列積計算部４１は、入力される情報ベクトルＸ、行列記憶部４８内の行列Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′1-1、Ａ(u)、Ｅ(v)を表わすデータ、および中間結果記憶部４２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行する。行列積計算部４１は、式（Ｅ２３）に含まれる（２ｍ＋２）回の行列乗算が終了するまでの間は、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部４２に記憶させる。
【０２０７】
行列積計算制御部１２４は、パリティベクトルＹを算出するために、行列記憶部４８にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1-1、Ｌ′m-1、Ｕ′m-1、Ｕ′m-1-1、・・・、Ｕ′2-1、Ｕ′1-1、Ｅ(v)の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部４１を制御する。また、行列積計算制御部１２４は、式（Ｅ２３）に含まれる（２ｍ＋２）回の行列乗算の終了後に、行列積計算部４１から計算結果であるベクトルＹ′（＝Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)）を符号反転部９９へ出力させる。
【０２０８】
中間結果記憶部４２は、式（Ｅ２３）に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部４２は、パリティベクトルＹの生成処理時に、式（Ｅ２３）に含まれる（２ｍ＋２）回の行列乗算の中間結果を表わすデータを記憶する。
【０２０９】
符号反転部９９は、ベクトルＹ′の符号を反転して（つまり、ベクトルの各要素の符号を反転して）、それをパリティベクトルＹとして出力する。
【０２１０】
（行列分解処理）
図１２は、第２の実施形態の変形例１の行列分解処理のフローチャートである。
【０２１１】
図１２を参照して、検査行列分解部３０は、検査行列Ｈを行列Ａ、Ｂに分解する。検査行列分解部３０は、行列Ａを表わすデータおよび行列Ｂを表わすデータを中間結果記憶部４２に記憶させる（ステップＳ７０１）。
【０２１２】
オーダリング部４０は、行列Ｂに対して、第ｕ回（ｕ≧１）の行の入れ替えおよび第ｖ回（ｖ≧１）の列の入れ替えを行なう。オーダリング部４０は、第ｓ回目（１≦s≦u）の行の入れ替えを表わす行列をＰs、第ｓ回目（１≦s≦v）の列の入れ替えを表わす行列をＱsとして、以下のように新たな行列を生成する。
【０２１３】
Ｂ′＝Ｐu・・・Ｐ2Ｐ1ＢＱ1Ｑ2・・・Ｑv  ・・・（Ｄ１３）
Ａ(u)＝Ｐu・・・Ｐ2Ｐ1Ａ  ・・・（Ｄ１４）
Ｅ(v)＝Ｑ1Ｑ2・・・Ｑv  ・・・（Ｄ１５）
つまり、行列Ｂ′は、行列Ｂに対して、ｕ回（ｕ≧１）の行の入れ替え、およびｖ回（ｖ≧１）の列の入れ替えを行なったものである。行列Ａ(u)は、行列Ａに対して、行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なったものである。行列Ｅ(v)は、単位行列Ｅに対して、行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なったものである。オーダリング部４０は、行列Ａ(u)、Ｅ(v)を表わすデータを行列記憶部４８に記憶させ、行列Ｂ′を表わすデータを中間結果記憶部４２に記憶させる（ステップＳ７０２）。
【０２１４】
次に、ＬＵ分解部３４は、中間結果記憶部４２から行列Ｂ′を表わすデータを読み出して、行列Ｂ′をＬＵ分解して、下三角行列Ｌ′を表わすデータと、上三角行列Ｕ′を表わすデータとを中間結果記憶部４２に記憶させる（ステップＳ７０３）。
【０２１５】
次に、基本行列分解部３６は、中間結果記憶部４２から上三角行列Ｕ′を表わすデータを読み出して、上三角行列Ｕ′を基本上三角行列Ｕ′1、Ｕ′2、・・・、Ｕ′mの積に分解して、基本上三角行列Ｕ′1、Ｕ′2、・・・、Ｕ′mを表わすデータを中間結果記憶部４２に記憶させる。また、基本行列分解部３６は、中間結果記憶部４２から下三角行列Ｌ′を表わすデータを読み出して、下三角行列Ｌを基本下三角行列Ｌ′1、Ｌ′2、・・・、Ｌ′mの積に分解して、基本下三角行列Ｌ′1、Ｌ′2、・・・、Ｌ′mを表わすデータを中間結果記憶部４２に記憶させる（ステップＳ７０４）。
【０２１６】
逆行列計算部４３は、中間結果記憶部４２から基本上三角行列Ｕ′1、Ｕ′2、・・・、Ｕ′mおよび基本下三角行列Ｌ′1、Ｌ′2、・・・、Ｌ′mを表わすデータを読み出して、行列Ｕ′1、Ｕ′2、・・・、Ｕ′m、Ｌ′1、Ｌ′2、・・・、Ｌ′mの非対角項の要素の符号を反転することによって、行列Ｕ′1、Ｕ′2、・・・、Ｕ′m、Ｌ′1、Ｌ′2、・・・、Ｌ′mの逆行列Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1を算出し、逆行列Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1を表わすデータを行列記憶部４８に記憶させる（ステップＳ７０５）。
【０２１７】
（符号化ベクトル生成処理）
図１３は、第２の実施形態の変形例１の符号化ベクトル生成処理のフローチャートである。
【０２１８】
図１３を参照して、行列積計算制御部１２４は、行列記憶部４８にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1、Ｕ′m-1、Ｕ′m-1-1、・・・、Ｕ′1-1、Ｅ(v)の順となるように行列間の順序を設定する（ステップＳ８０１）。
【０２１９】
次に、行列積計算制御部１２４は、制御変数ｉを１に設定する（ステップＳ８０２）。
行列積計算制御部１２４は、行列積計算部４１を指示して、行列記憶部４８から第ｉ（＝１）順位の行列Ａ(u)を表わすデータを読み出させて、行列Ａ(u)と、入力された情報ベクトルＸとの積Ａ(u)Ｘを計算させる。行列積計算部４１は、乗算結果であるベクトルを中間結果Ｒとし、中間結果Ｒを表わすデータを中間結果記憶部４２に記憶させる（ステップＳ８０３）。
【０２２０】
次に、行列積計算制御部１２４は、制御変数ｉをインクリメントする（ステップＳ８０４）。
【０２２１】
行列積計算制御部１２４は、制御変数ｉが（２ｍ＋２）未満の場合には（ステップＳ８０５でＹＥＳ）、行列積計算部４１を指示して、行列記憶部４８から第ｉ順位の行列（これをＭａｔiとする）を表わすデータを読み出させるとともに、中間結果記憶部４２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部４１は、乗算結果であるベクトルを新たな中間結果Ｒとし、中間結果記憶部４２内の中間結果Ｒを表わすデータを更新する（ステップＳ８０６）。その後、ステップＳ８０４からの処理が繰返される。
【０２２２】
制御変数ｉが（２ｍ＋２）となった場合には（ステップＳ８０５でＮＯ）、行列積計算制御部１２４は、行列積計算部４１を指示して、行列記憶部４８から第ｉ順位の行列（Ｍａｔi）を表わすデータを読み出させるとともに、中間結果記憶部４２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部４１は、乗算結果であるベクトルＹ′を符号反転部９９に出力する。符号反転部９９は、ベクトルＹ′の符号を反転したものをパリティべクトルＹとして出力する（ステップ８０７）。
【０２２３】
その後、配列部２０は、ｋビットの情報ベクトルＸとｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する（ステップＳ８０８）。
【０２２４】
（第２の実施形態の変形例１の効果）
以上のように、第２の実施形態の変形例１によれば、符号化ベクトル生成処理時において、後退代入を行わずに、式（Ｅ２３）に従ってパリティベクトルＹを算出するので、少ない計算量で情報ベクトルＸの符号化を行なうことができる。特に、行列Ｂがオーダリングされるため、基本上三角行列の逆行列Ｕ′i-1(i=1〜m)および基本下三角行列の逆行列Ｌ′i-1(i=1〜m)は、第１の実施形態の変形例１の基本上三角行列の逆行列Ｕi-1(i=1〜m)および基本下三角行列の逆行列Ｌi-1(i=1〜m)よりもさらに非零要素数が少ない行列となり、式（Ｅ２３）の演算の計算量を式（Ｃ９）よりもさらに少なくできる。また、式（Ｅ２３）の右側にある行列乗算から順次実行してパリティベクトルＹを算出するので、各行列乗算の結果はベクトルとなり、中間結果を記憶するための容量を小さくすることができる。
【０２２５】
また、行列分解処理時において、行列Ｂの逆行列を計算するという計算量の多い演算を行なうことなく、行列Ｂのオーダリングによる行列Ｂ′、Ａ(u)、Ｅ(v)の生成、行列Ｂ′のＬＵ分解、ＬＵ分解された上三角行列の基本上三角行列の積への分解、ＬＵ分解された下三角行列の基本下三角行列の積への分解、基本上三角行列および基本下三角行列の非対角項の符号の反転を行なえばよいので、少ない計算量でパリティベクトルＹを生成するのに必要な行列を算出することができる。
【０２２６】
［第３の実施形態］
第３の実施形態の符号化器は、２を法とする演算を行なう。
【０２２７】
（符号化アルゴリズム）
符号化器は、ｋ個の情報ビットｘ1、ｘ2、・・・、ｘkからなる情報ベクトルＸを受けて、２を法とする演算を行なうことによって、以下の式を満たすようなｍ個のパリティビットｙ1、ｙ2、・・・、ｙmからなるパリティベクトルＹを生成する。
【０２２８】
Ｈ（Ｘ，Ｙ）T＝０  ・・・（Ｆ１）
ここで、Ｈはパリティ検査行列（以下、検査行列とも言う）であり、ｍ行ｎ列（＝ｋ＋ｍ）の行列である。
【０２２９】
（Ｘ，Ｙ）Tは、情報ベクトルとパリティベクトルからなるベクトルの転置を表わす。
式（Ｆ１）は、２を法とする演算の場合には、次のように変形される。
【０２３０】
ＢＹ≡ＡＸ  ・・・（Ｆ２）
ここで、行列Ａは、検査行列Ｈの第１列目〜第ｋ列目からなるｍ行ｋ列の行列である。行列Ｂは、検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなるｍ行ｍ列の行列である。
【０２３１】
行列ＢをＬＵ分解すると、式（Ｆ２）は以下の式に変形される。
ＬＵＹ≡ＡＸ  ・・・（Ｆ３）
ここで、Ｌは下三角行列であり、Ｕは上三角行列である。
【０２３２】
式（Ｆ３）より、列ベクトルＹは、以下の式で表わされる。
Ｙ≡Ｕ-1Ｌ-1ＡＸ  ・・・（Ｆ４）
上三角行列Ｕは、以下の式のように、基本上三角行列Ｕi（i＝1〜m）の積に分解される。
【０２３３】
Ｕ≡ＵmＵm-1・・・Ｕ2Ｕ1  ・・・（Ｆ５）
式（Ｆ５）より、逆行列Ｕ-1は、以下の式で表わされる。
【０２３４】
Ｕ-1≡Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1  ・・・（Ｆ６）
下三角行列Ｌは、以下の式のように、基本下三角行列Ｌi（i＝1〜m）の積に分解される。
【０２３５】
Ｌ≡Ｌ1Ｌ2・・・Ｌm-1Ｌm  ・・・（Ｆ７）
式（Ｆ７）より、逆行列Ｌ-1は、以下の式で表わされる。
【０２３６】
Ｌ-1≡Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1  ・・・（Ｆ８）
式（Ｆ６）および式（Ｆ８）によって、式（Ｆ４）は以下の式に変形される。
【０２３７】
Ｙ≡（Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1）（Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1）ＡＸ  ・・・（Ｆ９）
ところで、２を法とする演算の場合には、基本上三角行列Ｕi(i=1〜m)、基本下三角行列Ｌi(i=1〜m)は、以下のような性質を有する。
【０２３８】
Ｕi≡（Ｕi）-1  ・・・（Ｆ１０）
Ｌi≡（Ｌi）-1  ・・・（Ｆ１１）
式（Ｆ１０）および式（Ｆ１１）によって、式（Ｆ９）は以下の式に変形される。
【０２３９】
Ｙ≡Ｕ1Ｕ2・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ2Ｌ1ＡＸ  ・・・（Ｆ１２）
式（Ｆ１２）は、（２×ｍ＋２）個の行列の乗算であるが、一定の条件を満足する場合には、いくつかの行列の積を１つの行列で表わすことができるとする。以下の式のように、Ｕ1〜Ｕtのｔ個の行列の積を１つの行列Ｃで表わすことができるとする。
【０２４０】
（Ｕ1Ｕ2・・・Ｕt）≡Ｃ  ・・・（Ｆ１３）
この場合、一定の条件とは、行列Ｕ1、Ｕ2、・・・、Ｕtの非対角項の非零要素の個数の和が行列Ｃの非対角項の非零要素の個数以上であるものとする。
【０２４１】
式（Ｆ１３）より、式（Ｆ１２）は以下の式で表わされる。
Ｙ≡ＣＵt+1・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ2Ｌ1ＡＸ  ・・・（Ｆ１４）
式（Ｆ１４）で算出されるパリティベクトルＹと、情報ベクトルＸを用いて、符号化ベクトルＺは、以下の式で表わされる。
【０２４２】
Ｚ≡（Ｘ，Ｙ）  ・・・（Ｆ１５）
ここで、符号化ベクトルＺの第１ビット〜第ｋビットは、情報ベクトルＸのビットであり、符号化ベクトルＺの第（ｋ＋１）ビット〜第ｎビットは、パリティベクトルＹのビットである。
【０２４３】
（構成）
図１４は、第３の実施形態の符号化器の構成を表わす図である。
【０２４４】
図１４を参照して、この符号化器２ｅは、第１の実施形態と同様の、検査行列分解部３０と、ＬＵ分解部１４と、基本行列分解部１６と、配列部２０とを備える。これらについては説明を繰返さない。
【０２４５】
また、符号化器２ｅは、中間結果記憶部５２と、行列記憶部５８と、行列積計算部５１と、行列積計算制御部１２５と、行列乗算数削減部５５とを備える。なお、以下では、（ｔ＋１）＜ｍとして説明する。
【０２４６】
中間結果記憶部５２は、式（Ｆ１４）に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部５２は、パリティベクトルＹの生成処理時に、式（Ｆ１４）に含まれる（２ｍ−ｔ＋２）回の行列乗算の中間結果を表わすデータを記憶する。
【０２４７】
行列記憶部５８は、基本上三角行列Ｕt+1、Ｕt+2、・・・、Ｕmを表わすデータ、基本下三角行列Ｌm、Ｌm-1、・・・、Ｌ1を表わすデータ、および行列Ａを表わすデータを記憶する。
【０２４８】
行列積計算部５１は、加算器５７および乗算器５９を備える。行列積計算部５１は、パリティベクトルＹを算出するために、式（Ｆ１４）に含まれる（２ｍ−ｔ＋２）回の行列乗算を行列積計算制御部１２５に指示された順序で実行する。行列積計算部５１は、入力される情報ベクトルＸ、行列記憶部５８内の行列Ａ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕt+1、Ｃを表わすデータ、および中間結果記憶部５２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行する。行列積計算部５１は、式（Ｆ１４）に含まれる（２ｍ−ｔ＋２）回の行列乗算が終了するまでの間は、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部５２に記憶させる。また、行列積計算部５１は、式（Ｆ１２）に含まれる行列乗算の個数を削減する処理を実行するときに、行列乗算数削減部５５から指示された行列乗算を実行する。
【０２４９】
行列乗算数削減部５５は、式（Ｆ１２）に含まれる行列乗算の個数を削減する処理を行なうときに、中間結果記憶部５２にデータが記憶されている行列の順序が先頭からＵ1、Ｕ2、・・・、Ｕm-1、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ2、Ｌ1、Ａの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部５１を制御する。行列乗算数削減部５５は、各乗算において、乗算の対象となる２つの行列の非対角項の非零要素数と、乗算結果である１つの行列Ｃの非対角項の非零要素数とを比較し、後者と前者の差が所定の閾値ａ（ａ＞０）以下のときは、乗算対象の２つの行列を１つの行列Ｃで置換する。このようにして行列Ｃで置換された場合は、行列Ｃと次の行列との乗算が行なわれる。
【０２５０】
一方、行列乗算数削減部５５は、後者と前者の差が所定の閾値ａを超えるときには、乗算対象の２つの行列を１つの行列Ｃで置換することを行なわずに、行列Ａ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕ1の非対角項の非零要素数の総和と、行列Ａ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕ1のうちの置換が行なわれた行列を除いた行列と行列Ｃの非対角項の非零要素数の総和とを比較し、後者の値が前者の値以下の場合には、行列Ａ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕ1のうちの置換された行列を除いた行列と行列Ｃとを行列記憶部５８に記憶させる。第ｔ順位までの行列が置換された場合には、行列Ｃ、Ｕt+1、・・・、Ｕm-1、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ2、Ｌ1、Ａが行列記憶部５８に記憶される。
【０２５１】
行列積計算制御部１２５は、パリティベクトルＹを算出するために、行列記憶部５８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕt+1、Ｃの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部５１を制御する。また、行列積計算制御部１２５は、式（Ｆ１４）に含まれる（２ｍ−ｔ＋２）回の行列乗算の終了後に、行列積計算部５１から計算結果であるパリティベクトルＹを出力させる。
【０２５２】
（行列分解処理）
図１５は、第３の実施形態の行列分解処理のフローチャートである。
【０２５３】
図１５を参照して、まず、第１の実施形態のステップＳ１０１〜ステップＳ１０３が検査行列分解部３０、行列記憶部５８、中間結果記憶部５２、ＬＵ分解部１４、および基本行列分解部１６によって実行される。ただし、生成された行列Ｕ1、Ｕ2、・・・、Ｕm-1、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ2、Ｌ1、Ａは、第１の実施形態のように行列記憶部５８にではなく、中間結果記憶部５２に記憶される。（ステップＳ９０１）。
【０２５４】
次に、行列乗算数削減部５５は、中間結果記憶部５２にデータが記憶されている行列について、先頭からＵ1、Ｕ2、・・・、Ｕm-1、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ2、Ｌ1、Ａの順となるように順序を設定する（ステップＳ９０２）。
【０２５５】
次に、行列乗算数削減部５５は、制御変数ｔを１に設定する（ステップＳ９０３）。
次に、行列乗算数削減部５５は、行列記憶部５８から第ｔ（＝１）順位の行列Ｕ1を表わすデータを読み出して、行列Ｕ1を行列Ｃとして、行列Ｃを表わすデータを中間結果記憶部５２に記憶する（ステップＳ９０４）。
【０２５６】
行列数積削減部は、中間結果記憶部５２から行列Ｃを表わすデータを読み出して、行列Ｃの非零要素数ＳＣ０をカウントし、非零要素数ＳＣ０を中間結果記憶部５２に記憶させる（ステップＳ９０５）。
【０２５７】
次に、行列乗算数削減部５５は、第（ｔ＋１）順位の行列を表わすデータを読み出して、その行列を行列ｍａｔとする（ステップＳ９０６）。
【０２５８】
次に、行列乗算数削減部５５は、行列ｍａｔの非対角項の非零要素数ＳＣ１をカウントし、非零要素数ＳＣ１と中間結果記憶部５２内の行列Ｃの非零要素数ＳＣ０との和ＳＣ２を算出して、非零要素数の和ＳＣ２を中間結果記憶部５２に記憶させる（ステップＳ９０７）。
【０２５９】
次に、行列積計算部５１は、行列Ｃと行列Ｍａｔとの積Ｃ×Ｍａｔを計算して、計算結果を行列Ｄとする（ステップＳ９０８）。
【０２６０】
次に、行列乗算数削減部５５は、行列Ｄの非対角項の非零要素数ＳＣ３をカウントし、非零要素数ＳＣ３を中間結果記憶部５２に記憶させる（ステップＳ９０９）。
【０２６１】
行列乗算数削減部５５は、中間結果記憶部５２から非零要素数の和ＳＣ２および非零要素数ＳＣ３とを読み出して、ＳＣ３とＳＣ２との差が閾値ａ以下であるかを判断する（ステップＳ９１０）。
【０２６２】
行列乗算数削減部５５は、ＳＣ３とＳＣ２との差が閾値ａ以下である場合には（ステップＳ９１０でＹＥＳ）、制御変数ｔをインクリメントし（ステップＳ９１１）、中間結果記憶部５２内の行列Ｃを行列Ｄで更新し（ステップＳ９１２）、さらに中間結果記憶部５２内の非零要素数ＳＣ０を非零要素数ＳＣ３を更新し、ステップＳ９０６からの処理が繰返させる。
【０２６３】
一方、行列乗算数削減部５５は、ＳＣ３とＳＣ２との差が閾値ａを超え（ステップＳ９１０でＮＯ）、かつ制御変数ｔが２以上の場合には（ステップＳ９１４でＹＥＳ）、行列記憶部５８にデータが記憶されている行列Ｕ1、Ｕ2、・・・、Ｕm-1、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ2、Ｌ1、Ａのそれぞれについて非対角項の非零要素数をカウントし、それらの非零要素数の総和ＳＣ４を中間結果記憶部５２に記憶させる（ステップＳ９１５）。
【０２６４】
次に、行列乗算数削減部５５は、行列Ｕ1、Ｕ2、・・・、Ｕm-1、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ2、Ｌ1、Ａのうちの第（ｔ＋１）順位以降の行列のそれぞれについて非対角項の非零要素数をカウントし、それらの非零要素数の総和ＳＣ５と中間結果記憶部５２内の行列Ｃの非零要素数ＳＣ０との総和ＳＣ６を算出して、非零要素数の総和ＳＣ６を中間結果記憶部５２に記憶させる（ステップＳ９１６）。
【０２６５】
行列乗算数削減部５５は、中間結果記憶部５２から非零要素数の総和ＳＣ４および非零要素数の総和ＳＣ６とを読み出して、ＳＣ６がＳＣ４以下であるかを判断する（ステップＳ９１７）。
【０２６６】
行列乗算数削減部５５は、ＳＣ６がＳＣ４以下である場合には（ステップＳ９１７でＹＥＳ）、中間結果記憶部５２内の行列Ｕ1、Ｕ2、・・・、Ｕm-1、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ2、Ｌ1、Ａのうちの第１順位から第ｔ順位までの行列を除いた行列Ｕt+1、Ｕt+2、・・・、Ｕm-1、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ2、Ｌ1、Ａと、行列Ｃとを行列記憶部５８に記憶させる（ステップＳ９１８）。
【０２６７】
（符号化ベクトル生成処理）
図１６は、第３の実施形態の符号化ベクトル生成処理のフローチャートである。
【０２６８】
図１６を参照して、行列積計算制御部１２５は、行列記憶部５８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕt+1、Ｃの順となるように行列間の順序を設定する（ステップＳ１００１）。
【０２６９】
次に、行列積計算制御部１２５は、制御変数ｉを１に設定する（ステップＳ１００２）。
【０２７０】
行列積計算制御部１２５は、行列積計算部５１を指示して、行列記憶部５８から第ｉ（＝１）順位の行列Ａを表わすデータを読み出させて、行列Ａと、入力された情報ベクトルＸとの積ＡＸを計算させる。行列積計算部５１は、乗算結果であるベクトルを中間結果Ｒとし、中間結果Ｒを表わすデータを中間結果記憶部５２に記憶させる（ステップＳ１００３）。
【０２７１】
次に、行列積計算制御部１２５は、制御変数ｉをインクリメントする（ステップＳ１００４）。
【０２７２】
行列積計算制御部１２５は、制御変数ｉが（２ｍ−ｔ＋２）未満の場合には（ステップＳ１００５でＹＥＳ）、行列積計算部５１を指示して、行列記憶部５８から第ｉ順位の行列（これをＭａｔiとする）を表わすデータを読み出させるとともに、中間結果記憶部５２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部５１は、乗算結果であるベクトルを新たな中間結果Ｒとし、中間結果記憶部５２内の中間結果Ｒを表わすデータを更新する（ステップＳ１００６）。その後、ステップＳ１００４からの処理が繰返される。
【０２７３】
制御変数ｉが（２ｍ−ｔ＋２）となった場合には（ステップＳ１００５でＮＯ）、行列積計算制御部１２５は、行列積計算部５１を指示して、行列記憶部５８から第ｉ順位の行列（Ｍａｔi）を表わすデータを読み出させるとともに、中間結果記憶部５２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部５１は、乗算結果であるベクトルをパリティべクトルＹとして出力する（ステップＳ１００７）。
【０２７４】
その後、配列部２０は、ｋビットの情報ベクトルＸとｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する（ステップＳ１００８）。
【０２７５】
（第３の実施形態の効果）
以上のように、第３の実施形態によれば、符号化ベクトル生成処理時において、後退代入を行わずに、式（Ｆ１４）に従ってパリティベクトルＹを算出するので、少ない計算量で情報ベクトルＸの符号化を行なうことができる。特に、基本上三角行列Ｕi(i=t+1〜m)および基本下三角行列Ｌi(i=1〜m)は非零要素数が少ない行列のため、式（Ｆ１４）の計算量は少ない。式（Ｆ１４）では、第１の実施形態の式（Ｂ１２）のＵ1〜Ｕtが１つの行列Ｃで表わされ、しかも行列Ｃの非対角項の非零要素数が行列Ｕ1〜Ｕtの非対角項の非零要素数の和以下であるため、式（Ｆ１４）の演算は、第１の実施形態の式（Ｂ１２）の演算よりもさらに計算量が少ない。また、式（Ｆ１４）の右側にある行列乗算から順次実行してパリティベクトルＹを算出するので、各行列乗算の結果はベクトルとなり、中間結果を記憶するための容量を小さくすることができる。
【０２７６】
また、行列分解処理時において、行列Ｂの逆行列を計算するという計算量の多い演算を行なうことなく、行列ＢのＬＵ分解、ＬＵ分解された上三角行列の基本上三角行列の積への分解、ＬＵ分解された下三角行列の基本下三角行列の積への分解、行列乗算数の削減処理を行なえばよいので、少ない計算量でパリティベクトルＹを生成するのに必要な行列を算出することができる。
【０２７７】
［第３の実施形態の変形例１］
第３の実施形態の変形例１の符号化器は、実数演算を行なう。
【０２７８】
（符号化アルゴリズム）
符号化器は、ｋ個の情報ビットｘ1、ｘ2、・・・、ｘkからなる情報ベクトルＸを受けて、実数演算を行なうことによって、以下の式を満たすようなｍ個のパリティビットｙ1、ｙ2、・・・、ｙmからなるパリティベクトルＹを生成する。
【０２７９】
Ｈ（Ｘ，Ｙ）T＝０  ・・・（Ｇ１）
ここで、Ｈはパリティ検査行列（以下、検査行列とも言う）であり、ｍ行ｎ列（＝ｋ＋ｍ）の行列である。
【０２８０】
（Ｘ，Ｙ）Tは、情報ベクトルとパリティベクトルからなるベクトルの転置を表わす。
式（Ｇ１）は、実数演算の場合には、次のように変形される。
【０２８１】
ＢＹ＝−ＡＸ  ・・・（Ｇ２）
ここで、行列Ａは、検査行列Ｈの第１列目〜第ｋ列目からなるｍ行ｋ列の行列である。行列Ｂは、検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなるｍ行ｍ列の行列である。
【０２８２】
行列ＢをＬＵ分解すると、式（Ｇ２）は以下の式に変形される。
ＬＵＹ＝−ＡＸ  ・・・（Ｇ３）
ここで、Ｌは下三角行列であり、Ｕは上三角行列である。
【０２８３】
式（Ｇ３）より、列ベクトルＹは、以下の式で表わされる。
Ｙ＝−Ｕ-1Ｌ-1ＡＸ  ・・・（Ｇ４）
上三角行列Ｕは、以下の式のように、基本上三角行列Ｕi（i＝1〜m）の積に分解される。
【０２８４】
Ｕ＝ＵmＵm-1・・・Ｕ2Ｕ1  ・・・（Ｇ５）
式（Ｇ５）より、Ｕ-1は、以下の式で表わされる。
【０２８５】
Ｕ-1＝Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1  ・・・（Ｇ６）
ここで、Ｕi-1は、対角項の要素が１であり、かつ非対角項の要素はＵiの要素の符号を反転したものである。
【０２８６】
下三角行列Ｌは、以下の式のように、基本下三角行列Ｌi（i＝1〜m）の積に分解される。
【０２８７】
Ｌ＝Ｌ1Ｌ2・・・Ｌm-1Ｌm  ・・・（Ｇ７）
式（Ｇ７）より、Ｌ-1は、以下の式で表わされる。
【０２８８】
Ｌ-1＝Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1  ・・・（Ｇ８）
ここで、Ｌi-1は、対角項の要素が１であり、かつ非対角項の要素はＬiの要素の符号を反転したものである。
【０２８９】
式（Ｇ６）および式（Ｇ８）によって、式（Ｇ４）は以下の式に変形される。
Ｙ＝−Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1ＡＸ  ・・・（Ｇ９）
式（Ｇ９）は、（２×ｍ＋２）個の行列の乗算であるが、一定の条件を満足する場合には、いくつかの行列の積を１つの行列で表わすことができるとする。以下の式のように、Ｕ1-1〜Ｕt-1のｔ個の行列の積を１つの行列Ｃで表わすことができるとする。
【０２９０】
（Ｕ1-1Ｕ2-1・・・Ｕt-1）≡Ｃ  ・・・（Ｇ１０）
この場合、一定の条件とは、行列Ｕ1-1、Ｕ2-1、・・・、Ｕt-1の非対角項の非零要素の個数の和が行列Ｃの非対角項の非零要素の個数以上であるものとする。
【０２９１】
式（Ｇ１０）より、式（Ｇ９）は以下の式で表わされる。
Ｙ＝−ＣＵt+1-1・・・Ｕm-1-1Ｕm-1Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1ＡＸ  ・・・（Ｇ１１）
式（Ｇ１１）で算出されるパリティベクトルＹと、情報ベクトルＸを用いて、符号化ベクトルＺは、以下の式で表わされる。
【０２９２】
Ｚ＝（Ｘ，Ｙ）  ・・・（Ｇ１２）
ここで、符号化ベクトルＺの第１ビット〜第ｋビットは、情報ベクトルＸのビットであり、符号化ベクトルＺの第（ｋ＋１）ビット〜第ｎビットは、パリティベクトルＹのビットである。
【０２９３】
（構成）
図１７は、第３の実施形態の変形例１の符号化器の構成を表わす図である。
【０２９４】
図１７を参照して、この符号化器２ｆは、第１の実施形態の変形例１と同様の、検査行列分解部３０と、ＬＵ分解部１４と、基本行列分解部１６と、逆行列計算部２３と、配列部２０とを備える。これらについては説明を繰返さない。
【０２９５】
また、符号化器２ｆは、中間結果記憶部６２と、行列記憶部６８と、行列積計算部６１と、行列積計算制御部１２６と、行列乗算数削減部６５とを備える。なお、以下では、（ｔ＋１）＜ｍとして説明する。
【０２９６】
中間結果記憶部６２は、式（Ｇ１１）に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部６２は、パリティベクトルＹの生成処理時に、式（Ｇ１１）に含まれる（２ｍ−ｔ＋２）回の行列乗算の中間結果を表わすデータを記憶する。
【０２９７】
行列記憶部６８は、基本上三角行列の逆行列Ｕt+1-1、Ｕt+2-1、・・・、Ｕm-1を表わすデータ、基本下三角行列の逆行列Ｌm-1、Ｌm-1-1、・・・、Ｌ1-1を表わすデータ、および行列Ａを表わすデータを記憶する。
【０２９８】
行列積計算部６１は、加算器６７および乗算器６９を備える。行列積計算部６１は、パリティベクトルＹを算出するために、式（Ｇ１１）に含まれる（２ｍ−ｔ＋２）回の行列乗算を行列積計算制御部１２６に指示された順序で実行する。行列積計算部６１は、入力される情報ベクトルＸ、行列記憶部６８内の行列Ａ、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1-1、Ｌm-1、Ｕm-1、Ｕm-1-1、・・・、Ｕt+1-1、Ｃを表わすデータ、および中間結果記憶部６２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行する。行列積計算部６１は、式（Ｇ１１）に含まれる（２ｍ−ｔ＋２）回の行列乗算が終了するまでの間は、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部６２に記憶させる。また、行列積計算部６１は、式（Ｇ９）に含まれる行列乗算の個数を削減する処理を実行するときに、行列乗算数削減部６５から指示された行列乗算を実行する。
【０２９９】
行列乗算数削減部６５は、式（Ｇ９）に含まれる行列乗算の個数を削減する処理を行なうときに、中間結果記憶部６２にデータが記憶されている行列の順序が先頭からＵ1-1、Ｕ2-1、・・・、Ｕm-1-1、Ｕm-1、Ｌm-1、Ｌm-1-1、・・・、Ｌ2-1、Ｌ1-1、Ａの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部６１を制御する。行列乗算数削減部６５は、各乗算において、乗算の対象となる２つの行列の非対角項の非零要素数と、乗算結果である１つの行列Ｃの非対角項の非零要素数とを比較し、後者と前者の差が所定の閾値ａ（ａ＞０）以下のときは、乗算対象の２つの行列を１つの行列Ｃで置換する。このようにして行列Ｃで置換された場合は、行列Ｃと次の行列との乗算が行なわれる。
【０３００】
一方、行列乗算数削減部６５は、後者と前者の差が所定の閾値ａを超えるときには、乗算対象の２つの行列を１つの行列Ｃで置換することを行なわずに、行列Ａ、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1-1、Ｌm-1、Ｕm-1、Ｕm-1-1、・・・、Ｕ1-1の非対角項の非零要素数の総和と、行列Ａ、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1-1、Ｌm-1、Ｕm-1、Ｕm-1-1、・・・、Ｕ1-1のうちの置換が行なわれた行列を除いた行列と行列Ｃの非対角項の非零要素数の総和とを比較し、後者の値が前者の値以下の場合には、行列Ａ、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1-1、Ｌm-1、Ｕm-1、Ｕm-1-1、・・・、Ｕ1-1のうちの置換された行列を除いた行列と行列Ｃとを行列記憶部６８に記憶させる。第ｔ順位までの行列が置換された場合には、行列Ｃ、Ｕt+1-1、・・・、Ｕm-1-1、Ｕm-1、Ｌm-1、Ｌm-1-1、・・・、Ｌ2-1、Ｌ1-1、Ａが行列記憶部６８に記憶される。
【０３０１】
行列積計算制御部１２６は、パリティベクトルＹを算出するために、行列記憶部６８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1-1、Ｌm-1、Ｕm-1、Ｕm-1-1、・・・、Ｕt+1-1、Ｃの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部６１を制御する。また、行列積計算制御部１２６は、式（Ｇ１１）に含まれる（２ｍ−ｔ＋２）回の行列乗算の終了後に、行列積計算部６１から計算結果であるベクトルＹ′（＝ＣＵt+1-1・・・Ｕm-1-1Ｕm-1Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1ＡＸ）を符号反転部９９へ出力させる。
【０３０２】
（行列分解処理）
図１８は、第３の実施形態の変形例１の行列分解処理のフローチャートである。
【０３０３】
図１８を参照して、まず、第１の実施形態の変形例１のステップＳ２０１〜ステップＳ２０４が検査行列分解部３０、行列記憶部６８、中間結果記憶部６２、ＬＵ分解部１４、基本行列分解部１６、および逆行列計算部２３によって実行される。ただし、生成された行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1-1、Ｕm-1、Ｌm-1、Ｌm-1-1、・・・、Ｌ2-1、Ｌ1-1、Ａは、第１の実施形態の変形例１のように行列記憶部６８にではなく、中間結果記憶部６２に記憶される。（ステップＳ１１０１）。
【０３０４】
次に、行列乗算数削減部６５は、中間結果記憶部６２にデータが記憶されている行列について、先頭からＵ1-1、Ｕ2-1、・・・、Ｕm-1-1、Ｕm-1、Ｌm-1、Ｌm-1-1、・・・、Ｌ2-1、Ｌ1-1、Ａの順となるように順序を設定する（ステップＳ１１０２）。
【０３０５】
次に、行列乗算数削減部６５は、制御変数ｔを１に設定する（ステップＳ１１０３）。
次に、行列乗算数削減部６５は、行列記憶部６８から第ｔ（＝１）順位の行列Ｕ1-1を表わすデータを読み出して、行列Ｕ1-1を行列Ｃとして、行列Ｃを表わすデータを中間結果記憶部６２に記憶する（ステップＳ１１０４）。
【０３０６】
行列数積削減部は、中間結果記憶部６２から行列Ｃを表わすデータを読み出して、行列Ｃの非零要素数ＳＣ０をカウントし、非零要素数ＳＣ０を中間結果記憶部６２に記憶させる（ステップＳ１１０５）。
【０３０７】
次に、行列乗算数削減部６５は、第（ｔ＋１）順位の行列を表わすデータを読み出して、その行列を行列ｍａｔとする（ステップＳ１１０６）。
【０３０８】
次に、行列乗算数削減部６５は、行列ｍａｔの非対角項の非零要素数ＳＣ１をカウントし、非零要素数ＳＣ１と中間結果記憶部６２内の行列Ｃの非零要素数ＳＣ０との和ＳＣ２を算出して、非零要素数の和ＳＣ２を中間結果記憶部６２に記憶させる（ステップＳ１１０７）。
【０３０９】
次に、行列積計算部６１は、行列Ｃと行列Ｍａｔとの積Ｃ×Ｍａｔを計算して、計算結果を行列Ｄとする（ステップＳ１１０８）。
【０３１０】
次に、行列乗算数削減部６５は、行列Ｄの非対角項の非零要素数ＳＣ３をカウントし、非零要素数ＳＣ３を中間結果記憶部６２に記憶させる（ステップＳ１１０９）。
【０３１１】
行列乗算数削減部６５は、中間結果記憶部６２から非零要素数の和ＳＣ２および非零要素数ＳＣ３とを読み出して、ＳＣ３とＳＣ２との差が閾値ａ以下であるかを判断する（ステップＳ１１１０）。
【０３１２】
行列乗算数削減部６５は、ＳＣ３とＳＣ２との差が閾値ａ以下である場合には（ステップＳ１１１０でＹＥＳ）、制御変数ｔをインクリメントし（ステップＳ１１１１）、中間結果記憶部６２内の行列Ｃを行列Ｄで更新し（ステップＳ１１１２）、さらに中間結果記憶部６２内の非零要素数ＳＣ０を非零要素数ＳＣ３を更新し、ステップＳ１１０６からの処理が繰返させる。
【０３１３】
一方、行列乗算数削減部６５は、ＳＣ３とＳＣ２との差が閾値ａを超え（ステップＳ１１１０でＮＯ）、かつ制御変数ｔが２以上の場合には（ステップＳ１１１４でＹＥＳ）、行列記憶部６８にデータが記憶されている行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1-1、Ｕm-1、Ｌm-1、Ｌm-1-1、・・・、Ｌ2-1、Ｌ1-1、Ａのそれぞれについて非対角項の非零要素数をカウントし、それらの非零要素数の総和ＳＣ４を中間結果記憶部６２に記憶させる（ステップＳ１１１５）。
【０３１４】
次に、行列乗算数削減部６５は、行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1-1、Ｕm-1、Ｌm-1、Ｌm-1-1、・・・、Ｌ2-1、Ｌ1-1、Ａのうちの第（ｔ＋１）順位以降の行列のそれぞれについて非対角項の非零要素数をカウントし、それらの非零要素数の総和ＳＣ５と中間結果記憶部６２内の行列Ｃの非零要素数ＳＣ０との総和ＳＣ６を算出して、非零要素数の総和ＳＣ６を中間結果記憶部６２に記憶させる（ステップＳ１１１６）。
【０３１５】
行列乗算数削減部６５は、中間結果記憶部６２から非零要素数の総和ＳＣ４および非零要素数の総和ＳＣ６とを読み出して、ＳＣ６がＳＣ４以下であるかを判断する（ステップＳ１１１７）。
【０３１６】
行列乗算数削減部６５は、ＳＣ６がＳＣ４以下である場合には（ステップＳ１１１７でＹＥＳ）、中間結果記憶部６２内の行列Ｕ1-1、Ｕ2-1、・・・、Ｕm-1-1、Ｕm-1、Ｌm-1、Ｌm-1-1、・・・、Ｌ2-1、Ｌ1-1、Ａのうちの第１順位から第ｔ順位までの行列を除いた行列Ｕt+1-1、Ｕt+2-1、・・・、Ｕm-1-1、Ｕm-1、Ｌm-1、Ｌm-1-1、・・・、Ｌ2-1、Ｌ1-1、Ａと、行列Ｃとを行列記憶部６８に記憶させる（ステップＳ１１１８）。
【０３１７】
（符号化ベクトル生成処理）
図１９は、第３の実施形態の変形例１の符号化ベクトル生成処理のフローチャートである。
【０３１８】
図１９を参照して、行列積計算制御部１２６は、行列記憶部６８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1-1、Ｌ2-1、・・・、Ｌm-1-1、Ｌm-1、Ｕm-1、Ｕm-1-1、・・・、Ｕt+1-1、Ｃの順となるように行列間の順序を設定する（ステップＳ１２０１）。
【０３１９】
次に、行列積計算制御部１２６は、制御変数ｉを１に設定する（ステップＳ１２０２）。
【０３２０】
行列積計算制御部１２６は、行列積計算部６１を指示して、行列記憶部６８から第ｉ（＝１）順位の行列Ａを表わすデータを読み出させて、行列Ａと、入力された情報ベクトルＸとの積ＡＸを計算させる。行列積計算部６１は、乗算結果であるベクトルを中間結果Ｒとし、中間結果Ｒを表わすデータを中間結果記憶部６２に記憶させる（ステップＳ１２０３）。
【０３２１】
次に、行列積計算制御部１２６は、制御変数ｉをインクリメントする（ステップＳ１２０４）。
【０３２２】
行列積計算制御部１２６は、制御変数ｉが（２ｍ−ｔ＋２）未満の場合には（ステップＳ１２０５でＹＥＳ）、行列積計算部６１を指示して、行列記憶部６８から第ｉ順位の行列（これをＭａｔiとする）を表わすデータを読み出させるとともに、中間結果記憶部６２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部６１は、乗算結果であるベクトルを新たな中間結果Ｒとし、中間結果記憶部６２内の中間結果Ｒを表わすデータを更新する（ステップＳ１２０６）。その後、ステップＳ１２０４からの処理が繰返される。
【０３２３】
制御変数ｉが（２ｍ−ｔ＋２）となった場合には（ステップＳ１２０５でＮＯ）、行列積計算制御部１２６は、行列積計算部６１を指示して、行列記憶部６８から第ｉ順位の行列（Ｍａｔi）を表わすデータを読み出させるとともに、中間結果記憶部６２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部６１は、乗算結果であるベクトルＹ′を符号反転部９９に出力する。符号反転部９９は、ベクトルＹ′の符号を反転したものをパリティべクトルＹとして出力する（ステップＳ１２０７）。
【０３２４】
その後、配列部２０は、ｋビットの情報ベクトルＸとｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する（ステップＳ１２０８）。
【０３２５】
（第３の実施形態の変形例１の効果）
以上のように、第３の実施形態の変形例１によれば、符号化ベクトル生成処理時において、後退代入を行わずに、式（Ｇ１１）に従ってパリティベクトルＹを算出するので、少ない計算量で情報ベクトルＸの符号化を行なうことができる。特に、基本上三角行列の逆行列Ｕi-1(i=t+1〜m)および基本下三角行列の逆行列Ｌi-1(i=1〜m)は非零要素数が少ない行列のため、式（Ｇ１１）の計算量は少ない。式（Ｇ１１）では、第１の実施形態の変形例１の式（Ｃ９）のＵ1-1〜Ｕt-1が１つの行列Ｃで表わされ、しかも行列Ｃの非対角項の非零要素数が行列Ｕ1-1〜Ｕt-1の非対角項の非零要素数の和以下であるため、式（Ｇ１１）の演算は、第１の実施形態の変形例１の式（Ｃ９）の演算よりもさらに計算量が少ない。また、式（Ｇ１１）の右側にある行列乗算から順次実行してパリティベクトルＹを算出するので、各行列乗算の結果はベクトルとなり、中間結果を記憶するための容量を小さくすることができる。
【０３２６】
また、行列分解処理時において、行列Ｂの逆行列を計算するという計算量の多い演算を行なうことなく、行列ＢのＬＵ分解、ＬＵ分解された上三角行列の基本上三角行列の積への分解、ＬＵ分解された下三角行列の基本下三角行列の積への分解、基本上三角行列および基本下三角行列の非対角項の符号の反転、行列乗算数の削減処理を行なえばよいので、少ない計算量でパリティベクトルＹを生成するのに必要な行列を算出することができる。
【０３２７】
［第４の実施形態］
第４の実施形態の符号化器は、２を法とする演算を行なう。
【０３２８】
（符号化アルゴリズム）
符号化器は、ｋ個の情報ビットｘ1、ｘ2、・・・、ｘkからなる情報ベクトルＸを受けて、２を法とする演算を行なうことによって、以下の式を満たすようなｍ個のパリティビットｙ1、ｙ2、・・・、ｙmからなるパリティベクトルＹを生成する。
【０３２９】
Ｈ（Ｘ，Ｙ）T≡０  ・・・（Ｈ１）
ここで、Ｈはパリティ検査行列（以下、検査行列とも言う）であり、ｍ行ｎ列（＝ｋ＋ｍ）の行列である。
【０３３０】
（Ｘ，Ｙ）Tは、情報ベクトルとパリティベクトルからなるベクトルの転置を表わす。
式（Ｈ１）は、２を法とする演算の場合には、次のように変形される。
【０３３１】
ＢＹ≡ＡＸ  ・・・（Ｈ２）
ここで、行列Ａは、検査行列Ｈの第１列目〜第ｋ列目からなるｍ行ｋ列の行列である。行列Ｂは、検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなるｍ行ｍ列の行列である。
【０３３２】
行列Ｂに対して、以下のようにオーダリングを行なうとする。
まず、行列Ｂの２つの行を交換するとすると、式（Ｈ２）は以下のように変形される。
【０３３３】
Ｐ1ＢＹ≡Ｐ1ＡＸ  ・・・（Ｈ３）
ここで、Ｐ1は、第１回目の行の入れ替えを表わす変換行列である。ｉ行とｊ行を変換する場合には、Ｐ1は、単位行列Ｅのｉ行とｊ行を入れ替えた行列となる。
【０３３４】
さらに、行列Ｂの２つの列を交換すると、式（Ｈ３）は以下のように変形される。
Ｐ1ＢＱ1Ｑ1-1Ｙ≡Ｐ1ＡＸ  ・・・（Ｈ４）
ここで、Ｑ1は、第１回目の列の入れ替えを表わす変換行列である。ｉ列とｊ列を変換する場合には、Ｑ1は、単位行列Ｅのｉ列とｊ列を入れ替えた行列となる。
【０３３５】
以下のように新たな行列を定義する。
Ｂ(1)≡Ｐ1ＢＱ1  ・・・（Ｈ５）
Ａ(1)≡Ｐ1Ａ  ・・・（Ｈ６）
式（Ｈ５）および式（Ｈ６）により、式（Ｈ４）は以下の式で表わされる。
【０３３６】
Ｂ(1)Ｑ1-1Ｙ≡Ａ(1)Ｘ)  ・・・（Ｈ７）
さらに、行列Ｂ(1)の２つの行を交換するとすると、式（Ｈ７）は以下のように変形される。
【０３３７】
Ｐ2Ｂ(1)Ｑ1-1Ｙ≡Ｐ2Ａ(1)Ｘ  ・・・（Ｈ８）
ここで、Ｐ2は、第２回目の行の入れ替えを表わす変換行列である。
【０３３８】
さらに、行列Ｂ(1)の２つの列を交換すると、式（Ｈ８）は以下のように変形される。
Ｐ2Ｂ(1)Ｑ2Ｑ2-1Ｑ1-1Ｙ≡Ｐ2Ａ(1)Ｘ  ・・・（Ｈ９）
ここで、Ｑ2は、第２回目の列の入れ替えを表わす変換行列である。
【０３３９】
以下のように新たな行列を定義する。
Ｂ(2)≡Ｐ2Ｂ(1)Ｑ2  ・・・（Ｈ１０）
Ａ(2)≡Ｐ2Ａ(1)  ・・・（Ｈ１１）
式（Ｈ１０）および式（Ｈ１１）により、式（Ｈ９）は以下の式で表わされる。
【０３４０】
Ｂ(2)Ｑ2-1Ｑ1-1Ｙ≡Ａ(2)Ｘ  ・・・（Ｈ１２）
同様にして、行列Ｂに対して、第ｕ回（ｕ≧１）だけ行の入れ替えおよび第ｖ（ｖ≧１）だげ列の入れ替えを行なう。第ｓ回目（１≦s≦u）の行の入れ替えを表わす行列をＰs、第ｓ回目（１≦s≦v）の列の入れ替えを表わす行列をＱsとして、以下のように新たな行列を定義する。
【０３４１】
Ｂ′≡Ｐu・・・Ｐ2Ｐ1ＢＱ1Ｑ2・・・Ｑv  ・・・（Ｈ１３）
Ａ(u)≡Ｐu・・・Ｐ2Ｐ1Ａ  ・・・（Ｈ１４）
Ｅ(v)≡Ｑ1Ｑ2・・・Ｑv  ・・・（Ｈ１５）
式（Ｈ１３）、式（Ｈ１４）および式（Ｈ１５）により、以下の式が成り立つ。
【０３４２】
Ｂ′Ｅ(v)-1Ｙ≡Ａ(u)Ｘ  ・・・（Ｈ１６）
行列Ｂ′をＬＵ分解すると、式（Ｈ１６）は以下の式に変形される。
【０３４３】
Ｌ′Ｕ′Ｅ(v)-1Ｙ≡Ａ(u)Ｘ  ・・・（Ｈ１７）
ここで、Ｌ′は下三角行列であり、Ｕ′は上三角行列である。
【０３４４】
式（Ｈ１７）より、列ベクトルＹは、以下の式で表わされる。
Ｙ≡Ｅ(v)Ｕ′-1Ｌ′-1Ａ(u))Ｘ  ・・・（Ｈ１８）
上三角行列Ｕ′は、以下の式のように、基本上三角行列Ｕ′i（i＝1〜m）の積に分解される。
【０３４５】
Ｕ′≡Ｕ′mＵ′m-1・・・Ｕ′2Ｕ′1  ・・・（Ｈ１９）
式（Ｈ１９）より、Ｕ′-1は、以下の式で表わされる。
【０３４６】
Ｕ′-1≡Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1  ・・・（Ｈ２０）
下三角行列Ｌ′は、以下の式のように、基本下三角行列Ｌ′i（i＝1〜m）の積に分解される。
【０３４７】
Ｌ′≡Ｌ′1Ｌ′2・・・Ｌ′m-1Ｌ′m  ・・・（Ｈ２１）
式（Ｈ２１）より、Ｌ′-1は、以下の式で表わされる。
【０３４８】
Ｌ′-1≡Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1  ・・・（Ｈ２２）
式（Ｈ２０）および式（Ｈ２２）によって、式（Ｈ１８）は以下の式に変形される。
【０３４９】
Ｙ≡Ｅ(v)（Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1）（Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1）Ａ(u)Ｘ  ・・・（Ｈ２３）
ところで、２を法とする演算の場合には、基本上三角行列Ｕ′i(i=1〜m)、基本下三角行列Ｌ′i(i=1〜m)は、以下のような性質を有する。
【０３５０】
Ｕ′i≡（Ｕ′i）-1  ・・・（Ｈ２４）
Ｌ′i≡（Ｌ′i）-1  ・・・（Ｈ２５）
式（Ｈ２４）および式（Ｈ２５）によって、式（Ｈ２３）は以下の式に変形される。
【０３５１】
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ｈ２６）
式（Ｈ２６）は、（２×ｍ＋３）個の行列の乗算であるが、一定の条件を満足する場合には、いくつかの行列の積を１つの行列で表わすことができるとする。以下の式のように、Ｅ(v)、Ｕ′1〜Ｕ′t-1のｔ個の行列の積を１つの行列Ｃで表わすことができるとする。
【０３５２】
Ｅ(v)（Ｕ′1Ｕ′2・・・Ｕ′t-1）≡Ｃ  ・・・（Ｈ２７）
この場合、一定の条件とは、行列Ｅ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′t-1の非対角項の非零要素の個数の和が行列Ｃの非対角項の非零要素の個数以上であるものとする。
【０３５３】
式（Ｈ２７）より、式（Ｈ２６）は以下の式で表わされる。
Ｙ≡ＣＵ′t・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ｈ２８）
式（Ｈ２８）で算出されるパリティベクトルＹと、情報ベクトルＸを用いて、符号化ベクトルＺは、以下の式で表わされる。
【０３５４】
Ｚ≡（Ｘ，Ｙ）  ・・・（Ｈ２９）
ここで、符号化ベクトルＺの第１ビット〜第ｋビットは、情報ベクトルＸのビットであり、符号化ベクトルＺの第（ｋ＋１）ビット〜第ｎビットは、パリティベクトルＹのビットである。
【０３５５】
（構成）
図２０は、第４の実施形態の符号化器の構成を表わす図である。
【０３５６】
図２０を参照して、この符号化器２ｇは、第２の実施形態と同様の、検査行列分解部３０と、オーダリング部４０と、ＬＵ分解部３４と、基本行列分解部３６と、配列部２０とを備える。これらについては説明を繰返さない。
【０３５７】
また、符号化器２ｇは、中間結果記憶部７２と、行列記憶部７８と、行列積計算部７１と、行列積計算制御部１２７と、行列乗算数削減部７５とを備える。なお、以下では、ｔ＜ｍとして説明する。
【０３５８】
中間結果記憶部７２は、式（Ｈ２８）に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部７２は、パリティベクトルＹの生成処理時に、式（Ｈ２８）に含まれる（２ｍ−ｔ＋３）回の行列乗算の中間結果を表わすデータを記憶する。
【０３５９】
行列記憶部７８は、基本上三角行列Ｕ′t、Ｕ′t+1、・・・、Ｕ′mを表わすデータ、基本下三角行列Ｌ′m、Ｌ′m-1、・・・、Ｌ′1を表わすデータ、および行列Ｃ、Ａ(u)を表わすデータを記憶する。
【０３６０】
行列積計算部７１は、加算器７７および乗算器７９を備える。行列積計算部７１は、パリティベクトルＹを算出するために、式（Ｈ２８）に含まれる（２ｍ−ｔ＋３）回の行列乗算を行列積計算制御部１２７に指示された順序で実行する。行列積計算部７１は、入力される情報ベクトルＸ、行列記憶部７８内の行列Ａ(u)、Ｌ′1、Ｌ′2、・・・、Ｌ′m-1、Ｌ′m、Ｕ′m、Ｕ′m-1、・・・、Ｕ′t、Ｃを表わすデータ、および中間結果記憶部７２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行する。行列積計算部７１は、式（Ｈ２８）に含まれる（２ｍ−ｔ＋３）回の行列乗算が終了するまでの間は、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部７２に記憶させる。また、行列積計算部７１は、式（Ｈ２６）に含まれる行列乗算の個数を削減する処理を実行するときに、行列乗算数削減部７５から指示された行列乗算を実行する。
【０３６１】
行列乗算数削減部７５は、式（Ｈ２６）に含まれる行列乗算の個数を削減する処理を行なうときに、中間結果記憶部７２にデータが記憶されている行列の順序が先頭からＥ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部７１を制御する。行列乗算数削減部７５は、各乗算において、乗算の対象となる２つの行列の非対角項の非零要素数と、乗算結果である１つの行列Ｃの非対角項の非零要素数とを比較し、後者と前者の差が所定の閾値ａ（ａ＞０）以下のときは、乗算対象の２つの行列を１つの行列Ｃで置換する。このようにして行列Ｃで置換された場合は、行列Ｃと次の行列との乗算が行なわれる。
【０３６２】
一方、行列乗算数削減部７５は、後者と前者の差が所定の閾値ａを超えるときには、乗算対象の２つの行列を１つの行列Ｃで置換することを行なわずに、行列Ｅ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)の非対角項の非零要素数の総和と、行列Ｅ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)のうちの置換が行なわれた行列を除いた行列と行列Ｃの非対角項の非零要素数の総和とを比較し、後者の値が前者の値以下の場合には、行列Ｅ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)のうちの置換された行列を除いた行列と行列Ｃとを行列記憶部７８に記憶させる。第ｔ順位までの行列が置換された場合には、行列Ｃ、Ｕ′t、Ｕ′t+1、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)が行列記憶部７８に記憶される。
【０３６３】
行列積計算制御部１２７は、パリティベクトルＹを算出するために、行列記憶部７８にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1、Ｌ′2、・・・、Ｌ′m-1、Ｌ′m、Ｕ′m、Ｕ′m-1、・・・、Ｕ′t、Ｃの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部７１を制御する。また、行列積計算制御部１２７は、式（Ｈ２８）に含まれる（２ｍ−ｔ＋３）回の行列乗算の終了後に、行列積計算部７１から計算結果であるパリティベクトルＹを出力させる。
【０３６４】
（行列分解処理）
図２１、第４の実施形態の行列分解処理のフローチャートである。
【０３６５】
図２１を参照して、第２の実施形態のステップＳ５０１〜ステップＳ５０４が検査行列分解部３０、行列記憶部７８、中間結果記憶部７２、オーダリング部４０、ＬＵ分解部３４、および基本行列分解部３６によって実行される。ただし、生成された行列Ｅ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)は、第２の実施形態のように行列記憶部７８にではなく、中間結果記憶部７２に記憶される。（ステップＳ１３０１）。
【０３６６】
次に、行列乗算数削減部７５は、中間結果記憶部７２にデータが記憶されている行列について、先頭からＥ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)の順となるように順序を設定する（ステップＳ１３０２）。
【０３６７】
次に、行列乗算数削減部７５は、制御変数ｔを１に設定する（ステップＳ１３０３）。
次に、行列乗算数削減部７５は、行列記憶部７８から第ｔ（＝１）順位の行列Ｅ(v)を表わすデータを読み出して、行列Ｅ(v)を行列Ｃとして、行列Ｃを表わすデータを中間結果記憶部７２に記憶する（ステップＳ１３０４）。
【０３６８】
行列数積削減部は、中間結果記憶部７２から行列Ｃを表わすデータを読み出して、行列Ｃの非零要素数ＳＣ０をカウントし、非零要素数ＳＣ０を中間結果記憶部７２に記憶させる（ステップＳ１３０５）。
【０３６９】
次に、行列乗算数削減部７５は、第（ｔ＋１）順位の行列を表わすデータを読み出して、その行列を行列ｍａｔとする（ステップＳ１３０６）。
【０３７０】
次に、行列乗算数削減部７５は、行列ｍａｔの非対角項の非零要素数ＳＣ１をカウントし、非零要素数ＳＣ１と中間結果記憶部７２内の行列Ｃの非零要素数ＳＣ０との和ＳＣ２を算出して、非零要素数の和ＳＣ２を中間結果記憶部７２に記憶させる（ステップＳ１３０７）。
【０３７１】
次に、行列積計算部７１は、行列Ｃと行列Ｍａｔとの積Ｃ×Ｍａｔを計算して、計算結果を行列Ｄとする（ステップＳ１３０８）。
【０３７２】
次に、行列乗算数削減部７５は、行列Ｄの非対角項の非零要素数ＳＣ３をカウントし、非零要素数ＳＣ３を中間結果記憶部７２に記憶させる（ステップＳ１３０９）。
【０３７３】
行列乗算数削減部７５は、中間結果記憶部７２から非零要素数の和ＳＣ２および非零要素数ＳＣ３とを読み出して、ＳＣ３とＳＣ２との差が閾値ａ以下であるかを判断する（ステップＳ１３１０）。
【０３７４】
行列乗算数削減部７５は、ＳＣ３とＳＣ２との差が閾値ａ以下である場合には（ステップＳ１３１０でＹＥＳ）、制御変数ｔをインクリメントし（ステップＳ１３１１）、中間結果記憶部７２内の行列Ｃを行列Ｄで更新し（ステップＳ１３１２）、さらに中間結果記憶部７２内の非零要素数ＳＣ０を非零要素数ＳＣ３を更新し、ステップＳ１３０６からの処理が繰返させる。
【０３７５】
一方、行列乗算数削減部７５は、ＳＣ３とＳＣ２との差が閾値ａを超え（ステップＳ１３１０でＮＯ）、かつ制御変数ｔが２以上の場合には（ステップＳ１３１４でＹＥＳ）、行列記憶部７８にデータが記憶されている行列Ｅ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)のそれぞれについて非対角項の非零要素数をカウントし、それらの非零要素数の総和ＳＣ４を中間結果記憶部７２に記憶させる（ステップＳ１３１５）。
【０３７６】
次に、行列乗算数削減部７５は、行列Ｅ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)のうちの第（ｔ＋１）順位以降の行列のそれぞれについて非対角項の非零要素数をカウントし、それらの非零要素数の総和ＳＣ５と中間結果記憶部７２内の行列Ｃの非零要素数ＳＣ０との総和ＳＣ６を算出して、非零要素数の総和ＳＣ６を中間結果記憶部７２に記憶させる（ステップＳ１３１６）。
【０３７７】
行列乗算数削減部７５は、中間結果記憶部７２から非零要素数の総和ＳＣ４および非零要素数の総和ＳＣ６とを読み出して、ＳＣ６がＳＣ４以下であるかを判断する（ステップＳ１３１７）。
【０３７８】
行列乗算数削減部７５は、ＳＣ６がＳＣ４以下である場合には（ステップＳ１３１７でＹＥＳ）、中間結果記憶部７２内の行列Ｅ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)のうちの第１順位から第ｔ順位までの行列を除いた行列Ｕ′t、Ｕ′t+1、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)と、行列Ｃとを行列記憶部７８に記憶させる（ステップＳ１３１８）。
【０３７９】
（符号化ベクトル生成処理）
図２２は、第４の実施形態の符号化ベクトル生成処理のフローチャートである。
【０３８０】
図２２を参照して、行列積計算制御部１２７は、行列記憶部７８にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1、Ｌ′2、・・・、Ｌ′m、Ｕ′m、Ｕ′m-1、・・・、Ｕ′t、Ｃの順となるように行列間の順序を設定する（ステップＳ１４０１）。
【０３８１】
次に、行列積計算制御部１２７は、制御変数ｉを１に設定する（ステップＳ１４０２）。
【０３８２】
行列積計算制御部１２７は、行列積計算部７１を指示して、行列記憶部７８から第ｉ（＝１）順位の行列Ａ(u)を表わすデータを読み出させて、行列Ａ(u)と、入力された情報ベクトルＸとの積Ａ(u)Ｘを計算させる。行列積計算部７１は、乗算結果であるベクトルを中間結果Ｒとし、中間結果Ｒを表わすデータを中間結果記憶部７２に記憶させる（ステップＳ１４０３）。
【０３８３】
次に、行列積計算制御部１２７は、制御変数ｉをインクリメントする（ステップＳ１４０４）。
【０３８４】
行列積計算制御部１２７は、制御変数ｉが（２ｍ−ｔ＋３）未満の場合には（ステップＳ１４０５でＹＥＳ）、行列積計算部７１を指示して、行列記憶部７８から第ｉ順位の行列（これをＭａｔiとする）を表わすデータを読み出させるとともに、中間結果記憶部７２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部７１は、乗算結果であるベクトルを新たな中間結果Ｒとし、中間結果記憶部７２内の中間結果Ｒを表わすデータを更新する（ステップＳ１４０６）。その後、ステップＳ１４０４からの処理が繰返される。
【０３８５】
制御変数ｉが（２ｍ−ｔ＋３）となった場合には（ステップＳ１４０５でＮＯ）、行列積計算制御部１２７は、行列積計算部７１を指示して、行列記憶部７８から第ｉ順位の行列（Ｍａｔi）を表わすデータを読み出させるとともに、中間結果記憶部７２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部７１は、乗算結果であるベクトルをパリティべクトルＹとして出力する（ステップＳ１４０７）。
【０３８６】
その後、配列部２０は、ｋビットの情報ベクトルＸとｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する（ステップＳ１４０８）。
【０３８７】
（第４の実施形態の効果）
以上のように、第４の実施形態によれば、符号化ベクトル生成処理時において、後退代入を行わずに、式（Ｈ２８）に従ってパリティベクトルＹを算出するので、少ない計算量で情報ベクトルＸの符号化を行なうことができる。特に、行列Ｂがオーダリングされるため、基本上三角行列Ｕ′i(i=t〜m)および基本下三角行列Ｌ′i(i=1〜m)は、第３の実施形態の基本上三角行列Ｕi(i=t+1〜m)および基本下三角行列Ｌi(i=1〜m)よりもさらに非零要素数が少ない行列となり、式（Ｈ２８）の演算の計算量を式（Ｆ１４）よりもさらに少なくできる。式（Ｈ２８）では、第２の実施形態の式（Ｄ２６）のＥ(v)、Ｕ′1〜Ｕ′t-1が１つの行列Ｃで表わされ、しかも行列Ｃの非対角項の非零要素数が行列Ｅ(v)、Ｕ′1〜Ｕ′t-1の非対角項の非零要素数の和以下であるため、式（Ｈ２８）の演算は、第２の実施形態の式（Ｄ２６）の演算よりもさらに計算量が少ない。また、式（Ｈ２８）の右側にある行列乗算から順次実行してパリティベクトルＹを算出するので、各行列乗算の結果はベクトルとなり、中間結果を記憶するための容量を小さくすることができる。
【０３８８】
また、行列分解処理時において、行列Ｂの逆行列を計算するという計算量の多い演算を行なうことなく、行列Ｂのオーダリングによる行列Ｂ′、Ａ(u)、Ｅ(v)の生成、行列Ｂ′のＬＵ分解、ＬＵ分解された上三角行列の基本上三角行列の積への分解、ＬＵ分解された下三角行列の基本下三角行列の積への分解、行列乗算数の削減処理を行なえばよいので、少ない計算量でパリティベクトルＹを生成するのに必要な行列を算出することができる。
【０３８９】
［第４の実施形態の変形例１］
第４の実施形態の変形例１の符号化器は、実数演算を行なう。
【０３９０】
（符号化アルゴリズム）
符号化器は、ｋ個の情報ビットｘ1、ｘ2、・・・、ｘkからなる情報ベクトルＸを受けて、実数演算を行なうことによって、以下の式を満たすようなｍ個のパリティビットｙ1、ｙ2、・・・、ｙmからなるパリティベクトルＹを生成する。
【０３９１】
Ｈ（Ｘ，Ｙ）T＝０  ・・・（Ｉ１）
ここで、Ｈはパリティ検査行列（以下、検査行列とも言う）であり、ｍ行ｎ列（＝ｋ＋ｍ）の行列である。
【０３９２】
（Ｘ，Ｙ）Tは、情報ベクトルとパリティベクトルからなるベクトルの転置を表わす。
式（Ｉ１）は、実数演算の場合には、次のように変形される。
【０３９３】
ＢＹ＝−ＡＸ  ・・・（Ｉ２）
ここで、行列Ａは、検査行列Ｈの第１列目〜第ｋ列目からなるｍ行ｋ列の行列である。行列Ｂは、検査行列Ｈの第（ｋ＋１）列目〜第ｎ列目からなるｍ行ｍ列の行列である。
【０３９４】
行列Ｂに対して、以下のようにオーダリングを行なうとする。
まず、行列Ｂの２つの行を交換するとすると、式（Ｉ２）は以下のように変形される。
【０３９５】
Ｐ1ＢＹ＝Ｐ1ＡＸ  ・・・（Ｉ３）
ここで、Ｐ1は、第１回目の行の入れ替えを表わす変換行列である。ｉ行とｊ行を変換する場合には、Ｐ1は、単位行列Ｅのｉ行とｊ行を入れ替えた行列となる。
【０３９６】
さらに、行列Ｂの２つの列を交換すると、式（Ｉ３）は以下のように変形される。
Ｐ1ＢＱ1Ｑ1-1Ｙ＝−Ｐ1ＡＸ  ・・・（Ｉ４）
ここで、Ｑ1は、第１回目の列の入れ替えを表わす変換行列である。ｉ列とｊ列を変換する場合には、Ｑ1は、単位行列Ｅのｉ列とｊ列を入れ替えた行列となる。
【０３９７】
以下のように新たな行列を定義する。
Ｂ(1)＝Ｐ1ＢＱ1  ・・・（Ｉ５）
Ａ(1)＝Ｐ1Ａ  ・・・（Ｉ６）
式（Ｉ５）および式（Ｉ６）により、式（Ｉ４）は以下の式で表わされる。
【０３９８】
Ｂ(1)Ｑ1-1Ｙ＝−Ａ(1)Ｘ  ・・・（Ｉ７）
さらに、行列Ｂ(1)の２つの行を交換するとすると、式（Ｉ７）は以下のように変形される。
【０３９９】
Ｐ2Ｂ(1)Ｑ1-1Ｙ＝−Ｐ2Ａ(1)Ｘ  ・・・（Ｉ８）
ここで、Ｐ2は、第２回目の行の入れ替えを表わす変換行列である。
【０４００】
さらに、行列Ｂ(1)の２つの列を交換すると、式（Ｉ８）は以下のように変形される。
Ｐ2Ｂ(1)Ｑ2Ｑ2-1Ｑ1-1Ｙ＝−Ｐ2Ａ(1)Ｘ  ・・・（Ｉ９）
ここで、Ｑ2は、第２回目の列の入れ替えを表わす変換行列である。
【０４０１】
以下のように新たな行列を定義する。
Ｂ(2)＝Ｐ2Ｂ(1)Ｑ2  ・・・（Ｉ１０）
Ａ(2)＝Ｐ2Ａ(1)  ・・・（Ｉ１１）
式（Ｉ１０）および式（Ｉ１１）により、式（Ｉ９）は以下の式で表わされる。
【０４０２】
Ｂ(2)Ｑ2-1Ｑ1-1Ｙ＝−Ａ(2)Ｘ  ・・・（Ｉ１２）
同様にして、行列Ｂに対して、第ｕ回（ｕ≧１）だけ行の入れ替えおよび第ｖ（ｖ≧１）だげ列の入れ替えを行なう。第ｓ回目（１≦s≦u）の行の入れ替えを表わす行列をＰs、第ｓ回目（１≦s≦v）の列の入れ替えを表わす行列をＱsとして、以下のように新たな行列を定義する。
【０４０３】
Ｂ′＝Ｐu・・・Ｐ2Ｐ1ＢＱ1Ｑ2・・・Ｑv  ・・・（Ｉ１３）
Ａ(u)＝Ｐu・・・Ｐ2Ｐ1Ａ  ・・・（Ｉ１４）
Ｅ(v)＝Ｑ1Ｑ2・・・Ｑv  ・・・（Ｉ１５）
式（Ｉ１３）、式（Ｉ１４）および式（Ｉ１５）により、以下の式が成り立つ。
【０４０４】
Ｂ′Ｅ(v)-1Ｙ＝−Ａ(u)Ｘ  ・・・（Ｉ１６）
行列Ｂ′をＬＵ分解すると、式（Ｉ１６）は以下の式に変形される。
【０４０５】
Ｌ′Ｕ′ＱV-1・・・Ｑ2-1Ｑ1-1Ｙ＝Ａ(u)Ｘ  ・・・（Ｉ１７）
ここで、Ｌ′は下三角行列であり、Ｕ′は上三角行列である。
【０４０６】
式（Ｉ１７）より、列ベクトルＹは、以下の式で表わされる。
Ｙ＝−Ｅ(v)Ｕ′-1Ｌ′-1Ａ(u)Ｘ  ・・・（Ｉ１８）
上三角行列Ｕ′は、以下の式のように、基本上三角行列Ｕ′i（i＝1〜m）の積に分解される。
【０４０７】
Ｕ′＝Ｕ′mＵ′m-1・・・Ｕ′2Ｕ′1  ・・・（Ｉ１９）
ここで、逆行列Ｕ′i-1は、対角項の要素が１であり、かつ非対角項の要素はＵ′iの要素の符号を反転したものである。
【０４０８】
式（Ｉ１９）より、Ｕ′-1は、以下の式で表わされる。
Ｕ′-1＝Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1  ・・・（Ｉ２０）
下三角行列Ｌは、以下の式のように、基本下三角行列Ｌi（i＝1〜m）の積に分解される。
【０４０９】
Ｌ′＝Ｌ′1Ｌ′2・・・Ｌ′m-1Ｌ′m  ・・・（Ｉ２１）
ここで、逆行列Ｌ′i-1は、対角項の要素が１であり、かつ非対角項の要素はＬ′iの要素の符号を反転したものである。
【０４１０】
式（Ｉ２１）より、Ｌ′-1は、以下の式で表わされる。
Ｌ′-1＝Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1  ・・・（Ｉ２２）
式（Ｉ２０）および式（Ｉ２２）によって、式（Ｉ１８）は以下の式に変形される。
【０４１１】
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ  ・・・（Ｉ２３）
式（Ｉ２３）は、（２×ｍ＋３）個の行列の乗算であるが、一定の条件を満足する場合には、いくつかの行列の積を１つの行列で表わすことができるとする。以下の式のように、Ｅ(v)、Ｕ′1-1〜Ｕ′t-1-1のｔ個の行列の積を１つの行列Ｃで表わすことができるとする。
【０４１２】
Ｅ(v)（Ｕ′1-1Ｕ′2-1・・・Ｕ′t-1-1）≡Ｃ  ・・・（Ｉ２４）
この場合、一定の条件とは、行列Ｅ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′t-1-1の非対角項の非零要素の個数の和が行列Ｃの非対角項の非零要素の個数以上であるものとする。
【０４１３】
式（Ｉ２４）より、式（Ｉ２３）は以下の式で表わされる。
Ｙ＝−ＣＵ′t-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ  ・・・（Ｉ２５）
式（Ｉ２５）で算出されるパリティベクトルＹと、情報ベクトルＸを用いて、符号化ベクトルＺは、以下の式で表わされる。
【０４１４】
Ｚ＝（Ｘ，Ｙ）  ・・・（Ｉ２６）
ここで、符号化ベクトルＺの第１ビット〜第ｋビットは、情報ベクトルＸのビットであり、符号化ベクトルＺの第（ｋ＋１）ビット〜第ｎビットは、パリティベクトルＹのビットである。
【０４１５】
（構成）
図２３は、第４の実施形態の変形例１の符号化器の構成を表わす図である。
【０４１６】
図２３を参照して、この符号化器２ｈは、第２の実施形態の変形例１と同様の、検査行列分解部３０と、オーダリング部４０と、ＬＵ分解部３４と、基本行列分解部３６と、逆行列計算部４３と、符号反転部９９と、配列部２０とを備える。これらについては説明を繰返さない。
【０４１７】
また、符号化器２ｈは、中間結果記憶部８２と、行列記憶部８８と、行列積計算部８１と、行列積計算制御部１２８と、行列乗算数削減部８５とを備える。なお、以下では、ｔ＜ｍとして説明する。
【０４１８】
中間結果記憶部８２は、式（Ｉ２５）に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部８２は、パリティベクトルＹの生成処理時に、式（Ｉ２５）に含まれる（２ｍ−ｔ＋３）回の行列乗算の中間結果を表わすデータを記憶する。
【０４１９】
行列記憶部８８は、基本上三角行列の逆行列Ｕ′t-1、Ｕ′t+1-1、・・・、Ｕ′m-1を表わすデータ、基本下三角行列の逆行列Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′1-1を表わすデータ、および行列Ｃ、Ａ(u)を表わすデータを記憶する。
【０４２０】
行列積計算部８１は、加算器８７および乗算器８９を備える。行列積計算部８１は、パリティベクトルＹを算出するために、式（Ｉ２５）に含まれる（２ｍ−ｔ＋３）回の行列乗算を行列積計算制御部１２８に指示された順序で実行する。行列積計算部８１は、入力される情報ベクトルＸ、行列記憶部８８内の行列Ａ(u)、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1-1、Ｌ′m-1、Ｕ′m-1、Ｕ′m-1-1、・・・、Ｕ′t-1、Ｃを表わすデータ、および中間結果記憶部８２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行する。行列積計算部８１は、式（Ｉ２５）に含まれる（２ｍ−ｔ＋３）回の行列乗算が終了するまでの間は、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部８２に記憶させる。また、行列積計算部８１は、式（Ｉ２３）に含まれる行列乗算の個数を削減する処理を実行するときに、行列乗算数削減部８５から指示された行列乗算を実行する。
【０４２１】
行列乗算数削減部８５は、式（Ｉ２３）に含まれる行列乗算の個数を削減する処理を行なうときに、中間結果記憶部８２にデータが記憶されている行列の順序が先頭からＥ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部８１を制御する。行列乗算数削減部８５は、各乗算において、乗算の対象となる２つの行列の非対角項の非零要素数と、乗算結果である１つの行列Ｃの非対角項の非零要素数とを比較し、後者と前者の差が所定の閾値ａ（ａ＞０）以下のときは、乗算対象の２つの行列を１つの行列Ｃで置換する。このようにして行列Ｃで置換された場合は、行列Ｃと次の行列との乗算が行なわれる。
【０４２２】
一方、行列乗算数削減部８５は、後者と前者の差が所定の閾値ａを超えるときには、乗算対象の２つの行列を１つの行列Ｃで置換することを行なわずに、行列Ｅ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)の非対角項の非零要素数の総和と、行列Ｅ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)のうちの置換が行なわれた行列を除いた行列と行列Ｃの非対角項の非零要素数の総和とを比較し、後者の値が前者の値以下の場合には、行列v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)のうちの置換された行列を除いた行列と行列Ｃとを行列記憶部８８に記憶させる。第ｔ順位までの行列が置換された場合には、行列Ｃ、Ｕ′t-1、Ｕ′t+1-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)が行列記憶部８８に記憶される。
【０４２３】
行列積計算制御部１２８は、パリティベクトルＹを算出するために、行列記憶部８８にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1-1、Ｌ′m-1、Ｕ′m-1、Ｕ′m-1-1、・・・、Ｕ′t-1、Ｃの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部８１を制御する。また、行列積計算制御部１２８は、式（Ｉ２５）に含まれる（２ｍ−ｔ＋３）回の行列乗算の終了後に、行列積計算部８１から計算結果であるベクトルＹ′（＝ＣＵ′t-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ）を符号反転部９９へ出力させる。
【０４２４】
（行列分解処理）
図２４は、第４の実施形態の変形例１の行列分解処理のフローチャートである。
【０４２５】
図２４を参照して、まず、第２の実施形態の変形例１のステップＳ７０１〜ステップＳ７０５が検査行列分解部３０、行列記憶部８８、中間結果記憶部８２、オーダリング部４０、ＬＵ分解部３４、基本行列分解部３６、および逆行列計算部４３によって実行される。ただし、生成された行列Ｅ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)は、第２の実施形態の変形例１のように行列記憶部８８にではなく、中間結果記憶部８２に記憶される（ステップＳ１５０１）。
【０４２６】
次に、行列乗算数削減部８５は、中間結果記憶部８２にデータが記憶されている行列について、先頭からＥ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)の順となるように順序を設定する（ステップＳ１５０２）。
【０４２７】
次に、行列乗算数削減部８５は、制御変数ｔを１に設定する（ステップＳ１５０３）。
次に、行列乗算数削減部８５は、行列記憶部８８から第ｔ（＝１）順位の行列Ｅ(v)を表わすデータを読み出して、行列Ｅ(v)を行列Ｃとして、行列Ｃを表わすデータを中間結果記憶部８２に記憶する（ステップＳ１５０４）。
【０４２８】
行列数積削減部は、中間結果記憶部８２から行列Ｃを表わすデータを読み出して、行列Ｃの非零要素数ＳＣ０をカウントし、非零要素数ＳＣ０を中間結果記憶部８２に記憶させる（ステップＳ１５０５）。
【０４２９】
次に、行列乗算数削減部８５は、第（ｔ＋１）順位の行列を表わすデータを読み出して、その行列を行列ｍａｔとする（ステップＳ１５０６）。
【０４３０】
次に、行列乗算数削減部８５は、行列ｍａｔの非対角項の非零要素数ＳＣ１をカウントし、非零要素数ＳＣ１と中間結果記憶部８２内の行列Ｃの非零要素数ＳＣ０との和ＳＣ２を算出して、非零要素数の和ＳＣ２を中間結果記憶部８２に記憶させる（ステップＳ１５０７）。
【０４３１】
次に、行列積計算部８１は、行列Ｃと行列Ｍａｔとの積Ｃ×Ｍａｔを計算して、計算結果を行列Ｄとする（ステップＳ１５０８）。
【０４３２】
次に、行列乗算数削減部８５は、行列Ｄの非対角項の非零要素数ＳＣ３をカウントし、非零要素数ＳＣ３を中間結果記憶部８２に記憶させる（ステップＳ１５０９）。
【０４３３】
行列乗算数削減部８５は、中間結果記憶部８２から非零要素数の和ＳＣ２および非零要素数ＳＣ３とを読み出して、ＳＣ３とＳＣ２との差が閾値ａ以下であるかを判断する（ステップＳ１５１０）。
【０４３４】
行列乗算数削減部８５は、ＳＣ３とＳＣ２との差が閾値ａ以下である場合には（ステップＳ１５１０でＹＥＳ）、制御変数ｔをインクリメントし（ステップＳ１５１１）、中間結果記憶部８２内の行列Ｃを行列Ｄで更新し（ステップＳ１５１２）、さらに中間結果記憶部８２内の非零要素数ＳＣ０を非零要素数ＳＣ３を更新し、ステップＳ１５０６からの処理が繰返させる。
【０４３５】
一方、行列乗算数削減部８５は、ＳＣ３とＳＣ２との差が閾値ａを超え（ステップＳ１５１０でＮＯ）、かつ制御変数ｔが２以上の場合には（ステップＳ１５１４でＹＥＳ）、行列記憶部８８にデータが記憶されている行列Ｅ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)のそれぞれについて非対角項の非零要素数をカウントし、それらの非零要素数の総和ＳＣ４を中間結果記憶部８２に記憶させる（ステップＳ１５１５）。
【０４３６】
次に、行列乗算数削減部８５は、行列Ｅ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)のうちの第（ｔ＋１）順位以降の行列のそれぞれについて非対角項の非零要素数をカウントし、それらの非零要素数の総和ＳＣ５と中間結果記憶部８２内の行列Ｃの非零要素数ＳＣ０との総和ＳＣ６を算出して、非零要素数の総和ＳＣ６を中間結果記憶部８２に記憶させる（ステップＳ１５１６）。
【０４３７】
行列乗算数削減部８５は、中間結果記憶部８２から非零要素数の総和ＳＣ４および非零要素数の総和ＳＣ６とを読み出して、ＳＣ６がＳＣ４以下であるかを判断する（ステップＳ１５１７）。
【０４３８】
行列乗算数削減部８５は、ＳＣ６がＳＣ４以下である場合には（ステップＳ１５１７でＹＥＳ）、中間結果記憶部８２内の行列Ｅ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)のうちの第１順位から第ｔ順位までの行列を除いた行列Ｕ′t-1、Ｕ′t+1-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)と、行列Ｃとを行列記憶部８８に記憶させる（ステップＳ１５１８）。
【０４３９】
（符号化ベクトル生成処理）
図２５は、第４の実施形態の変形例１の符号化ベクトル生成処理のフローチャートである。
【０４４０】
図２５を参照して、行列積計算制御部１２８は、行列記憶部８８にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1、Ｕ′m-1、Ｕ′m-1-1、・・・、Ｕ′t-1、Ｃの順となるように行列間の順序を設定する（ステップＳ１６０１）。
【０４４１】
次に、行列積計算制御部１２８は、制御変数ｉを１に設定する（ステップＳ１６０２）。
【０４４２】
行列積計算制御部１２８は、行列積計算部８１を指示して、行列記憶部８８から第ｉ（＝１）順位の行列Ａ(u)を表わすデータを読み出させて、行列Ａ(u)と、入力された情報ベクトルＸとの積Ａ(u)Ｘを計算させる。行列積計算部８１は、乗算結果であるベクトルを中間結果Ｒとし、中間結果Ｒを表わすデータを中間結果記憶部８２に記憶させる（ステップＳ１６０３）。
【０４４３】
次に、行列積計算制御部１２８は、制御変数ｉをインクリメントする（ステップＳ１６０４）。
【０４４４】
行列積計算制御部１２８は、制御変数ｉが（２ｍ−ｔ＋３）未満の場合には（ステップＳ１６０５でＹＥＳ）、行列積計算部８１を指示して、行列記憶部８８から第ｉ順位の行列（これをＭａｔiとする）を表わすデータを読み出させるとともに、中間結果記憶部８２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部８１は、乗算結果であるベクトルを新たな中間結果Ｒとし、中間結果記憶部８２内の中間結果Ｒを表わすデータを更新する（ステップＳ１６０６）。その後、ステップＳ１６０４からの処理が繰返される。
【０４４５】
制御変数ｉが（２ｍ−ｔ＋３）となった場合には（ステップＳ１６０５でＮＯ）、行列積計算制御部１２８は、行列積計算部８１を指示して、行列記憶部８８から第ｉ順位の行列（Ｍａｔi）を表わすデータを読み出させるとともに、中間結果記憶部８２に記憶されている中間結果Ｒを表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒとの積Ｍａｔi×Ｒを計算させる。行列積計算部８１は、乗算結果であるベクトルＹ′を符号反転部９９に出力する。符号反転部９９は、ベクトルＹ′の符号を反転したものをパリティべクトルＹとして出力する（ステップＳ１６０７）。
【０４４６】
その後、配列部２０は、ｋビットの情報ベクトルＸとｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する（ステップＳ１６０８）。
【０４４７】
（第４の実施形態の変形例１の効果）
以上のように、第４の実施形態の変形例１によれば、符号化ベクトル生成処理時において、後退代入を行わずに、式（Ｉ２５）に従ってパリティベクトルＹを算出するので、少ない計算量で情報ベクトルＸの符号化を行なうことができる。特に、行列Ｂがオーダリングされるため、基本上三角行列の逆行列Ｕ′i-1(i=t〜m)および基本下三角行列の逆行列Ｌ′i-1(i=1〜m)は、第３の実施形態の変形例１の基本上三角行列の逆行列Ｕi-1(i=t+1〜m)および基本下三角行列の逆行列Ｌi-1(i=1〜m)よりもさらに非零要素数が少ない行列となり、式（Ｉ２５）の演算の計算量を式（Ｇ１１）よりもさらに少なくできる。式（Ｉ２５）では、第２の実施形態の変形例１の式（Ｅ２３）のＥ(v)、Ｕ′1-1〜Ｕ′t-1-1が１つの行列Ｃで表わされ、しかも行列Ｃの非対角項の非零要素数が行列Ｅ(v)、Ｕ′1-1〜Ｕ′t-1-1の非対角項の非零要素数の和以下であるため、式（Ｉ２５）の演算は、第２の実施形態の変形例１の式（Ｅ２３）の演算よりもさらに計算量が少ない。また、式（Ｉ２５）の右側にある行列乗算から順次実行してパリティベクトルＹを算出するので、各行列乗算の結果はベクトルとなり、中間結果を記憶するための容量を小さくすることができる。
【０４４８】
また、行列分解処理時において、行列Ｂの逆行列を計算するという計算量の多い演算を行なうことなく、行列Ｂのオーダリングによる行列Ｂ′、Ａ(u)、Ｅ(v)の生成、行列Ｂ′のＬＵ分解、ＬＵ分解された上三角行列の基本上三角行列の積への分解、ＬＵ分解された下三角行列の基本下三角行列の積への分解、基本上三角行列および基本下三角行列の非対角項の符号の反転、行列乗算数の削減処理を行なえばよいので、少ない計算量でパリティベクトルＹを生成するのに必要な行列を算出することができる。
【０４４９】
［第５の実施形態］
第５の実施形態の符号化器は、２を法とする演算を行なう。この符号化器は、符号化ベクトル処理を複数の行列積計算部で並列実行するものである。
【０４５０】
（符号化アルゴリズム）
第５の実施形態の符号化アルゴリズムは、第１の実施形態と同様である。
【０４５１】
（構成）
図２６は、第５の実施形態の符号化器の構成を表わす図である。
【０４５２】
図２６を参照して、この符号化器２ｉは、第１の実施形態と同様の、検査行列分解部１０と、ＬＵ分解部１４と、基本行列分解部１６と、行列記憶部１８と、配列部２０とを備える。
【０４５３】
符号化器は、さらに、中間結果記憶部９２と、行列積計算部９１と、行列積計算制御部１２９とを備える。
【０４５４】
行列積計算部９１は、第１の行列積計算部９７と、第２の行列積計算部９８とを備える。
【０４５５】
第１の行列積計算部９７は、加算器９４および乗算器９３を備える。行列積計算部９１は、パリティベクトルＹを算出するために、式（Ｂ１２）に含まれる右から１番目から（ｍ＋１）番目までの（ｍ＋１）回の行列乗算を行列積計算制御部１２９に指示された順序で実行する。行列積計算部９１は、入力される情報ベクトルＸ、行列記憶部１８内の行列Ｌm、Ｌm-1、・・・、Ｌ1、Ａを表わすデータ、および中間結果記憶部９２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行し、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部９２に記憶させる。（ｍ＋１）回の行列乗算が終了したときには、中間結果である列ベクトルＲ1（＝ＬmＬm-1・・・Ｌ2Ｌ1ＡＸ）が得られる。
【０４５６】
第２の行列積計算部９８は、加算器９６および乗算器９５を備える。行列積計算部９１は、パリティベクトルＹを算出するために、式（Ｂ１２）に含まれる右から（ｍ＋２）番目から（２ｍ＋１）番目までのｍ回の行列乗算を行列積計算制御部１２９に指示された順序で実行する。行列積計算部９１は、行列記憶部１８内の行列Ｕ1、Ｕ2、・・・、Ｕmを表わすデータ、および中間結果記憶部９２内の中間結果を表わすデータのうちの２つを用いて各行列乗算を実行し、計算結果を表わすデータを中間結果を表わすデータとして中間結果記憶部９２に記憶させる。ｍ回の行列乗算が終了したときには、中間結果である行列Ｒ2（＝Ｕ1Ｕ2・・・Ｕm-1Ｕm）が得られる。
【０４５７】
また、第１の行列積計算部９７は、中間結果Ｒ1と中間結果Ｒ2との積Ｒ2×Ｒ1を計算し、計算結果であるベクトルをパリティべクトルＹとして出力する。
【０４５８】
行列積計算制御部１２９は、パリティベクトルＹを算出するために、行列記憶部１８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕ2、Ｕ1の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部９１を制御する。より具体的には、行列積計算制御部１２９は、第１の行列乗算器に、情報ベクトルＸ、第１順位〜第（ｍ＋１）順位の行列についての行列乗算をこの順序で実行させて、これらすべての行列乗算が終了後に、中間結果Ｒ1を表わすデータを第１の行列積計算部９７へ出力する。また、行列積計算制御部１２９は、第２の行列乗算器に、第（ｍ＋１）順位〜第（２ｍ＋１）順位の行列についての行列乗算をこの順序で実行させて、これらすべての行列乗算が終了後に、中間結果Ｒ2を表わすデータを第１の行列積計算部９７へ出力する。また、行列積計算制御部１２９は、式（Ｂ１２）に含まれる（２ｍ＋１）回の行列乗算の終了後に、第１の行列積計算部９７から計算結果であるパリティベクトルＹを出力させる。
【０４５９】
中間結果記憶部９２は、式（Ｂ１２）に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部９２は、パリティベクトルＹの生成処理時に、第１の行列積計算部９７および第２の行列積計算部９８から出力される式（Ｂ１２）に含まれる（２ｍ＋１）回の行列乗算の中間結果を表わすデータを記憶する。
【０４６０】
（行列分解処理）
第５の実施形態の行列分解処理の手順は、第１の実施形態と同様であるので、ここでは説明を繰返さない。
【０４６１】
（符号化ベクトル生成処理）
図２７は、第５の実施形態の符号化ベクトル生成処理のフローチャートである。
【０４６２】
図２７を参照して、行列積計算制御部１２９は、行列記憶部１８にデータが記憶されている行列の順序が先頭からＡ、Ｌ1、Ｌ2、・・・、Ｌm-1、Ｌm、Ｕm、Ｕm-1、・・・、Ｕ2、Ｕ1の順となるように行列間の順序を設定する（ステップＳ１７０１）。
【０４６３】
行列積計算制御部１２９は、第１の行列積計算部９７に対するステップＳ１７０２〜Ｓ１７０６の処理と、第２の行列積計算部９８に対するステップＳ１７０７〜Ｓ１７１１の処理が同時に並行して実行されるように制御する。
【０４６４】
行列積計算制御部１２９は、制御変数ｉを１に設定する（ステップＳ１７０２）。
行列積計算制御部１２９は、第１の行列積計算部９７を指示して、行列記憶部１８から第ｉ（＝１）順位の行列Ａを表わすデータを読み出させて、行列Ａと、入力された情報ベクトルＸとの積ＡＸを計算させる。第１の行列積計算部９７は、乗算結果であるベクトルを中間結果Ｒ1とし、中間結果Ｒ1を表わすデータを中間結果記憶部９２に記憶させる（ステップＳ１７０３）。
【０４６５】
次に、行列積計算制御部１２９は、制御変数ｉをインクリメントする（ステップＳ１７０４）。
【０４６６】
行列積計算制御部１２９は、制御変数ｉが（ｍ＋１）以下の場合には（ステップＳ１７０５でＹＥＳ）、第１の行列積計算部９７を指示して、行列記憶部１８から第ｉ順位の行列（これをＭａｔiとする）を表わすデータを読み出させるとともに、中間結果記憶部９２に記憶されている中間結果Ｒ1を表わすデータとを読出させて、行列Ｍａｔiと中間結果Ｒ1との積Ｍａｔi×Ｒ1を計算させる。第１の行列積計算部９７は、乗算結果であるベクトルを新たな中間結果Ｒ1とし、中間結果記憶部９２内の中間結果Ｒ1を表わすデータを更新する（ステップＳ１７０６）。その後、ステップＳ１７０４からの処理が繰返される。
【０４６７】
また、行列積計算制御部１２９は、制御変数ｊを（ｍ＋２）に設定する（ステップＳ１７０７）。
【０４６８】
行列積計算制御部１２９は、第２の行列積計算部９８を指示して、行列記憶部１８から第ｊ（＝ｍ＋２）順位の行列Ｕmを表わすデータを読み出させて、行列Ｕmを中間結果Ｒ2とし、中間結果Ｒ2を表わすデータを中間結果記憶部９２に記憶させる（ステップＳ１７０８）。
【０４６９】
次に、行列積計算制御部１２９は、制御変数ｊをインクリメントする（ステップＳ１７０９）。
【０４７０】
行列積計算制御部１２９は、制御変数ｊが（２ｍ＋１）以下の場合には（ステップＳ１７１０でＹＥＳ）、第２の行列積計算部９８を指示して、行列記憶部１８から第ｊ順位の行列（これをＭａｔjとする）を表わすデータを読み出させるとともに、中間結果記憶部９２に記憶されている中間結果Ｒ2を表わすデータとを読出させて、行列Ｍａｔjと中間結果Ｒ2との積Ｍａｔj×Ｒ2を計算させる。第２の行列積計算部９８は、乗算結果であるベクトルを新たな中間結果Ｒ2とし、中間結果記憶部９２内の中間結果Ｒ2を表わすデータを更新する（ステップＳ１７１１）。その後、ステップＳ１７０９からの処理が繰返される。
【０４７１】
制御変数ｉが（ｍ＋１）を超えた場合には（ステップＳ１７０５でＮＯ）、行列積計算制御部１２９は、中間結果記憶部９２内の中間結果Ｒ1を表わすデータを第１の行列積計算部９７へ出力し、制御変数ｊが（２ｍ＋１）を超えた場合には（ステップＳ１７１０でＮＯ）、行列積計算制御部１２９は、中間結果記憶部９２内の中間結果Ｒ2を表わすデータを第１の行列積計算部９７へ出力する。第１の行列積計算部９７は、中間結果Ｒ1と中間結果Ｒ2との積Ｒ2×Ｒ1を計算し、計算結果であるベクトルをパリティべクトルＹとして出力する（ステップＳ１７１２）。
【０４７２】
その後、配列部２０は、ｋビットの情報ベクトルＸとｍビットのパリティべクトルＹからなるｎビットの符号化ベクトルＺを生成して、出力する（ステップＳ１７１３）。
【０４７３】
（第５の実施形態の効果）
以上のように、第５の実施形態は、第１の実施形態と同様の効果を有する。さらに、第５の実施形態によれば、非特許文献２および非特許文献３での逐次計算による後退代入と異なり、式（Ｂ１２）の演算が並列実行が可能なことを利用して、第１の行列積計算部による列ベクトルＲ1（＝ＬmＬm-1・・・Ｌ2Ｌ1ＡＸ）の算出処理と、第２の行列積計算部による行列Ｒ2（＝Ｕ1Ｕ2・・・Ｕm-1Ｕm）の算出処理が同時に並列して実行されるので、非特許文献２および非特許文献３よりも短時間にパリティベクトルＲを算出することができる。
【０４７４】
［第５の実施形態の変形例１］
第１の実施形態以外の実施形態においても、２つの行列積計算部によって、パリティベクトル生成処理を並列実行するものとしてもよい。
【０４７５】
たとえば、第１の実施形態の変形例１では、第１の行列積計算部による列ベクトルＲ1（＝Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1ＡＸ）の算出処理と、第２の行列積計算部による行列Ｒ2（＝Ｕ1-1Ｕ2-1・・・Ｕm-1-1Ｕm-1）の算出処理を同時に並列して実行し、第１の行列積計算部が積Ｒ2×Ｒ1を計算するものとしてもよい。
【０４７６】
第２の実施形態では、第１の行列積計算部による列ベクトルＲ1（＝Ｌ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ）の算出処理と、第２の行列積計算部による行列Ｒ2（＝Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′m）の算出処理を同時に並列して実行し、第１の行列積計算部が積Ｒ2×Ｒ1を計算するものとしてもよい。
【０４７７】
第２の実施形態の変形例１では、第１の行列積計算部による列ベクトルＲ1（＝Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ）の算出処理と、第２の行列積計算部による行列Ｒ2（＝Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1）の算出処理を同時に並列して実行し、第１の行列積計算部が積Ｒ2×Ｒ1を計算するものとしてもよい。
【０４７８】
第３の実施形態では、第１の行列積計算部による列ベクトルＲ1（＝ＬmＬm-1・・・Ｌ2Ｌ1ＡＸ）の算出処理と、第２の行列積計算部による行列Ｒ2（＝ＣＵt+1・・・Ｕm-1Ｕm）の算出処理を同時に並列して実行し、第１の行列積計算部が積Ｒ2×Ｒ1を計算するものとしてもよい。
【０４７９】
第３の実施形態の変形例１では、第１の行列積計算部による列ベクトルＲ1（＝Ｌm-1Ｌm-1-1・・・Ｌ2-1Ｌ1-1ＡＸ）の算出処理と、第２の行列積計算部による行列Ｒ2（＝ＣＵt+1-1・・・Ｕm-1-1Ｕm-1）の算出処理を同時に並列して実行し、第１の行列積計算部が積Ｒ2×Ｒ1を計算するものとしてもよい。
【０４８０】
第４の実施形態では、第１の行列積計算部による列ベクトルＲ1（＝Ｌ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ）の算出処理と、第２の行列積計算部による行列Ｒ2（＝ＣＵ′t・・・Ｕ′m-1Ｕ′m）の算出処理を同時に並列して実行し、第１の行列積計算部が積Ｒ2×Ｒ1を計算するものとしてもよい。
【０４８１】
第４の実施形態の変形例１では、第１の行列積計算部による列ベクトルＲ1（＝Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ）の算出処理と、第２の行列積計算部による行列Ｒ2（＝ＣＵ′t-1・・・Ｕ′m-1-1Ｕ′m-1）の算出処理を同時に並列して実行し、第１の行列積計算部が積Ｒ2×Ｒ1を計算するものとしてもよい。
【０４８２】
［第５の実施形態の変形例２］
第５の実施形態および第５の実施形態の変形例１では、２個の行列積計算部を備えるものとしたが、３個以上の行列積計算部によって、パリティベクトル生成処理を並列実行するものとしてもよい。
【０４８３】
（変形例）
本発明は、上記の実施の形態に限定されるものではなく、たとえば以下のような変形例も含まれる。
【０４８４】
（１）  符号化器の構成
本発明の実施形態では、符号化器が、パリティベクトル生成処理と、行列分解処理の両方の機能を備えるものとしたが、一方だけの機能を備えるものとしてもよい。符号化器がパリティベクトル生成処理の機能のみを備える場合には、パリティベクトルＹを生成するための式（Ｂ１２）、（Ｃ９）、（Ｄ２６）、（Ｅ２３）、（Ｆ１４）、（Ｇ１１）、（Ｈ２８）、（Ｉ２５）に含まれる行列のデータは、外部で予め計算されたものが記憶されている。たとえば、第１の実施形態では、行列Ｕ1、Ｕ2、・・・、Ｕm、Ｌm、Ｌm-1、・・・、Ｌ1、Ａの各要素の値が予め外部で計算され、計算結果が行列記憶部に記憶されている。
【０４８５】
（２）  記憶部に記憶されるデータ
本発明の第１〜第５の実施形態において、行列記憶部および中間結果記憶部に記憶される行列またはベクトルを表わすデータは、各要素の値である必要はなく、たとえば、非対角項の非零要素数（つまり、「１」）の位置を表わすものであってもよい。
【０４８６】
（３）  行列積の計算順序
本発明の実施形態では、パリティベクトルＹを生成する式に含まれる行列乗算のうち、右側にある行列乗算（ここでは、ベクトルと行列の乗算も行列乗算と呼ぶ）から順次実行するものとしたが、これに限定するものではなく、任意の順序で行列乗算を実行するものとしてもよいが、左側にある行列乗算から順次実行しない方がよい場合もある。なぜなら、左側にある行列乗算から順次実行した場合には、行列Ｂの逆行列が生成されることになり、行列Ｂを分解した意味がなくなる場合が考えられる。しかしながら、このような順序で計算する場合でも、行列Ｂの逆行列を計算するよりも、少ない計算量で行列分解処理を行なうことができたり、または分解された行列の非零要素数の和が、Ｂの逆行列の非零要素数の和よりも少ないときには、行列を記憶するための容量を少なくすることができる場合がある。
【０４８７】
（４）  行列乗算数削減処理
本発明の第３、第４の実施形態では、行列乗算数の削減処理時に、パリティベクトルＹを生成する式に含まれる行列乗算のうち、左側にある行列乗算から順次実行するものとしたが、これに限定するものではなく、任意の順序で行列乗算を実行するものとしてもよい。
【０４８８】
たとえば、パリティベクトルＹを生成する式においてＸとの乗算を除いた右側から行列演算を実行することとしてもよい。この場合には、式（Ｆ１４）の代わりに、次の式のようにパリティベクトルＹを生成する式におけるＸを除いた右側にある複数個の隣接する行列が１個の行列Ｃにまとめられた式が用いられる。
【０４８９】
Ｙ≡Ｕ1・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ9ＣＸ  ・・・（Ｆ１４−１）
ここで、Ｃは、Ｌ8Ｌt7・・・Ｌ1Ａである。
【０４９０】
またパリティベクトルＹを生成する式の左端の行列乗算、およびＸとの乗算を除く右端以外の任意の箇所の行列乗算から順次右または左の任意の方向に実行することとしてもよい。この場合には、式（Ｆ１４）の代わりに、次の式のようにパリティベクトルＹを生成する式の左端や右端（Ｘを除く）以外にある複数個の隣接する行列が１個の行列Ｃにまとめられた形に変形されることもある。
【０４９１】
Ｙ≡Ｕ1Ｕ2ＣＵ9・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ2Ｌ1ＡＸ  ・・・（Ｆ１４−２）
ここで、Ｃは、Ｕ3Ｕ4・・・Ｕ8である。
【０４９２】
また、１つの行列に置換される複数個の隣接する行列は、１セットに限定されるものではなく、次の式のように複数個のセットであってもよい。
【０４９３】
Ｙ≡Ｃ1Ｕ6Ｕ7Ｕ8Ｃ2Ｕ20・・・Ｕm-1ＵmＬmＬm-1・・・Ｌ6Ｃ3Ｘ  ・・・（Ｆ１４−３）
ここで、Ｃ1は、Ｕ1Ｕ2・・・Ｕ5であり、Ｃ2は、Ｕ9Ｕ10・・・Ｕ19であり、Ｃ3は、Ｌ5Ｌ4・・・Ｌ1Ａである。
【０４９４】
また複数の隣接する行列が１つの行列に置換されたパリティベクトルＹを生成する式に含まれる行列の非対角項の非零要素数の和が、もとのパリティベクトルＹを生成する式に含まれる行列の非対角項の非零要素数の和以下の条件を満足する場合に、複数の隣接する行列を１つの行列にまとめる行列乗算数削減処理を行なったが、このような条件を満たすかどうかにかかわりなく、行列乗算数削減処理を行なうこととしてもよい。つまり、第３の実施形態のステップＳ９１５〜Ｓ９１７の処理、第３の実施形態の変形例１のステップＳ１１１５〜Ｓ１１１７の処理、第４の実施形態のステップＳ１３１５〜Ｓ１３１７の処理、第４の実施形態の変形例１のステップＳ１５１５〜Ｓ１５１７の処理を省略することとしてもよい。
【０４９５】
また、本発明の実施形態では、閾値ａは正の値としたが、これは単なる一例であって、閾値ａは０、または負の値であってもよい。
【０４９６】
また、無条件で、一定個数の隣接する行列を１つの行列にまとめるものとしてもよい。
（５）  オーダリング
本発明の実施形態では、行列Ｂに対して、ｕ回（ｕ≧１）の行の入れ替えと、ｖ回（ｖ≧１）の列の入れ替えを行なうオーダリングを行なったが、これに限定するものではない。たとえば、ｕ回の行の入れ替えだけを行なうものとしてもよい（つまり、ｖ＝０）。この場合には、たとえば、式（Ｄ２６）、（Ｅ２３）、（Ｈ２６）、（Ｈ２８）、（Ｉ２３）、（Ｉ２５）は、Ｅ(v)が含まれない式に変形される。また、ｖ回の列の入れ替えだけを行なうものとしてもよい（つまり、ｕ＝０）。この場合には、たとえば、式（Ｄ２６）、（Ｅ２３）、（Ｈ２６）、（Ｈ２８）、（Ｉ２３）、（Ｉ２５）は、Ａ(u)が含まれない式に変形される。
【０４９７】
以下、各実施形態において上記のような変形を行なった場合の、各部の構成がどのように変形されるかについて説明する。
【０４９８】
（５−１）  第２の実施形態
（５−１−Ａ）  ｕ≧１かつｖ≧１
第２の実施形態では、ｕ≧１かつｖ≧１のときには、式（Ｄ２６）が用いられた。
【０４９９】
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ｄ２６）
（５−１−Ｂ）  ｕ≧１かつｖ＝０
ｕ≧１かつｖ＝０のときには、式（Ｄ２６）に代えて、次の式が用いられる。
【０５００】
Ｙ≡Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ｄ２６）′
ここで、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替えを行なったものである。行列Ｌ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列である。行列Ｕ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列である。
【０５０１】
オーダリング部は、中間結果記憶部から行列Ａおよび行列Ｂを表わすデータを読み出して、行列Ｂのオーダリングを行ない、行列Ｂに対してｕ回の行の入れ替えを行なった行列Ｂ′を生成して中間結果記憶部に記憶させ、行列Ａに対して行列Ｂに対するｕ回の行の入れ替えと同様の入れ替えを行なった行列Ａ(u)を生成して行列記憶部に記憶させる。
【０５０２】
行列記憶部は、基本上三角行列Ｕ′1、Ｕ′2、・・・、Ｕ′mを表わすデータ、基本下三角行列Ｌ′m、Ｌ′m-1、・・・、Ｌ′1を表わすデータ、および行列Ａ(u)を表わすデータを記憶する。
【０５０３】
行列積計算部は、パリティベクトルＹを算出するために、式（Ｄ２６）′に含まれる（２ｍ＋１）回の行列乗算を行列積計算制御部に指示された順序で実行する。
【０５０４】
行列積計算制御部は、パリティベクトルＹを算出するために、行列記憶部にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1、Ｌ′2、・・・、Ｌ′m、Ｕ′m、Ｕ′m-1、・・・、Ｕ′1の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。行列積計算制御部は、式（Ｄ２６）′に含まれる（２ｍ＋１）回の行列乗算の終了後に、行列積計算部から計算結果であるパリティベクトルＹを出力させる。
【０５０５】
中間結果記憶部は、式（Ｄ２６）′に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部は、パリティベクトルＹの生成処理時に、式（Ｄ２６）′に含まれる（２ｍ＋１）回の行列乗算の中間結果を表わすデータを記憶する。
【０５０６】
（５−１−Ｃ）  ｕ＝０かつｖ≧１
また、ｕ＝０かつｖ≧１のときには、式（Ｄ２６）に代えて、次の式が用いられる。
【０５０７】
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1ＡＸ  ・・・（Ｄ２６）"
ここで、行列Ｂ′は、行列Ｂに対して、ｖ回の列の入れ替えを行なったものである。行列Ｌ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列である。行列Ｕ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列である。
【０５０８】
オーダリング部は、中間結果記憶部から行列Ｂを表わすデータを読み出して、行列Ｂのオーダリングを行ない、行列Ｂに対してｖ回の列の入れ替えを行なった行列Ｂ′を生成して中間結果記憶部に記憶させ、単位行列Ｅに対して行列Ｂに対するｖ回の列の入れ替えと同様の入れ替えを行なった行列Ｅ(v)を生成して行列記憶部に記憶させる。
【０５０９】
行列記憶部は、基本上三角行列Ｕ′1、Ｕ′2、・・・、Ｕ′mを表わすデータ、基本下三角行列Ｌ′m、Ｌ′m-1、・・・、Ｌ′1を表わすデータ、および行列Ａ、Ｅ(v)を表わすデータを記憶する。
【０５１０】
行列積計算部は、パリティベクトルＹを算出するために、式（Ｄ２６）"に含まれる（２ｍ＋２）回の行列乗算を行列積計算制御部に指示された順序で実行する。
【０５１１】
行列積計算制御部は、パリティベクトルＹを算出するために、行列記憶部にデータが記憶されている行列の順序が先頭からＡ、Ｌ′1、Ｌ′2、・・・、Ｌ′m、Ｕ′m、Ｕ′m-1、・・・、Ｕ′1、Ｅ(v)の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。行列積計算制御部は、式（Ｄ２６）"に含まれる（２ｍ＋２）回の行列乗算の終了後に、行列積計算部から計算結果であるパリティベクトルＹを出力させる。
【０５１２】
中間結果記憶部は、式（Ｄ２６）"に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部は、パリティベクトルＹの生成処理時に、式（Ｄ２６）"に含まれる（２ｍ＋２）回の行列乗算の中間結果を表わすデータを記憶する。
【０５１３】
（５−２）  第２の実施形態の変形例１
（５−２−Ａ）  ｕ≧１かつｖ≧１
第２の実施形態の変形例１では、ｕ≧１かつｖ≧１のときには、式（Ｅ２３）が用いられた。
【０５１４】
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ  ・・・（Ｅ２３）
（５−２−Ｂ）  ｕ≧１かつｖ＝０
ｕ≧１かつｖ＝０のときには、式（Ｅ２３）に代えて、次の式が用いられる。
【０５１５】
Ｙ＝−Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(V)Ｘ  ・・・（Ｅ２３）′
ここで、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替えを行なったものである。行列Ｌ′i-1（ｉ＝１〜ｍ）は行列Ｌ′iの逆行列である。行列Ｌ′iは、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列である。行列Ｕ′i-1（ｉ＝１〜ｍ）は行列Ｕ′iの逆行列である。行列Ｕ′iは、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列である。
【０５１６】
オーダリング部は、（５−１−Ｂ）と同様である。
行列記憶部は、基本上三角行列の逆行列Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1を表わすデータ、基本下三角行列の逆行列Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′1-1を表わすデータ、および行列Ａ(u)を表わすデータを記憶する。
【０５１７】
行列積計算部は、パリティベクトルＹを算出するために、式（Ｅ２３）′に含まれる（２ｍ＋１）回の行列乗算を行列積計算制御部に指示された順序で実行する。
【０５１８】
行列積計算制御部は、パリティベクトルＹを算出するために、行列記憶部にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1-1、Ｌ′m-1、Ｕ′m-1、Ｕ′m-1-1、・・・、Ｕ′2-1、Ｕ′1-1の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。また、行列積計算制御部は、式（Ｅ２３）′に含まれる（２ｍ＋１）回の行列乗算の終了後に、行列積計算部から計算結果であるベクトルＹ′（＝Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)）を符号反転部へ出力させる。
【０５１９】
中間結果記憶部は、式（Ｅ２３）′に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部は、パリティベクトルＹの生成処理時に、式（Ｅ２３）′に含まれる（２ｍ＋１）回の行列乗算の中間結果を表わすデータを記憶する。
【０５２０】
（５−２−Ｃ）  ｕ＝０かつｖ≧１
また、ｕ＝０かつｖ≧１のときには、式（Ｅ２３）に代えて、次の式が用いられる。
【０５２１】
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1ＡＸ  ・・・（Ｅ２３）"
ここで、行列Ｂ′は、行列Ｂに対して、ｖ回の列の入れ替えを行なったものである。行列Ｌ′i-1（ｉ＝１〜ｍ）は行列Ｌ′iの逆行列である。行列Ｌ′iは、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列である。行列Ｕ′i-1（ｉ＝１〜ｍ）は行列Ｕ′iの逆行列である。行列Ｕ′iは、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列である。
【０５２２】
オーダリング部は、（５−２−Ｂ）と同様である。
行列記憶部は、基本上三角行列の逆行列Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1を表わすデータ、基本下三角行列の逆行列Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′1-1を表わすデータ、および行列Ａ、Ｅ(v)を表わすデータを記憶する。
【０５２３】
行列積計算部は、パリティベクトルＹを算出するために、式（Ｅ２３）"に含まれる（２ｍ＋２）回の行列乗算を行列積計算制御部に指示された順序で実行する。
【０５２４】
行列積計算制御部は、パリティベクトルＹを算出するために、行列記憶部にデータが記憶されている行列の順序が先頭からＡ、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1-1、Ｌ′m-1、Ｕ′m-1、Ｕ′m-1-1、・・・、Ｕ′2-1、Ｕ′1-1、Ｅ(v)の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。また、行列積計算制御部は、式（Ｅ２３）"に含まれる（２ｍ＋２）回の行列乗算の終了後に、行列積計算部から計算結果であるベクトルＹ′（＝Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ）を符号反転部へ出力させる。
【０５２５】
中間結果記憶部は、式（Ｅ２３）"に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部は、パリティベクトルＹの生成処理時に、式（Ｅ２３）"に含まれる（２ｍ＋２）回の行列乗算の中間結果を表わすデータを記憶する。
【０５２６】
（５−３）  第４の実施形態
（５−３−Ａ）  ｕ≧１かつｖ≧１
第４の実施形態では、ｕ≧１かつｖ≧１のときには、式（Ｈ２６）が用いられ、Ｅ(v)、Ｕ′1〜Ｕ′t-1のｔ個の行列の積を１つの行列Ｃで表わした場合に、式（Ｈ２８）が得られた。
【０５２７】
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ｈ２６）
Ｙ≡ＣＵ′t・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ｈ２８）
（５−３−Ｂ）  ｕ≧１かつｖ＝０
ｕ≧１かつｖ＝０のときには、式（Ｈ２６）に代えて、式（Ｈ２６）′が用いられ、Ｕ′1〜Ｕ′tのｔ個の行列の積を１つの行列Ｃで表わした場合に、式（Ｈ２８）"が得られる。
【０５２８】
Ｙ≡Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ｈ２６）′
Ｙ≡ＣＵ′t+1・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1Ａ(u)Ｘ  ・・・（Ｈ２８）′
ここで、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替えを行なったものである。行列Ｌ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列である。行列Ｕ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列である。
【０５２９】
オーダリング部は、（５−１−Ｂ）と同様である。
行列記憶部は、基本上三角行列Ｕ′t+1、Ｕ′t+2、・・・、Ｕ′mを表わすデータ、基本下三角行列Ｌ′m、Ｌ′m-1、・・・、Ｌ′1を表わすデータ、および行列Ｃ、Ａ(u)を表わすデータを記憶する。
【０５３０】
行列積計算部は、パリティベクトルＹを算出するために、式（Ｈ２８）′に含まれる（２ｍ−ｔ＋２）回の行列乗算を行列積計算制御部に指示された順序で実行する。行列積計算部は、式（Ｈ２６）′に含まれる行列乗算の個数を削減する処理を実行するときに、行列乗算数削減部から指示された行列乗算を実行する。
【０５３１】
行列乗算数削減部は、式（Ｈ２６）′に含まれる行列乗算の個数を削減する処理を行なうときに、中間結果記憶部にデータが記憶されている行列の順序が先頭からＵ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａ(u)の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。
【０５３２】
行列積計算制御部は、パリティベクトルＹを算出するために、行列記憶部にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1、Ｌ′2、・・・、Ｌ′m-1、Ｌ′m、Ｕ′m、Ｕ′m-1、・・・、Ｕ′t+1、Ｃの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。また、行列積計算制御部は、式（Ｈ２８）′に含まれる（２ｍ−ｔ＋２）回の行列乗算の終了後に、行列積計算部から計算結果であるパリティベクトルＹを出力させる。
【０５３３】
中間結果記憶部は、式（Ｈ２８）′に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部は、パリティベクトルＹの生成処理時に、式（Ｈ２８）′に含まれる（２ｍ−ｔ＋２）回の行列乗算の中間結果を表わすデータを記憶する。
【０５３４】
（５−３−Ｃ）  ｕ＝０かつｖ≧１
また、ｕ＝０かつｖ≧１のときには、式（Ｈ２６）に代えて、式（Ｈ２６）"が用いられ、Ｅ(v)、Ｕ′1〜Ｕ′t-1のｔ個の行列の積を１つの行列Ｃで表わした場合に、式（Ｈ２８）"が得られる。
【０５３５】
Ｙ≡Ｅ(v)Ｕ′1Ｕ′2・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1ＡＸ  ・・・（Ｈ２６）"
Ｙ≡ＣＵ′t・・・Ｕ′m-1Ｕ′mＬ′mＬ′m-1・・・Ｌ′2Ｌ′1ＡＸ  ・・・（Ｈ２８）"
ここで、行列Ｂ′は、行列Ｂに対して、ｖ回の列の入れ替えを行なったものである。行列Ｌ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列である。行列Ｕ′i（ｉ＝１〜ｍ）は、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列である。
【０５３６】
オーダリング部は、（５−１−Ｃ）と同様である。
行列記憶部は、基本上三角行列Ｕ′t、Ｕ′t+1、・・・、Ｕ′mを表わすデータ、基本下三角行列Ｌ′m、Ｌ′m-1、・・・、Ｌ′1を表わすデータ、および行列Ｃ、Ａを表わすデータを記憶する。
【０５３７】
行列積計算部は、パリティベクトルＹを算出するために、式（Ｈ２８）"に含まれる（２ｍ−ｔ＋３）回の行列乗算を行列積計算制御部に指示された順序で実行する。行列積計算部は、式（Ｈ２６）"に含まれる行列乗算の個数を削減する処理を実行するときに、行列乗算数削減部から指示された行列乗算を実行する。
【０５３８】
行列乗算数削減部は、式（Ｈ２６）"に含まれる行列乗算の個数を削減する処理を行なうときに、中間結果記憶部にデータが記憶されている行列の順序が先頭からＥ(v)、Ｕ′1、Ｕ′2、・・・、Ｕ′m-1、Ｕ′m、Ｌ′m、Ｌ′m-1、・・・、Ｌ′2、Ｌ′1、Ａの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。
【０５３９】
行列積計算制御部は、パリティベクトルＹを算出するために、行列記憶部にデータが記憶されている行列の順序が先頭からＡ、Ｌ′1、Ｌ′2、・・・、Ｌ′m-1、Ｌ′m、Ｕ′m、Ｕ′m-1、・・・、Ｕ′t、Ｃの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。また、行列積計算制御部は、式（Ｈ２８）"に含まれる（２ｍ−ｔ＋３）回の行列乗算の終了後に、行列積計算部から計算結果であるパリティベクトルＹを出力させる。
【０５４０】
中間結果記憶部は、式（Ｈ２８）"に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部は、パリティベクトルＹの生成処理時に、式（Ｈ２８）"に含まれる（２ｍ−ｔ＋３）回の行列乗算の中間結果を表わすデータを記憶する。
【０５４１】
（５−４）  第４の実施形態の変形例１
（５−４−Ａ）  ｕ≧１かつｖ≧１
第４の実施形態の変形例１では、ｕ≧１かつｖ≧１のときには、式（Ｉ２３）が用いられ、Ｅ(v)、Ｕ′1-1〜Ｕ′t-1-1のｔ個の行列の積を１つの行列Ｃで表わした場合に、式（Ｉ２５）が得られた。
【０５４２】
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ  ・・・（Ｉ２３）
Ｙ＝−ＣＵ′t-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ  ・・・（Ｉ２５）
（５−４−Ｂ）  ｕ≧１かつｖ＝０
ｕ≧１かつｖ＝０のときには、式（Ｉ２３）に代えて、式（Ｉ２３）′が用いられ、Ｕ′1-1〜Ｕ′t-1のｔ個の行列の積を１つの行列Ｃで表わした場合に、式（Ｉ２５）′が得られる。
【０５４３】
Ｙ＝−Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(V)Ｘ  ・・・（Ｉ２３）′
Ｙ＝−ＣＵ′t+1-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ  ・・・（Ｉ２５）′
ここで、行列Ｂ′は、行列Ｂに対して、ｕ回の行の入れ替えを行なったものである。行列Ｌ′i-1（ｉ＝１〜ｍ）は行列Ｌ′iの逆行列である。行列Ｌ′iは、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列である。行列Ｕ′i-1（ｉ＝１〜ｍ）は行列Ｕ′iの逆行列である。行列Ｕ′iは、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列である。
【０５４４】
オーダリング部は、（５−１−Ｂ）と同様である。
行列記憶部は、基本上三角行列の逆行列Ｕ′t+1-1、Ｕ′t+2-1、・・・、Ｕ′m-1を表わすデータ、基本下三角行列の逆行列Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′1-1を表わすデータ、および行列Ｃ、Ａ(u)を表わすデータを記憶する。
【０５４５】
行列積計算部は、パリティベクトルＹを算出するために、式（Ｉ２５）′に含まれる（２ｍ−ｔ＋２）回の行列乗算を行列積計算制御部に指示された順序で実行する。行列積計算部は、式（Ｉ２３）′に含まれる行列乗算の個数を削減する処理を実行するときに、行列乗算数削減部から指示された行列乗算を実行する。
【０５４６】
行列乗算数削減部は、式（Ｉ２３）′に含まれる行列乗算の個数を削減する処理を行なうときに、中間結果記憶部にデータが記憶されている行列の順序が先頭からＵ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａ(u)の順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。
【０５４７】
行列積計算制御部は、パリティベクトルＹを算出するために、行列記憶部にデータが記憶されている行列の順序が先頭からＡ(u)、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1-1、Ｌ′m-1、Ｕ′m-1、Ｕ′m-1-1、・・・、Ｕ′t+1-1、Ｃの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。また、行列積計算制御部は、式（Ｉ２５）′に含まれる（２ｍ−ｔ＋２）回の行列乗算の終了後に、行列積計算部から計算結果であるベクトルＹ′（＝ＣＵ′t+1-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1Ａ(u)Ｘ）を符号反転部へ出力させる。
【０５４８】
中間結果記憶部は、式（Ｉ２５）′に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部は、パリティベクトルＹの生成処理時に、式（Ｉ２５）′に含まれる（２ｍ−ｔ＋２）回の行列乗算の中間結果を表わすデータを記憶する。
【０５４９】
（５−４−Ｃ）  ｕ＝０かつｖ≧１
また、ｕ＝０かつｖ≧１のときには、式（Ｉ２３）に代えて、式（Ｉ２３）"が用いられ、Ｅ(v)、Ｕ′1-1〜Ｕ′t-1-1のｔ個の行列の積を１つの行列Ｃで表わした場合に、式（Ｉ２５）"が得られる。
【０５５０】
Ｙ＝−Ｅ(v)Ｕ′1-1Ｕ′2-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1ＡＸ  ・・・（Ｉ２３）"
Ｙ＝−ＣＵ′t-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1ＡＸ  ・・・（Ｉ２５）"
ここで、行列Ｂ′は、行列Ｂに対して、ｖ回の列の入れ替えを行なったものである。行列Ｌ′i-1（ｉ＝１〜ｍ）は行列Ｌ′iの逆行列である。行列Ｌ′iは、行列Ｂ′をＬＵ分解した下三角行列Ｌ′の基本下三角行列である。行列Ｕ′i-1（ｉ＝１〜ｍ）は行列Ｕ′iの逆行列である。行列Ｕ′iは、行列Ｂ′をＬＵ分解した上三角行列Ｕ′の基本上三角行列である。
【０５５１】
オーダリング部は、（５−１−Ｃ）と同様である。
行列記憶部は、基本上三角行列の逆行列Ｕ′t-1、Ｕ′t+1-1、・・・、Ｕ′m-1を表わすデータ、基本下三角行列の逆行列Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′1-1を表わすデータ、および行列Ｃ、Ａを表わすデータを記憶する。
【０５５２】
行列積計算部は、パリティベクトルＹを算出するために、式（Ｉ２５）"に含まれる（２ｍ−ｔ＋３）回の行列乗算を行列積計算制御部に指示された順序で実行する。行列積計算部は、式（Ｉ２３）"に含まれる行列乗算の個数を削減する処理を実行するときに、行列乗算数削減部から指示された行列乗算を実行する。
【０５５３】
行列乗算数削減部は、式（Ｉ２３）"に含まれる行列乗算の個数を削減する処理を行なうときに、中間結果記憶部にデータが記憶されている行列の順序が先頭からＥ(v)、Ｕ′1-1、Ｕ′2-1、・・・、Ｕ′m-1-1、Ｕ′m-1、Ｌ′m-1、Ｌ′m-1-1、・・・、Ｌ′2-1、Ｌ′1-1、Ａの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。
【０５５４】
行列積計算制御部は、パリティベクトルＹを算出するために、行列記憶部にデータが記憶されている行列の順序が先頭からＡ、Ｌ′1-1、Ｌ′2-1、・・・、Ｌ′m-1-1、Ｌ′m-1、Ｕ′m-1、Ｕ′m-1-1、・・・、Ｕ′t-1、Ｃの順となるように行列間の順序を設定し、この順序で行列乗算を行なうように行列積計算部を制御する。また、行列積計算制御部は、式（Ｉ２５）"に含まれる（２ｍ−ｔ＋３）回の行列乗算の終了後に、行列積計算部からであるベクトルＹ′（＝ＣＵ′t-1・・・Ｕ′m-1-1Ｕ′m-1Ｌ′m-1Ｌ′m-1-1・・・Ｌ′2-1Ｌ′1-1ＡＸ）を符号反転部へ出力させる。
【０５５５】
中間結果記憶部は、式（Ｉ２５）"に含まれる行列を生成する処理（行列分解処理）における中間結果を表わすデータを記憶する。また、中間結果記憶部は、パリティベクトルＹの生成処理時に、式（Ｉ２５）"に含まれる（２ｍ−ｔ＋３）回の行列乗算の中間結果を表わすデータを記憶する。
【０５５６】
（６）  パリティベクトルＹを計算する過程で非対角項の非零要素数が増加しないようなオーダリング手法
たとえば、行列Ｕ3、行列Ｕ4がそれぞれ式（１３）、式（１４）で表わされる場合には、これらの積Ｕ4×Ｕ3は、式（１５）で表わされる。
【０５５７】
【数５】
2011244500.tif 000007
【０５５８】
【数６】
2011244500.tif 000008
【０５５９】
行列Ｕ4×Ｕ3の計算結果を観察すると、第４行は、Ｕ4の第４行と同じである。第３行は、Ｕ［３，４］が０の場合、Ｕ3の第３行と同じになる。また、第３行は、Ｕ［３，４］が１の場合、第ｉ列がＵ［３，ｉ］＋Ｕ［４，ｉ］となる。２を法とする演算では、Ｕ［３，ｉ］とＵ［４，ｉ］のいずれもが１の場合、またはいずれもが０の場合に、Ｕ［３，ｉ］＋Ｕ［４，ｉ］の値が０となる。
【０５６０】
このことは、行列Ｕ4×Ｕ3の非対角項の非零要素数を少なくするためには、上三角行列Ｕの各列において、値が「１」である要素が隣接するように行列Ｂをオーダリングするのが望ましいことを示している。言い換えると、上三角行列Ｕの各列において、値が「１」である要素が隣接するように行列Ｂをオーダリングすることによって、パリティベクトルＹを生成する式を計算するために、行列乗算を行なっても、非対角項の非零要素数が増加しないようにすることができる。また、このようなオーダリングを行なうことによって、複数個の行列を１つにまとめても非対角項の非零要素数が増加しないので、行列乗算数削減処理によって行列乗算数を効果的に削減することができる。
【０５６１】
また、行列Ｌ3、行列Ｌ4がそれぞれ式（１６）、式（１７）で表わされる場合には、これらの積Ｌ4×Ｌ3は、式（１８）で表わされる。
【０５６２】
【数７】
2011244500.tif 000009
【０５６３】
行列Ｌ4×Ｌ3の計算結果を観察すると、第４列は、Ｌ4の第４列と同じである。第３列は、Ｌ［４，３］が０の場合、Ｌ3の第３列と同じになる。また、第３列は、Ｌ［４，３］が１の場合、第ｉ行がＬ［ｉ，３］＋Ｌ［ｉ，４］となる。２を法とする演算では、Ｌ［ｉ，３］とＬ［ｉ，４］のいずれもが１の場合、またはいずれもが０の場合に、Ｌ［ｉ，３］＋Ｌ［ｉ，４］の値が０となる。
【０５６４】
このことは、行列Ｌ4×Ｌ3の非対角項の非零要素数を少なくするためには、下三角行列Ｌの各行において、値が「１」である要素が隣接するように行列Ｂをオーダリングするのが望ましいことを示している。言い換えると、下三角行列Ｌの各行において、値が「１」である要素が隣接するように行列Ｂをオーダリングすることによって、パリティベクトルＹを生成する式を計算するために、行列乗算を行なっても、非対角項の非零要素数が増加しないようにすることができる。また、このようなオーダリングを行なうことによって、複数個の行列を１つにまとめても非対角項の非零要素数が増加しないので、行列乗算数削減処理によって行列乗算数を効果的に削減することができる。
【０５６５】
（７）  符号化プログラム
本発明の実施形態で説明した符号化器は、専用のハードウエア装置で実現されるものに限られない。外部から符号化プログラムをメモリにインストールし、コンピュータがこの符号化プログラムをメモリから読出して実行することによって、符号化器の機能を実現することとしてもよい。この場合、第１の実施形態の機能を実行する符号化プログラムは図３と図４のフローチャートの各ステップを備え、第１の実施形態と同様の効果を有する。第１の実施形態の変形例１の機能を実行する符号化プログラムは図６と図７のフローチャートの各ステップを備え、第１の実施形態の変形例と同様の効果を有する。第２の実施形態の機能を実行する符号化プログラムは図９と図１０のフローチャートの各ステップを備え、第２の実施形態と同様の効果を有する。第２の実施形態の変形例１の機能を実行する符号化プログラムは図１２と図１３のフローチャートの各ステップを備え、第２の実施形態の変形例１と同様の効果を有する。第３の実施形態の機能を実行する符号化プログラムは図１５と図１６のフローチャートの各ステップを備え、第３の実施形態と同様の効果を有する。第３の実施形態の変形例１の機能を実行する符号化プログラムは図１８と図１９のフローチャートの各ステップを備え、第３の実施形態の変形例１と同様の効果を有する。第４の実施形態の機能を実行する符号化プログラムは図２１と図２２のフローチャートの各ステップを備え、第４の実施形態と同様の効果を有する。第４の実施形態の変形例１の機能を実行する符号化プログラムは図２４と図２５のフローチャートの各ステップを備え、第４の実施形態の変形例１と同様の効果を有する。第５の実施形態の機能を実行する符号化プログラムは図３と図２７のフローチャートの各ステップを備え、第５の実施形態と同様の効果を有する。
【０５６６】
（８）  誤り訂正符号
本発明の実施形態では、誤り訂正符号の例としてＬＤＰＣについて説明したが、これに限定するものではなく、ビタビやターボ符号などへの応用も可能である。
【０５６７】
（９）  （ｔ＋１）＜ｍ、ｔ＜ｍ
本発明の第３の実施形態およびその変形例１では、説明の便宜上（ｔ＋１）＜ｍとしたが、これには限定されない。また、同様に、本発明の第４の実施形態およびその変形例１では、説明の便宜上ｔ＜ｍとしたが、これには限定されない。
【０５６８】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０５６９】
１  送信装置、２，２ａ〜２ｉ  符号化器、３  変調器、４  受信装置、５  誤り訂正復号化器、６  復調器、１０，３０  検査行列分解部、１１，２１，３１，４１，５１，６１，７１，８１，９１  行列積計算部、９７  第１の行列積計算部、９８  第２の行列積計算部、１２，２２，３２，４２，５２，６２，７２，８２，９２  中間結果記憶部、１３，１７，２７，３３，３７，４７，５７，６７，７７，８７，９４，９６  加算器、１４，３４  ＬＵ分解部、１５，１９，２９，３５，３９，４９，５９，６９，７９，８９，９３，９５  乗算器、１６，３６  基本行列分解部、１８，２８，３８，４８，５８，６８，７８，８８  行列記憶部、２０  配列部、２３，４３  逆行列計算部、４０  オーダリング部、７５，８５  行列乗算数削減部、９９  符号反転部、１２１，１２２，１２３，１２４，１２５，１２６，１２７，１２８，１２９  行列積計算制御部。
【図１】
2011244500.tif 000010
【図２】
2011244500.tif 000011
【図３】
2011244500.tif 000012
【図４】
2011244500.tif 000013
【図５】
2011244500.tif 000014
【図６】
2011244500.tif 000015
【図７】
2011244500.tif 000016
【図８】
2011244500.tif 000017
【図９】
2011244500.tif 000018
【図１０】
2011244500.tif 000019
【図１１】
2011244500.tif 000020
【図１２】
2011244500.tif 000021
【図１３】
2011244500.tif 000022
【図１４】
2011244500.tif 000023
【図１５】
2011244500.tif 000024
【図１６】
2011244500.tif 000025
【図１７】
2011244500.tif 000026
【図１８】
2011244500.tif 000027
【図１９】
2011244500.tif 000028
【図２０】
2011244500.tif 000029
【図２１】
2011244500.tif 000030
【図２２】
2011244500.tif 000031
【図２３】
2011244500.tif 000032
【図２４】
2011244500.tif 000033
【図２５】
2011244500.tif 000034
【図２６】
2011244500.tif 000035
【図２７】
2011244500.tif 000036