(57)【特許請求の範囲】
【請求項１】
元の符号化コードワードを記憶媒体に記憶するための機械実装方法であって、
（ａ）前記元の符号化コードワードを、書き込まれた符号化コードワードとして前記記憶媒体に書き込むステップ、
（ｂ）前記記憶媒体から前記書き込まれた符号化コードワードを読み出すことによりチャネル出力コードワードを生成するステップ、
（ｃ）前記書き込まれた符号化コードワード内の１つ以上の誤りビットの第１のセットを識別するために、前記チャネル出力コードワードに基づいて前記元の符号化コードワードを派生コードワードと比較するステップ、
（ｄ）前記第１のセット内の１つ以上の誤りビットを選択することにより前記書き込まれた符号化コードワード内の１つ以上の誤りビットの第２のセットを生成するステップ、
及び
（ｅ）前記記憶媒体に、前記第２のセット内の前記１つ以上の誤りビットに対応する誤りビット情報を書き込むステップであって、前記誤りビット情報は、前記書き込まれた符号化コードワードのための一意の識別子及び前記第２のセット内の前記１つ以上の誤りビットのための添字を備えるステップ
を備える方法。
【請求項２】
請求項１記載の方法であって、元の符号化コードワードは低密度パリティチェックコードワードである、方法。
【請求項３】
請求項１記載の方法であって、ステップ（ｃ）は、前記チャネル出力コードワードに対する復号を実行して前記派生コードワードを生成するステップをさらに備える、方法。
【請求項４】
請求項１記載の方法であって、
（ｆ）前記記憶媒体から前記書き込まれた符号化コードワードを読み出すことによりデコーダ入力コードワードを生成するステップ、
（ｇ）前記デコーダ入力コードワードに対する復号を実行して、復号コードワードを生成するステップ、並びに
（ｈ）復号コードワードが、復号された正しいコードワードでない場合は、
（ｈ１）前記記憶媒体から前記誤りビット情報を読み出すステップ、
（ｈ２）前記誤りビット情報に基づいて、修正コードワードを生成するステップ、及び
（ｈ３）前記修正コードワードに対してさらなる処理を実行するステップ
をさらに備える方法。
【請求項５】
請求項１記載の方法であって、ステップ（ｄ）は、
（ｄ１）前記第１のセット内の１つ以上の誤りビットを選択するステップ、
（ｄ２）前記１つ以上の選択された誤りビットに基づいて修正コードワードを生成するステップ、
（ｄ３）前記修正コードワードに対する復号を実行して候補復号コードワードを生成するステップ、
（ｄ４）前記候補復号コードワードが復号された正しいコードワードであるかどうかを判定するステップ、
（ｄ５）前記候補復号コードワードが前記復号された正しいコードワードである場合は、前記１つ以上の選択された誤りビットに基づいて前記第２のセットを生成するステップ、及び
（ｄ６）前記候補復号コードワードが前記復号された正しいコードワードでない場合は、前記第１のセット内に別の１つ以上の選択された誤りビットがないかステップ（ｄ１）〜（ｄ４）を繰り返すステップ
を備える、方法。
【請求項６】
記憶媒体に記憶されている書き込まれた符号化コードワードのための復号コードワードを生成するための機械実装方法であって、前記書き込まれた符号化コードワードは１つ以上の誤りビットを有し、
（ａ）前記記憶媒体から前記書き込まれた符号化コードワードを読み出すことによりチャネル出力コードワードを生成するステップ、
（ｂ）前記チャネル出力コードワードに基づいて派生コードワードを生成するステップ、
（ｃ）前記記憶媒体から誤りビット情報を読み出すステップであって、前記誤りビット情報は前記書き込まれた符号化コードワード内の１つ以上の誤りビットに対応し、前記誤りビット情報は、前記書き込まれた符号化コードワードのための一意の識別子及び前記書き込まれた符号化コードワード内の１つ以上の誤りビットのための添字を備えるステップ、
（ｄ）前記誤りビット情報に基づいて修正コードワードを生成するステップ、及び
（ｅ）前記修正コードワードに対する処理を実行して前記復号コードワードを生成するステップ
を備える方法。
【請求項７】
請求項６記載の方法であって、前記書き込まれた符号化コードワードは低密度パリティチェックコードワードである、方法。
【請求項８】
請求項６記載の方法であって、ステップ（ｂ）は、
（ｂ１）前記チャネル出力コードワードに対する復号を実行して前記派生コードワードを生成するステップ、及び
（ｂ２）前記派生コードワードが復号された正しいコードワードではないと判定するステップ
を備える、方法。
【請求項９】
請求項６記載の方法であって、ステップ（ｅ）は、
（ｅ１）前記誤りビット情報が前記書き込まれた符号化コードワード内の前記誤りビットの全てに対応するか否かを判定するステップ、
（ｅ２）前記誤りビット情報が前記書き込まれた符号化コードワード内の前記誤りビットの全てに対応する場合は、前記修正コードワードに対してシンドロームチェック及び巡回冗長検査（ＣＲＣ）のうちの１つ以上を実行するステップ、及び
（ｅ３）前記誤りビット情報が前記書き込まれた符号化コードワード内の前記誤りビットの全てには対応しない場合は、前記修正コードワードに対して復号を実行するステップを備える、方法。
【請求項１０】
請求項６記載の方法であって、前記誤りビット情報は、
前記誤りビット情報が前記書き込まれた符号化コードワード内の前記誤りビットの全てに対応するかどうかの表示
をさらに備える、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
【０００２】
本出願の主題は（１）整理番号０８−０２４１として２００８年１２月１２日に出願したＰＣＴ出願第ＰＣＴ／ＵＳ０８／８６５２３号の主題、（２）整理番号０８−１２９３として２００８年１２月１２日に出願したＰＣＴ出願第ＰＣＴ／ＵＳ０８／８６５３７号の主題、（３）整理番号０８−０２４８として２００９年３月１０日に出願した米国特許出願第１２／４０１，１１６号の主題、（４）整理番号０８−１０５７として２００９年４月２日に出願したＰＣＴ出願第ＰＣＴ／ＵＳ０９／３９２７９号の主題、（５）整理番号０８−０２４２として２００９年４月８日に出願した米国特許出願第１２／４２０，５３５号の主題、（６）２００８年５月１日に出願した米国特許出願第１２／１１３，７２９号の主題、（７）２００８年５月１日に出願した米国特許出願第１２／１１３，７５５号の主題、及び（８）整理番号０８−０２４３として２００９年４月８日に出願したＰＣＴ出願第ＰＣＴ／ＵＳ０９／３９９１８号の主題に関し、それらの全ての教示は参照によりそれらの全体が本明細書に組み込まれている。
【０００３】
本発明はデジタル信号処理に関し、具体的には、低密度パリティチェック（ＬＤＰＣ）コーディングなどのデータ符号化方法に関する。
【背景技術】
【０００４】
通信は通信チャネルを介しての送信側から受信側への情報の送信である。現実の世界では、通信チャネルは送信側から送信された情報の歪められたバージョンを受信側に提供する雑音の多いチャネルである。記憶装置（例えば、ハードディスク（ＨＤ）ドライブ、フラッシュドライブ）は送信側から情報を受け取り、その情報を記憶し、その後その情報の多かれ少なかれ歪められたバージョンを受信側に提供する、１つのそのような雑音の多いチャネルである。
【０００５】
記憶装置などの通信チャネルによって導入された歪（ひずみ）は、チャネルエラーを引き起こすのに十分大きい可能性がある、即ち、受信側は、チャネル入力信号が０であったのにチャネル出力信号を１と解釈する、或いはその逆である。チャネルエラーはスループットを低減し、従って望ましくない。従って、チャネルエラーを検出及び／又は訂正するツールが引き続き必要である。低密度パリティチェック（ＬＤＰＣ）コーディングはチャネルエラーの検出及び訂正のための１つの方法である。
【０００６】
ＬＤＰＣ符号は、低い信号対雑音比（ＳＮＲ）のアプリケーションのために非常に低いビットエラーレート（ＢＥＲ）を達成することができる、知られている近シャノン限界符号の１つである。ＬＤＰＣ復号は、その並列化の可能性、低い実装複雑性、少ない復号待ち時間、並びに、高いＳＮＲでのそれほど厳しくないエラーフロアの点で優れている。ＬＤＰＣ符号は事実上全ての次世代通信規格とみなされる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】ＰＣＴ出願第ＰＣＴ／ＵＳ０８／８６５２３号
【特許文献２】ＰＣＴ出願第ＰＣＴ／ＵＳ０８／８６５３７号
【特許文献３】米国特許出願第１２／４０１，１１６号
【特許文献４】ＰＣＴ出願第ＰＣＴ／ＵＳ０９／３９２７９号
【特許文献５】米国特許出願第１２／４２０，５３５号
【特許文献６】米国特許出願第１２／１１３，７２９号
【特許文献７】米国特許出願第１２／１１３，７５５号
【特許文献８】ＰＣＴ出願第ＰＣＴ／ＵＳ０９／３９９１８号
【発明の概要】
【０００８】
一実施形態では、本発明は、元の符号化コードワードを記憶媒体に記憶するための機械実装方法である。元の符号化コードワードは、書き込まれた符号化コードワードとして記憶媒体に書き込まれる。チャネル出力コードワードは、書き込まれた符号化コードワードを記憶媒体から読み出すことにより生成される。元の符号化コードワードは、書き込まれた符号化コードワード内の１つ以上の誤りビットの第１のセットを識別するために、チャネル出力コードワードに基づいて派生コードワードと比較される。書き込まれた符号化コードワード内の１つ以上の誤りビットの第２のセットが、第１のセット内の１つ以上の誤りビットを選択することにより生成される。第２のセット内の１つ以上の誤りビットに対応する誤りビット情報が記憶媒体に書き込まれる。
【０００９】
他の実施形態では、本発明は、記憶媒体に記憶されている書き込まれた符号化コードワードに対する復号コードワードを生成するための機械実装方法であって、書き込まれた符号化コードワードは、１つ以上の誤りビットを有する。チャネル出力コードワードは、書き込まれた符号化コードワードを記憶媒体から読み出すことにより生成される。派生コードワードは、チャネル出力コードワードから生成される。誤りビット情報は記憶媒体から読み出され、誤りビット情報は書き込まれた符号化コードワード内の１つ以上の誤りビットに対応する。誤りビット情報は、修正コードワードを生成するために使用される。復号コードワードを生成するために、修正コードワードに対してさらなる処理が実行される。
【００１０】
本発明の他の態様、特徴、及び利点は、以下の詳細な説明、添付の請求項、及び同様の参照数字は同様の又は同一の要素を識別する添付の図面から、より十分に明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】ＬＤＰＣコーディングを利用する通信システム１００のブロック図である。
【図２】図Ａは、ＬＤＰＣ  Ｈ行列２００を示す図であり、図Ｂは、Ｈマトリックス２００のタナーグラフである。
【図３】図ＡのデコーダＡＣによって使用されるＬＤＰＣ復号方法３００の流れ図である。
【図４】本発明の一実施形態によるチャネルコントローラ１２０によって制御される図１の通信システム１００によって実装されるＬＤＰＣ符号化／復号プロセス４００の流れ図である。
【図５】誤りビットテーブルの一実施形態の図である。
【図６】本発明の一実施形態による、図４のステップ４１０の流れ図、即ち書込みエラー検証プロセスの図である。
【図７】図６のステップ６１２の流れ図である。
【図８】本発明の一実施形態による図４の書込みエラー回復プロセス４１８の流れ図である。
【発明を実施するための形態】
【００１２】
図１は、ＬＤＰＣコーディングを利用する通信システム１００のブロック図である。データソース１０２は、元の情報ワード１０４として知られているビットのセットを生成する。ＬＤＰＣエンコーダ１０６は元の情報ワード１０４を符号化して、元の符号化コードワード１０８を生成する。ＬＤＰＣ符号化は、以下でより詳細に議論される。元の符号化コードワード１０８（チャネル入力コードワードとしても知られている）は、書き込まれた符号化コードワードとして記憶媒体１１０（例えば、フラッシュドライブ、ハードドライブプラッタなど）に書き込まれる。
【００１３】
後ほどいつか、記憶媒体１１０は、書き込まれた符号化コードワードを読み出し、値ｙのセット（即ち、チャネル出力コードワード）をチャネル検出器１１２に出力する。チャネル出力コードワード、及びチャネル出力コードワードから派生した任意のコードワードは、派生コードワードとして知られている。チャネル検出器１１２は、受信された値ｙを対数尤度比（ＬＬＲ）値Ｌｃｈのセットに変換する。ＬＬＲ値は、（ｉ）対応する値ｙによって示された１ビット硬判定値に関するデコーダのベストゲスを表す符号ビット、及び（ｉｉ）硬判定におけるデコーダの信頼度を表す１つ以上のマグニチュードビットを備える。例えば、チャネル検出器１１２は、５ビット値として各ＬＬＲ値Ｌｃｈを出力することができ、最上位ビットは、硬判定を示す符号ビットであり、４つのマグニチュードビットの値は、硬判定の信頼度を示す。従って、１つの可能なＬＬＲ方式では、２進数０００００のＬＬＲ値は最小信頼度を有する０の硬判定を示し、２進数０１１１１のＬＬＲ値は最大信頼度を有する０の硬判定を示し、２進数１０００１のＬＬＲ値は最小信頼度を有する１の硬判定を示し、２進数１１１１１のＬＬＲ値は最大信頼度を有する１の硬判定を示すことになり、２進数１００００は使用されない。
【００１４】
チャネル検出器１１２はＬｃｈ値をＬＤＰＣデコーダ１１４に送信し、Ｌｃｈ値はデコーダ入力コードワードになる。その後、ＬＤＰＣ１１４は、Ｌｃｈ値のセットに対して１つ以上の復号反復１１６（「ローカル反復」）を実行し、復号コードワード
【数１】
0005432367.tif 000002
を生成する。ＬＤＰＣデコーダＡＣは、（ｉ）ＬＤＰＣデコーダ１１４が復号された正しいコードワード（ＤＣＣＷ）に到達する、即ち、
【数２】
0005432367.tif 000003
がチャネル入力コードワード１０８と同じであるときか、又は（ｉｉ）ＬＤＰＣデコーダＡＣがＤＣＣＷに到達することなく最大許容数のローカル反復を実行する、即ち、ＬＤＰＣデコーダ１１４が失敗したときに、終了する。デコーダ１１４が終了すると、デコーダ１１４は、復号コードワード、
【数３】
0005432367.tif 000004
をデータ宛先１１８に出力する。ＬＤＰＣ復号は、以下でより詳細に説明される。
【００１５】
チャネルコントローラ１２０は、少なくともＬＤＰＣエンコーダ１０６、チャネル検出器１１２、及びＬＤＰＣデコーダ１１４の動作を制御する。チャネルコントローラは通常、ＡＲＭ（アドバンストＲＩＳＣ（縮小命令セットコード）マシン）プロセッサである。
【００１６】
ＬＤＰＣ符号化
コードワード１０８を作成するために、ＬＤＰＣエンコーダ１０６は、情報ワード１０４のビットに、ＬＤＰＣ符号によって指定されたいくつかのパリティビットを付加する。情報ワード１０４内のビットの数はＫとして示される。符号化コードワード内のビットは可変ビットとして知られており、それらの可変ビットの数はＮとして示される。従って、パリティビットの数はＮ−Ｋによって与えられる。
【００１７】
ＬＤＰＣコードワード内の各パリティビットは、特定のＬＤＰＣ符号によって指定された特定のやり方でそのコードワード内の１つ以上の他のビットに関連付けられ、パリティビットに割り当てられる値はＬＤＰＣ符号を満たすようにセットされる。標準的なＬＤＰＣ符号は、パリティビット及びその関連ビットがパリティチェック制約を満たす、例えば、ビットの合計が偶数である、即ち、合計モジュロ２＝０であると指定する。
【００１８】
ＬＤＰＣ符号
特定のＬＤＰＣ符号は、パリティチェック行列、又はＨ行列、或いは単にＨとして知られている１及び０の２次元行列によって定義される。Ｈは、ＬＤＰＣエンコーダ及びデコーダの両方によってアプリオリに知られている。Ｈは、Ｎ個の列及びＮ−Ｋ個の行、即ち、コードワードのビットごとに１つの列及びパリティビットごとに１つの行を備える。Ｈ内の各１は、列のコードワードビットと行のパリティビットとの間の関連を表す。例えば、Ｈの第３の行、第７の列にある１は、第３のパリティチェックビットがコードワードの第７のビットに関連することを意味する。チェックビットの値とそのチェックビットに関連する全ての可変ビットの合計モジュロ２は０であるはずである。典型的なＬＤＰＣ符号の定義特性は、Ｈが「疎」である、即ち、Ｈの要素がほとんど０であり、１が比較的少ないことである。
【００１９】
図２（Ａ）はＬＤＰＣ  Ｈ行列２００を示す。Ｈ行列２００は、Ｎ＝９列、及びＮ−Ｋ＝６行を備える。従って、Ｈ行列２００は３ビット情報ワードを受け取り、６パリティビットを付加し、９ビットコードワードを出力するＬＤＰＣ符号を定義する。記憶媒体がハードディスクドライブ又はフラッシュドライブである一実装形態では、各情報ワードは、長さが４，０９６ビットであり、各コードワードは、長さが４，５５２ビットである。他の実装形態は、他のビット長を有する情報ワード及び／又はコードワードを有してよい。
【００２０】
ＬＤＰＣ復号：確率伝搬法
図３は、図１のデコーダ１１４によって使用されるＬＤＰＣ復号方法３００の流れ図である。復号方法３００の核心は、確率伝搬法と呼ばれる反復二相メッセージパッシングアルゴリズムである。確率伝搬法はタナーグラフを使用して説明されることが可能である。
【００２１】
図２（Ｂ）はＨ行列２００のタナーグラフである。一般に、タナーグラフは、１）Ｈ内の列の数に等しい（従って、可変ビットの数Ｎに等しい）ビットノード（可変ノードとも呼ばれる）の数ｎ、２）Ｈ内の行の数に等しい（従って、パリティビットの数に等しい）チェックノードの数ｍ、３）それぞれが単一のビットノードｎｉを単一のチェックノードｍｊに接続する枝２０２、４）ビットノードｎｉごとに、元のＬｃｈ値、及び５）ビットノードｎｉごとに、計算された硬判定出力値、
【数４】
0005432367.tif 000005
を備える。図２（Ｂ）のタナーグラフは、９個のビットノードｎ０〜ｎ８、６個のチェックノードｍ０〜ｍ５、ビットノードをチェックノードに接続する１８の枝２０２、９個のＬｃｈ値、及び９個の
【数５】
0005432367.tif 000006
値を備える。
【００２２】
タナーグラフ内の枝はビットノードｎとチェックノードｍとの間の関係を表し、枝はＨ内の１を表す。例えば、図２（Ｂ）では、枝２０２は、図２（Ａ）内のＨ行列２００の第１の列、第４の行に１があるので、第１のビットノードｎ０を第４のチェックノードｍ３に接続する。
【００２３】
タナーグラフは、２部グラフである、即ち、１つの枝が１つのビットノードをただ１つのチェックノードに接続することができ、１つのビットノードを別のビットノードに、又は１つのチェックノードを別のチェックノードに接続することができない。枝によって特定のチェックノードｍに接続された全てのビットノードｎのセットはＮ（ｍ）として示される。枝によって特定のビットノードｎに接続された全てのチェックノードｍのセットはＭ（ｎ）として示される。特定の（ビット又はチェック）ノードの添え字はグラフ内のその順序を表す連番である。
【００２４】
図３に戻ると、処理はステップ３０２において開始し、ステップ３０４、デコーダ初期化に進む。デコーダ初期化３０４は、各ビットノードｎに接続された全ての枝（例えば、図２（Ｂ）の枝２０２）をビットノードｎに関連する対応するＬｃｈ値にセットするステップ、及びビットノードｎの
【数６】
0005432367.tif 000007
値をビットノードｎのＬｃｈの硬判定値（即ち、ＭＳＢ）にセットするステップを備える。従って、例えば、図２（Ｂ）において、ビットノードｎ０に関連するＬｃｈ値が１０進数値＋５である場合は、ステップ３０４において、ビットノードｎ０をチェックノードｍ０及びｍ３に接続する２つの枝２０２は＋５にセットされ、ビットノードｎ０の
【数７】
0005432367.tif 000008
値は、１にセットされる。このステップの第１の部分を表す代替方法は、ビットノードｎ０がセットＭ（ｎ０）内の各チェックノードｍに＋５のメッセージを送信することである。ビットノードｎからチェックノードｍに送信されるメッセージはビットノード又はＱメッセージと呼ばれ、Ｑｎｍとして示される。
【００２５】
次いで、ステップ３０４は、シンドロームチェックステップ３０６に、Ｎ個の
【数８】
0005432367.tif 000009
値を備える候補復号コードワードベクトル
【数９】
0005432367.tif 000010
を送信する。シンドロームチェックステップ３０６は、次の等式（１）
【数１０】
0005432367.tif 000011
を使用してシンドロームベクトルｚを計算し、式中、ＨＴはＨ行列の転置行列である。シンドロームベクトルｚが０ベクトルである場合は、ベクトル
【数１１】
0005432367.tif 000012
は、Ｈによって定義された全てのパリティチェック制約を満たしている、即ち、
【数１２】
0005432367.tif 000013
は、有効な復号コードワードである。その場合、処理は、巡回冗長検査（ＣＲＣ）チェック３１８に進む。
【００２６】
そうではなく、シンドロームベクトルｚが０ベクトルでない場合は、ベクトル
【数１３】
0005432367.tif 000014
は、パリティチェック制約のうちの１つ以上を失敗する。シンドロームベクトルｚ内の各非ゼロ要素は、失敗したパリティチェック制約を表し、これは満たされていないチェックノード（ＵＳＣ）とも呼ばれる。シンドロームベクトルｚ内の非ゼロ要素の数は、ベクトル
【数１４】
0005432367.tif 000015
内のＵＳＣの数ｂである。さらに、シンドロームベクトルｚの非ゼロ要素の添え字は、ベクトル
【数１５】
0005432367.tif 000016
内のＵＳＣの添え字である。
ベクトル
【数１６】
0005432367.tif 000017
がシンドロームチェック３０６を失敗した場合は、処理は続けて１つ以上の復号反復３０８（「ローカル反復」と呼ばれる）の第１に進む。復号反復３０８は、３つのステップ、即ち、１）確率伝搬法チェックノード更新ステップ３１０、２）確率伝搬法ビットノード更新ステップ３１２、及び３）ステップ３０６と同一であるシンドロームチェックステップ３１４を備える。
【００２７】
確率伝搬法チェックノード更新ステップ３１０において、各チェックノードｍは、セットＮ（ｍ）内の全てのビットノードｎから受信されたＱｎｍメッセージを使用して、次の等式（２）、（３）、及び（４）、
【数１７】
0005432367.tif 000018
【数１８】
0005432367.tif 000019
【数１９】
0005432367.tif 000020
によって、１つ以上のチェックノード、又はＲｍｎとして示されたＲメッセージを計算し、式中、ｉは復号反復であり、Ｎ（ｍ）＼ｎはビットノードｎを除いたセットＮ（ｍ）であり、関数ｓｇｎはそのオペランドの符号を返し、βは正の定数であり、その値は符号パラメータに依存する。各チェックノードｍは、計算されたＲｍｎメッセージをそれらの同じ枝に沿ってセットＮ（ｍ）内の全てのビットノードｎに送信し戻す。
【００２８】
次に、確率伝搬法ビットノード更新ステップ３１２において、各ビットノードｎは、
【数２０】
0005432367.tif 000021
によって、１つ以上のＱｎｍメッセージを計算し、式中、
【数２１】
0005432367.tif 000022
は、ビットノードｎのための元のＬｃｈ値であり、Ｍ（ｎ）＼ｍは、チェックノードｍを除いたセットＭ（ｎ）である。その後、各ビットノードｎは、計算されたＱｎｍメッセージをセットＭ（ｎ）内の全てのチェックノードｍに送信する。
【００２９】
さらに、ビットノード更新ステップ３１２中に、各ビットノードｎは、次の等式（６）及び（７）、
【数２２】
0005432367.tif 000023
【数２３】
0005432367.tif 000024
によって、その
【数２４】
0005432367.tif 000025
値を更新する。Ｐｎ≧０の場合は、
【数２５】
0005432367.tif 000026
であり、Ｐｎ＜０の場合は、
【数２６】
0005432367.tif 000027
である。等式（６）によって生成された値はまた、付帯的な値又はＥ値と呼ばれ、ＥＬＤＰＣとして示される。等式（７）によって生成された値は、Ｐ値と呼ばれる。等式（２）〜（７）によって表される特定の確率伝搬法アルゴリズムは、ｍｉｎ−ｓｕｍアルゴリズムとして知られている。
【数２７】
0005432367.tif 000028
値は各復号反復３０８中に更新され、最後に復号プロセス３００によって出力されることに留意されたい。元のＬＬＲ値Ｌｃｈは、復号プロセス３００中ずっと変更されないままである。
【００３０】
ビットノード更新ステップ３１２は、デコーダの現在の
【数２８】
0005432367.tif 000029
値から構成されたベクトル
【数２９】
0005432367.tif 000030
をシンドロームチェックステップ３１４に送信する。ステップ３１４のシンドロームチェックは、前述のステップ３０６のシンドロームチェックと同一である。ベクトル
【数３０】
0005432367.tif 000031
がシンドロームチェック３１４を通った場合は、ベクトル
【数３１】
0005432367.tif 000032
はＣＲＣステップ３１８に送信される。
【００３１】
ＬＤＰＣ復号：巡回冗長検査及び不適当に満たされたチェックノード
シンドロームチェック３０６又は３１４を通ることは、ベクトル
【数３２】
0005432367.tif 000033
が有効な復号コードワードであるが、必ずしも復号された正しいコードワード（ＤＣＣＷ）であるとは限らないことを意味する。ＬＤＰＣデコーダがＤＣＣＷでない有効な復号コードワードを生成することは可能である。その場合、ベクトル
【数３３】
0005432367.tif 000034
内にＵＳＣはないが、不適当に満たされたチェックノード（ＭＳＣ）がある。不適当に満たされたチェックノードは、偶数の誤りビットノードに関連するチェックノードである。
従って、有効なベクトル
【数３４】
0005432367.tif 000035
がＤＣＣＷであることを保証するために、プロセス３００はベクトル
【数３５】
0005432367.tif 000036
を巡回冗長検査（ＣＲＣ）３１８に渡す。ＣＲＣチェックは、送信又は記憶中にデータの変更を検証することができるチェックサム演算である。具体的には、エンコーダは、送信されるべきコードワードの第１のＣＲＣチェックサムを計算し、第１のＣＲＣチェックサム及びコードワードの両方をデコーダに送信する。デコーダは、コードワード及び第１のＣＲＣチェックサムの受信後、受信されたコードワードを使用して第２のＣＲＣチェックサムを計算し、それを第１のＣＲＣチェックサムと比較する。２つのＣＲＣチェックサムが一致しない場合は、受信されたコードワードにエラーがある確率が高い。
ベクトル
【数３６】
0005432367.tif 000037
がＣＲＣチェックを通った場合は、ベクトル
【数３７】
0005432367.tif 000038
はＤＣＣＷであり、プロセス３００はグローバル変数ＤＣＣＷを真にセットし、ベクトル
【数３８】
0005432367.tif 000039
を出力し、ステップ３２０で終了する。そうでなければ、ベクトル
【数３９】
0005432367.tif 000040
は、ＤＣＣＷではなく、プロセス３００はグローバル変数ＤＣＣＷを偽にセットし、ベクトル
【数４０】
0005432367.tif 000041
を出力し、ステップ３２０で終了する。グローバル変数ＤＣＣＷは、他の復号プロセスにＤＣＣＷが生成されたか否かを通知する。
【００３２】
ステップ３１４に戻ると、ベクトル
【数４１】
0005432367.tif 000042
がシンドロームチェックを失敗した場合は、ベクトル
【数４２】
0005432367.tif 000043
に１つ以上のＵＳＣが存在する。ＵＳＣを解決する標準的な方法は、別の復号反復３０８を実行することである。しかし、特定の復号セッションでは、妥当な量の時間内に決して満たされない１つ以上のＵＳＣが存在する可能性がある（以下のトラッピングセットの議論を参照されたい）。従って、ＬＤＰＣデコーダは、通常、それらがいくつの復号反復を実行することができるかに限定される。反復の最大数のための標準的な値は５０から２００までの範囲にある。
【００３３】
図３において、ステップ３１６は、反復の指定された最大数に達したかどうかを判定する。達していない場合は、別の復号反復３０８が実行される。そうではなく、反復の最大数に達した場合は、デコーダプロセス３００は失敗した。その場合、プロセス３００は、グローバル変数ＤＣＣＷを偽にセットし、ベクトル
【数４３】
0005432367.tif 000044
を出力し、ステップ３２０で終了する。
【００３４】
（１つ以上のローカル復号反復３０８を伴う）プロセス３００の完全な実行は、復号セッションとして知られている。
【００３５】
ＢＥＲ、ＳＮＲ、及びエラーフロア
ＬＤＰＣデコーダのビットエラーレート（ＢＥＲ）は、復号ビットが誤った値を有する確率を表す。従って、例えば、１０−９のＢＥＲを有するデコーダは、平均して、１０億復号ビットごとに１つの誤りビットを生成することになる。ＤＣＣＷに収束するためのＬＤＰＣ復号セッションの失敗はデコーダのＢＥＲに寄与する。
【００３６】
ＬＤＰＣデコーダのＢＥＲはデコーダの入力信号の信号対雑音比（ＳＮＲ）によって強く影響される。ＳＮＲの関数としてのＢＥＲのグラフは、通常、２つの別個の領域、即ち、ユニットのＳＮＲが増大すると仮定すると、ＢＥＲが急速に改善する（低減する）最初の「ウォータフォール」領域、及びＳＮＲの増大がＢＥＲの穏やかな改善しかもたらさない、それに続く「エラーフロア」領域を備える。従って、エラーフロア領域においてかなり大きいＢＥＲ改善を達成するには、ＳＮＲ増大以外の方法を必要とする。
【００３７】
ＬＤＰＣ復号のエラーフロア特性を改善するための方法はコードワード長を増大することである。しかし、コードワード長を増大することはまた、メモリ及びＬＤＰＣ復号のために必要とされる他の計算リソースを増大する。従って、通常、記憶装置上の読出しチャネル装置でそうであるように、そのようなリソースが厳しく限定されている場合は、必要なエラーフロア改善をもたらすために他の方法が見つけられなければならない。
【００３８】
他の乏しいリソースは処理サイクルである。通常、指定されたスループットを達成するために、記憶装置は、コードワードを復号するための固定数の読出しチャネル処理サイクルの予算を立てる。その予算を超える方法（例えば、オフザフライ方法）はスループットを低減する。クロックサイクル割当以内にＤＣＣＷを回復し、従って、スループットを低減しないオンザフライ方法は、より望ましい。
【００３９】
ＬＤＰＣデコーダのエラーフロア特性を改善するための他の方法は１つ以上の後処理方法を使用することである。後処理方法は、復号セッションが、許容されている反復の最大数以内にＤＣＣＷに収束することができないときに実施される。後処理方法は、復号処理に関連する１つ以上の変数（例えば、ｙ値、Ｌｃｈ値、及び／又はデコーダの動作パラメータ）を調整し、復号を再開始する。復号それ自体のように、後処理方法は、しばしば反復的であり、復号プロセスへの入力に対して複数の連続した変更を加える。
【００４０】
典型的なＬＤＰＣ復号セッションでは、デコーダは第１のいくつかの復号反復以内にＤＣＣＷに収束する。そうではなく、ＬＤＰＣデコーダが反復の指定された最大数以内にＤＣＣＷに収束することができない場合は、それは失敗したデコーダとして知られており、失敗したデコーダによって生成された復号コードワードは失敗したコードワードである。
【００４１】
失敗したコードワードは、通常、それらが含むＵＳＣノードの数によって分類される。無効な復号コードワード（ＩＣＷ）は、多数の（例えば、約５，０００ビットコードワードごとに１６より多い）ＵＳＣノードを有する失敗したコードワードである。ＩＣＷは、通常、デコーダが全てのビットエラーを訂正することはできないほど多くのビットエラー、即ち少ない正しい値を含むデコーダ入力コードワードから生じる。ＩＣＷを処理するための典型的な後処理方法は、入力コードワードの再送信を要求することである。再送信は、オフザフライ方法であり、従って望ましくないが、通常、ＩＣＷを訂正するための唯一の信頼できる選択肢である。
【００４２】
近コードワード（ＮＣＷ）は少数の（例えば、約５，０００ビットコードワードごとに１６以下の）ＵＳＣを有する失敗したコードワードである。時々、ＮＣＷ内のＵＳＣは、トラッピングセットとして知られている安定した構成を形成し、そのためにさらなる復号反復はＤＣＣＷを生成しなくなる。トラッピングセットはＬＤＰＣデコーダのエラーフロア特性にかなり大きい影響を持つ。
【００４３】
トラッピングセットは（ａ，ｂ）と表記され、ここで、ｂはトラッピングセット内のＵＳＣの数であり、ａはそれらのＵＳＣに関連する誤りビットノードの数である。従って、（８，２）トラッピングセットは、２個のＵＳＣ、及びそれらの２個のＵＳＣに関連する８個の誤りビットノード（ＥＢＮ）を備える。大多数のトラッピングセットは、５個より少ないＵＳＣ及び１０個より少ないＥＢＮを備える。
【００４４】
ビットノードをフリップすることは、そのビットノードに関連する１つ以上の値を変更するための特定のプロセスを指す。フリップ中にどの値が変更されるかは、ＬＤＰＣデコーダの状態に依存する。１つの可能な実装形態では、ＬＤＰＣデコーダが初期化されたばかりであれば、ビットノードをフリップするステップは、（ｉ）そのビットノードのＬｃｈ値の硬判定値を反転する、即ち、１が０になる、及びその逆であるステップ、（ｉｉ）その同じＬｃｈ値のマグニチュードビット、即ち信頼度を最大値にセットするステップ、及び（ｉｉｉ）全ての他のＬｃｈ値のマグニチュードビットを最大許容マグニチュード値の多くても１５％に限定するステップを備える。
【００４５】
例えば、４ビットＬｃｈマグニチュード値を有するシステムであって、最大許容正マグニチュードが＋１５であり、最大許容負マグニチュードが−１６であり、さらに、最大許容値の１５％が、それぞれ＋２及び−２であるはずであるシステムを想定する。さらに、４つのビットノード、即ち＋２、−１１、＋１、＋１３に対応する４つのＬｃｈ値を想定する。この実施例では、第１のビットノードをフリップするステップは、（ｉ）第１のビットノードのＬｃｈ値の符号を反転する、即ち＋２が−２になる、ステップ、（ｉｉ）第１のビットノードのＬｃｈ値のマグニチュードを最大許容値にセットする、即ち２が−１６になる、ステップ、及び（ｉｉｉ）その他の３つのビットノードのＬｃｈ値のマグニチュードを最大許容値の多くても１５％に限定する、即ち、−１１、＋１、及び＋１３がそれぞれ−２、＋１、及び＋２になる、ステップを備える。Ｌｃｈマグニチュードを低い値にセットすることは、反復復号プロセスがＤＣＣＷに、より迅速に収束することができるようにし、失敗したデコーダの機会を少なくする。
【００４６】
この同じ実装形態によれば、デコーダが初期化された状態以外の何らかの状態にある場合は、ビットノードをフリップするステップは（ｉ）（上記の等式７によって定義された）ビットノードのＰ値の硬判定値を判定するステップ、（ｉｉ）そのビットノードのＬｃｈ値、Ｐ値、及び全ての関連するＱｎｍメッセージの硬判定値をＰ値硬判定値の反対の値にセットするステップ、（ｉｉｉ）そのビットノードのＬｃｈ値、Ｐ値、及び全ての関連するＱｎｍメッセージのマグニチュードビットを最大値にセットするステップ、及び（ｉｖ）Ｌｃｈ、Ｐ、及び全ての他のビットのＱｎｍメッセージ値のマグニチュードを最大許容値の１５％に限定するステップを備える。最初のマグニチュードのみが限定されることに留意されたい。復号セッションが進むにつれて、Ｐ値及びメッセージ値は更新され、任意の許容値を想定することができる。他方、Ｌｃｈ値はリードオンリであり、従って、復号セッションの継続期間の間はそれらの限定されたマグニチュード値を維持することになる。
【００４７】
消去は、ビットノード値を変更するための別の特定のプロセスである。ビットノードを消去するステップは（ｉ）そのビットノードのＬｃｈ値の硬判定値を０にセットするステップ、及び（ｉｉ）その同じＬｃｈ値のマグニチュードビット即ち信頼度を０、即ち信頼度なしにセットするステップを備える。
【００４８】
トラッピングセットに対応する近コードワードのためのＥＢＮのうちの１つ以上が調整（例えば、フリップ又は消去）された場合は、その結果としての修正コードワードに対するＬＤＰＣ復号を再実行することはＤＣＣＷに収束することができる。首尾よくいった場合は、このプロセスは、トラッピングセットをブレークすると言われる。従って、ＬＤＰＣデコーダのエラーフロア特性を改善するための別のやり方は、失敗したデコーダの近コードワード（ＮＣＷ）を取り出し、ＮＣＷ内の可能なＥＢＮを識別し、それらのＥＢＮのうちの１つ以上をフリップ又は消去し、修正されたＮＣＷをさらなるＬＤＰＣ処理のために提出することである。
【００４９】
いくつかのトラッピングセットは、単一のＥＢＮをフリップ又は消去することによりブレークされることが可能である。他のトラッピングセットでは、単一のＥＢＮをフリップ又は消去することはＵＳＣの数を低減することができるが、トラッピングセットを完全にブレークすることはできず、第２の別のトラッピングセットを生じ、その後、このトラッピングセットは、別のＥＢＮをフリップ又は消去することによりブレークされることが可能である。さらに他のトラッピングセットは、同時に２つ以上のＥＢＮをフリップ又は消去することによってのみブレークされることが可能である。
【００５０】
トラッピングセットは、（１）デコーダの動作条件（例えば、デコーダアルファベット、デコーダアルゴリズム、デコーダチェックノード更新方法）、（ｉｉ）書込みエラー、及び（ｉｉｉ）読出しエラーに基づいて幅広く変わる。通信チャネルが記憶装置である場合は、書込みエラーは、コードワードのビットが記憶装置に不正確に書き込まれたとき、即ち、書き込まれた符号化コードワード内のビットの値が対応するチャネル入力コードワード内の対応するビットの値に一致しないときである。読出しエラーは、正確に書き込まれたコードワードのビットが記憶装置から不正確に読み出されたとき、即ち、チャネル出力コードワード内のビットの値が書き込まれた符号化コードワード内の対応するビットの値に一致しないときである。読出しエラーからの回復は、例えば、セクタを複数回再読み出しして、その後、複数の読出しサンプルを平均することにより可能である。しかし、書込みエラーからの回復は、セクタを再読み出しすることによってでは可能でない。
【００５１】
本発明の諸実施形態は、書込みエラーに起因するＬＤＰＣデコーダ入力コードワード内のそれらのＥＢＮを推定し訂正するための方法である。これらの方法は、通常、１対のプロセス、即ち、書込みエラー検証プロセス及び書込みエラー回復プロセスを備える。書込みエラー検証プロセスは、コードワードが記憶媒体に書き込まれるときに実行される。書込みエラー回復プロセスは、後ほど、コードワードが記憶媒体から読み出され、復号されるときに実行される。
【００５２】
図４は、本発明の一実施形態によるチャネルコントローラ１２０によって制御される図１の通信システム１００によって実装されるＬＤＰＣ符号化／復号プロセス４００の流れ図である。処理はステップ４０２において開始し、続いてステップ４０４に進み、そこでデータソース１０２が元の情報ワード１０４をＬＤＰＣエンコーダ１０６に提供する。次に、ステップ４０６において、ＬＤＰＣデコーダ１０６は元の情報ワード１０４を符号化して、チャネル入力コードワード１０８を生成する。次に、ステップ４０８において、チャネル入力コードワード１０８は記憶媒体１１０（例えば、フラッシュドライブ）に書き込まれる。次に、ステップ４１０、書込みエラー検証プロセスが実行され、このプロセスは、以下で、図６及び７の議論において、より詳細に説明される。
【００５３】
後ほどいつか、ステップ４１２において、記憶されているコードワードが記憶媒体１１０から読み出され、チャネル検出器１１２によって検出され、対応するデコーダ入力コードワードのためのＬｃｈ値がＬＤＰＣデコーダ１１４に送信される。次に、ステップ４１４において、ＬＤＰＣデコーダ１１４はデコーダ入力コードワードを処理して復号コードワードを生成する。この処理はＬＤＰＣ復号、並びに、エラーフロア軽減方法、媒体欠陥検出方法、及び標準的なチャネルリトライ方法など、様々な読出しイベント方法を含む。ステップ４１４の処理の最終的な効果は、読出しエラーによる全てのＥＢＮが訂正され、復号コードワードに残っているＥＢＮはいずれも書込みエラーであるということである。
【００５４】
次に、ステップ４１６において、復号コードワードが誤りビットを有するかどうかが判定される。有しない場合は、復号コードワードはＤＣＣＷであり、プロセスはステップ４２０において終了する。そうではなく、復号コードワードが１つ以上の誤りビットを有する場合は、ステップ４１８において、書込みエラー回復プロセスが復号コードワードに対して実行され、このプロセスは、以下で図８の議論において、より詳細に説明される。
【００５５】
書込みエラー検証プロセス４１０は、チャネル入力コードワードが、書き込まれた符号化コードワードとして、記憶媒体、例えばフラッシュドライブに最初に書き込まれるときに実行される。書込みエラー検証プロセスは、書き込まれた符号化コードワードを読み戻し、対応するデコーダ入力コードワードを生成する。その後、プロセスは、デコーダ入力コードワードに対してＬＤＰＣ復号を実行して復号コードワードを生成する。次いで、プロセスは、チャネル入力コードワードを復号コードワードと比較し、誤りビットの数及び添え字を判定する。誤りビットの数が０より大きく、且つ指定された閾値より小さい場合は、プロセスは、誤りビット情報を誤りビットテーブルと呼ばれるデータ構造に書き込む。本発明の一実施形態では、誤りビット情報は、誤りビットのうちの１つ以上のもののコードワード識別子（例えば、フラッシュドライブページＩＤ）及び添え字を備える。誤りビットの添え字は、復号コードワード内の誤りビットのロケーションを識別する。誤りビットテーブルは、通常、記憶媒体上に記憶される。
【００５６】
図５は、誤りビットテーブルの一実施形態の図である。テーブル５００は、３つの列（フィールド）及び任意の数の行（レコード）を備える。列ＣＯＤＥＷＯＲＤ＿ＩＤＥＮＴＩＦＩＥＲは、コードワード識別子（例えば、フラッシュドライブページＩＤ）を含む。列ＥＢ＿ＩＮＤＩＣＥＳは、書込みエラー検証プロセスによって識別された１つ以上の誤りビットの添え字を含む。列ＣＯＭＰＬＥＴＥ＿ＳＥＴは、列ＥＢ＿ＩＮＤＩＣＥＳ内の識別された誤りビット添え字が、書込みエラー検証プロセスによって検出された誤りビット添え字の全て（即ち、真又は１）を表すか、或いは適切なサブセット（即ち、偽又は０）を表すかを示す１ビット真／偽フィールドである。
【００５７】
図６は、本発明の一実施形態による、図４のステップ４１０、即ち書込みエラー検証プロセスの流れ図である。処理はステップ６０２において開始し、ステップ６０４に進み、そこで、書き込まれた符号化コードワードが記憶媒体から読み出され、デコーダ入力コードワードが生成される。
【００５８】
次に、ステップ６０６において、ＬＤＰＣ復号が様々な読出しイベント方法（例えば、エラーフロア軽減方法、媒体欠陥検出方法、標準的なチャネルリトライ方法）といっしょにデコーダ入力コードワードに対して実行され、復号コードワードが生成される。ステップ６０６の処理の最終的効果は、読出しエラーに起因するあらゆる誤りビットが訂正され、復号コードワードに残っているいかなる誤りビットも書込みエラーに起因するものであるということである。次に、ステップ６０８において、復号コードワードは、ビットに関してチャネル入力コードワードと比較され、（ビット誤一致に対応する）任意の誤りビットの数及び添え字が判定される。
【００５９】
ステップ６１０において、誤りビットの数が０である（即ち、ステップ６０６においてデコーダがＤＣＣＷに収束した）場合は、書込みエラー検証プロセス４１０は、ステップ６１６において終了する。そうではなく、誤りビットの数が指定された閾値（例えば、３２）を超える場合は、ステップ６１４において、それ自体の方法を実行してエラーを訂正することもできる図１のチャネルコントローラ１２０に制御が与えられる。例えば、チャネルコントローラ１２０は、記憶媒体（例えばフラッシュドライブページ）上の現在のロケーションを不良とマークすることを決定し、チャネル入力コードワード１０８を別のロケーションに書き込もうと試みることもできる。チャネルコントローラ方法は、特定のチャネルコントローラ及びそのチャネルコントローラのメーカに特有のものである傾向がある。そうではなく、誤りビットの数が０より大きいが、指定された閾値以下である場合は、ステップ６１２において、１つ以上の誤りビット添え字が誤りビットテーブルに書き込まれる。
【００６０】
テーブルリミットＬは、任意のコードワードのために誤りビットテーブルに記憶されることが可能である誤りビット添え字の最大数を指定する。識別された全ての誤りビットに関する情報を記憶することは、必ずしも常に必要であるとは限らない。研究調査は、５，０００ビットＬＤＰＣコードワードの場合、４個以上のＥＢＮを有するトラッピングセットでは、それらのＥＢＮのうちの任意の３個をフリップすることは、そのトラッピングセットをブレークすることを示している。従って、通常、誤りビットテーブルにコードワードごとに４個以上の誤りビットを記憶する必要はない。その場合は、３がテーブルリミットＬである。
【００６１】
さらに、大抵のトラッピングセットは、１つ又は２つのＥＢＮをフリップすることによりブレークされることが可能である。１つ又は２つの誤りビット添え字のみを記憶することが決定され、即ちＬが１又は２であり、識別された誤りビットの数がＬより大きい場合は、Ｌの選択された添え字は、それらの添え字におけるビットをフリップすることが、デコーダがＤＣＣＷに収束することができるようにすることを保証するためにテストされる。そうでない場合は、Ｌの添え字の他のセットが選択され、（ｉ）デコーダがＤＣＣＷに収束するか、又は（ｉｉ）サブセットがそれ以上入手されなくなるまでテストされる。
【００６２】
図７は、図６のステップ６１２の流れ図である。プロセス６１２は、図６のステップ６０７において検出された誤りビット添え字のうちのどれが、もしあれば、誤りビットテーブルに書き込まれるかを選択する。
【００６３】
処理はステップ７０２おいて開始し、ステップ７０４に進み、そこで、誤りビットの数がテーブルリミットＬ以下であるかどうかが判定される。
【００６４】
ステップ７０４において誤りビットの数がＬ以下である場合は、ステップ７０６において全ての誤りビット添え字が選択され、変数ＶＡＲＣＯＭＰＬＥＴＥＳＥＴが１（真）にセットされる。次に、ステップ７０８において、レコードが誤りビットテーブル（例えば図５の５００）に付加される。付加されたレコードのフィールドは、次のとおりセットされる。フィールドＣＯＤＥＷＯＲＤ＿ＩＤＥＮＴＩＦＩＥＲは、一意のコードワード識別子（例えばフラッシュドライブページＩＤ）と等しくセットされる。フィールドＣＯＭＰＬＥＴＥ＿ＳＥＴはＶＡＲＣＯＭＰＬＥＴＥＳＥＴの値にセットされる。選択された誤りビット添え字はＥＢ＿ＩＮＤＩＣＥＳに記憶される。
【００６５】
そうではなく、ステップ７０４において、誤りビットの数がＬより大きい場合は、ステップ７１２において、Ｌが３以上であるかどうかが判定される。そうである場合は、ステップ７１４において、Ｌの誤りビット添え字がランダムに選択され、ＶＡＲＣＯＭＰＬＥＴＥＳＥＴが０にセットされる。その後、処理は続いてステップ７１６に進み、そこで変数ＶＡＲＣＯＭＰＬＥＴＥＳＥＴが０にセットされる（即ち、誤りビット添え字全てより少ないものが誤りビットテーブルに記憶される）。その後、処理は（前述の）ステップ７０８に進み、ステップ７１０において終了する。
【００６６】
そうではなく、ステップ７１２において、Ｌが１又は２である場合は、処理は続いてステップ７１８に進み、そこでＬの誤りビット添え字が選択される。次に、ステップ７２０において、選択された添え字における元のデコーダ入力コードワード内のそれらのビットは、フリップされて、修正されたデコーダ入力コードワードを生じる。次に、ステップ７２２において、ＬＤＰＣ復号が、修正されたデコーダ入力コードワードに対して実行されて、復号コードワードを生成する。その後、ステップ７２４において、復号コードワードがチャネル入力コードワードと比較される。デコーダ出力コードワードに誤りビットがない場合は（ステップ７２６）、ステップ７１６において、ＶＡＲＣＯＭＰＬＥＴＥＳＥＴが０にセットされ、処理は（前述の）ステップ７０８及び７１０に進む。
【００６７】
そうではなく、ステップ７２６において、復号コードワードが誤りビットを含むと判定された場合は、ステップ７２８において、Ｌの誤りビット添え字の別のセットが存在するかどうかが判定される。存在する場合は、ステップ７３２において、別のセットが選択される。次いで、ステップ７３４において、デコーダ入力コードワードは元のデコーダ入力コードワードにリセットされ（即ち、ステップ７２０において行われた変更が元に戻され）、処理はステップ７２０に戻る。
【００６８】
そうではなく、ステップ７２８において、Ｌの誤りビット添え字の他のセットが存在しない場合は、プロセス６１２は、ステップ７３０においてチャネルコントローラに制御を与え、ステップ７１０において終了する。チャネルコントローラの議論に関しては、上記の図６のステップ６１４の説明を参照されたい。
【００６９】
図４の書込みエラー回復プロセス４１８は、後ほど、システムが書き込まれた符号化コードワードを記憶媒体から読み出し、ＬＤＰＣデコーダが復号反復の指定された最大数以内にＤＣＣＷに収束することができないときに、実行される。書込みエラー回復プロセスは、一意のコードワード識別子（例えばフラッシュドライブページＩＤ）を使用して、失敗した復号コードワードに一致するレコードがないか誤りビットテーブルを探索する。一致が発見された場合は、一致するレコードから誤りビット添え字が取り出され、取り出された添え字における失敗した復号コードワードビットの値はフリップされて、修正コードワードを生じる。
【００７０】
記憶されている誤りビット添え字が、書込み検証プロセス中に検出された全ての誤りビット添え字を表す場合は（即ち、ＣＯＭＰＬＥＴＥ＿ＳＥＴ＝１）、修正コードワードは、通常、シンドロームチェック及び巡回冗長検査のみに提出される。シンドロームチェックは、修正されたデコーダ入力コードワードが有効なＬＤＰＣコードワードであるかどうかを判定し、巡回冗長検査は、その有効なＬＤＰＣコードワードがＤＣＣＷであるかどうかを判定する。
【００７１】
そうではなく、記憶されている誤りビット添え字が、書込み検証プロセス中に検出された誤りビット添え字の全てより少ないものを表す場合は（即ち、ＣＯＭＰＬＥＴＥ＿ＳＥＴ＝０）、修正された復号コードワードは、さらなるＬＤＰＣ復号（例えば、初期化ステップ３０４のない図３のプロセス３００）に提出される。書込みエラー回復プロセスは、（ｉ）さらなる復号がＤＣＣＷに収束するか、又は（ｉｉ）デコーダが復号反復の指定された最大数以内にＤＣＣＷに収束することができないときに終了する。
【００７２】
図８は、本発明の一実施形態による図４の書込みエラー回復プロセス４１８の流れ図である。処理はステップ８０２において開始し、ステップ８０４に進み、そこで、失敗した復号コードワードがＬＤＰＣデコーダから受信される。次に、ステップ８０６において、プロセス４１８は、例えばフラッシュドライブページＩＤによって探索して、復号コードワードとの一致がないか誤りビットテーブル（例えば、図５の５００）を探索する。一致が発見されない場合は、プロセス４１８は、ステップ８０８においてチャネルコントローラに制御を与え、次いで、ステップ８１０において終了し、そうでない場合は、ステップ８１２において、ＥＢ＿ＩＮＤＩＣＥＳ及びＣＯＭＰＬＥＴＥ＿ＳＥＴの値がビットエラーテーブルから取り出される。
【００７３】
次に、ステップ８１４において、プロセス４１８は、取り出された誤りビット添え字における復号コードワードビットの値をフリップして、修正コードワードを生じる。フリップするステップは、上記で、「００６０」から「００６３」までの段落において説明されている。次に、ステップ８１６において、ＣＯＭＰＬＥＴＥ＿ＳＥＴが０である（即ち、誤りビット添え字の適切なサブセットのみが誤りビットテーブルに記憶されていた）場合は、修正コードワードはステップ８１８においてＬＤＰＣ復号に提出される。ステップ８１８がＤＣＣＷを生じた場合は（ステップ８２０）、プロセス４１８はステップ８１０において終了する。ステップ８１８がＤＣＣＷを生じない場合は、ステップ８０８において、チャネルコントローラに制御が与えられ、プロセス４１８はステップ８１０において終了する。
【００７４】
他方、ステップ８１６において、ＣＯＭＰＬＥＴＥ＿ＳＥＴが１である（即ち、全ての誤りビット添え字が誤りビットテーブルに記憶されていた）場合は、修正コードワードは、ステップ８２２においてシンドロームチェックに提出される。修正コードワードがシンドロームチェックを失敗した場合は、プロセス４１８はチャネルコントローラに制御を与え（ステップ８０８）、ステップ８１０において終了する。そうではなく、ステップ８２２において、修正されたデコーダ入力コードワードがシンドロームチェックを通った場合は、ステップ８２４においてＣＲＣチェックが実行される。修正されたデコーダ入力コードワードがＣＲＣチェックを通った場合は、処理はステップ８１０において終了する。そうではなく、ステップ８２４において、修正コードワードがＣＲＣチェックを通らない場合は、チャネルコントローラに制御が与えられ（ステップ８０８）、プロセス４１８はステップ８１０において終了する。
【００７５】
書込み回復プロセス４１０の他の実施形態では、ステップ８１４はデコーダ入力コードワード内のビットをフリップし、復号コードワード内のビットはフリップしない。
【００７６】
要約すると、本発明の諸実施形態は、書込みエラーを含むＮＣＷからＤＣＣＷを生成するための方法である。これらの方法は、通常、書込み検証プロセス及び書込みエラー回復プロセスを備える。書込み検証プロセスは、チャネル入力コードワードが記憶媒体に書き込まれるときに実行され、書き込まれたコードワード内の書込みエラー、例えば誤りビットを識別し、誤りビットのうちの１つ以上のものの添え字を誤りビットテーブルに記憶する。書込み回復プロセスは、後ほどいつか、デコーダがコードワードを復号しようと試み、ＮＣＷで失敗したときに、実行され、ＮＣＷに関連する誤りビット添え字がないか誤りビットテーブルを探索する。関連する誤りビット添え字が発見された場合は、ＮＣＷ内の対応するビットはフリップされ、ＮＣＷはさらなるＬＤＰＣ復号に提出される。
【００７７】
本発明はハードディスクドライブ及びフラッシュドライブのコンテキストで説明されてきたが、本発明はそのように限定されない。一般に、本発明は、任意の適切な記憶媒体を用いて実装されることが可能である。
【００７８】
さらに、本発明の諸実施形態はＬＤＰＣ符号のコンテキストで説明されてきたが、本発明はそのように限定されない。本発明の諸実施形態は、トラッピングセットの影響を受けるのはグラフ定義の符号なので、グラフによって定義されることが可能である任意の符号、例えば、トルネード符号、構造化ＩＲＡ符号のために実装されることも可能である。
【００７９】
本発明は、方法及びそれらの方法を実施するための装置の形態で実施されることが可能である。本発明はまた、磁気記録媒体、光記録媒体、固体メモリ、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、又は他の任意の機械可読記憶媒体などの有形媒体において実施されるプログラムコードの形態で実施されることが可能であり、プログラムコードがコンピュータなどの機械にロードされ機械によって実行されるとき、その機械は本発明を実施するための装置になる。本発明はまた、例えば、記憶媒体に記憶されていても、或いは機械にロードされ且つ／又は機械よって実装されても、プログラムコードの形態で実施されることが可能であり、そのプログラムコードがコンピュータなどの機械にロードされ機械によって実行されるとき、その機械は本発明を実施するための装置になる。プログラムコードセグメントは、汎用プロセッサ上で実装されるとき、そのプロセッサと結合して、特定の論理回路と同様に動作する一意の装置を提供する。
【００８０】
別途明記されない限り、各数値及び範囲は、単語「約（ａｂｏｕｔ）」又は「おおよそ（ａｐｐｒｏｘｉｍａｔｅｌｙ）」がその数値又は範囲の値に先行しているかのように、およそであると解釈されるべきである。
【００８１】
本発明の本質を説明するために記述され例示されてきた部分の細部、材料、及び配列の様々な変更が、添付の請求項に明示されている本発明の範囲から逸脱することなく当業者によって加えられてよいことがさらに理解されるであろう。
【００８２】
請求項における図の数字及び／又は図の参照ラベルの使用は、請求項の解釈を容易にするために本特許請求の主題の１つ以上の可能な実施形態を識別することを意図するものである。そのような使用は、それらの請求項の範囲を対応する図に示されている実施形態に必ず限定するとは解釈されないものとする。
【００８３】
本明細書で説明されている例示的方法の諸ステップは、記載された順序で実行されることを必ずしも必要とされないことが理解されるべきであり、そのような方法の諸ステップの順序は、単に例示であると理解されるべきである。同様に、追加のステップがそのような方法に含まれてもよく、いくつかのステップは、本発明の様々な実施形態と矛盾しない方法で、省略されても又は結合されてもよい。
【００８４】
添付の方法請求項における要素は、もしあれば、対応するラベリングによって特定の順序で記述されるが、請求項の記述がそれらの要素のいくつか又は全てを実装するための特定の順序を別途暗示しない限り、それらの要素は、必ずしもその特定の順序で実装されることに限定されることを意図するものではない。
【００８５】
本明細書における「一実施形態（ｏｎｅ ｅｍｂｏｄｉｍｅｎｔ）」又は「実施形態（ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」への言及は、その実施形態に関連して説明された特定の特徴、構造、又は特性が、本発明の少なくとも１つの実施形態に含まれてよいことを意味する。本明細書の様々な場所における「一実施形態における」というフレーズの出現は、必ずしも全て同じ実施形態を指すとは限らず、別々の又は代替の実施形態は、必ずしも他の実施形態と相互に排他的であるとも限らない。用語「実装形態（ｉｍｐｌｅｍｅｎｔａｔｉｏｎ）」にも同じことが言える。
【図１】
0005432367.tif 000045
【図２】
0005432367.tif 000046
【図３】
0005432367.tif 000047
【図４】
0005432367.tif 000048
【図５】
0005432367.tif 000049
【図６】
0005432367.tif 000050
【図７】
0005432367.tif 000051
【図８】
0005432367.tif 000052