(57)【特許請求の範囲】
【請求項１】
ＬＤＰＣ符号の復号装置であって、
受信信号から受信ＬＬＲを算出する受信ＬＬＲ算出手段と、
前記受信ＬＬＲまたは列ＬＬＲから行ＬＬＲを算出する行演算の際に、パリティ検査行列の行を行分割することによって生じた複数の行それぞれに対して、最小値と２番目に小さい値と３番目に小さい値を算出する最小３値演算手段と、
パリティ検査行列の行分割後の行に対する最小３値演算結果に基づいて行分割前の行に対する最小３値演算を行うことにより、行分割の前後それぞれの行に対する行演算を切り替えて行う行分割切り替え手段と、
算出した最小値と２番目に小さい値と３番目に小さい値に基づいて、Ｄ値を演算し、最小３値それぞれからＤ値を引く演算手段と、
前記行ＬＬＲから列ＬＬＲおよび推定ビット列を算出する列演算手段と、
前記最小３値演算手段、行分割切り替え手段およびＤ値を引く演算手段と前記列演算手段とを交互に繰り返し、規定の回数に達した場合もしくは推定ビット列が符号語となった場合に繰り返しを終了する繰り返し演算終了判定手段とを備え、
行重みの最も大きいまたは比較的大きい行を選択して行分割を行う、
行分割後におけるパリティ検査行列の最大行重みが小さくなるように行を選択して行分割を行う、
行分割後の行のうち行重みが２の累乗数となる行がより多く生じるように行分割を行う、
の少なくとも１つに基づいて行分割を行う復号装置。
【請求項２】
ＬＤＰＣ符号の復号方法であって、
受信信号から受信ＬＬＲを算出する受信ＬＬＲ算出工程と、
前記受信ＬＬＲまたは列ＬＬＲから行ＬＬＲを算出する行演算の際に、パリティ検査行列の行を行分割することによって生じた複数の行それぞれに対して、最小値と２番目に小さい値と３番目に小さい値を算出する最小３値演算工程と、
パリティ検査行列の行分割後の行に対する最小３値演算結果に基づいて行分割前の行に対する最小３値演算を行うことにより、行分割の前後それぞれの行に対する行演算を切り替えて行う行分割切り替え工程と、
算出した最小値と２番目に小さい値と３番目に小さい値に基づいて、Ｄ値を演算し、最小３値それぞれからＤ値を引く演算工程と、
前記行ＬＬＲから列ＬＬＲおよび推定ビット列を算出する列演算工程と、
前記最小３値演算工程、行分割切り替え工程およびＤ値を引く演算工程と前記列演算工程とを交互に繰り返し、規定の回数に達した場合もしくは推定ビット列が符号語となった場合に繰り返しを終了する繰り返し演算終了判定工程とを備え、
行重みの最も大きいまたは比較的大きい行を選択して行分割を行う、
行分割後におけるパリティ検査行列の最大行重みが小さくなるように行を選択して行分割を行う、
行分割後の行のうち行重みが２の累乗数となる行がより多く生じるように行分割を行う、
の少なくとも１つに基づいて行分割を行う復号方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、符号長が等しく符号化率が異なる複数の低密度パリティ検査符号（Low-Density Parity-Check code；以下、ＬＤＰＣ符号と称す）を切り替え可能な復号装置及び方法に関するものである。
【背景技術】
【０００２】
誤り訂正符号の符号長をｎ、情報系列長をｋとすると、符号化率はｋ／ｎで表される値である。符号化率が大きいと通信効率が高く誤り訂正能力が低く、逆に符号化率が小さいと通信効率が低く誤り訂正能力が高い。つまり、誤り訂正符号を用いる通信システムに応じて、符号化率を適切な値に設定するのが重要である。また、一部の通信システムにおいては、異なる符号化率の誤り訂正符号を通信装置に備え、通信路の状況などに応じてそれらを切り替えることで、適切な値の符号化率の誤り訂正符号を用いるようにしている。
【０００３】
ＬＤＰＣ符号は、１の要素が疎（全要素数に対して少ない割合で存在）であるパリティ検査行列で定義される誤り訂正符号である。パリティ検査行列の列数ｎが符号長に対応し、行数ｍが検査ビット（パリティビット）数に対応する。パリティ検査行列の列に含まれる１の数をその列の列重みと呼び、全ての列に対する列重みの分布を列重み分布と呼ぶ。列重み分布はＬＤＰＣ符号の誤り訂正能力に大きく影響するが、最適な列重み分布は密度発展法などにより計算できる。なお、同様に、行に含まれる１の数を行重みと呼ぶ。また、パリティ検査行列をタナーグラフとよばれる２部グラフによって表現したとき、タナーグラフに含まれる最短ループの長さ（girth）が大きいほど、ＬＤＰＣ符号の誤り訂正能力は高い。
【０００４】
ＬＤＰＣ符号を用いて符号化率が可変な通信装置を構成する場合、可変する符号化率それぞれに対してパリティ検査行列が必要となる。ＬＤＰＣ符号では、符号化率が異なるとパリティ検査行列も異なるものにしなければならず、また、符号化演算や復号演算はパリティ検査行列に依存する。つまり、複数の符号化率のＬＤＰＣ符号を１つの通信装置に搭載する場合、搭載する符号化率の数だけ異なる符号化器や復号器を用意する必要がある。
【０００５】
前記の問題を解決する方法として、Rate-Compatible ＬＤＰＣ符号（以下、ＲＣ−ＬＤＰＣ符号と称す）の開発が行われている（例えば特許文献１参照）。ＲＣ−ＬＤＰＣ符号では、可変を行う符号化率のうち、符号化率のより小さいＬＤＰＣ符号のパリティ検査行列が、符号化率のより大きいＬＤＰＣ符号のパリティ検査行列の部分行列となるように構成されている。つまり、可変を行う異なる符号化率の間でパリティ検査行列が共通部分をもち、復号装置が効率的に構成可能となる。しかし、可変する符号化率の全てで列重み分布を最適値に近い値とし、かつタナーグラフの最短ループ長が大きくなるようにＲＣ−ＬＤＰＣ符号を構成するのは困難であり、また、符号化率が大きいほど列重みが大きくなるため、高符号化率における復号演算の演算量が大きいことが問題であった。さらに、効率的な符号化器を構成するために、符号化率が大きいほどＬＤＰＣ符号の符号長が長くなるように設計する必要があり、異なる符号化率間で符号長を一定にできないという問題があった。
【０００６】
符号化率を可変する方法として、他にもパディングおよびパンクチャという手法がある。パディングでは、送信時に情報ビットの一部をある決まった値（例えば０）に固定して符号化し、その情報ビットを既知の値として受信側では復号を行う。情報系列長のみを小さくでき、符号化率を小さくすることができる。また、パンクチャは、送信時にパリティビットの一部を送信しないことでパリティビット長を小さくする技術であり、受信側では送信されなかったパリティビットを全く未知のビットとして扱い復号を行う。パンクチャではパリティビット長のみが小さくなるため、符号率は大きくなる。通信システムには、これらの手法を適用するかしないかの切り替え機能を搭載することで比較的小さな回路規模の増加で可変符号化率を実現できる。しかし、これらの手法で構成されたＬＤＰＣ符号は、同じ符号化率のＬＤＰＣ符号と比べて誤り訂正能力が小さい。また、手法の性質上、符号化率によって異なる符号長となってしまう。
【０００７】
前記のＲＣ−ＬＤＰＣ符号に対し、パディングやパンクチャを適用することで符号長が一定である可変符号化率のＬＤＰＣ符号を構成することは可能であるが、前記で述べたようにＲＣ−ＬＤＰＣ符号自体の演算量の大きさと、パディングやパンクチャによる誤り訂正能力の低下が問題であった。
【０００８】
次に、ＬＤＰＣ符号の復号法について説明する。広く用いられているメッセージパッシング型の復号法は列演算および行演算と呼ばれる２つの演算から構成されており、これらの演算を交互に繰り返すことで推定ビットを算出する。このような復号法のうちで代表的なのがSum-product復号法であるが、行演算の演算量が大きい。そのため、行演算を簡略化した復号法が提案されており、例えばMin-sum復号法がある。
【０００９】
前記で説明した復号法の列演算および行演算は、それぞれパリティ検査行列の列と行に対応した演算である。行演算は、各ビットの信頼度を表す受信対数尤度比（Log-Likelihood Ratio；以下、ＬＬＲと称す。）を入力として行ＬＬＲを出力する。列演算は、行ＬＬＲを入力として列ＬＬＲを出力する。なお、前記の通り列演算と行演算は交互に繰り返すが、繰り返しの２回目以降の行演算では、列演算が出力した列ＬＬＲを入力として行ＬＬＲを出力する。
【００１０】
次に、Sum-product復号法の行演算について詳しく説明する。まず、パリティ検査行列のｒ行目において、行列要素が１である列番号の集合をＮ（ｒ）とおく。下に示す式（１）はｒ行目に対応する行演算であり、行ＬＬＲ（繰り返し一回目は受信ＬＬＲ）Ｚｒ，ｃから列ＬＬＲεｒ，ｃを算出することを表している。ただし、式（１）において、ｃはＮ（ｒ）が含む列番号を表し、Ｎ（ｒ）＼｛ｃ｝はＮ（ｒ）からｃを除いた集合である。なお、行演算では、各ｃに対してεｒ，ｃを算出する必要があり、Ｎ（ｒ）の要素数、つまりｒ行目の行重みの数だけ列ＬＬＲεｒ，ｃを算出することになる。
【００１１】
【数１】
0005523064.tif 000002
【００１２】
なお、式（１）の演算記号や関数の定義は以下の通りである。
【００１３】
【数２】
0005523064.tif 000003
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】国際公開第０７／０８８８７０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
従来手法による、符号長が等しく符号化率が異なる複数のＬＤＰＣ符号を切り替え可能な復号装置は、パリティ検査行列の列重み増大による回路規模増加と、パディングやパンクチャによる誤り訂正能力の低下が問題であった。
【００１６】
この発明では、上述した点に鑑みてなされたもので、パリティ検査行列の列重み増大による回路規模増加と、パディングやパンクチャによる誤り訂正能力の低下が発生しない復号装置及び方法を得ることを目的とする。
【課題を解決するための手段】
【００１７】
この発明に係る復号装置及び方法は、ＬＤＰＣ符号の復号装置及び方法であって、受信信号から受信ＬＬＲを算出する受信ＬＬＲ算出手段（工程）と、前記受信ＬＬＲまたは列ＬＬＲから行ＬＬＲを算出する行演算の際に、パリティ検査行列の行を行分割することによって生じた複数の行それぞれに対して、最小値と２番目に小さい値と３番目に小さい値を算出する最小３値演算手段（工程）と、パリティ検査行列の行分割後の行に対する最小３値演算結果に基づいて行分割前の行に対する最小３値演算を行うことにより、行分割の前後それぞれの行に対する行演算を切り替えて行う行分割切り替え手段（工程）と、算出した最小値と２番目に小さい値と３番目に小さい値に基づいて、Ｄ値を演算し、最小３値それぞれからＤ値を引く演算手段（工程）と、前記行ＬＬＲから列ＬＬＲおよび推定ビット列を算出する列演算手段（工程）と、前記最小３値演算手段（工程）、行分割切り替え手段（工程）およびＤ値を引く演算手段（工程）と前記列演算手段（工程）とを交互に繰り返し、規定の回数に達した場合もしくは推定ビット列が符号語となった場合に繰り返しを終了する繰り返し演算終了判定手段（工程）とを備え、行重みの最も大きいまたは比較的大きい行を選択して行分割を行う、行分割後におけるパリティ検査行列の最大行重みが小さくなるように行を選択して行分割を行う、行分割後の行のうち行重みが２の累乗数となる行がより多く生じるように行分割を行う、の少なくとも１つに基づいて行分割を行うものである。
【発明の効果】
【００１８】
この発明によれば、パリティ検査行列に行分割または行結合を行うことで、列重みを増大させずに、符号長が等しく符号化率が異なる複数のＬＤＰＣ符号を生成することができ、行分割後または行結合後の行に対応する行演算結果を用いて行分割前または行結合前の行に対応の行演算を行うことができ、小さな回路規模で前記ＬＤＰＣ符号それぞれの復号を切り替えて行うことが可能であり、さらに、パディングやパンクチャを行わないため、パディングやパンクチャによる誤り訂正能力の低下が発生しない。
【図面の簡単な説明】
【００１９】
【図１】この発明の実施の形態１に係るもので、パリティ検査行列の行分割を説明する図である。
【図２】この発明の実施の形態１で行う行分割操作の前後におけるパリティ検査行列の変化を示す図である。
【図３】この発明の実施の形態１に適用が可能な通信システムの一例を示す構成図である。
【図４】図３に示す復号器５００の内部構成を示すブロック図である。
【図５】図４に示す行演算器５３０の内部構成を示すブロック図である。
【図６】図５に示す行演算部ａ５３１の内部構成を示すブロック図である。
【図７】図５に示す行演算部ｂ５３２の内部構成を示すブロック図である。
【図８】この発明の実施の形態２に係るもので、図５に示す行演算部ａ５３１がMin-sum復号法の行演算部ａ５３１でなる場合の内部構成を示すブロック図である。
【発明を実施するための形態】
【００２０】
実施の形態１．
この発明では、誤り訂正符号としてＬＤＰＣ符号を扱う。また、パリティ検査行列は要素が０と１からなるｍ×ｎ行列とする。本実施の形態１では、行分割という操作により、列数を変化させずにパリティ検査行列の行数を変化させる。つまり、符号長を一定としたままパリティビット数を変化させることで、ＬＤＰＣ符号の符号化率の可変を行う。
【００２１】
行分割操作は、図１に示すように、パリティ検査行列の１つの行が含む１を新たな２つ以上の行に分割して配置し、行数を増加する手法である。元となるパリティ検査行列を１つ用意し、行分割を行うか行わないか切り替えることによって符号化率の可変が可能となる。また、２種類より多くの符号化率を可変とする場合には、複数通りの行分割を行い、それぞれの行分割において増加する行数が異なるようにし、それらの行分割のうちどれを用いるか切り替えれば符号化率を可変とすることが可能である。
【００２２】
行分割の特徴は、行分割の前後において符号長が同一であること、各列の列重みが同一であること、パリティ検査行列のタナーグラフの最短ループ長が減少しないことであり、特に後者２つの特徴は、行分割を行っても誤り訂正能力が高いことを示している。
【００２３】
図２では、本実施の形態１で行う行分割操作の前後におけるパリティ検査行列の変化を図示する。図２の下に示すパリティ検査行列Ｈ２は、パリティ検査行列Ｈ１に行分割を施すことによってｒ行が増加した（ｍ＋ｒ）×ｎ行列である。図２で示すように、行分割の前後で符号長は同一であり、各列の列重みも同一となる。なお、本実施の形態１において、１つの行を必ず２つの行に分割しなければならないといった制限はなく、１つの行は何行に分割しても良い。そのため、行分割を適用する行数だけでなく、それぞれの行分割において１行を何行に分割するかによっても、増加させたい行数ｒ（増加させたいパリティビット数）を設定可能である。なお、図２では、パリティ検査行列の列のうちパリティビットに対応する列を最も右側のｍ列もしくはｍ＋ｒ列としたが、これは一例であり、Ｈ１とＨ２とで共通するパリティビットの対応列が同じであれば、どの列にパリティビットを対応させたとしても本実施の形態１の構成は可能である。
【００２４】
この発明では、予めパリティ検査行列を用意し、どのように行分割を行うかを決定してから、符号化率の可変が可能な、ＬＤＰＣ符号の復号装置を構成する。
【００２５】
図３は、この発明の適用が可能な通信システムの構成図の一例である。送信側の装置は、送信ビット列から誤り訂正符号の符号語を生成する符号化器１００と、符号語を元に変調信号を生成する変調器２００とで構成される。送信された信号は通信路３００を介して受信される。受信側の装置は、受信した信号の復調を行う復調器４００と、復調された信号を元に誤り訂正符号の復号を行う復号器５００とから構成される。
【００２６】
図３において、符号化器１００は、送信ビット列を元にしてパリティビットを生成して符号化を行い、符号語を算出する。変調器２００は、符号語に基づいて変調を行い、通信方式により電波や光もしくは電気信号による変調信号を生成し、送信する。送信された信号は、通信路３００を通る際に雑音が付加され、受信側の装置によって受信される。復調器４００では、受信した信号の復調を行い、各ビットの受信信号値を出力する。復号器５００は入力された受信信号値に基づいて復号を行い、その結果算出された送信情報の推定ビット列を出力する。
【００２７】
図４に、図３に示す復号器５００の内部構成を示すブロック図を示す。復号器５００は入力を制御する入力回路５１０と、入力値である受信信号値を元に受信ＬＬＲを算出する受信ＬＬＲ演算器５２０と、受信ＬＬＲもしくは列ＬＬＲを入力として行ＬＬＲを出力する行演算器５３０と、行ＬＬＲから列ＬＬＲを算出する列演算器５４０と、行演算と列演算の繰り返しの終了を判定する繰り返し演算終了判定回路５５０と、推定ビット列の出力を制御する出力回路５６０と、内部もしくは外部に設置されたメモリ５７０とから構成される。
【００２８】
次に、図４に示す復号器５００の動作について説明する。入力回路５１０は、入力値である受信信号値の入力を制御して、適切なタイミングで受信ＬＬＲ演算器５２０へ受信信号値を出力する。復号演算はＬＤＰＣ符号の符号語単位で行うため、符号長と同数のｎ個の受信信号値を一度に、もしくは数回にわけて適宜出力する。単位受信ＬＬＲ演算器５２０は、変調方式などによって異なる演算を行い、各受信信号値から受信ＬＬＲを算出し出力する。
【００２９】
行演算器５３０は、受信ＬＬＲ演算器５２０から入力された受信ＬＬＲか、もしくは繰り返し演算終了判定回路７から入力された列ＬＬＲを入力として、行ＬＬＲを算出する。なお、入力の受信ＬＬＲは、パリティ検査行列のｎ個の列それぞれに対応した値であり、ｎ個の値からなる。また、繰り返し演算終了判定回路７から入力される列ＬＬＲは、パリティ検査行列の各列それぞれに対し列重みの数だけ存在する値であり、全合計でパリティ検査行列に含まれる１の数と同数の種類の値からなる。行ＬＬＲも同様に、各行に対しそれぞれ行重みの数だけ存在し、合計でパリティ検査行列が含む１の数と同数の種類の値からなる。
【００３０】
列演算器５４０は、行ＬＬＲから列ＬＬＲを算出し、また推定ビット列も計算する。繰り返し演算終了判定回路７は、行演算と列演算を規定の回数繰り返したかを判定し、もし繰り返しを続行するなら行演算器５３０へ列ＬＬＲを出力し、繰り返しを終了するならば推定ビット列を出力回路５６０へと出力する。繰り返しを終了するかの判定は、推定ビット列にパリティチェックを行い、推定ビット列が符号語になっているかどうかで判定してもよく、本実施の形態ではどのような繰り返し終了判定基準でも構成可能である。
【００３１】
出力回路５６０は、適切なタイミングで推定ビット列を出力する。メモリ５７０は、前記の演算器もしくは回路が用いる記憶領域であり、例えば、行演算器５３０が行演算を行うのに途中経過を記憶したりするのに用いる。どの演算器および回路が用いたとしても、本実施の形態１は構成可能であり、また、記憶するという目的であればどのように用いても本実施の形態１の構成は可能である。
【００３２】
図４の構成は一例であり、例えば繰り返し演算終了判定回路７から行演算器へと入力されている列ＬＬＲは列演算器５４０から直接入力されていてもよく、繰り返し演算の終了時に推定ビット列が出力回路５６０へと出力されればよい。
【００３３】
本実施の形態１は、復号器５００に関する発明であるが、行分割の前後で図４に示した行演算器５３０以外の部分は共通して用いることができる。例えば、列演算器５４０は、本来であればパリティ検査行列に従って異なる構成とする必要があるが、行分割によってパリティ検査行列が変化した場合には構成を変える必要がない。なぜなら、列数は行分割前後で変わらず、また各列の列重みも変化しないからである。
【００３４】
図５に、本実施の形態１における図４に示す行演算器５３０の内部構成を示す。行演算器５３０は、行演算部ａ５３１と行演算部ｂ５３２とで構成される。それぞれの行演算部は、複数設置されており、双方の合計数と行分割前のパリティ検査行列Ｈ１の行数は一致している。
【００３５】
行演算部それぞれは、パリティ検査行列Ｈ１の各行に対応する行演算を行い、列ＬＬＲから行ＬＬＲを計算して出力する。本実施の形態１における行演算部は、行演算部ａ５３１と行演算部ｂ５３２の２種類あり、行分割後のパリティ検査行列Ｈ２を生成する際に行分割を施した行に対応した行演算を行う行演算部ａ５３１（図６）と、行分割を施してない行に対応した行演算を行う行演算部ｂ５３２（図７）とがあり、それぞれ対応する行数だけ設置される。
【００３６】
次に、行分割を施した行に対応する行演算部ａ５３１について説明する。図６の行演算部ａ５３１は、行分割前のパリティ検査行列Ｈ１における行（ｒ行目）に対応して設置されるものである。この行演算部ａ５３１では、行分割前のパリティ検査行列Ｈ１のｒ行目に対応した行演算と、ｒ行目を行分割することによって生じた複数の行それぞれに対応した行演算（行分割後のパリティ検査行列Ｈ２の行演算）とを切り替えて行い、出力することが可能である。
【００３７】
図６に示すように、行演算部ａ５３１は、入力回路１と、行分割後の行それぞれの行演算に対応した行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３および行ＬＬＲ演算器ｘ４と、これらの行ＬＬＲ演算器の出力を用いて行分割前のｒ行目の行演算を行う行分割前行ＬＬＲ演算器５と、ＬＤＰＣ符号の符号化率を切り替える符号化率切り替え器６と、行ＬＬＲの出力を行う出力回路７とからなる。なお、図６において、スリードッツ８で示しているように、行ＬＬＲ演算器は、行ｒを行分割して生じる行数だけ設置され、図で明示した３個とは限らない。具体的には、ｒ行目をｑ個の行に分割したのなら行ＬＬＲ演算器はｑ個設置される。
【００３８】
入力回路１は、列ＬＬＲの入力制御などを行い、パリティ検査行列が含む１の数だけの値で構成される列ＬＬＲのうち、図６の行演算部ａ５３１の入力となる列ＬＬＲを選択して出力する。ただし、復号器内の配線などによって、列ＬＬＲのうち行演算部ａ５３１の演算に必要となるものだけが入力されるようになっている場合には、入力回路１による列ＬＬＲの選択の必要はない。
【００３９】
次に、行ＬＬＲ演算器について説明する。ここでは、パリティ検査行列のｒ行目を行分割することによって行ａ，ｂ，．．．，ｘが新たに生じたとし、それぞれの行が含む１の列番号の集合を、Ｎａ（ｒ），Ｎｂ（ｒ），．．．，Ｎｘ（ｒ）とする。行分割の性質から、これらのどの２つの集合も共通要素をもたず、また、これら全ての集合の和集合はＮ（ｒ）（行分割前のｒ行に含まれる１の列番号の集合）と等しい。
【００４０】
次に、行ＬＬＲ演算器について説明する。ここでは、パリティ検査行列のｒ行目を行分  図６の行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３、行ＬＬＲ演算器ｘ４は、前記で述べた行分割後の行である行ａ、行ｂ、行ｘにそれぞれ対応した行ＬＬＲ演算器である。これらのうち、行ＬＬＲ演算器ｘ４で算出する行ＬＬＲεｘ，ｃの算出式を式（６）に示す。式（６）の右辺は、背景技術で述べた式（１）のＮ（ｒ）をＮｘ（ｒ）に置き換えた形となっているが、ｃはＮｘ（ｒ）が含む列番号である。
【００４１】
【数３】
0005523064.tif 000004
【００４２】
なお、行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３に対する行ＬＬＲ算出式も同様である。
【００４３】
前記のようにして、行分割後のパリティ検査行列Ｈ２の行ａ，ｂ，ｘにおける行演算を、行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３、行ＬＬＲ演算器ｘ４によって行うことができる。
【００４４】
しかし、さらに本実施の形態１では、行分割前の行演算も行演算部ａ５３１で行えるようにするため、行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３、行ＬＬＲ演算器ｘ４において、式（７）で示すようなεａ，εｂ，εｘも計算することとする。ただし、式（７）では、行ＬＬＲ演算器ｘ４で行うεｘの算出式を代表して示す。
【００４５】
【数４】
0005523064.tif 000005
【００４６】
式（７）は、式（６）のＮｘ（ｒ）＼｛ｃ｝をＮｘ（ｒ）に置き換えたものであり、εａ，εｂの算出式も同様である。
【００４７】
なお、行分割後のパリティ検査行列Ｈ２に対応した行演算を行う場合には、式（７）の演算は必要ない。そのため、例えば、後に説明する符号化率切り替え器６において、行分割後のパリティ検査行列Ｈ２を用いると設定したときには、式（７）の演算を行わないように行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３および行ＬＬＲ演算器ｘ４を構成しても良い。
【００４８】
また、式（６）、式（７）の１つ目の小括弧内の関数ｓｇｎの積は、＋１もしくは−１の値しかとらない。さらに、後半の小括弧の演算は負の数になることはない。
【００４９】
次に、行分割前行ＬＬＲ演算器５の動作について説明する。行分割前行ＬＬＲ演算器５は、前記の式（６）および式（７）の演算結果を用いて、行分割前の行ｒに対応した行演算を行う。行ｒの行演算は式（１）によって行えるが、行ｒが含む１の列番号の集合Ｎ（ｒ）が、行分割後の１の列番号の集合Ｎａ（ｒ），Ｎｂ（ｒ），．．．，Ｎｘ（ｒ）の和集合となる性質から、式（１）にＮ（ｒ）＝Ｎａ（ｒ）∪Ｎｂ（ｒ）∪・・・∪Ｎｘ（ｒ）を代入すると次式（８）が得られる。
【００５０】
【数５】
0005523064.tif 000006
【００５１】
式（８）の右辺後半の小括弧内の演算には次の式（９）のような性質があり、また、演算順序は任意に変更してもよい。そのため、式（８）のＮａ（ｒ）∪Ｎｂ（ｒ）∪・・・∪Ｎｘ（ｒ）の部分を後に示す式（１０）のように分割することができる。
【００５２】
【数６】
0005523064.tif 000007
【００５３】
さらに、式（８）の右辺の最初の小括弧は、関数ｓｇｎの積を単純に計算しているだけであるので分割可能であり、結局、式（８）は次の式（１０）に変形できる。なお、ここでは、ｃがＮａ（ｒ）に含まれているとする（このとき、前記で説明したように、他のＮｂ（ｒ），．．．，Ｎｘ（ｒ）はｃを含まない）。
【００５４】
【数７】
0005523064.tif 000008
【００５５】
式（１０）の右辺の各小括弧内の式は、式（６）および式（７）の右辺の小括弧内の式と同じである。そのため、式（１０）に式（６）および式（７）で演算したεｘ，ｃ，εｘなどを代入すると、次式（１１）のように変形できる。
【００５６】
【数８】
0005523064.tif 000009
【００５７】
式（１１）によれば、行分割前行ＬＬＲ演算器５は、行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３、行ＬＬＲ演算器ｘ４の演算結果を用いて、行分割前の行ｒに対する行演算で算出すべき行ＬＬＲεｒ，ｃを計算可能ということになる。ただし、前記では列番号ｃがＮａ（ｒ）に含まれている場合を示した。各ｃに対してεｒ，ｃを計算するときには、Ｎ（ｂ），．．．，Ｎｘ（ｒ）のどれがｃを含むかによって式（１１）を変更することとする。
【００５８】
行分割前行ＬＬＲ演算器５における具体的な計算方法の一例を示す、まず、行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３、行ＬＬＲ演算器ｘ４からの入力値を正負の符号および絶対値に分ける。次に、符号が正なら＋１を、負なら−１を式（１１）のｓｇｎ関数に代入し、絶対値は式後半の中括弧内の式に代入する。このとき、ｓｇｎ関数の積は排他的論理和を行うことで計算可能である。行ＬＬＲ演算器からの各入力値に対し、正なら０、負なら１として全ての排他的論理を演算し、演算結果が０なら＋１、１なら−１とすればよい。また、式（１１）の後半部分は、背景技術で説明した定義式（４）に従って計算すればよい。
【００５９】
以上では、行分割前行ＬＬＲ演算器５に入力された値を、まず正負の符号と絶対値に分けるとしたが、予め分けられた状態で入力されるように行ＬＬＲ演算器ａ２などを構成してもよい。
【００６０】
なお、前記で説明した行ｒに対する行演算の演算量（行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３、行ＬＬＲ演算器ｘ４の演算量を含む）は、行ｒに対する通常の行演算の演算量と同等である。
【００６１】
次に、符号化率切り替え器６について説明する。符号化率切り替え器６は、通信システムで用いるＬＤＰＣ符号の符号化率を決定し、その情報を出力回路７へ出力する。つまり行分割前のパリティ検査行列Ｈ１を用いるか、行分割後のパリティ検査行列Ｈ２を用いるかの決定を行う。符号化率の決定には、予め設定するか、送信装置と同期しながら通信路の雑音などの状態に応じて自動的に決定されるか、復号器５００の外部に設置された切り替えスイッチなどにより手動で切り替えるか、またはその他の手段で行う。また、前記で説明したように、行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３、行ＬＬＲ演算器ｘ４に対しても符号化率の情報を出力し、通信システムで用いる符号化率によっては不要となる演算をこれら行ＬＬＲ演算器が行わないようにしてもよい。
【００６２】
出力回路７は、行ＬＬＲ演算器ａ２、行ＬＬＲ演算器ｂ３および行ＬＬＲ演算器ｘ４、もしくは行分割前行ＬＬＲ演算器５で演算された行ＬＬＲを入力として、符号化率切り替え器６で決定された符号化率に従い、行分割の前後のどちらかに対応した行ＬＬＲを出力する。
【００６３】
次に、図７に示す行演算部ｂ５３２について説明する。上でも述べた通り、図７の行演算部ｂ５３２は行分割を施さなかった行に対応するものであり、行分割を行わなかった行数だけ図５の行演算器５３０内に設置される。行演算部ｂ５３２は、入力回路９と行ＬＬＲ演算器１０と出力回路１１とから構成されている。入力回路９は、図６の行演算部ａ５３１と同様の動作を行い、出力回路１１は、図６の出力回路７とは異なり、符号化率の切り替えによる出力行ＬＬＲの選択を行わない。それ以外の動作は同様である。また、図７の行ＬＬＲ演算器１０は、式（１）によって行ＬＬＲを演算する通常の行演算器である。
【００６４】
以上の構成では、行分割を行う場合および行わない場合で２つの符号化率を切り替え可能としたが、３つ以上の符号化率の切り替えも同様のアプローチで可能である。そのためには、元のパリティ検査行列Ｈ１を行分割して得たパリティ検査行列Ｈ２に対し、さらに行分割を行う。このようにして生成したパリティ検査行列をＨ３とする。
【００６５】
Ｈ３に対応した行演算器を構成するには、前記で説明した行演算部ａとｂ以外の行演算部が必要となる。なぜなら、Ｈ１からＨ２の生成の際で行分割された行がさらにＨ２からＨ３を生成する際に行分割された場合に対応する必要があるからである。それには、図６において、例えば行ｘをさらに行分割するのであれば、行ＬＬＲ演算器ｘの内部の構成を図６中に破線で囲った部分と同様の構成とし、行ＬＬＲ演算器ｘの出力線のビット幅を適切に増加させた行演算部を構成すればよい。この新たな行演算部と行演算部ａ５３１と行演算部ｂ５３２とをそれぞれ対応する行数ずつ、図５の行演算器５３０に設置すれば、３つの符号化率の切り替え可能な行演算器５３０を構成することができる。
【００６６】
以上のようにすることで、３種類の符号化率の切り替えに対応した復号器が構成できる。また、２種類の符号化率に対応した行演算部から３種類に対応の行演算部を構成したのと同様にして、３種類の符号化率に対応した行演算部からさらに多くの符号化率に対応した行演算器を構成することも可能である。すなわち、行演算器として、行分割を複数回行ったパリティ検査行列それぞれに対する行演算を、より分割された行に対する行演算結果に基づいて、より分割される前の行に対する行演算を行うことにより、複数回の行分割それぞれに対する行演算を切り替えて行うようにすればよい。
【００６７】
以上では、行分割によって符号化率を可変とした復号器の構成を示したが、同様の構成によって行結合によって符号化率を可変とする場合の復号器も構成可能である。行結合とは、行分割とは逆の操作であり、パリティ検査行列の２つの行を結合し１行とすることで行数を減少させる操作である。２つの行を結合するには、列ごとに要素を加算することで行う。つまり、結合を行う２つの行の、ある列の要素がそれぞれ０と１の場合には結合後の行におけるその列の要素を１とし、また、ある列の要素がそれぞれ０と０、１と１の場合には結合後の行におけるその列の要素を０とする。
【００６８】
前記で説明した行演算器５３０において、行結合を行っていないパリティ検査行列を、行分割を行った後のパリティ検査行列Ｈ２とみなし、行結合後のパリティ検査行列を、行分割を行っていないパリティ検査行列Ｈ１とみなして構成すれば、行結合の前後に対応の行演算器５３０および復号器５００を構成できる。また、３つ以上の符号化率に対応した復号器５００も同様に構成可能である。
【００６９】
すなわち、行演算器５３０として、受信ＬＬＲまたは列ＬＬＲから行ＬＬＲを算出する行演算の際に、パリティ検査行列の複数の行を行結合することによって生じた行に対する行演算を、行結合前の行に対する複数の行演算を組み合わせることで行うようにすればよく、パリティ検査行列の行結合前の行に対する行演算結果に基づいて行結合後の行に対する行演算を行うことにより、行結合の前後それぞれの行に対する行演算を切り替えて行うことができ、行結合を複数回行ったパリティ検査行列それぞれに対する行演算を、行結合前の行に対する行演算結果に基づいて、より行結合がなされた行に対する行演算を行うことにより、複数回の行結合それぞれに対する行演算を切り替えて行うことができる。
【００７０】
ただし、行結合する２つの行の同じ列の要素が１であった場合、結合後にその列の要素が０となるため、前記と同一の構成は不可能である。この場合、行結合によって不要となった演算を行わないように切り替える回路が必要である。例えば、列演算器５４０であるなら、行結合により０となる要素に対応する行ＬＬＲの入力を０に固定するなどして無効化すればよい。また、行演算器５３０においては、行結合により０となる要素に対応する列ＬＬＲの入力を無視して行ＬＬＲを計算するようにすればよい。例えば該当の列ＬＬＲの値を最大値に固定する方法がある。これらの機能追加による回路規模増大幅は小さい。
【００７１】
また、以上では、元のパリティ検査行列および、そのパリティ検査行列に行分割もしくは行結合を行ったパリティ検査行列を切り替え可能な復号器を示したが、必ずしも元のパリティ検査行列を通信システムで用いる必要はない。つまり、元のパリティ検査行列に行分割や行結合を施して生成される複数のパリティ検査行列に対し、元のパリティ検査行列以外から１つを切り替えて用いるようにしてもよい。
【００７２】
なお、行分割もしくは行結合を施す行の選び方として、行分割後もしくは行結合後のパリティ検査行列の行重みの偏りが小さくなるように選べば、偏りが大きい場合に比べ誤り訂正能力を高くできる。行分割におけるこのような行の選び方の一例として、行重みの最も大きい、もしくは比較的大きい行を優先的に分割し、かつそれらの行分割において２つの行に分割する方法が挙げられる。また、行結合を行う行の選び方の一例としては、行重みの小さい行を結合することが挙げられる。
【００７３】
また、パリティ検査行列の最大行重みが小さくなるように行分割もしくは行結合を行う行を選択すれば、最大行重みに依存する値（例えば、行が含む１の位置を示すアドレスのビット幅）を小さくでき、メモリなどの回路規模を削減できる。
【００７４】
以上のような構成によれば、行分割前の行演算を行分割後の行演算結果を用いて効率よく演算することができ、行分割前のパリティ検査行列に従って構成した復号器の演算量および回路規模と同等の演算量および回路規模で、行分割の前後の復号演算が切り替え可能な復号器を構成することができ、演算量と回路規模の増大を抑えることができる。なお、行分割を複数回行う場合でも同様の構成が可能であり、行分割前のパリティ検査行列に従って構成した復号器の演算量および回路規模と同等の演算量および回路規模で、複数の符号化率の可変に対応した復号器を構成することができる。
【００７５】
さらに、以上のような構成によれば、行結合後の行演算を行結合前の行演算結果を用いて効率よく演算することができ、行結合後のパリティ検査行列に従って構成した復号器の演算量および回路規模と同等の演算量および回路規模で、行結合の前後の復号演算が切り替え可能な復号器を構成することができ、演算量と回路規模の増大を抑えることができる。なお、行結合を複数回行う場合でも同様の構成が可能であり、行結合後のパリティ検査行列に従って構成した復号器の演算量および回路規模と同等の演算量および回路規模で、複数の符号化率の可変に対応した復号器を構成することができる。
【００７６】
この構成による復号器は、可変する符号化率のＬＤＰＣ符号の中で最も符号化率が高く、かつ最小行数のパリティ検査行列に対応する復号器と同等の回路規模である。一方、元のパリティ検査行列に新たな行を追加することで可変符号化率を行う従来手法では、可変する符号化率の中で最も行数の多いパリティ検査行列に対応する回路規模が少なくとも必要となる。つまり、本構成によれば、従来手法と比べても回路規模を小さくできる。
【００７７】
また、行分割もしくは行結合によって符号化率の異なるＬＤＰＣ符号を生成しているため、異なる符号化率間でパリティ検査行列の列重みは一定であり、パリティ検査行列の行数増加に伴う列重みの増大がない。そのため、回路規模を小さくすることができる。また、行分割および行結合を行っても符号化率は一定に保たれるため、パディングやパンクチャを行う必要がなく、これらを行うことによる誤り訂正能力の低下を避けることができる。
【００７８】
さらに、以上のような構成によれば、列重み分布を一定としたまま符号化率の可変が可能となり、各符号化率のＬＤＰＣ符号で誤り訂正能力が大きい。また、行分割に基づく本構成によってタナーグラフの最短ループ長が小さくなることはないため、可変符号化率に対応し、かつ高い誤り訂正能力を引き出すパリティ検査行列を容易に構成することが可能である。
【００７９】
また、以上の構成は、符号化率の可変を目的とするのではなく符号長を一定としたままＬＤＰＣ符号の符号化率を調整、すなわち情報系列長とパリティビット数を調整する目的でも用いることができる。復号装置の回路構成を変更せずに、１ビット単位でパリティビット数などの調整を行うことができる。例えば、通信システムのフレームフォーマットが変更した場合や、変更したい場合に、符号長を一定に保ったままパリティビット数と情報系列長をフレームフォーマットに合致させる目的で用いることができる。
【００８０】
実施の形態２．
実施の形態１ではSum-product復号の行演算について述べたが、他の復号法であっても同様の可能性は可能である。例えば、Sum-product復号法の行演算を近似計算することによって演算量を小さくした復号法に、本構成は適用可能である。それらの復号法の中に、Min-sum復号法がある。この復号法は、背景技術で示したSum-product復号法の行演算式（１）を、次の式（１２）で置き換えたものである。
【００８１】
【数９】
0005523064.tif 000010
【００８２】
【数１０】
0005523064.tif 000011
【００８３】
の最小となる列番号がｃ'＝ｐのときであった場合、式（１２）は
【００８４】
【数１１】
0005523064.tif 000012
【００８５】
の最小値と２番目に小さい値、および最小値となる列番号ｃ'の値ｐを求め、ｓｇｎ関数の積による符号を付加することで計算可能である。つまり、εｒ，ｃは、ｃ＝ｐに対しては２番目の最小値に符号を付加した値となり、ｃ≠ｐに対しては最小値に符号を付加した値となる。
【００８６】
前記の計算方法による行演算部ａ５３１を図８に示す。図８の行演算部ａは、図６の行演算部ａの行ＬＬＲ演算器それぞれを最小２値演算器に置き換えた構成となっている。なお、最小２値とは最小値および２番目に小さい値のことを指す。
【００８７】
図８の動作について説明する。最小２値演算器それぞれは、入力となる列ＬＬＲの正負の符号からεｒ，ｃの符号を各列ｃに対して計算し、また列ＬＬＲの絶対値の最小２値と最小値となる列番号の値ｐを算出し出力する。
【００８８】
行分割前行ＬＬＲ演算器５では、最小２値演算器それぞれから入力された最小２値とｐ、および符号に基づいて行分割前の行ｒに対応する行演算を行う。符号は実施の形態１と同様にして計算可能である。行ｒが含む１の列番号全体における最小２値は、最小２値演算器それぞれから入力された最小２値の中での最小２値を計算することによって求めることができる。また、最小値となる列番号も入力された各ｐの中から計算可能である。
【００８９】
出力回路７では、符号化率切り替え器による符号化率に従って、最小２値演算器からの入力値と行分割前行ＬＬＲ演算器５からの入力値とのどちらかを選択し、最小２値とｐとに従って、各行ＬＬＲを出力すればよい。
【００９０】
なお、以上の構成では行分割前後の２つの符号化率の切り替えについて述べたが、実施の形態１と同様にして３つ以上の符号化率の切り替えが可能な復号器を構成可能である。
【００９１】
また、図８の行演算部ａの構成は、Min-sum復号法以外にも、列ＬＬＲの絶対値の最小２値を求めるような復号法で構成可能である。たとえば、Offset BP-based復号法であれば、最小２値それぞれからオフセット値を引く演算を行う演算部を追加すればよく、またNormalized BP-based復号法であれば、最小２値それぞれとノーマライズファクターとの積を演算する演算器を追加すればよい。
【００９２】
さらに、同様にして最小３値（最小値、２番目に小さい値、３番目に小さい値）を計算するような復号法にも同様の構成が可能であり、例えば巡回近似δ−ｍｉｎ復号法であれば、図８の最小２値演算器の変わりに最小３値演算器を設置し、行分割前行ＬＬＲ演算器５では最小３値演算器それぞれからの入力の中における最小３値を演算するようにすればよい。なお、この場合、Ｄ値と呼ばれる値を演算するデルタ演算器と、最小３値それぞれからＤ値を引く演算器とを図８の行演算部あに付加する必要がある。さらに、行演算において列ＬＬＲの絶対値の最小４値以上を計算する復号法であれば、本実施の形態と同様の構成が可能である。
【００９３】
以上のようにすれば、行分割後の行ＬＬＲの演算結果を用いて行分割前の行ＬＬＲも効率的に計算でき、行演算器の回路規模増大を抑えつつ、効率的に符号化率の切り替えに対応した復号器を構成することができる。
【００９４】
また、行分割後の行のうち、行重みが２の累乗数となる行がなるべく多く生じるように行分割を行えば、行重みが２の累乗数の行に対する行ＬＬＲ演算回路を効率的に構成することができる。最小２値の算出には２値の比較を行重みの値に応じた回数だけ行うが、二分木のような構成（トーナメントのような構成）とした場合に、全ての段において全ての値が２値比較可能（２値比較を行う相手がいない場合が発生しない）だからである。
【符号の説明】
【００９５】
１，９  入力回路、２  行ＬＬＲ演算器ａ、３  行ＬＬＲ演算器ｂ、４  行ＬＬＲ演算器ｘ、５  行分割前行ＬＬＲ演算器、６  符号化率切り替え器、７，１１  出力回路、１０  行演算器、１２  最小２値演算器ａ、１３  最小２値演算器ｂ、１４  最小２値演算器ｘ、１００  符号化器、２００  変調器、３００  通信路、４００  復調器、５００  復号器、５１０  入力回路、５２０  受信ＬＬＲ演算器、５３０  行演算器、５３１  行演算部ａ、５３２  行演算部ｂ、５４０  列演算器、５５０  繰り返し演算終了判定回路、５６０  出力回路、５７０  メモリ。
【図１】
0005523064.tif 000013
【図２】
0005523064.tif 000014
【図３】
0005523064.tif 000015
【図４】
0005523064.tif 000016
【図５】
0005523064.tif 000017
【図６】
0005523064.tif 000018
【図７】
0005523064.tif 000019
【図８】
0005523064.tif 000020