(57)【特許請求の範囲】
【請求項１】
ＬＤＰＣ符号に基づく符号データに対して繰り返し復号を実施する誤り訂正復号器において、
前記繰り返し復号の実施回数が所定数に達しても符号語が得られない場合に、パリティを満たさないチェックノードに繋がっている変数ノードを列挙した反転ノードリストを生成する生成部と、
前記反転ノードリストに列挙された変数ノードの中から反転対象の変数ノードを選択し、前記反転対象の変数ノードの事後尤度の正負を反転することによって前記反転対象の変数ノードの入力尤度を一時的に更新する反転処理を行う反転制御部と、
前記反転処理の実施後に、各入力尤度及び各事前尤度に基づいて各外部値を繰り返し生成する行処理部と、
前記各入力尤度及び前記各外部値に基づいて一時推定語を生成し、前記一時推定語にパリティ検査を行い、全てのチェックノードがパリティを満たす場合に前記一時推定語を前記符号語と判定するパリティ検査部と、
前記一時推定語について少なくとも１つのチェックノードがパリティを満たさない場合に、パリティを満たさないチェックノードから変数ノードへの外部値の絶対値を増幅する増幅処理を行う増幅制御部と、
前記増幅処理の実施後に、前記各外部値に基づいて前記各事前尤度を更新する列処理部と
を具備する誤り訂正復号器。
【請求項２】
前記反転制御部は、前記反転対象の変数ノードに対して反転処理を行ってから所定回数以上前記パリティ検査が繰り返され、かつ、前回のパリティ検査に比べてパリティを満たさないチェックノードの数が増大した場合に、前記反転対象の変数ノードの入力尤度を初期値にリセットし、前記反転ノードリストに列挙された変数ノードの中から未反転の変数ノードを選択して前記反転処理を行う、請求項１の誤り訂正復号器。
【請求項３】
前記反転制御部は、事後尤度の絶対値の昇順に前記反転対象の変数ノードを選択する、請求項１の誤り訂正復号器。
【請求項４】
前記増幅制御部は、前記パリティを満たさないチェックノードの数が所定個数未満であれば前記増幅処理を実施し、そうでなければ前記増幅処理を省略する、請求項１の誤り訂正復号器。
【請求項５】
前記反転制御部は、前記反転対象の変数ノードの事後尤度の正負を反転し、設定可能な最大の絶対値を乗じて得られる値を前記反転対象の変数ノードの入力尤度に代入することによって前記反転対象の変数ノードの入力尤度を一時的に更新する反転処理を行う、請求項１の誤り訂正復号器。
【請求項６】
前記反転制御部は、列重みの昇順に前記反転対象の変数ノードを選択する、請求項１の誤り訂正復号器。
【請求項７】
前記符号データを記憶する半導体メモリ部と、
前記半導体メモリ部から前記符号データを受ける読み出し部と、請求項１記載の誤り訂正復号器とを含むコントローラと
を具備する、記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、低密度パリティ検査（ＬＤＰＣ；Ｌｏｗ  Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ）符号を用いた誤り訂正に関する。
【背景技術】
【０００２】
情報を送信する場合、情報を記録する場合などに、情報に誤り訂正符号が付加されることがある。誤り訂正符号が付加された情報は、受信機、メモリコントローラなどに組み込まれた誤り訂正復号器によって復号される。誤り訂正符号を利用することにより、受信された情報、読み出された情報などにある程度のビット誤りが含まれていても、ビット誤りを訂正して正しい情報を復元できる。
【０００３】
誤り訂正符号の一種としてＬＤＰＣ符号が知られている。ＬＤＰＣ符号は、優れた誤り訂正能力を持つ。一方、ＬＤＰＣ符号に関して、復号前ビット誤り率がある程度低い領域において復号誤り率が殆ど低減しなくなるエラーフロアと呼ばれる現象が知られている。エラーフロアは、ＬＤＰＣ符号の繰り返し復号の過程において、この繰り返し復号が適切に機能しなくなるＴｒａｐｐｉｎｇ  Ｓｅｔと呼ばれるエラーイベントに起因して起こる。エラーフロア領域における復号誤り率を低減させることにより、ＬＤＰＣ符号は更に優れた誤り訂正能力を発揮できる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Jingyu Kang; Li Zhang; Zhi Ding; Shu Lin "A Two-Stage Iterative Decoding of LDPC Codes for Lowering Error Floors" Global Telecommunications Conference, 2008. IEEE, pp.1-4
【発明の概要】
【発明が解決しようとする課題】
【０００５】
実施形態は、ＬＤＰＣ符号の誤り訂正能力を向上させることを目的とする。
【課題を解決するための手段】
【０００６】
実施形態によれば、誤り訂正復号器は、ＬＤＰＣ符号に基づく符号データに対して繰り返し復号を実施する。誤り訂正復号器は、生成部と、反転制御部と、行処理部と、パリティ検査部と、増幅制御部と、列処理部とを含む。生成部は、繰り返し復号の実施回数が所定数に達しても符号語が得られない場合に、パリティを満たさないチェックノードに繋がっている変数ノードを列挙した反転ノードリストを生成する。反転制御部は、反転ノードリストに列挙された変数ノードの中から反転対象の変数ノードを選択し、反転対象の変数ノードの事後尤度の正負を反転することによって反転対象の変数ノードの入力尤度を一時的に更新する反転処理を行う。行処理部は、反転処理の実施後に、各入力尤度及び各事前尤度に基づいて各外部値を繰り返し生成する。パリティ検査部は、各入力尤度及び各外部値に基づいて一時推定語を生成し、一時推定語にパリティ検査を行い、全てのチェックノードがパリティを満たす場合に一時推定語を符号語と判定する。増幅制御部は、一時推定語について少なくとも１つのチェックノードがパリティを満たさない場合に、パリティを満たさないチェックノードから変数ノードへの外部値の絶対値を増幅する増幅処理を行う。列処理部は、増幅処理の実施後に、各外部値に基づいて各事前尤度を更新する。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態に係る誤り訂正復号器を例示するブロック図。
【図２】図１のＬＤＰＣ復号部を例示するブロック図。
【図３】検査行列の説明図。
【図４】図３の検査行列のタナ−グラフ。
【図５】パリティ検査結果の説明図。
【図６】図１の後処理部を例示するブロック図。
【図７】図１の誤り訂正復号器の動作を例示するフローチャート。
【図８】図２のＬＤＰＣ復号部の動作を例示するフローチャート。
【図９】図６の後処理部の動作を例示するフローチャート。
【図１０】繰り返し中止条件の説明図。
【図１１】第２の実施形態に係る記憶装置を例示するブロック図。
【図１２】第３の実施形態に係る受信機を例示するブロック図。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、実施形態について説明する。  
（第１の実施形態）  
第１の実施形態に係る誤り訂正復号器は、図１に示されるように、ＬＤＰＣ復号部１１０、後処理判定部１２０、反転ノードリスト生成部１３０及び後処理部１４０を含む。
【０００９】
ＬＤＰＣ復号部１１０は、前段の信号処理部（図示しない）によって得られた符号データ（例えば、データフレーム）の尤度Ｆｎを入力する。ＬＤＰＣ復号部１１０は、いわゆるメッセージパッシング復号アルゴリズム（例えば、Ｓｕｍ−ＰｒｏｄｕｃｔアルゴリズムまたはＭｉｎ−Ｓｕｍアルゴリズム復号法など）に基づいて、符号データの繰り返し復号を実施する。
【００１０】
ＬＤＰＣ復号部１１０は、繰り返し復号の過程において符号データの復号に成功した場合（即ち、全てのチェックノードがパリティを満たす場合）には、復号結果（即ち、符号語）を外部（例えば、後段の信号処理部）に出力し、復号は終了する。一方、ＬＤＰＣ復号部１１０は、復号に失敗した場合（具体的には、復号を所定の最大繰り返し回数だけ実施しても符号語が得られない場合）に、パリティを満たさないチェックノードの数を示す情報を後処理判定部１２０に与える。また、ＬＤＰＣ復号部１１０は、復号に失敗した場合（或いは、後処理判定部１２０が後処理の実施を判定した場合）に、パリティを満たさないチェックノードを識別する情報（例えば、インデックス）と、ＬＤＰＣ検査行列（以降の説明では、単に検査行列と称される）の情報と、各変数ノードの事後尤度の正負を示す情報とを反転ノードリスト生成部１３０に与える。
【００１１】
ＬＤＰＣ復号部１１０は、図２に示されるように、入力尤度保持部１１１、行処理部１１２、列処理部１１３、パリティ検査部１１４及び検査行列保持部１１５を含む。
【００１２】
入力尤度保持部１１１は、前段の信号処理部によって得られた符号データの尤度Ｆｎを入力する。入力尤度保持部１１１は、符号データに対するＬＤＰＣ復号部１１０の繰り返し復号が完了するまで、入力尤度Ｆｎを保持する。この符号データは、検査行列保持部１１５が保持する検査行列によって定義されるＬＤＰＣ符号である。即ち、この符号データは、いわゆる組織符号であり、データビットとパリティビットとで構成される。
【００１３】
一例として、４つのデータビットＣ１，・・・，Ｃ４と、８つのパリティビットＣ５，・・・，Ｃ１２とで構成される符号データを仮定する。このとき、入力尤度保持部１１１は、各ビットＣ１，・・・，Ｃ１２に対応する入力尤度Ｆ１，・・・，Ｆ１２を保持する。これら入力尤度Ｆ１，・・・，Ｆ１２は、行処理部１１２及びパリティ検査部１１４によって必要に応じて読み出される。
【００１４】
ここで、尤度とは、下記の数式（１）に示されるように、データビットが「１」である確率Ｐ（ｘ＝１）に対するデータビットが「０」である確率Ｐ（ｘ＝０）の比の対数値（自然対数）である。また、以降の説明において、事前尤度とは事前確率の尤度を意味し、事後尤度とは事後確率の尤度を意味する。
【数１】
0005132758.tif 000002
【００１５】
検査行列保持部１１５は、Ｍ行Ｎ列の検査行列Ｈの情報を予め保持している。検査行列Ｈは、符号化側と復号化側との間で共通である。検査行列Ｈ（の情報）は、行処理部１１２、列処理部１１３及びパリティ検査部１１４によって必要に応じて読み出される。
【００１６】
一例として、Ｍ＝８、Ｎ＝１２の場合の検査行列Ｈを図３に示す。図３の８行１２列の検査行列Ｈによって定義される符号データの符号長は１２ビットであり、この符号データのパリティ長は８ビットである。検査行列Ｈの第ｍ行に含まれる「１」の数は第ｍ（１以上Ｍ以下の整数）行の行重みと呼ばれる。また、検査行列Ｈの第ｎ（１以上Ｎ以下の整数）列に含まれる「１」の数は第ｎ列の列重みと呼ばれる。尚、非正則ＬＤＰＣ符号は、その検査行列Ｈの行重み及び列重みが非一様である。本実施形態は正則ＬＤＰＣ符号及び非正則ＬＤＰＣ符号のいずれにも適用可能である。
【００１７】
更に、以降の説明では、第ｍ行目に含まれる「１」の列位置を示す列インデックスの集合はＡ（ｍ）、第ｎ列目に含まれる「１」の行位置を示す行インデックスの集合はＢ（ｎ）と呼ばれる。図３の例であれば、Ａ（２）＝｛３，５，９｝、Ｂ（３）＝｛２，７｝である。ＬＤＰＣ符号の検査行列Ｈは、行列のサイズに対して「１」の総数が非常に少ない（「１」の密度が低い）ので、行列中の「１」の位置情報のみで検査行列Ｈの情報を表現することにより検査行列Ｈの情報量を節約できる。即ち、検査行列保持部１１５の回路規模を抑えることができる。
【００１８】
図３の検査行列Ｈは、図４に示されるように、タナ−グラフによって表現することもできる。タナ−グラフは、２種類のノードグループで構成される。具体的には、タナ−グラフは、変数ノードグループ（図４の変数ノードＶ１，・・・，Ｖ１２）及びチェックノードグループ（図４のチェックノードＰ１，・・・，Ｐ８）で構成される。検査行列Ｈの第ｍ行第ｎ列の要素が「１」であるならば、チェックノードＰｍと変数ノードＶｎとが辺（エッジ）で結ばれる。
【００１９】
行処理部１１２は、入力尤度保持部１１１から入力尤度Ｆｎを読み出し、検査行列保持部１１５から検査行列Ｈの情報を読み出し、列処理部１１３から事前尤度βｍｎを入力する。行処理部１１２は、これらを用いて外部値αｍｎを生成する。具体的には、行処理部１１２は、下記の数式（２）に従って、外部値αｍｎを生成する。行処理部１１２は、生成した外部値αｍｎを列処理部１１３及びパリティ検査部１１４に与える。
【数２】
0005132758.tif 000003
【００２０】
尚、数式（２）において、事前尤度βｍｎは、一回目の復号では全て０に設定されるが、二回目以降の復号では列処理部１１３からフィードバックされる最新の値が設定される。また、数式（２）における関数ｓｉｇｎ（ｘ）及び関数ｆ（ｘ）は、下記の数式（３）及び数式（４）で夫々表される。尚、行処理部１１２は、ｍｉｎ−ｓｕｍアルゴリズムを利用してもよい。
【数３】
0005132758.tif 000004
【００２１】
【数４】
0005132758.tif 000005
【００２２】
パリティ検査部１１４は、検査行列保持部１１５から検査行列Ｈの情報を読み出し、行処理部１１２から外部値αｍｎを入力し、入力尤度保持部１１１から入力尤度Ｆｎを読み出す。パリティ検査部１１４は、これらに基づいて一時推定語を生成する。具体的には、パリティ検査部１１４は、一時推定語の第ｎ番目の要素を下記の数式（５）に従って生成する。
【数５】
0005132758.tif 000006
【００２３】
そして、パリティ検査部１１４は、生成した一時推定語が、検査行列Ｈによって定義される符号語であるか否かを検査する。具体的には、パリティ検査部１１４は、下記の数式（６）に従ってパリティ検査ベクトルＵを計算する。
【数６】
0005132758.tif 000007
【００２４】
パリティ検査ベクトルＵの各要素は、対応するチェックノードがパリティを満たすか否か（対応するチェックノードのパリティが正しいか否か）を示す。具体的には、パリティ検査ベクトルＵの第ｍ番目の要素が「０」であれば第ｍ番目のチェックノードＰｍはパリティを満たす。一方、パリティ検査ベクトルＵの第ｍ番目の要素が「１」であれば第ｍ番目のチェックノードＰｍはパリティを満たさない。また、パリティ検査ベクトルＵに含まれる「１」の総数は、パリティを満たさないチェックノードの数と等しい。
【００２５】
例えば、図５に示されるように、変数ノードＶ４，Ｖ５，Ｖ６，Ｖ７，Ｖ８においてビット誤りが生じると、パリティ検査ベクトルＵ＝［１１００００００］というパリティ検査結果が得られる。尚、図５は、ビット誤りが生じている変数ノードＶ４，Ｖ５，Ｖ６，Ｖ７，Ｖ８を黒い丸印で、これら変数ノードＶ４，Ｖ５，Ｖ６，Ｖ７，Ｖ８と任意のチェックノードとを繋ぐ辺を破線で、パリティを満たさないチェックノードを黒い四角印で夫々表している。
【００２６】
パリティ検査ベクトルＵが零ベクトルとなることは、全てのチェックノードがパリティを満たすことを意味する。パリティ検査ベクトルＵが零ベクトルとなれば、パリティ検査部１１４は一時推定語を符号語として外部に出力する。一方、パリティ検査ベクトルＵが零ベクトルでなければ、後述するように、予め定められる最大繰り返し回数Ｌｍａｘ１を上限として外部値αｍｎの更新と、更新後の外部値αｍｎに基づくパリティ検査と、パリティを満たさない場合には事前尤度βｍｎの更新とが繰り返される。パリティ検査部１１４は、パリティ検査ベクトルＵが零ベクトルでなく、かつ、繰り返し回数Ｌ１が最大繰り返し回数Ｌｍａｘ１に達していなければ、例えば、列処理部１１３に対して列処理の実施を指示する。尚、繰り返し回数Ｌ１は、例えば行処理部１１２によってカウント（インクリメント）される。
【００２７】
パリティ検査部１１４は、パリティ検査ベクトルＵが零ベクトルでなく、かつ、繰り返し回数Ｌ１が最大繰り返し回数Ｌｍａｘ１に達した場合（即ち、復号が失敗した場合）に、パリティを満たさないチェックノードの数を示す情報を後処理判定部１２０に与える。また、パリティ検査部１１４は、復号が失敗した場合（或いは、後処理判定部１２０が後処理の実施を判定した場合）に、パリティを満たさないチェックノードを識別する情報と、検査行列の情報と、各変数ノードの事後尤度の正負を示す情報とを反転ノードリスト生成部１３０に与える。
【００２８】
列処理部１１３は、検査行列保持部１１５から検査行列Ｈの情報を読み出し、行処理部１１２から外部値αｍｎを入力する。列処理部１１３は、これらを用いて事前尤度βｍｎを計算する。具体的には、列処理部１１３は、下記の数式（７）に従って、事前尤度βｍｎを計算する。列処理部１１３は、計算した事前尤度βｍｎを行処理部１１２にフィードバックする。
【数７】
0005132758.tif 000008
【００２９】
後処理判定部１２０は、ＬＤＰＣ復号部１１０（パリティ検査部１１４）からパリティを満たさないチェックノードの数を示す情報を入力し、この数が所定の閾値Ｋよりも大きいか否かを判定する。後処理判定部１２０は、パリティを満たさないチェックノードの数が閾値Ｋよりも大きければ後処理の省略を判定し、そうでなければ後処理の実施を判定する。後処理判定部１２０は、後処理の省略を判定する場合には、例えば復号の失敗を示す情報を外部に出力し、復号は終了する。後処理判定部１２０は、後処理の実施を判定する場合には、例えば反転ノードリスト生成部１３０に対して反転ノードリストの生成を指示する。エラーフロアが発生しているときにはパリティを満たさないチェックノードの数が比較的少ない傾向にあるので、後処理判定部１２０は係る傾向を利用してエラーフロアが発生しているか否かを簡易に判定する。後述するように、後処理部１４０が行う後処理によってエラーフロア領域における誤りを効果的に訂正することができる。
【００３０】
反転ノードリスト生成部１３０は、ＬＤＰＣ復号部１１０（パリティ検査部１１４）からパリティを満たさないチェックノードを識別する情報と、検査行列の情報と、各変数ノードの事後尤度の正負を示す情報とを入力する。反転ノードリスト生成部１３０は、パリティを満たさないチェックノードに繋がっている変数ノードを識別する情報（例えば、変数ノードのインデックス）と、この変数ノードの事後尤度の正負を示す情報とを列挙した反転ノードリストを生成する。反転ノードリスト生成部１３０は、生成した反転ノードリストを後処理部１４０に与える。ここで、変数ノードＶｊの事後尤度Ｇｊは、下記の数式（８）を用いて算出することができる。
【数８】
0005132758.tif 000009
【００３１】
例えば、図５に示されるように、変数ノードＶ４，Ｖ５，Ｖ６，Ｖ７，Ｖ８（の一時推定語Ｃ４，Ｃ５，Ｃ６，Ｃ７，Ｃ８）においてビット誤りが生じていると、チェックノードＰ１，Ｐ２がパリティを満たさない。従って、反転ノードリスト生成部１３０は、チェックノードＰ１，Ｐ２に繋がっている変数ノードＶ１，Ｖ２，Ｖ３，Ｖ４，Ｖ５，Ｖ９のインデックスと、これら変数ノードＶ１，Ｖ２，Ｖ３，Ｖ４，Ｖ５，Ｖ９の事後尤度の正負ｓｉｇｎ（Ｇ１），ｓｉｇｎ（Ｇ２），ｓｉｇｎ（Ｇ３），ｓｉｇｎ（Ｇ４），ｓｉｇｎ（Ｇ５），ｓｉｇｎ（Ｇ９）を示す情報とを列挙した反転ノードリストを生成する。
【００３２】
後処理部１４０は、反転ノードリスト生成部１３０から反転ノードリストを入力する。後処理部１４０は、これらを用いて後述される後処理を実施する。後処理部１４０は、後処理の過程において符号データの復号に成功した場合には、復号結果（即ち、符号語）を外部に出力し、後処理は終了する。一方、後処理部１４０は、復号に失敗した場合（具体的には、後処理を終了しても符号語が得られない場合）には、例えば復号の失敗を示す情報を外部に出力し、復号は終了する。
【００３３】
後処理部１４０は、図６に示されるように、入力尤度保持部１４１、行処理部１４２、列処理部１４３、パリティ検査部１４４、検査行列保持部１４５、反転制御部１４６、増幅制御部１４７、繰り返し回数保持部１４８及び反転ノードリスト保持部１４９を含む。
【００３４】
尚、後処理部１４０及びＬＤＰＣ復号部１１０は、別個の機能部であってもよいし、統合された機能部であってもよい。例えば、入力尤度保持部１４１、行処理部１４２、列処理部１４３、パリティ検査部１４４及び検査行列保持部１４５は、後処理に先行する通常のＬＤＰＣ復号の実施中に、入力尤度保持部１１１、行処理部１１２、列処理部１１３、パリティ検査部１１４及び検査行列保持部１１５として夫々機能してもよい。また、ＬＤＰＣ復号部１１０は、典型的なＬＤＰＣ復号器と同一または類似の構成を備えているものの、実装時の制約次第で各機能部の構成が変更されてもよい。即ち、本実施形態は、任意のメッセージパッシング型のＬＤＰＣ復号器に対して適用され得る。
【００３５】
入力尤度保持部１４１は、入力尤度保持部１１１と同じ入力尤度Ｆｎを保持する。入力尤度保持部１４１は、符号データに対する後処理部１４０の後処理が完了するまで、入力尤度Ｆｎを保持する。入力尤度Ｆｎは、行処理部１４２によって必要に応じて読み出される。
【００３６】
検査行列保持部１４５は、検査行列保持部１１５と同じ検査行列Ｈの情報を保持している。検査行列Ｈ（の情報）は、行処理部１４２、列処理部１４３、パリティ検査部１４４及び増幅制御部１４７によって必要に応じて読み出される。
【００３７】
反転制御部１４６は、入力尤度保持部１４１から入力尤度Ｆｎを読み出し、繰り返し回数保持部１４８から繰り返し回数を読み出し、反転ノードリスト保持部１４９から反転ノードリストを読み出し、列処理部１４３から事前尤度を入力する。反転制御部１４６は、繰り返し回数に応じて異なる処理を行う。
【００３８】
繰り返し回数が初期値（例えば、「０」）である場合に、反転制御部１４６は全ての事前尤度βｍｎを「０」にリセットする。更に、反転制御部１４６は、反転ノードリストの中で反転処理を実施していない１つの変数ノードＶｊを選択する。反転制御部１４６は、反転対象の変数ノードＶｊの事後尤度の正負ｓｉｇｎ（Ｇｊ）を反転し、設定可能な最大の絶対値Ａｍａｘを乗じて得られる値を変数ノードＶｊの入力尤度Ｆｊに代入する。即ち、反転制御部１４６は、下記の数式（９）を演算し、入力尤度Ｆｊに正の最大尤度Ａｍａｘまたは負の最大尤度−Ａｍａｘを代入することにより、この入力尤度Ｆｊを一時的に更新する。
【数９】
0005132758.tif 000010
【００３９】
尚、Ａｍａｘの値は、後処理部１４０の設計（例えば、ビット分解能）によって変動するが、任意の値について本実施形態は適用可能である。また、反転制御部１４６は、数式（９）とは異なる反転処理を実施することもできる。例えば、反転制御部１４６は、入力尤度の正負を単に反転させるだけでもよいし、反転後に入力尤度の絶対値を最大値以外の値に調整してもよい。
【００４０】
また、反転制御部１４６は、直前に別の変数ノードＶｉについて反転処理を実施していた場合には、変数ノードＶｉの入力尤度Ｆｉを入力尤度保持部１４１から読み出した入力尤度Ｆｉ（即ち、初期値）にリセットする。反転制御部１４６は、入力尤度Ｆｎと、事前尤度βｍｎとを行処理部１４２に与える。反転制御部１４６は、入力尤度Ｆｎをパリティ検査部１４４に与える。
【００４１】
一方、繰り返し回数が初期値以外である場合に、反転制御部１４６は繰り返し回数が初期値であるときに反転処理を行った変数ノード（即ち、現行の反転対象の変数ノード）の入力尤度Ｆｊ（例えば、Ａｍａｘまたは−Ａｍａｘ）を維持する。反転制御部１４６は、入力尤度Ｆｎと事前尤度βｍｎとを行処理部１４２に与える。反転制御部１４６は、入力尤度Ｆｎをパリティ検査部１４４に与える。
【００４２】
反転制御部１４６が反転対象となる変数ノードの選択順は任意である。例えば、反転制御部１４６は、変数ノードのインデックスの昇順または降順に反転対象となる変数ノードを選択してもよいし、ランダムに反転対象となる変数ノードを選択してもよい。また、反転制御部１４６は、事後尤度の絶対値の昇順に反転対象となる変数ノードを選択してもよい。一般に、事後尤度の絶対値の小さな変数ノードは、事後尤度の絶対値の大きな変数ノードに比べて信頼性が低い（誤りである可能性が高い）。信頼性の低い順に反転対象となる変数ノードを選択することによって、結果的に短時間で符号語を得られやすくなる。更に、非正則ＬＤＰＣ符号に関して、反転制御部１４６は、変数ノードの列重みの降順または昇順に変数ノードを選択してもよい。
【００４３】
例えば、図５の例において変数ノードＶ４に反転処理を行うと、変数ノードＶ４の誤りが訂正される。更に、その後の繰り返し復号によって残りの変数ノードＶ５，・・・，Ｖ８の誤りの訂正が期待できる。
【００４４】
行処理部１４２は、反転制御部１４６から入力尤度Ｆｎ及び事前尤度βｍｎを入力し、検査行列保持部１４５から検査行列Ｈの情報を読み出す。行処理部１４２は、これらを用いて外部値αｍｎを生成する。具体的には、行処理部１４２は、上記の数式（２）に従って、外部値αｍｎを生成する。行処理部１４２は、生成した外部値αｍｎをパリティ検査部１４４及び増幅制御部１４７に与える。
【００４５】
パリティ検査部１４４は、検査行列保持部１４５から検査行列Ｈの情報を読み出し、行処理部１４２から外部値αｍｎを入力し、反転制御部１４６から入力尤度Ｆｎを取得する。パリティ検査部１４４は、これらに基づいて一時推定語を生成する。具体的には、パリティ検査部１４４は、一時推定語の第ｎ番目の要素を上記の数式（５）に従って生成する。そして、パリティ検査部１４４は、生成した一時推定語が、検査行列Ｈによって定義される符号語であるか否かを検査する。具体的には、パリティ検査部１４４は、上記の数式（６）に従ってパリティ検査ベクトルＵを計算する。
【００４６】
パリティ検査ベクトルＵが零ベクトルとなれば、パリティ検査部１４４は一時推定語を符号語として外部に出力する。一方、パリティ検査部１４４は、パリティ検査ベクトルＵが零ベクトルでなく、かつ、繰り返し回数Ｌ２が最大繰り返し回数Ｌｍａｘ２に達していなければ、例えば増幅制御部１４７にパリティを満たさないチェックノードを識別する情報を与える。尚、繰り返し回数Ｌ２は、例えば行処理部１４２によってカウント（インクリメント）され、繰り返し回数保持部１４８によって保持される。パリティ検査部１４４は、パリティ検査ベクトルＵが零ベクトルでなく、かつ、繰り返し回数Ｌ２が最大繰り返し回数Ｌｍａｘ２に達した場合に、繰り返し回数保持部１４８に保持されている繰り返し回数Ｌ２を初期値にリセットする。
【００４７】
更に、パリティ検査部１４４は、所定の繰り返し中止条件が充足されるか否かを判定してもよい。繰り返し中止条件が充足される場合には、パリティ検査部１４４は繰り返し回数保持部１４８に保持されている繰り返し回数Ｌ２を初期値にリセットする。ここで、繰り返し中止条件について説明する。後処理部１４０は、選択した変数ノードを反転してから繰り返し復号を実施する。しかしながら、適切でない（正しい）変数ノードを反転させた場合には、その後の繰り返し復号を通じても符号語が得られない。
【００４８】
具体的には、図１０に示されるように、適切な（誤った）変数ノードを反転させると、一時的にパリティを満たさないチェックノードの数が増加するものの、徐々にその数が減少して符号語が得られる。一方、適切でない変数ノードを反転させると、パリティを満たさないチェックノードの数は、繰り返し復号の初期（図１０の例では、繰り返し回数が「１０」程度まで）において、適切な変数ノードを反転させた場合と同様に増減する。しかしながら、パリティを満たさないチェックノードの数は減少の後に再び増加に転じ、結果的に符号語が得られない。
【００４９】
従って、例えば、繰り返し中止条件として「Ｌ２＞Ｌｉｎ（ＬｉｎはＬｍａｘ２未満の所定値）  かつ  パリティを満たさないチェックノードの数が前回のパリティ検査に比べて増加した」を規定することができる。尚、上記繰り返し中止条件は一例に過ぎず、適宜変更してよいことは勿論である。係る繰り返し中止条件を利用することで、無駄な繰り返し復号が途中で打ち切られ、結果的に短時間で符号語が得られやすくなる。
【００５０】
増幅制御部１４７は、行処理部１４２から外部値αｍｎを入力し、パリティ検査部１４４からパリティを満たさないチェックノードを識別する情報を入力し、検査行列保持部１４５から検査行列Ｈの情報を読み出す。増幅制御部１４７は、パリティを満たさないチェックノードの外部値αｍｎの絶対値を増幅する増幅処理を行う。例えば、増幅制御部１４７は、下記の数式（１０）に従って、外部値αｍｎの絶対値を増幅する。増幅制御部１４７は、増幅処理後の各外部値αｍｎを列処理部１４３に与える。
【数１０】
0005132758.tif 000011
【００５１】
ここで、定数Ｗは１より大きい。具体的には、図５の例に関して、変数ノードＶ４を反転すると、チェックノードＰ２，Ｐ４がパリティを満たさない。故に、増幅制御部１４７はチェックノードＰ２，Ｐ４の各外部値α２ｎ，α４ｎの絶対値を夫々増幅する。
【００５２】
更に、増幅制御部１４７は、所定の増幅実施条件が充足されるか否かを判定してもよい。増幅実施条件が充足される場合には、増幅制御部１４７はパリティを満たさないチェックノードの外部値αｍｎの絶対値の増幅処理を実施する。一方、増幅実施条件が充足されない場合には、増幅制御部１４７はパリティを満たさないチェックノードの外部値αｍｎの絶対値の増幅処理を省略する。例えば、「パリティを満たさないチェックノードの数が所定個数未満であること」を増幅実施条件として規定することができる。パリティを満たさないチェックノードの数が所定個数以上である場合に外部値αｍｎを調整しないようにすることで、誤りの増大を効果的に防ぐことができる。
【００５３】
また、増幅制御部１４７は、数式（１０）の代わりに定数の加減算によって外部値αｍｎの絶対値を増幅してもよいし、定数の加減乗除の組み合わせによって外部値αｍｎの絶対値を増幅してもよい。更に、増幅制御部１４７は、パリティを満たさないチェックノードの外部値αｍｎの絶対値を増幅することに加えて（或いは、代替して）、パリティを満たすチェックノードの（一部または全部の）外部値αｍｎの絶対値を減じてもよい。増幅制御部１４７は、定数の加減算、乗除、または、加減乗除の組合せによって外部値αｍｎの絶対値を減じてもよい。また、外部値αｍｎを増幅する（或いは、減じる）ために用いられる定数は、変数ノード毎に異なってもよい。例えば、定数は、変数ノードの列重みに依存する値であってもよい。
【００５４】
列処理部１４３は、検査行列保持部１４５から検査行列Ｈの情報を読み出し、増幅制御部１４７から外部値αｍｎを入力する。列処理部１４３は、これらを用いて事前尤度βｍｎを計算する。具体的には、列処理部１４３は、上記の数式（７）に従って、事前尤度βｍｎを計算する。列処理部１４３は、計算した事前尤度βｍｎを反転制御部１４６にフィードバックする。
【００５５】
繰り返し回数保持部１４８は、例えばパリティ検査部１４４から繰り返し回数Ｌ２を入力し、これを保持する。繰り返し回数Ｌ２は、反転制御部１４６によって必要に応じて読み出される。反転ノードリスト保持部１４９は、反転ノードリスト生成部１３０から反転ノードリストを入力し、これを保持する。反転ノードリストは、反転制御部１４６によって必要に応じて読み出される。
【００５６】
以下、図７を用いて図１の誤り訂正復号器の動作例を説明する。図７の処理は、ＬＤＰＣ復号部１１０が前段の信号処理部によって得られた尤度Ｆｎを入力すると開始し、ステップＳ４１０に遷移する。この処理は、符号語（誤り訂正復号結果）が得られる（復号成功）か、最終的に符号語が得られない（復号失敗）ならば終了し、ＬＤＰＣ復号部１１０は次の符号データ（例えば、データフレーム）に関する尤度Ｆｎを入力する。
【００５７】
ステップＳ４１０において、ＬＤＰＣ復号部１１０は通常のＬＤＰＣ復号を行う。尚、ステップＳ４１０の詳細は後述される。ステップＳ４１０において、復号成功によって処理が終了することもあれば、最大繰り返し回数Ｌｍａｘ１に達しても符号語が得られないこともある。最大繰り返し回数Ｌｍａｘ１に達しても符号語が得られないなどの理由によりステップＳ４１０が終了すると、処理はステップＳ４２０に進む。
【００５８】
ステップＳ４２０において、後処理判定部１２０は、パリティを満たさないチェックノードの数が閾値Ｋより大きいか否かを判定する。パリティを満たさないチェックノードの数が閾値Ｋよりも大きければ処理は終了（復号失敗）し、そうでなければ処理はステップＳ４３０に進む。
【００５９】
ステップＳ４３０において、反転ノードリスト生成部１３０は、パリティを満たさないチェックノードに繋がっている変数ノードを識別する情報と、この変数ノードの事後尤度の正負を示す情報とを列挙した反転ノードリストを生成する。ステップＳ４３０に続いて、後処理部１４０は後処理を行う（ステップＳ４４０）。尚、ステップＳ４４０の詳細は後述される。ステップＳ４４０において、復号成功によって処理が終了することもあれば、反転ノードリストに列挙された全ての変数ノードに関して後処理を行っても符号語が得られずに処理が終了（復号失敗）することもある。
【００６０】
以下、図８を用いて、上記ステップＳ４１０における図２のＬＤＰＣ復号部１１０の動作例を説明する。  
ステップＳ４１０はステップＳ４１１から開始する。ステップＳ４１１において、行処理部１１２は、入力尤度保持部１０１からの入力尤度Ｆｎと、検査行列保持部１１５からの検査行列Ｈの情報と、列処理部１１３からの（最新の）事前尤度βｍｎとを用いて外部値αｍｎを生成する。尚、ステップＳ４１１の処理が実行される毎に、行処理部１１２は繰り返し回数Ｌ１をカウント（インクリメント）してもよい。
【００６１】
次に、パリティ検査部１１４は、入力尤度保持部１１１からの入力尤度Ｆｎと、検査行列保持部１１５からの検査行列Ｈの情報と、行処理部１１２からの外部値αｍｎとに基づいて一時推定語を生成し、生成した一時推定語が検査行列Ｈによって定義される符号語であるか否かを検査する（ステップＳ４１２）。一時推定語が符号語であれば処理は終了（復号成功）し、そうでなければ処理はステップＳ４１３に進む。
【００６２】
ステップＳ４１３において、パリティ検査部１１４は、繰り返し回数Ｌ１が最大繰り返し回数Ｌｍａｘ１に達しているか否かを判定する。繰り返し回数Ｌ１が最大繰り返し回数Ｌｍａｘ１に達していれば処理はステップＳ４２０に進み、そうでなければ処理はステップＳ４１４に進む。処理がステップＳ４２０に進む場合に、パリティ検査部１１４は、後処理判定部１２０、反転ノードリスト生成部１３０に夫々必要な情報を与える。
【００６３】
ステップＳ４１４において、列処理部１１３は検査行列保持部１１５からの検査行列Ｈの情報と行処理部１１２からの外部値αｍｎとを用いて事前尤度βｍｎを計算し、処理はステップＳ４１１に戻る。
【００６４】
以下、図９を用いて、上記ステップＳ４４０における図６の後処理部１４０の動作例を説明する。  
ステップＳ４４０はステップＳ４４１から開始する。ステップＳ４４１において、反転制御部１４６は、反転ノードリストの中で未反転の１つの変数ノードＶｊを選択し、これに対して反転処理を行う。更に、反転制御部１４６は、全ての事前尤度βｍｎを「０」にリセットする。ステップＳ４４１に続いて、処理はステップＳ４４２に進む。
【００６５】
ステップＳ４４２において、行処理部１４２は、反転制御部１４６からの入力尤度Ｆｎ及び（最新の）事前尤度βｍｎと、検査行列保持部１４５からの検査行列Ｈの情報とを用いて外部値αｍｎを生成する。尚、ステップＳ４４２の処理が実行される毎に、行処理部１４２は繰り返し回数Ｌ２をカウント（インクリメント）してもよい。
【００６６】
次に、パリティ検査部１４４は、反転制御部１４６からの入力尤度Ｆｎと、検査行列保持部１４５からの検査行列Ｈの情報と、行処理部１４２からの外部値αｍｎとに基づいて一時推定語を生成し、生成した一時推定語が検査行列Ｈによって定義される符号語であるか否かを検査する（ステップＳ４４３）。一時推定語が符号語であれば処理は終了（復号成功）し、そうでなければ処理はステップＳ４４４に進む。
【００６７】
ステップＳ４４４において、パリティ検査部１４４は、繰り返し中止条件が充足されるか否かを判定する。繰り返し中止条件が充足されるならば処理はステップＳ４４９に進み、そうでなければ処理はステップＳ４４５に進む。ステップＳ４４５において、パリティ検査部１４４は、繰り返し回数Ｌ２が最大繰り返し回数Ｌｍａｘ２に達しているか否かを判定する。繰り返し回数Ｌ２が最大繰り返し回数Ｌｍａｘ２に達していれば処理はステップＳ４４９に進み、そうでなければ処理はステップＳ４４６に進む。
【００６８】
ステップＳ４４６において、増幅制御部１４７は、増幅実施条件が充足されるか否かを判定する。増幅実施条件が充足されるならば処理はステップＳ４４７に進み、そうでなければ処理はステップＳ４４８に進む。ステップＳ４４７において、増幅制御部１４７はパリティを満たさないチェックノードの外部値αｍｎの絶対値を増幅し、処理はステップＳ４４８に進む。
【００６９】
ステップＳ４４８において、列処理部１４３は検査行列保持部１４５からの検査行列Ｈの情報と増幅制御部１４７からの外部値αｍｎとを用いて事前尤度βｍｎを計算し、処理はステップＳ４４２に戻る。
【００７０】
ステップＳ４４９において、反転制御部１４６は、反転ノードリストに列挙された変数ノードの中に未反転ノードがあるか否かを判定する。未反転ノードがあれば処理はステップＳ４５０に進み、そうでなければ処理は終了（復号失敗）する。ステップＳ４５０において、パリティ検査部１４４は繰り返し回数Ｌ２を初期値にリセットし、処理はステップＳ４４１に戻る。
【００７１】
以上説明したように、第１の実施形態に係る誤り訂正復号器は、通常の繰り返し復号を十分に実施しても符号語が得られない場合に後処理を実施する。後処理では、パリティを満たさないチェックノードに繋がっている変数ノードの反転と、変数ノード反転後の繰り返し復号におけるパリティを満たさないチェックノードの外部値の絶対値の増幅とが併用される。従って、本実施形態に係る誤り訂正復号器によれば、エラーフロア領域における誤りを低減し、誤り訂正能力を効果的に向上させることができる。
【００７２】
（第２の実施形態）  
第２の実施形態に係る記憶装置は、前述の第１の実施形態に係る誤り訂正復号器の応用例である。本実施形態に係る記憶装置は、典型的には、フラッシュメモリなどの不揮発性メモリと、これを制御するメモリコントローラとを含む。
【００７３】
図１１の記憶装置３０３は、不揮発性メモリである少なくとも１つの半導体メモリ部３０５と、半導体メモリ部３０５を制御するメモリコントローラ３０２とを有する。記憶装置３０３は、ホスト３０４（例えば、パーソナルコンピュータなど）と接続し、ホスト３０４との間でデータを送受信する。例えば、ホスト３０４は、記憶装置３０３からデータを読み出したり、記憶装置３０３にデータを書き込んだりすることができる。
【００７４】
メモリコントローラ３０２は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０７、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）コア３０８、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０９、ホストＩ／Ｆ（インタフェース）３１０、誤り訂正部３１１及びメモリＩ／Ｆ３１２を含む。メモリコントローラ３０２の各要素は、バス３０６によって互いに接続されている。
【００７５】
ＣＰＵコア３０８は、ホストＩ／Ｆ３１０を介してホスト３０４との間でデータを送受信したり、メモリＩ／Ｆ３１２を介して半導体メモリ部３０５との間でデータを送受信したりする。即ち、ＣＰＵコア３０８は、半導体メモリ部３０５からデータを受ける読み出し部として機能したり、半導体メモリ部３０５にデータを送る書き込み部として機能したりする。また、ＣＰＵコア３０８上で実行されるＦＷ（Ｆｉｒｍ  Ｗａｒｅ）は、書き換え回数の制限を含む半導体メモリ部３０５のアドレス管理を実現する。更に、ＦＷは、ホスト３０４からのコマンド入力に応じた記憶装置３０３全体の制御も実現する。
【００７６】
ＲＯＭ３０７には、記憶装置３０３の制御プログラムなどが記憶されている。ＲＡＭ３０９には、アドレス管理において必要となるアドレス変換テーブル、異常回路の情報などが記憶される。
【００７７】
誤り訂正部３１１は、復号器３０１と符号化器３１３とを含む。復号器３０１には、第１の実施形態に係る誤り訂正復号器が組み込まれる。復号器３０１は、半導体メモリ部３０５から読み出されたデータの誤り訂正復号を行う。一方、符号化器３１３は、半導体メモリ部３０５に書き込まれるデータに誤り訂正符号を付加する。
【００７８】
以上説明したように、第２の実施形態に係る記憶装置は、メモリコントローラに前述の第１の実施形態に係る誤り訂正復号器を組み込んでいる。従って、本実施形態に係る記憶装置によれば、読み出されたデータに対して優れた誤り訂正能力を発揮できる。
【００７９】
（第３の実施形態）  
第３の実施形態に係る受信機は、前述の第１の実施形態に係る誤り訂正復号器の応用例である。本実施形態に係る受信機は、図１２に示されるように、アンテナ３２０、周波数変換器３２１、Ａ／Ｄ（アナログ／デジタル）変換器３２２、復調器３２３及び復号器３２４を有する。図１２の受信機は、符号化及び変調された信号を受信し、復調及び復号することによって受信データを復元する。図１２の受信機は、典型的には、（セルラ、無線ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などをサポートする）無線受信機、放送波受信機などである。また、図１２には示されていないが、受信機は、低雑音増幅器、フィルタなどを含むことも可能である。
【００８０】
アンテナ３２０は、高周波の無線信号を受信する。周波数変換器３２１は、アンテナ３２０からの受信信号をダウンコンバートする（中間周波数信号に変換する）。Ａ／Ｄ変換器３２２は、周波数変換器３２１からの中間周波数信号をアナログドメインからデジタルドメインに変換する。復調器３２３は、送信側の変調方式に対応する復調方式に従って、Ａ／Ｄ変換器３２２からのデジタル信号を復調する。
【００８１】
復号器３２４には、前述の第１の実施形態に係る誤り訂正復号器が組み込まれる。復号器３２４は、送信側の符号化方式に対応する復号方式に従って、復調器３２３からの復調データに誤り訂正復号を含む復号化処理を行い、受信データを復元する。
【００８２】
以上説明したように、第３の実施形態に係る受信機は、復号器に前述の第１の実施形態に係る誤り訂正復号器を組み込んでいる。従って、本実施形態に係る受信機によれば、受信データに対して優れた誤り訂正能力を発揮できる。尚、図１２の要素群と図示しない送信機のための要素群とを組み合わせて送受信機を構成することも可能である。
【００８３】
上記各実施形態の処理は、汎用のコンピュータを基本ハードウェアとして用いることで実現可能である。上記各実施形態の処理を実現するプログラムは、コンピュータで読み取り可能な記憶媒体に格納して提供されてもよい。プログラムは、インストール可能な形式のファイルまたは実行可能な形式のファイルとして記憶媒体に記憶される。記憶媒体としては、磁気ディスク、光ディスク（ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＤＶＤ等）、光磁気ディスク（ＭＯ等）、半導体メモリなど、プログラムを記憶でき、かつ、コンピュータが読み取り可能な記憶媒体であれば、何れの形態であってもよい。また、上記各実施形態の処理を実現するプログラムを、インターネットなどのネットワークに接続されたコンピュータ（サーバ）上に格納し、ネットワーク経由でコンピュータ（クライアント）にダウンロードさせてもよい。
【００８４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８５】
１１０・・・ＬＤＰＣ復号部
１１１，１４１・・・入力尤度保持部
１１２，１４２・・・行処理部
１１３，１４３・・・列処理部
１１４，１４４・・・パリティ検査部
１１５，１４５・・・検査行列保持部
１２０・・・後処理判定部
１３０・・・反転ノードリスト生成部
１４０・・・後処理部
１４６・・・反転制御部
１４７・・・増幅制御部
１４８・・・繰り返し回数制御部
１４９・・・反転ノードリスト保持部
３０１・・・復号器
３０２・・・メモリコントローラ
３０３・・・記憶装置
３０４・・・ホスト
３０５・・・半導体メモリ部
３０６・・・バス
３０７・・・ＲＯＭ
３０８・・・ＣＰＵコア
３０９・・・ＲＡＭ
３１０・・・ホストＩ／Ｆ
３１１・・・誤り訂正部
３１２・・・メモリＩ／Ｆ
３１３・・・符号化器
３２０・・・アンテナ
３２１・・・周波数変換器
３２２・・・Ａ／Ｄ変換器
３２３・・・復調器
３２４・・・復号器
【図１】
0005132758.tif 000012
【図２】
0005132758.tif 000013
【図３】
0005132758.tif 000014
【図４】
0005132758.tif 000015
【図５】
0005132758.tif 000016
【図６】
0005132758.tif 000017
【図７】
0005132758.tif 000018
【図８】
0005132758.tif 000019
【図９】
0005132758.tif 000020
【図１０】
0005132758.tif 000021
【図１１】
0005132758.tif 000022
【図１２】
0005132758.tif 000023