(57)【特許請求の範囲】
【請求項１】
対象をノードと辺のグラフで表した場合の２つのノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算装置であって、
前記グラフ上のノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、辺ｖｃを付加する前のノードｉ、ｊ間の最短経路を求める第１の最短経路算出部と、
前記グラフ上のノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、ノードｉからノードｖへの最短経路を通って辺ｖｃを経由しノードｃからノードｊへの最短経路を通る経路を求める第２の最短経路算出部と、
前記グラフ上のノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、ノードｉからノードｃへの最短経路を通って辺ｖｃを経由しノードｖからノードｊへの最短経路を通る経路を求める第３の最短経路算出部と、
前記第１の最短経路算出部、第２の最短経路算出部および第３の最短経路算出部が求めた３つの経路のうちで、最も短い経路を選択することにより前記ノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路判定部とを備えた最短経路演算装置。
【請求項２】
請求項１記載の最短経路演算装置を用いて、グラフ上の２つのノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算方法であって、
グラフのノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、
辺ｖｃを付加する前のノードｉ、ｊ間の最短経路と、
ノードｉからノードｖへの最短経路を通って辺ｖｃを経由しノードｃからノードｊへの最短経路を通る経路と、
ノードｉからノードｃへの最短経路を通って辺ｖｃを経由しノードｖからノードｊへの最短経路を通る経路のうち、最も短い経路を選択することによりノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算方法。
【請求項３】
生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇを設定し、前記検査行列Ｈの要素を全て０にする初期化ステップと、
前記検査行列Ｈに対応するタナーグラフにおいて請求項２の最短経路演算方法で最短経路長を算出する最短経路長算出ステップと、
最短経路長がｇ−１以上の変数ノードと検査ノードの組が存在するかを調べる最短経路長判定ステップと、
前記最短経路長判定ステップで存在を判定した変数ノードと検査ノードの組の１つを選択しその組に対応するＨの要素に１を付加する行列要素付加ステップとを備え、
前記最短経路長算出ステップと前記最短経路長判定ステップと前記行列要素付加ステップとを繰り返してパリティ検査行列を生成する検査行列生成方法。
【請求項４】
初期化ステップに代えて、
生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇを設定し、前記検査行列Ｈの部分行列を２重対角構造に初期化し、当該初期化した検査行列Ｈの最短経路長を算出する第２の初期化ステップとし、かつ、
最短経路長判定ステップに代えて、
前記２重対角構造とした列以外のうちで、最短経路長がｇ−１以上の変数ノードと検査ノードの組が存在するかを調べる第２の最短経路長判定ステップとしたことを特徴とする請求項３記載の検査行列生成方法。
【請求項５】
生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇ、列重み、行重みを設定し、前記検査行列Ｈの要素を全て０にする初期化ステップと、
前記検査行列Ｈに対応するタナーグラフにおいて請求項２の最短経路演算方法で最短経路長を算出する最短経路長算出ステップと、
最短経路長がｇ−１以上の変数ノードと検査ノードの組で、列重みと行重みが設定値に満たない組が存在するかを調べる最短経路長判定ステップと、
前記最短経路長判定ステップで存在を判定した変数ノードと検査ノードの組に対応する前記検査行列Ｈの要素に１を付加する行列要素付加ステップと、
前記検査行列Ｈの列重みと行重みが設定値に満たしたかを調べる重み判定ステップと、
前記最短経路長算出ステップと前記最短経路長判定ステップと前記行列要素付加ステップと前記重み判定ステップとを繰り返してパリティ検査行列を生成する検査行列生成方法。
【請求項６】
初期化ステップに代えて、
生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇ、列重み、行重みを設定し、前記検査行列Ｈの部分行列を２重対角構造に初期化し、当該初期化した検査行列Ｈの最短経路長を算出する第３の初期化ステップとし、かつ、
最短経路長判定ステップに代えて、
前記２重対角構造とした列以外のうちで、最短経路長がｇ−１以上の変数ノードと検査ノードの組で、列重みと行重みが設定値に満たない組が存在するかを調べる第３の最短経路長判定ステップとしたことを特徴とする請求項５記載の検査行列生成方法。
【請求項７】
ブロックに分割されたグラフにおいて、ブロックＩ，Ｊ内にある２つのノードｉ，ｊの間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算装置であって、
グラフのブロックＶとブロックＣとを結ぶ辺を複数付加したときに、辺を付加する前のノードｉ、ｊ間の最短経路を求める第１の最短経路算出部と、
グラフのブロックＶとブロックＣとを結ぶ辺を複数付加したときに、ノードｉからブロックＶ内のいずれかのノードへの最短経路を通ってブロックＶとブロックＣとの間の辺を経由しブロックＣからノードｊへの最短経路を通る経路を求める第２の最短経路算出部と、
グラフのブロックＶとブロックＣとを結ぶ辺を複数付加したときに、ノードｉからブロックＣ内のいずれかのノードへの最短経路を通ってブロックＣとブロックＶとの間の辺を経由しブロックＶからノードｊへの最短経路を通る経路を求める第３の最短経路算出部と、
前記第１の最短経路算出部、第２の最短経路算出部および第３の最短経路算出部が求めた３つの経路のうちで、最も短い経路を選択する処理を繰り返すことにより前記ノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路判定部とを備えた最短経路演算装置。
【請求項８】
請求項７記載の最短経路演算装置を用いて、ブロックに分割されたグラフにおいて、ブロックＩ，Ｊ内にある２つのノードｉ，ｊの間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算方法であって、
グラフのブロックＶとブロックＣとを結ぶ辺を複数付加したときに、辺を付加する前のノードｉ、ｊ間の最短経路と、ノードｉからブロックＶ内のいずれかのノードへの最短経路を通ってブロックＶとブロックＣとの間の辺を経由しブロックＣからノードｊへの最短経路を通る経路と、ノードｉからブロックＣ内のいずれかのノードへの最短経路を通ってブロックＣとブロックＶとの間の辺を経由しブロックＶからノードｊへの最短経路を通る経路のうち、最も短い経路を選択する処理を複数回繰り返すことによりノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算方法。
【請求項９】
生成する検査行列Ｈにおける小行列サイズ、列ブロック数、行ブロック数、ｇｉｒｔｈ  ｇ、列重み、行重みを設定し、前記検査行列Ｈの要素を全て０にする初期化ステップと、
前記検査行列Ｈに対応するタナーグラフにおいて請求項８の最短経路演算方法を用いてブロック間およびシフト量の最短経路長を算出する最短経路長算出ステップと、
最短経路長がｇ−１以上の列ブロック、行ブロック、シフト量の組で、列重みと行重みが設定値に満たない組が存在するかを調べる最短経路長判定ステップと、
最短経路長判定ステップで存在を判定した列ブロック、行ブロック、シフト量の組で、当該ブロックに長さｇ−１以下のループが発生しないかを判定する内部ループ判定ステップと、
内部ループ判定ステップで存在を判定した列ブロック、行ブロック、シフト量の組の１つを選択しＨの当該ブロックにシフト量から算出した小行列を配置する小行列配置ステップと、
前記検査行列Ｈの列重みと行重みが設定値を満たしたかを調べる重み判定ステップと、
最短経路長算出ステップと最短経路長判定ステップと内部ループ判定ステップと小行列配置ステップと重み判定ステップとを繰り返してパリティ検査行列を生成する検査行列生成方法。
【請求項１０】
内部ループ判定ステップを、請求項２の最短経路演算方法を用いて最短経路長を算出することによって、初期化ステップで設定したｇｉｒｔｈ  ｇの値より短い内部ループ発生を判定することを特徴とする請求項９記載の検査行列生成方法。
【請求項１１】
内部ループ判定ステップを、初期化ステップで設定したｇｉｒｔｈ  ｇよりも短いループが発生しうるパターン全てに対し調べることを特徴とする請求項９記載の検査行列生成方法。
【請求項１２】
初期化ステップに代えて、
生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇ、列重み、行重みを設定し、前記検査行列Ｈの部分行列を２重ブロック対角構造に初期化し、当該初期化した検査行列Ｈのブロック間およびシフト量の最短経路長を算出する第４の初期化ステップとし、かつ、
最短経路長判定ステップに代えて、
前記２重ブロック対角構造とした列のうち一部もしくは全てを除いた列に対し、最短経路長がｇ−１以上の変数ノードと検査ノードの組で、列重みと行重みが設定値に満たない組が存在するかを調べる第４の経路長判定ステップとしたことを特徴とする請求項９記載の検査行列生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、対象をノードと辺のグラフで表した場合のノード間の最短経路やその長さを求める最短経路演算装置と、これを用いた最短経路演算方法およびパリティ検査行列を生成する検査行列生成方法に関する。
【背景技術】
【０００２】
Low-Density Parity-Check符号（以下ではＬＤＰＣ符号と称す）は非０要素の数が少なく疎なパリティ検査行列（以下、検査行列と称す）で定義される線形ブロック符号である。検査行列がｍ×ｎ行列で、ランクが行数と等しいとき、列数ｎは符号長と一致し、行数ｍはパリティビット長と一致する。
検査行列の列に含まれる１の数を列重みと呼び、行列の列重みの分布を列重み分布と呼ぶ。同様に、行に含まれる１の数を行重みと呼び、行重みの分布を行重み分布と呼ぶ。列重み分布と行重み分布はＬＤＰＣ符号の復号性能に大きく影響するが、密度発展法やその類似手法で最適な分布を探索することができる。
【０００３】
検査行列のグラフで表現したものをタナーグラフとよぶ。検査行列とそれに対応したタナーグラフの例を図１に示す。タナーグラフは変数ノードと検査ノードの２種類のノードからなる２部グラフで、各変数ノードは検査行列の各列に一対一に対応し、各検査ノードは検査行列の各行に一対一に対応する。タナーグラフの辺は検査行列の非０要素の位置を表しており、変数ノードと検査ノードの組のうち各々が対応する列と行の行列要素が非０の場合のみに辺が貼られている。変数ノードどうしの間や検査ノードどうしの間には辺はない。タナーグラフに存在するループのうち最も短いループの長さをｇｉｒｔｈとよぶ。
図２は長さ６のループの例を示している。
【０００４】
ＬＤＰＣ符号の復号に広く用いられるSum-Product復号法やその簡易復号法であるMin-sum復号法は、タナーグラフのノード間で確率情報を繰り返し伝達しながら復号を行うが、タナーグラフに短いループがあると確率情報がループ内に留まってしまい復号性能に悪影響を及ぼしてしまう。そのため、タナーグラフのｇｉｒｔｈが大きいほど復号性能が良いと言われており、特に雑音レベルの小さい領域で復号後残留ビット誤り率の低下が鈍るエラーフロア現象が発生しにくいとされる。
【０００５】
非特許文献１にはｇｉｒｔｈの大きな検査行列の生成法が記されている。本文献で生成する検査行列Ｈは、図３に示すように小行列Ｉ（ｉ）からなるブロック行列の構造を持っている。小行列Ｉ（ｉ）はｐ×ｐの巡回置換行列であり、図４のように単位行列をｉ列シフトした行列である。このように、検査行列が巡回置換行列の小行列のブロックとなっているＬＤＰＣ符号をＱｕａｓｉ−Ｃｙｃｌｉｃ  ＬＤＰＣ符号（以下、ＱＣ  ＬＤＰＣ符号と称す）と呼ぶ。
非特許文献１の検査行列生成法は、生成したい検査行列のｇｉｒｔｈをｇとして、図３の検査行列Ｈのｇｉｒｔｈがｇとなるようなｐｊ，ｌ（１≦ｊ≦Ｊ−１，１≦ｌ≦Ｌ−１）を探索する。小行列とブロック行列の構造を利用して短いループを探索するが、ループの総数は膨大にあるため、計算時間を短縮するために小行列のサイズｐを素数とすることで、探索にかかる計算時間の短縮を図っている。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】M.P.C.Fossorier,“Quasi-cyclic low-density parity-check codes from circulant permutation matrices,” IEEE Trans. Inform. Theory, 50(8):1788-1794, Aug. 2004.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来手法でｇｉｒｔｈの大きなＬＤＰＣ符号の検査行列を生成するには、検査行列を、小行列が巡回置換行列であるブロック行列とし、かつ小行列のサイズを素数とする必要があった。
この発明は上記のような課題を解決するためになされたもので、ＬＤＰＣ符号の復号性能の劣化を防ぐことができ、復号性能の高いＬＤＰＣ符号の検査行列を生成できる最短経路演算装置、最短経路演算方法及び検査行列生成方法を得ることを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係る最短経路演算装置は、対象をノードと辺のグラフで表した場合の２つのノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算装置であって、グラフ上のノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、辺ｖｃを付加する前のノードｉ、ｊ間の最短経路を求める第１の最短経路算出部と、グラフ上のノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、ノードｉからノードｖへの最短経路を通って辺ｖｃを経由しノードｃからノードｊへの最短経路を通る経路を求める第２の最短経路算出部と、グラフ上のノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、ノードｉからノードｃへの最短経路を通って辺ｖｃを経由しノードｖからノードｊへの最短経路を通る経路を求める第３の最短経路算出部と、第１の最短経路算出部、第２の最短経路算出部および第３の最短経路算出部が求めた３つの経路のうちで、最も短い経路を選択することによりノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路判定部とを備えたものである。
【発明の効果】
【０００９】
この発明の最短経路演算装置は、第１の最短経路算出部、第２の最短経路算出部および第３の最短経路算出部が求めた３つの経路のうちで、最も短い経路を選択することによりノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出するようにしたので、容易に最短経路を求めることができ、復号性能の高いＬＤＰＣ符号の検査行列の生成に寄与することができる。
【図面の簡単な説明】
【００１０】
【図１】一般的な検査行列とそれに対応したタナーグラフの例を示す説明図である。
【図２】タナーグラフのループが長さ６の例を示す説明図である。
【図３】小行列Ｉ（ｉ）からなるブロック行列の構造を示す説明図である。
【図４】単位行列をｉ列シフトした行列を示す説明図である。
【図５】この発明の実施の形態１による検査行列生成方法におけるノード間の最短経路長の説明図である。
【図６】この発明の実施の形態１による検査行列生成方法におけるループ生成の説明図である。
【図７】この発明の実施の形態１による検査行列生成方法を示すフローチャートである。
【図８】この発明の実施の形態１による検査行列生成方法におけるノード間の最短経路長の説明図である。
【図９】この発明の実施の形態１による最短経路演算方法の説明図である。
【図１０】この発明の実施の形態１による最短経路演算装置の構成図である。
【図１１】この発明の実施の形態２による検査行列生成方法を示すフローチャートである。
【図１２】この発明の実施の形態３による検査行列生成方法におけるＬＤＧＭ構造の検査行列の説明図である。
【図１３】この発明の実施の形態３による検ｚ査行列生成方法を示すフローチャートである。
【図１４】この発明の実施の形態３による検査行列生成方法における初期化の説明図である。
【図１５】この発明の実施の形態３による検査行列生成方法の他の例を示すフローチャートである。
【図１６】この発明の実施の形態４による検査行列生成方法における検査行列を示す説明図である。
【図１７】この発明の実施の形態４による検査行列生成方法におけるブロック間の最短経路長を示す説明図である。
【図１８】この発明の実施の形態４による検査行列生成方法におけるブロック間の最短経路長の性質を示す説明図である。
【図１９】この発明の実施の形態４による検査行列生成方法におけるブロック間のシフト量を示す説明図である。
【図２０】この発明の実施の形態４による検査行列生成方法おけるブロック間のシフト量と巡回置換行列の関係を示す説明図である。
【図２１】この発明の実施の形態４による検査行列生成方法における検査行列と巡回置換行列との関係を示す説明図である。
【図２２】この発明の実施の形態４による検査行列生成方法におけるシフト量で最短経路長（ｇ−１）以上のときの説明図である。
【図２３】この発明の実施の形態４による検査行列生成方法における他ブロックを経由する経路がある場合の説明図である。
【図２４】この発明の実施の形態４による検査行列生成方法における動作を示すフローチャートである。
【図２５】この発明の実施の形態４による最短経路演算方法の説明図である。
【図２６】この発明の実施の形態４による最短経路演算装置の構成図である。
【図２７】この発明の実施の形態４による検査行列生成方法における長さ（ｇ−１）以下の内部ループ発生を判定する場合の説明図である。
【図２８】この発明の実施の形態４による検査行列生成方法におけるブロック間の他ブロックを経由する長さ２の経路を示す説明図である。
【図２９】この発明の実施の形態４による検査行列生成方法におけるブロック間の他ブロックを経由する長さ３以上の経路を示す説明図である。
【図３０】この発明の実施の形態４による検査行列生成方法における１つのブロックに複数の小行列が配置された検査行列を示す説明図である。
【図３１】この発明の実施の形態４による検査行列生成方法における小行列を配置しないための制限をかけた場合の検査行列を示す説明図である。
【発明を実施するための形態】
【００１１】
実施の形態１．
本発明の各実施の形態では、検査行列の行列要素が０と１のみからなる２元ＬＤＰＣ符号を扱う。
本発明の検査行列生成方法では、まず全要素が０からなる行列Ｈを準備し、Ｈに１つずつ要素１を付加していき、最終的に検査行列Ｈを得る。このとき、最初に準備する全要素０の行列Ｈの列数ｎと行数ｍは自由に設定することができ、また、生成したい検査行列のｇｉｒｔｈ値ｇも最初に設定する。
行列Ｈに要素１を付加する際、どの行列要素ｈｉｊに１を付加するか問題となる。本発明の方法のように、１つずつ要素１を付加する場合、検査行列Ｈに短いループが一旦生成されてしまうと、さらに要素１を付加していっても、その短いループが無くなることはない。つまり、ｇｉｒｔｈがｇの検査行列を生成したい場合、長さ（ｇ−１）以下のループを一旦生成してしまうと、その検査行列のｇｉｒｔｈはｇより小さくなってしまう。そのため、本発明では、長さが（ｇ−１）以下のループが生成されないような行列要素のみに１を付加し、その操作を繰り返していくことで検査行列のｇｉｒｔｈがｇより小さくならないことを保証する。
【００１２】
では、どのようにして長さ（ｇ−１）以下のループが生成されない行列要素ｈｉｊを見つけるかであるが、それにはタナーグラフの最短経路長を用いる。最短経路長とは、タナーグラフにおいて、２つのノード間の最短経路上にある辺の数である。図５において、ノード５とノードｃの最短経路は、ノード５、ノードｂ、ノード４、ノードｃと辿る経路であり、経路上にあるグラフの辺の数は３であるので、ノード５とノードｃの間の最短経路長は３である。ここで、図６のように、もしノード５とノードｃの間に辺ｅを貼ったとすると、辺ｅと前記最短経路とでループが生成される。このループの長さは４であり、辺ｅを貼る前のノード５とノードｃ間の最短経路長３に１を加えた値となる。タナーグラフのノード間に辺を追加することは、それらのノードに対応する行と列の要素に１を付加することと同値であるから、最短経路長が短いノード間に対応する行列の要素に１を付加すると、短いループが生成されてしまう。そのため、ｇｉｒｔｈがｇの検査行列を生成する場合には、最短経路長が（ｇ−２）以下のノード間には辺を貼らなければよい。最短経路長が（ｇ−１）以上のノード間のみに辺を貼っていくことによって、ｇｉｒｔｈがｇであることが常に保証される。
【００１３】
次に、上記の最短経路長に注目した検査行列生成法の実施の形態１を、図７のフローチャートに沿って説明する。
まず、ステップＳＴ１（初期化ステップ）で、生成したい行列の列数ｎ、行数ｍ、ｇｉｒｔｈの値ｇを設定する。また、全ての要素を０に初期化したｍ×ｎ行列Ｈを用意する。
ステップＳＴ２（最短経路長算出ステップ）で、現在のパリティ検査行列に対応するタナーグラフの最短経路長を全ノード間に関して算出する。最初、検査行列の要素は全て０であり、対応するタナーグラフに辺はないので、全てのノード間の最短経路長を無限もしくは十分に大きな値（例えばｎ＋ｍなど）として、ステップＳＴ３（最短経路長判定ステップ）へ進む。後にも説明するように、本検査行列生成法はステップＳＴ２からステップＳＴ４（行列要素付加ステップ）を繰り返し行うが、２回目以降にステップＳＴ２で行う最短経路演算方法については後述し、他のステップの説明を先に行う。
【００１４】
ステップＳＴ３では、最短経路長が（ｇ−１）以上である変数ノードと検査ノードの組（列と行の組）が存在するかを判定する。ステップＳＴ２において、図８のように、全てのノード間の最短経路長が算出されているが、その中で最短経路長が（ｇ−１）以上の変数ノードと検査ノードの組があるかを判定する。なお、図８中の網掛け部分が変数ノードと検査ノード間の最短経路長を示しており、それ以外の部分、つまり変数ノード同士、検査ノード同士の最短経路長は、後に説明する最短経路長算出において用いる。もし、最短経路長が（ｇ−１）以上の変数ノードと検査ノードの組が無い場合には検査行列Ｈを出力してフローチャートを終了する。もしある場合にはステップＳＴ４に進む。
【００１５】
ステップＳＴ４では、ステップＳＴ３で存在すると判定した、最短経路長が（ｇ−１）以上の変数ノードと検査ノードの組（列と行の組）のうちの１つ（例えば、列ｖ、行ｃ）を選択し、検査行列Ｈの対応する行列要素（ｃ行ｖ列）に１を付加する。そしてステップＳＴ２に戻る。なお、列と行の組の選び方は、ランダムに選択しても良いし、列や行の番号に優先順位をつけて選んでも良いし、検査行列Ｈの列重みや行重みの大きさに従って計算した確率を用いて乱数を用いて選択しても良く、１つの組を決定できればどんな方法で選択してもよい。
【００１６】
次に、２回目以降のステップＳＴ２で行う最短経路演算方法について説明する。上述したように、ステップＳＴ２では、現在の検査行列Ｈに対応するタナーグラフの最短経路長を全ノード間に関して算出する。ステップＳＴ４で検査行列Ｈに１が付加され、それに対応してタナーグラフに辺ｖｃが付加されると、辺ｖｃによって最短経路長が変化する可能性がある。そのため、１が付加される度に全ノード間の最短経路長を算出する必要があり、その算出をステップＳＴ２で毎回行う必要がある。本発明では、前回算出した最短経路長（直近のステップＳＴ４で辺ｖｃが付加される前の最短経路長）を用いることにより、効率よく最短経路長を算出する方法を次に示す。
【００１７】
前回繰り返しのステップＳＴ４で付加された辺をｖｃ（変数ノードｖと検査ノードｃの間の辺）とする。辺ｖｃを付加した後のタナーグラフ上において、任意のノードの組ｉ、ｊの最短経路の候補として、辺ｖｃを通らない経路のうち最短のものか、もしくは辺ｖｃを通る経路のうちで最短のものかの２通りが考えられる。辺ｖｃを通らない経路のうち最短のものは、前回のステップＳＴ２で算出したノードｉ、ｊ間の最短経路と等しい。辺ｖｃを通る経路は２通りが考えられ、図９に示すように、ｉからｖへの最短経路を通って、辺ｖｃを通り、ｃからｊへの最短経路を通る経路、もしくはｉからｃへの最短経路、辺ｖｃ、ｖからｊへの最短経路を通る経路がある。以上の３つの候補をまとめたのが次の（ｉ）〜（ｉｉｉ）である。
【００１８】
（ｉ）辺ｖｃを追加する前の最短経路長
（ｉｉ）辺ｖｃ追加前のｉからｖへの最短経路長＋１（辺ｖｃ）＋辺ｖｃ追加前のｊからｃへの最短経路長
（ｉｉｉ）辺ｖｃ追加前のｉからｃへの最短経路長＋１（辺ｖｃ）＋辺ｖｃ追加前のｖからｊへの最短経路長
これら３つの候補のうちで最も短いものが、辺ｖｃ付加後のノードｉ，ｊ間の最短経路となる。なお、これらの経路の一部もしくは全てが存在しないこともある。存在しない場合、十分大きな値（例えば、ｎ＋ｍ）をその存在しない候補の便宜上の長さとする。
【００１９】
図１０は、このような最短経路演算方法を実現する最短経路演算装置を示す構成図である。図中の第１の最短経路算出部１は、上記（ｉ）の辺ｖｃを追加する前の最短経路長を求める機能部であり、第２の最短経路算出部２は、上記（ｉｉ）の辺ｖｃ追加前のｉからｖへの最短経路長＋１（辺ｖｃ）＋辺ｖｃ追加前のｊからｃへの最短経路長を求める機能部、第３の最短経路算出部３は、上記（ｉｉｉ）の辺ｖｃ追加前のｉからｃへの最短経路長＋１（辺ｖｃ）＋辺ｖｃ追加前のｖからｊへの最短経路長を求める機能部である。また、最短経路判定部４は、第１の最短経路算出部１〜第３の最短経路算出部３で求めた経路のうち、最も短い経路を選択することによりノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する機能部である。
【００２０】
なお、図１０に示した最短経路演算装置は、コンピュータを用いて実現され、第１の最短経路算出部１〜最短経路判定部４の各機能に対応したソフトウェアと、これらのソフトウェアを実行するためのＣＰＵやメモリといったハードウェアから構成されている。あるいはこれら機能部の一部または全部を専用のハードウェアを用いて実現してもよい。また、本発明の各実施の形態における最短経路演算方法や検査行列生成方法もコンピュータを用いて実現されている。
【００２１】
このように、任意のｉとｊ間の最短経路長は、上述した（ｉ）〜（ｉｉｉ）の３値を比較するだけで算出でき、計算時間が小さい。ただし、全てのノード間の最短経路を算出する必要がある。なお、ここで算出しているのは最短経路の長さのみであって、それぞれの最短経路がどのようなノードと辺から構成されているかについては算出もしないし、記憶もしないでよい。また、ノードｉからｊへの最短経路長とノードｊからｉへの最短経路長は等しいので、どちらかを算出および記憶すればよい。
【００２２】
上記の最短経路長の算出法はＬＤＰＣ符号の検査行列生成法にとどまらず、他にも用いることができる。対象をノードと辺のグラフで表すことができ、さらにノード間の最短経路長が既に求まっている場合において、グラフに辺を追加した後の最短経路長を求めるのに本方法を用いることができる。また、ノード間の最短経路長が予め求まっていない場合でも、辺のないグラフに１本ずつ辺を追加してグラフを構築していき、辺追加と同時に本方法により最短経路長を求めていけば、構築したグラフ上の全ノード間の最短経路長を求めることができる。また、本方法では最短経路長のみを求め最短経路は算出しなかったが、本方法と同様の方法で最短経路も求めることができる。それには、上述した（ｉ）〜（ｉｉｉ）で求めた最短経路の３つの候補のうち、最も短いもの（採用したもの）のみを逐一記憶しておけばよい。
【００２３】
また、上記の説明において、最短経路長の定義を最短経路上の辺の数としたが、本方法の適用範囲はその限りではない。例えば、辺とノードのいずれかもしくは双方に重み（時間や距離、コストを数値化したものが考えられる）が与えられており、最短経路長を最短経路上の辺とノードのいずれかもしくは双方の重みの和と定義した場合においても、同じ方法で最短経路長を算出することができる。また、タナーグラフのような２部グラフでなくても適用でき、本方法は一般的な構造のグラフで用いることができる。本方法をＬＤＰＣ符号の検査行列生成以外に適用可能な例として、カーナビゲーションシステムやその他のＧＰＳ機器の最短経路探索、列車を初めとした交通機関の最短経路探索がある。
【００２４】
図７に戻り、検査行列生成方法ではステップＳＴ２〜ステップＳＴ４を繰り返す。
フローチャートの繰り返し回数は、検査行列Ｈに付加する１の総数と一致する。本実施の形態のフローチャートでは、全ての変数ノードと検査ノードの間の最短経路長が（ｇ−２）以下になったら終了する。辺が付加されることにより最短経路長が長くなることはなく、辺を付加することで少なくとも１組のノードの最短経路長が短くなるから、本フローチャートが終了しないという現象は発生しない。
【００２５】
従来技術では設定する列数と行数をある値以上の素数の倍数にしなければならず、これらが通信システムの要求に合わない場合には、要求に近い検査行列をまず生成し、その後列数と行数を調節する必要があった。しかし、本発明の方法では列数と行数を任意の値に設定可能であり、列数と行数の調節による復号性能劣化を抑えることができる。
また、本実施の形態の検査行列生成方法で生成した検査行列のｇｉｒｔｈは、最初に設定した値ｇより小さくなることがなく、高い復号性能を発揮することができる。
また、最短経路長の計算はノードの組１つに対して加算と比較演算のみであり、符号長が千ビットから１０万ビットの実用的なＬＤＰＣ符号の検査行列生成を高速に行うことができる。
【００２６】
以上説明したように、実施の形態１の最短経路演算装置によれば、対象をノードと辺のグラフで表した場合の２つのノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算装置であって、グラフ上のノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、辺ｖｃを付加する前のノードｉ、ｊ間の最短経路を求める第１の最短経路算出部と、グラフ上のノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、ノードｉからノードｖへの最短経路を通って辺ｖｃを経由しノードｃからノードｊへの最短経路を通る経路を求める第２の最短経路算出部と、グラフ上のノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、ノードｉからノードｃへの最短経路を通って辺ｖｃを経由しノードｖからノードｊへの最短経路を通る経路を求める第３の最短経路算出部と、第１の最短経路算出部、第２の最短経路算出部および第３の最短経路算出部が求めた３つの経路のうちで、最も短い経路を選択することによりノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路判定部とを備えたので、容易に最短経路を求めることができる。
【００２７】
また、実施の形態１の最短経路演算方法によれば、最短経路演算装置を用いて、グラフ上の２つのノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算方法であって、グラフのノードｖとノードｃとを結ぶ辺ｖｃを付加したときに、辺ｖｃを付加する前のノードｉ、ｊ間の最短経路と、ノードｉからノードｖへの最短経路を通って辺ｖｃを経由しノードｃからノードｊへの最短経路を通る経路と、ノードｉからノードｃへの最短経路を通って辺ｖｃを経由しノードｖからノードｊへの最短経路を通る経路のうち、最も短い経路を選択することによりノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出するようにしたので、容易に最短経路を求めることができる。
【００２８】
また、実施の形態１の検査行列生成方法によれば、生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇを設定し、検査行列Ｈの要素を全て０にする初期化ステップと、検査行列Ｈに対応するタナーグラフにおいて最短経路演算方法で最短経路長を算出する最短経路長算出ステップと、最短経路長がｇ−１以上の変数ノードと検査ノードの組が存在するかを調べる最短経路長判定ステップと、最短経路長判定ステップで存在を判定した変数ノードと検査ノードの組の１つを選択しその組に対応するＨの要素に１を付加する行列要素付加ステップとを備え、最短経路長算出ステップと最短経路長判定ステップと行列要素付加ステップとを繰り返してパリティ検査行列を生成するようにしたので、生成する検査行列をブロック行列とする必要がなく、ＬＤＰＣ符号の復号性能の劣化を防ぐことができ、復号性能の高いＬＤＰＣ符号の検査行列を生成することができる。
【００２９】
実施の形態２．
実施の形態１の方法では、ｇｉｒｔｈを保証しつつタナーグラフの辺を付加していき、タナーグラフのどこにも辺を付加できなくなったら終了としていた（図７参照）。これに対し、実施の形態２の検査行列生成方法では、終了条件を変更し、生成する検査行列の列重み分布と行重み分布を考慮した構成とする。上述したように、検査行列の列重み分布と行重み分布はＬＤＰＣ符号の復号性能に寄与するが、復号性能の高い列重み分布と行重み分布は密度発展法などにより算出することができる。本実施の形態では、所望の列重み分布と行重み分布をもった検査行列を生成する方法を示す。
【００３０】
図１１に実施の形態２の検査行列生成方法のフローチャートを示す。図１１に示したフローチャートのステップのうち、ステップＳＴ２とステップＳＴ４は実施の形態１における図７のフローチャートと同一の処理を行うため、これらステップの詳細な説明は省略する。
まずステップＳＴ１ａ（初期化ステップ）では、生成する検査行列の列数ｎ、行数ｍ、各列ｉの列重みｗｖ（ｉ）、各行ｊの行重みｗｃ（ｊ）、ｇｉｒｔｈの値ｇを設定し、検査行列Ｈの全要素は０に初期化する。なお、ｗｖ（ｉ）とｗｃ（ｊ）の値は矛盾がなく適切な値に設定する必要があり、ｗｖ（ｉ）の全ｉの合計とｗｃ（ｊ）の全ｊでの合計は等しくなければならない。また、ステップＳＴ２において、全ノード間の最小経路長を算出する。
【００３１】
ステップＳＴ３ａ（最短経路長判定ステップ）において、最短経路長が（ｇ−１）以上の列ｉ、行ｊの組で、かつ、列ｉの列重みが生成したい検査行列の列重みｗｖ（ｉ）未満であり、行ｊの行重みが生成したい行重みｗｃ（ｊ）未満である組があるかを判定する。
つまり、実施の形態１のステップＳＴ３に列重みと行重みの制限を加え、列重みがｗｖ（ｉ）に達した列ｉ、および行重みがｗｃ（ｊ）に達した行ｊには後のステップＳＴ４で１を付加しないようにする。もしもこのようなｉ、ｊが存在しない場合には、検査行列生成は失敗であり、終了する。存在した場合、ステップＳＴ４に進む。
【００３２】
ステップＳＴ４では、ステップＳＴ３ａの判定をクリアした列と行の組のうち１つを選び、対応する検査行列Ｈの要素に１を付加する。なお、列と行の組の選び方は、ランダムに選択しても良いし、列や行の番号に優先順位をつけて選んでも良いし、検査行列Ｈの列重みや行重みの大きさに従って計算した確率を用いて乱数を用いて選択しても良く、１つの組を決定できればどんな方法で選択してもよい。
【００３３】
ステップＳＴ５（重み判定ステップ）では、前ステップＳＴ４で１が付加された後の検査行列Ｈに対し、全ての列ｉの列重みがステップＳＴ１ａで設定したｗｖ（ｉ）に等しく、かつ全ての行ｊの行重みがｗｃ（ｊ）と等しいかを判定する。全て等しければ、検査行列Ｈを出力してフローチャートを終了する。このとき生成された検査行列ＨはステップＳＴ１ａで設定した条件を全て満足している。１つでも等しくない列重み、もしくは行重みがあればステップＳＴ２に戻る。なお、フローチャートでは列重みおよび行重みについて全て等しいかを判定しているが、実際には列重みと行重みのいずれかを判定するだけでよい。ステップＳＴ１ａで設定したｗｖ（ｉ）とｗｃ（ｊ）が適切な値であれば、全ての列重みがｗｖ（ｉ）に等しい場合には全ての行重みもｗｃ（ｊ）に等しく、逆も言える。
【００３４】
本実施の形態によれば、密度発展法などで予め求めておいた最適な列重み分布、行重み分布をもった検査行列を生成することができ、復号性能の高いＬＤＰＣ符号を構成することができる。
なお、本検査行列生成法のステップＳＴ５において、列重みと行重みが設定値になれば終了としているが、他の終了条件を設定してもよい。本方法で生成中の検査行列Ｈのｇｉｒｔｈは常にｇ以上であることが保証されており、ステップＳＴ５においてさらに終了条件を加えてもよいし、ステップＳＴ５の代わりに別の終了条件を加えてもよい。いずれにしても、生成される検査行列のｇｉｒｔｈはｇ以上となり、復号性能の検査行列が生成できる。
【００３５】
以上説明したように、実施の形態２の検査行列生成方法によれば、生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇ、列重み、行重みを設定し、検査行列Ｈの要素を全て０にする初期化ステップと、検査行列Ｈに対応するタナーグラフにおいて実施の形態１の最短経路演算方法で最短経路長を算出する最短経路長算出ステップと、最短経路長がｇ−１以上の変数ノードと検査ノードの組で、列重みと行重みが設定値に満たない組が存在するかを調べる最短経路長判定ステップと、最短経路長判定ステップで存在を判定した変数ノードと検査ノードの組に対応する検査行列Ｈの要素に１を付加する行列要素付加ステップと、検査行列Ｈの列重みと行重みが設定値に満たしたかを調べる重み判定ステップと、最短経路長算出ステップと最短経路長判定ステップと行列要素付加ステップと重み判定ステップとを繰り返してパリティ検査行列を生成するようにしたので、最適な列重み分布、行重み分布をもった検査行列を生成することができ、復号性能の高いＬＤＰＣ符号を構成することができる。
【００３６】
実施の形態３．
実施の形態１、２では、ＬＤＰＣ符号の符号化については考慮していなかった。ＬＤＰＣ符号の符号化を効率的に行うためには、検査行列の構造が重要となる。符号化に適した検査行列の構造として、図１２に示すLow-Density Generator Matrix（以下、ＬＤＧＭと称す）構造がある。図１２の検査行列は、右側部分にあるｍ×ｍ部分行列が２重対角構造となっている。なお、この構造は一例であり、左側部分のｍ×ｍ部分行列が２重対角構造となっているものでも符号化を効率的に行うことができる。本実施の形態では、一例として、右側部分が２重対角構造である検査行列の生成法を示す。
【００３７】
図１３に、実施の形態１の検査行列生成方法を一部変更してＬＤＧＭ構造の検査行列を生成可能とした場合のフローチャートを示す。実施の形態１のフローチャート（図７）と異なるのは、ステップＳＴ１ｂ（第２の初期化ステップ）とステップＳＴ３ｂ（第２の最短経路長判定ステップ）のみである。
ステップＳＴ１ｂで実施の形態１と異なるのは検査行列Ｈの初期化である。実施の形態１では全要素０と初期化したが、本実施の形態では図１４に示した行列Ｇに初期化する。行列Ｇは右側ｍ×ｍ部分行列が２重対角線構造となっており、それ以外はすべて０の行列である。行列Ｇに対応のタナーグラフにはループがないため、生成したい検査行列のｇｉｒｔｈの値ｇに制限が加わることはない。また、初期化する行列Ｇにおける全ノード間の最短経路長も求める。
【００３８】
ステップＳＴ３ｂで実施の形態１と異なるのは、列と行の組の存在判定を行う条件として、列ｉの範囲を０≦ｉ≦ｎ−ｍとしたことである。これは、次のステップＳＴ４において、右側のｍ列には１を配置しないことを示している。つまり、右側ｍ×ｍ行列の２重対角線構造を壊さないようにしている。
【００３９】
次に、実施の形態２の検査行列生成方法を変更し、ＬＤＧＭ構造の検査行列を生成する方法を図１５に示す。実施の形態２の図１１と異なるのは、ステップＳＴ１ｃ（第３の初期化ステップ）とステップＳＴ３ｃ（第３の最短経路長判定ステップ）である。
ステップＳＴ１ｃで実施の形態２と異なるのは、検査行列Ｈを全０で初期化するのではなく、図１４の行列Ｇで初期化することである。また、初期化する行列のタナーグラフにおける全ノード間の最短経路長も求める。
ステップＳＴ３ｃで実施の形態２と異なるのは、列と行の組の存在判定を行う条件として、列ｉの範囲を０≦ｉ≦ｎ−ｍとしたことである。
以上のようにすれば、ＬＤＧＭ構造の検査行列を生成することができ、ＬＤＰＣ符号の符号化を効率的に行うことができる。
【００４０】
また、初期化に用いる行列として用いることができるのは、図１４の行列Ｇに限らない。初期化に用いる行列に、生成したい検査行列のｇｉｒｔｈ値ｇよりも短いループがなければ、どんな行列を初期化に用いてもよい。
また、ステップＳＴ３ｂとステップＳＴ３ｃに変更を加えて、追加する列ｖ、行ｃの組に別のどんな制限を加えてもよい。例えば、検査行列の左側ｍ×ｍ部分行列をＬＤＧＭ構造にするのであれば、その部分に１が付加されないようにしてもよい。
また、初期化に用いる行列が、生成したい検査行列のｇｉｒｔｈ値ｇよりも短いループがなければ、どんな行列でもよく、１を付加する部分にどんな制限を加えてもよいということは、本実施の形態で示したＬＤＧＭ構造の検査行列生成以外にも用いることができる。例えば、既に存在する検査行列に対し、行数または列数を増加させるのにも用いることができる。
【００４１】
以上説明したように、実施の形態３の検査行列生成方法によれば、実施の形態１の初期化ステップに代えて、生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇを設定し、検査行列Ｈの部分行列を２重対角構造に初期化し、初期化した検査行列Ｈの最短経路長を算出する第２の初期化ステップとし、かつ、実施の形態１の最短経路長判定ステップに代えて、２重対角構造とした列以外のうちで、最短経路長がｇ−１以上の変数ノードと検査ノードの組が存在するかを調べる第２の最短経路長判定ステップとしたので、ＬＤＰＣ符号の符号化を効率的に行うことができる。
【００４２】
また、実施の形態３の検査行列生成方法によれば、実施の形態２の初期化ステップに代えて、生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇ、列重み、行重みを設定し、検査行列Ｈの部分行列を２重対角構造に初期化し、初期化した検査行列Ｈの最短経路長を算出する第３の初期化ステップとし、かつ、実施の形態２の最短経路長判定ステップに代えて、２重対角構造とした列以外のうちで、最短経路長がｇ−１以上の変数ノードと検査ノードの組で、列重みと行重みが設定値に満たない組が存在するかを調べる第３の最短経路長判定ステップとしたので、ＬＤＰＣ符号の符号化を効率的に行うことができる。
【００４３】
実施の形態４．
本実施の形態では、ＱＣ  ＬＤＰＣ符号の検査行列生成法を示す。これまでの実施の形態と同様にして最短経路長を用いて、設定したｇｉｒｔｈの検査行列を生成する方法である。
まず、図１６に示すように、検査行列Ｈをブロックに分割したものを考える。各ブロックはｐ×ｐの正方部分行列である。列をブロックで分割したものを列ブロックとよび、同様に行をブロックで分割したものを行ブロックと呼ぶ。列ブロック数をＮとし、行ブロック数をＭとする。定義から明らかなように、検査行列の列数ｎはＮｐに等しく、行数ｍはＭｐに等しい。
【００４４】
本実施の形態の検査行列生成法は、まず検査行列Ｈを全０で初期化して、ｇｉｒｔｈが初期設定値ｇより小さくならないように、巡回置換行列を１つずつブロックに配置していく。ただし、全てのブロックに巡回置換行列を配置する必要はなく、配置しない場合はブロック内の要素は全て０とする。
ＱＣ  ＬＤＰＣ符号の検査行列は規則的な構造をしているが、最短経路長も規則的な構造を持っており、それを利用して検査行列を生成する。図１７の例で、列ブロックＡのノード０と行ブロックｂのノード０との間の最短経路長は３である。また、列ブロックＡのノード１と行ブロックｂのノード１との間の最短経路長、列ブロックＡのノード２と行ブロックｂのノード２との間の最短経路長も３となっている。つまり、列ブロックＡのノード０と行ブロックｂのノード０との間の最短経路長と、列ブロックＡのノードｉと行ブロックｂのノードｉとの間の最短経路長は等しい。この性質は、ブロックのサイズがより大きい場合にも成り立つ。
【００４５】
また、さらに一般的な性質があり、あるブロックＪとブロックＫ（ＪとＫは列ブロックでも行ブロックでもよい）のノード間の最短経路長には、図１８で示すように、ブロックＪのノードｊとブロックＫのノードｋとの値の最短経路長と、ブロックＪのノード０とブロックＫのノード（ｋ−ｊ  ｍｏｄ  ｐ）との間の最短経路長とが等しいという性質がある。つまり、ブロックＪとＫ間の最短経路長は、ブロックＪのノード０とブロックＫの各ノードｓ（０≦ｓ≦ｐ−１）との間のｐ通りを算出、および記憶すればよい。以下では、このときのブロックＫのノード番号ｓをブロックＪからＫのシフト量と呼ぶ（図１９を参照）。なお、ブロックの関係を逆にみた場合、すなわちブロックＫからブロックＪへのシフト量を考えた場合、ブロックＫからＪへのシフト量は（（ｐ−ｓ）  ｍｏｄ  ｐ）となることに注意が必要である。
【００４６】
次に、シフト量と巡回置換行列の関係を説明する。図２０のように列ブロックＶのノード０と行ブロックＣのノードｓの間に辺を貼り、さらに列ブロックＶのノードｉ（１≦ｉ≦ｐ−１）と行ブロックのノードｉ＋ｓ  ｍｏｄ  ｐに辺を貼ることは、図２１で示すように検査行列において列ブロックＶ、行ブロックＣの位置に巡回置換行列Ｉ（（ｐ−ｓ）  ｍｏｄ  ｐ）を配置することと同値である。
【００４７】
以上を踏まえ、図２２のように列ブロックＶと行ブロックＣとがシフト量ｓで最短経路長（ｇ−１）以上のときに着目する。列ブロックＶと行ブロックＣに図２０のようなシフト量ｓの辺を配置すると、長さ（ｇ−１）以下のループが生成されないように思われる。しかし、実は図２３のような他ブロックを経由する経路がある場合、長さ（ｇ−１）以下のループが生成されてしまうことがある。この現象は、列ブロックＶと行ブロックＣ間に貼った辺を２つ以上含むループに発生するため、このようなループを内部ループと呼ぶ。後に示す検査行列生成法では、長さ（ｇ−１）以下の内部ループの発生を排除できるよう設計した。
【００４８】
図２４のフローチャートに基づいて、ＱＣ  ＬＤＰＣ符号の検査行列生成法を示す。
ステップＳＴ１１（初期化ステップ）では初期化を行う。生成したい検査行列の小行列サイズｐ、列ブロック数Ｎ、行ブロック数Ｍ、列ブロックの列重みｗｖ（Ｖ）、行ブロックの列重みｗｖ（Ｃ）、ｇｉｒｔｈ  ｇを設定し、検査行列Ｈを全要素０で初期化する。列ブロック内の各列の列重みは全て等しいため、本実施の形態では各列ブロックＶに対して生成したい検査行列の列重みｗｖ（Ｖ）を設定するとしている。行ブロックの行重みに関しても同様である。
【００４９】
ステップＳＴ１２（最短経路長算出ステップ）では、Ｈに対応するタナーグラフにおいて、全てのブロック間、全てのシフト量の組み合わせの最短経路長を算出する。これまでの実施の形態と同様に、後のステップＳＴ１５（小行列配置ステップ）で辺が追加される前の最短経路長を用いて、現在の検査行列Ｈの最短経路長を算出する。ここでは、後のステップＳＴ１５で列ブロックＶ、行ブロックＣ間に辺が追加されるとして、ブロックＩ、Ｊ間のシフト量ｓの最短経路を算出する方法について示す。図２５に示すように、まず最短経路の候補となるのは、ブロックＶ、Ｃ間に辺を追加する前のシフト量ｓの最短経路である。次に候補となるのは、ブロックＩからＶの最短経路を通り、Ｖ，Ｃ間の辺を通り、ＣからＪへの最短経路を通る経路と、ブロックＩからＣへの最短経路を通り、Ｖ，Ｃ間の辺を通って、ＶからＪへの最短経路を通る経路である。
【００５０】
今算出したいのは、ブロックＩからＪへのシフト量ｓの最短経路であるから、各経路のシフト量とＶ、Ｃ間のシフト量を考慮し、最終的にＩからＪへのシフト量ｓとなる経路を全て扱う必要がある。即ち、実施の形態４の最短経路演算方法では次の（ｉ）〜（ｉｉｉ）となる。
（ｉ）ブロックＶ，Ｃ間に辺を追加する前のシフト量ｓの最短経路長
（ｉｉ）辺追加前のｉからｖへのシフト量ａの最短経路長＋１＋辺ｖｃ追加前のｊからｃへのシフト量ｂの最短経路長（ｓ＝ａ＋ｔ＋ｂ  ｍｏｄ  ｐとなる全てのａ、ｂの組）
（ｉｉｉ）辺追加前のｉからｃへのシフト量ｃの最短経路長＋１＋辺ｖｃ追加前のｖからｊへのシフト量ｄの最短経路長（ｓ＝ｃ−ｔ＋ｄ  ｍｏｄ  ｐとなる全てのｃ、ｄの組）
【００５１】
上記の（ｉｉ）と（ｉｉｉ）は、それぞれｐ通りあるが、これら全ての場合の経路長を算出し、（ｉ）とも比較して最短となるものを最短経路長に採用する。なお、上記操作を行って得られた最短経路長は内部ループを通る最短経路が考慮されていない。つまり、ブロックＩ→Ｖ→Ｃ→Ｖ→Ｃ→Ｖ→Ｃ→Ｊと通る経路である。このような経路も考慮に入れた最短経路は、上記操作（ｉ）〜（ｉｉｉ）を全てのブロックＩ、Ｊ、シフト量ｓの組に対し行った後、さらに同様の操作をｐ回繰り返せば算出することができる。ただし、実際にはｐ回の繰り返しは必要ない。本ステップＳＴ１２は、長さ（ｇ−１）以下の最短経路を発見できればよいため、高々ｇ／２回の繰り返しを行えばよい（ｇの値によって、必要な最小繰り返し回数は異なるが、ｇがどの値でもｇ／２で十分である）。
【００５２】
図２６は、このような最短経路演算方法を実現する実施の形態４の最短経路演算装置を示す構成図である。図中の第１の最短経路算出部１１は、上記（ｉ）のブロックＶ，Ｃ間に辺を追加する前のシフト量ｓの最短経路長を求める演算部であり、第２の最短経路算出部１２は、上記（ｉｉ）の辺追加前のｉからｖへのシフト量ａの最短経路長＋１＋辺ｖｃ追加前のｊからｃへのシフト量ｂの最短経路長を求める演算部、第３の最短経路算出部１３は、上記（ｉｉｉ）の辺追加前のｉからｃへのシフト量ｃの最短経路長＋１＋辺ｖｃ追加前のｖからｊへのシフト量ｄの最短経路長を求める演算部である。また、最短経路判定部１４は、第１の最短経路算出部１１〜第３の最短経路算出部１３で求めた経路のうち、最も短い経路を選択する処理を複数回繰り返すことにより、ノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する演算部である。
【００５３】
また、図２６に示した最短経路演算装置においても、実施の形態１の最短経路演算装置と同様にコンピュータを用いて実現され、第１の最短経路算出部１１〜最短経路判定部１４の各機能に対応したソフトウェアと、これらのソフトウェアを実行するためのＣＰＵやメモリといったハードウェアから構成されている。あるいはこれら機能部の一部または全部を専用のハードウェアを用いて実現してもよい。
【００５４】
図２４に戻り、ステップＳＴ１３（最短経路長判定ステップ）では、最短経路長が（ｇ−１）以上の列ブロックＶと行ブロックＣ、シフト量ｓの組のうち、Ｖの列重みがｗｖ（Ｖ）未満でかつ、Ｃの行重みがｗｃ（Ｃ）未満の組が存在するかを判定する。全ての組で最短経路長が（ｇ−１）未満の場合、どのブロックに小行列を配置しても長さｇ未満のループが発生するため、検査行列生成失敗でフローチャートは終了する。そうでない場合には、ステップＳＴ１４（内部ループ判定ステップ）に進む。
ステップＳＴ１４では、ステップＳＴ１３の条件を満たす列ブロックＶ、行ブロックＣ、シフト量ｓの組に対して、ＶからＣへシフト量ｓの辺を配置した場合に長さ（ｇ−１）以下の内部ループが発生するかの判定を行う。もしステップＳＴ１３の条件を満たす全ての組で発生する場合には、どのブロックに小行列を配置しても長さｇ未満のループが発生するということであり、検査行列生成失敗でフローチャートは終了する。なお、内部ループの長さは必ず６以上となり、ｇ＝６と設定している場合には本ステップは必要ない。
【００５５】
長さ（ｇ−１）以下の内部ループ発生を判定するには、図２７のように、列ブロックＶと行ブロックＣ間にシフト量ｓの辺を１つ配置し、列ブロックＶと行ブロックＣ内のノード間の最短経路長を実施の形態１の最短経路演算方法を用いて算出する。シフト量ｓの関係にあり、辺を追加していないノード間の最短経路長が（ｇ−１）未満であれば、長さ（ｇ−１）以下の内部ループが発生することになる。もしシフト量ｓの関係にあるノード間の最短経路長が（ｇ−１）以上であれば、さらに１つ辺を追加し、同様に最短経路長を算出する。この操作は繰り返し行う必要があり、繰り返し回数はｇ／２回である。ただし、必要最小限の繰り返し回数はｇの値により、ｇ／２より小さくてもよいが、ｇの値によらずｇ／２回行えば十分である。なお、１つの列ブロックＶ、行ブロックＣ、シフト量ｓの組に対して判定が終わったら、本ステップで貼った辺を取り除き、最短経路長も本ステップ前の状態に戻す。
【００５６】
ステップＳＴ１５では、ステップＳＴ１４で内部ループが発生しないと判定された組を１つ選び、小行列を検査行列Ｈの当該ブロックに配置する。ステップＳＴ１６（重み判定ステップ）では、検査行列Ｈの全ての列ブロックＶの列重みがｗｖ（Ｖ）に等しいかを判定し、等しければ検査行列Ｈを出力して終了する。等しくなければステップＳＴ１２に戻る。
【００５７】
ステップＳＴ１４における内部ループ発生判定の計算時間を削減する別の方法を説明する。ただし、本方法では設定したｇの値ごとに個々の計算が必要であり、またｇの値が大きいと必ずしも計算時間の削減とならない。
まずｇ＝８の場合について説明する。ｇ＝８では、長さ６の内部ループが発生しうるかを判定すればよい。長さ６のループは、図２８のように列ブロックどうし、行ブロックどうしのノードをそれぞれ結ぶ長さ２の経路（長さは必ず２以上になる）と、列ブロックと行ブロックの間に貼られる２辺からなる。列ブロックどうし、行ブロックどうしのノードを結ぶ経路の最短経路長は既にわかっているから、このようなループを探すことは容易である。
【００５８】
一方、ｇ＝１０の場合、長さ８以下のループとして可能性があるのは、図２８のパターンに加えて、図２９のパターンがある。まず、図２８のパターンについて説明する。図２８では、列ブロックどうし、行ブロックどうしのノードを結ぶ経路の長さを２としているが、この２つの経路のうち片方が４の場合に長さが８のループとなる。このパターンのループで、長さ８以下のものが存在するかを調べる。次に、図２９のパターンであるが、列ブロックＶと行ブロックＣとを、他ブロックを経由して結ぶ経路２つ（これらの長さは必ず３以上となる）と、列ブロックＶと行ブロックＣとを結ぶ２辺からなるループを問題とする。列ブロックＶと行ブロックＣとを、他ブロックを経由して結ぶ経路が長さ３のときに、長さ８のループとなるため、そのようなループがあるかを判定する。
ｇ＞１０の場合も、ループが発生しうるパターンを考えることで同様に判定可能であるが、パターン数が多くなるため上のステップＳＴ１４と変わらない演算量となってしまう。
【００５９】
本実施の形態によれば、指定したｇｉｒｔｈのＱＣ  ＬＤＰＣ符号の検査行列を構成でき、また小行列サイズｐには制限がない。従来技術では小行列サイズｐを素数とする必要があり、列数や行数が通信システムの要求に合わない場合には、まず要求に近い検査行列を生成し、その後列数と行数を調節する必要があった。しかし、本発明の方法では列数と行数を従来技術よりも自由度高く設定可能であり、列数と行数の調節による復号性能劣化を抑えることができる。
【００６０】
また、本実施の形態では、実施の形態１〜３とは異なり、検査行列Ｈへの要素１の付加を小行列単位で行っており、フローチャートにおける繰り返しの回数が削減される。そのため、実施の形態１〜３の検査行列生成方法よりも短い時間で検査行列が生成できる。
【００６１】
さらに、本実施の形態では、非特許文献１で示されているような検査行列の構造以外でも生成可能である。例えば、図３のようにＩ（０）を並べる必要がない。また、１つのブロックに最大１つの小行列が配置された検査行列だけでなく、図３０のように１つのブロックに複数の小行列が配置された検査行列も生成することができる。それにはステップＳＴ１３の「まだ小行列を配置していない」という制限を削除し、新たなステップＳＴ１３として置き換えればよい。このような検査行列の方がＬＤＰＣ符号間の最小距離の上界が大きいと、一部の符号化率、列重み分布では示されている。なお、このような変更を加えた場合、ステップＳＴ１４をｇ＝８、１０の場合に簡易的に行う前記の方法は適用できない。
【００６２】
また、実施の形態３と同様にして、ステップＳＴ１１の検査行列の初期化を全要素０とするのではなく、長さｇ未満のループのない行列で初期化してもよい（第４の初期化ステップおよび第４の最短経路長判定ステップ）。ただし、ブロックサイズ、列ブロック数、行ブロック数がＨと同一の行列でなければならず、また小行列は巡回置換行列でなければならない。また、初期化する行列の列ブロック、行ブロック、シフト量の全組み合わせについて最短経路長を求めておく必要があるが、それにはステップＳＴ１２の方法を用いればよい。
また、小行列を配置したくないブロックには、配置されない制限をかけることができる。ステップＳＴ１３の判定を、小行列を配置したくないブロックに対しては行わなければよい。
一例として、図３１の行列で初期化を行い、２重対角構造に似た検査行列を生成することができる。図中のＩ（ａ）、Ｉ（ｂ）は小行列であり、当該ブロックに小行列が配置されていることを示す。ここで、ａとｂの値は等しくても、異なっていてもよい。また、０は当該ブロックに小行列が配置されていないことを示しており、空欄のブロックは未定のブロックである。小行列Ｉ（ａ）とＩ（ｂ）が既に配置されているブロックと０で示されたブロックには小行列を配置しないとステップＳＴ１３で制限をして、本方法を実施すれば、空欄のブロックにのみ小行列を配置される。
【００６３】
さらに、生成したい列重みと行重みを設定せず、ステップＳＴ１３とステップＳＴ１４での判定でのみ検査行列生成を終了してもよい。それには、ステップＳＴ１１において列ブロックの列重みｗｖ（Ｖ）、行ブロックの行重みｗｃ（Ｃ）を設定せず、ステップＳＴ１３の列重み、行重みに関する判定条件を削除し、さらにステップＳＴ１６を削除して、ステップＳＴ１５の次にステップＳＴ１２を行うようにすればよい。
【００６４】
なお、本検査行列生成法において、終了条件は自由に設定してよい。本方法で生成中の検査行列Ｈのｇｉｒｔｈは常にｇ以上であることが保証されており、ステップＳＴ１６においてさらに終了条件を加えてもよいし、ステップＳＴ１６のかわりに別の終了条件を加えてもよい。いずれにしても、生成される検査行列のｇｉｒｔｈはｇ以上となる。
【００６５】
以上説明したように、実施の形態４の最短経路演算装置によれば、ブロックに分割されたグラフにおいて、ブロックＩ，Ｊ内にある２つのノードｉ，ｊの間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算装置であって、グラフのブロックＶとブロックＣとを結ぶ辺を複数付加したときに、辺を付加する前のノードｉ、ｊ間の最短経路を求める第１の最短経路算出部と、グラフのブロックＶとブロックＣとを結ぶ辺を複数付加したときに、ノードｉからブロックＶ内のいずれかのノードへの最短経路を通ってブロックＶとブロックＣとの間の辺を経由しブロックＣからノードｊへの最短経路を通る経路を求める第２の最短経路算出部と、グラフのブロックＶとブロックＣとを結ぶ辺を複数付加したときに、ノードｉからブロックＣ内のいずれかのノードへの最短経路を通ってブロックＣとブロックＶとの間の辺を経由しブロックＶからノードｊへの最短経路を通る経路を求める第３の最短経路算出部と、第１の最短経路算出部、第２の最短経路算出部および第３の最短経路算出部が求めた３つの経路のうちで、最も短い経路を選択する処理を繰り返すことによりノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路判定部とを備えたので、ノード間の最短経路を容易に求めることができる。
【００６６】
また、実施の形態４の最短経路演算方法によれば、最短経路演算装置を用いて、ブロックに分割されたグラフにおいて、ブロックＩ，Ｊ内にある２つのノードｉ，ｊの間の最短経路またはその長さのうち少なくともいずれかの値を算出する最短経路演算方法であって、グラフのブロックＶとブロックＣとを結ぶ辺を複数付加したときに、辺を付加する前のノードｉ、ｊ間の最短経路と、ノードｉからブロックＶ内のいずれかのノードへの最短経路を通ってブロックＶとブロックＣとの間の辺を経由しブロックＣからノードｊへの最短経路を通る経路と、ノードｉからブロックＣ内のいずれかのノードへの最短経路を通ってブロックＣとブロックＶとの間の辺を経由しブロックＶからノードｊへの最短経路を通る経路のうち、最も短い経路を選択する処理を複数回繰り返すことによりノードｉ，ｊ間の最短経路またはその長さのうち少なくともいずれかの値を算出するようにしたので、ノード間の最短経路を容易に求めることができる。
【００６７】
また、実施の形態４の検査行列生成方法によれば、生成する検査行列Ｈにおける小行列サイズ、列ブロック数、行ブロック数、ｇｉｒｔｈ  ｇ、列重み、行重みを設定し、検査行列Ｈの要素を全て０にする初期化ステップと、検査行列Ｈに対応するタナーグラフにおいて最短経路演算方法を用いてブロック間およびシフト量の最短経路長を算出する最短経路長算出ステップと、最短経路長がｇ−１以上の列ブロック、行ブロック、シフト量の組で、列重みと行重みが設定値に満たない組が存在するかを調べる最短経路長判定ステップと、最短経路長判定ステップで存在を判定した列ブロック、行ブロック、シフト量の組で、ブロックに長さｇ−１以下のループが発生しないかを判定する内部ループ判定ステップと、内部ループ判定ステップで存在を判定した列ブロック、行ブロック、シフト量の組の１つを選択しＨのブロックにシフト量から算出した小行列を配置する小行列配置ステップと、検査行列Ｈの列重みと行重みが設定値に満たしたかを調べる重み判定ステップと、最短経路長算出ステップと最短経路長判定ステップと内部ループ判定ステップと小行列配置ステップと重み判定ステップとを繰り返してパリティ検査行列を生成するようにしたので、ＬＤＰＣ符号の復号性能の劣化を防ぐことができ、復号性能の高いＬＤＰＣ符号の検査行列を生成することができると共に、短い時間で検査行列を生成することができる。
【００６８】
また、実施の形態４の検査行列生成方法によれば、内部ループ判定ステップを、実施の形態１の最短経路演算方法を用いて最短経路長を算出することによって、初期化ステップで設定したｇｉｒｔｈ  ｇの値より短い内部ループ発生を判定するようにしたので、内部ループ発生の判定を確実に行うことができる。
【００６９】
また、実施の形態４の検査行列生成方法によれば、内部ループ判定ステップを、初期化ステップで設定したｇｉｒｔｈ  ｇよりも短いループが発生しうるパターン全てに対し調べるようにしたので、内部ループ発生判定の計算時間の短縮を図ることができる。
【００７０】
また、実施の形態４の検査行列生成方法によれば、初期化ステップに代えて、生成する検査行列Ｈの列数、行数、ｇｉｒｔｈ  ｇ、列重み、行重みを設定し、検査行列Ｈの部分行列を２重ブロック対角構造に初期化し、初期化した検査行列Ｈのブロック間およびシフト量の最短経路長を算出する第４の初期化ステップとし、かつ、最短経路長判定ステップに代えて、２重ブロック対角構造とした列のうち一部もしくは全てを除いた列に対し、最短経路長がｇ−１以上の変数ノードと検査ノードの組で、列重みと行重みが設定値に満たない組が存在するかを調べる第４の最短経路長判定ステップとしたので、ＬＤＰＣ符号の符号化を効率的に行うことができる。
【００７１】
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【００７２】
１，１１  第１の最短経路算出部、２，１２  第２の最短経路算出部、３，１３  第３の最短経路算出部、４，１４  最短経路判定部。
【図１】
0005542634.tif 000002
【図２】
0005542634.tif 000003
【図３】
0005542634.tif 000004
【図４】
0005542634.tif 000005
【図５】
0005542634.tif 000006
【図６】
0005542634.tif 000007
【図７】
0005542634.tif 000008
【図８】
0005542634.tif 000009
【図９】
0005542634.tif 000010
【図１０】
0005542634.tif 000011
【図１１】
0005542634.tif 000012
【図１２】
0005542634.tif 000013
【図１３】
0005542634.tif 000014
【図１４】
0005542634.tif 000015
【図１５】
0005542634.tif 000016
【図１６】
0005542634.tif 000017
【図１７】
0005542634.tif 000018
【図１８】
0005542634.tif 000019
【図１９】
0005542634.tif 000020
【図２０】
0005542634.tif 000021
【図２１】
0005542634.tif 000022
【図２２】
0005542634.tif 000023
【図２３】
0005542634.tif 000024
【図２４】
0005542634.tif 000025
【図２５】
0005542634.tif 000026
【図２６】
0005542634.tif 000027
【図２７】
0005542634.tif 000028
【図２８】
0005542634.tif 000029
【図２９】
0005542634.tif 000030
【図３０】
0005542634.tif 000031
【図３１】
0005542634.tif 000032