(57)【要約】【課題】  ＬＤＰＣコードによって符号化されたビット・シーケンスを復号するための方法を提供する。【解決手段】  この方法は、第１の状態および第２の状態を含むビット状態セットと、ビット状態を変更するための第１の条件および第２の条件を含む条件セットと、を提供することを含む。第１の条件と第２の条件とは異なっている。この方法は、シーケンスの各ビットの値を読み取り、読み取った値に従って各ビットをセットの各状態に関連付けることと、評価した条件が満足されたことを判定することと、条件が満足されたことの結果としてターゲット・ビットの状態を変更することと、を含む。次いで、この方法は、シーケンスのターゲット・ビットの状態に従ってその値を設定することができる。  かかる方法は、伝統的なビット反転アルゴリズムよりも優れた性能で、複雑度をわずかに増すだけで、ＬＤＰＣコードにより符号化されたビット・シーケンスを復号するためのソリューションを提供する。【選択図】図３
2013532422.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュ・メモリ等の２進非対称チャネルに追従するメモリ上に書き込まれたビット・シーケンスを復号するための方法であって、前記ビット・シーケンスが低密度パリティ・チェック・コードすなわちＬＤＰＣにより符号化されており、これによって前記シーケンスの各ビットが前記ＬＤＰＣコードにより規定された対応するパリティ・チェックを有し、この方法が、
−第１の状態（Ｓ１）および第２の状態（Ｓ２）を含むビット状態セット（１０）と、条件セット（２０）と、を提供することであって、条件が満足された場合にビット状態が変更されることになり、前記条件セットが、ビット状態を前記第１の状態から前記第２の状態へと変更するための第１の条件（Ｃ１）と、ビット状態を前記第２の状態から前記第１の状態へと変更するための第２の条件（Ｃ２）と、を含み、前記第１の条件と前記第２の条件とは異なっている、ことと、
−前記ビット・シーケンスの各ビットの値を読み取り、読み取った前記値に従って各ビットを前記セットの各状態に関連付けること（Ｓ１００）と、
−前記ビット・シーケンスのターゲット・ビット（３０）について、条件を評価すること（Ｓ２００）であって、
・前記条件は、前記ターゲット・ビットの状態に従って前記条件セットから選択され、
・前記条件を評価することは、前記ターゲット・ビットに対応した前記パリティ・チェックの計算結果を用いる、ことと、
−前記条件が満足されたことを判定すること（Ｓ３００）と、
−前記条件が満足されたことの結果として前記ターゲット・ビットの前記状態を変更すること（Ｓ４００）と、
−前記ターゲット・ビットの前記状態に従って前記ターゲット・ビットの前記値を設定すること（Ｓ５００）と、
を含む、方法。
【請求項２】
前記評価するステップを繰り返し（Ｓ６００）、前記ターゲット・ビットが、前記評価するステップの各繰り返しにおいて前記シーケンスの異なるビットである、請求項１に記載の方法。
【請求項３】
前記パリティ・チェックの前記計算の結果によって全てのパリティ・チェックが満足されたことが示されるか、または最大繰り返し数に達するまで、前記評価するステップを繰り返す、請求項２に記載の方法。
【請求項４】
−前記ビット状態セットが前記第１の状態および前記第２の状態から成り、
−前記条件セットが前記第１の状態および前記第２の状態から成り、
−各ビットを関連付ける前記ステップにおいて、ビットを、
・前記ビットの値が０と読み取られた場合は前記第１の状態に、
・前記ビットの値が１と読み取られた場合は前記第２の状態に関連付け、
−前記ターゲット・ビットの前記値を設定する前記ステップにおいて、前記ターゲット・ビットの前記値を、
・前記ターゲット・ビットが前記第１の状態に関連付けられている場合は０に、
・前記ターゲット・ビットが前記第２の状態に関連付けられている場合は１に設定する、
請求項１から３のいずれかに記載の方法。
【請求項５】
前記ターゲット・ビットに対応した前記パリティ・チェックの過半数が満足されない場合はいつでも前記第１の条件が満足され、前記ターゲット・ビットに対応した全ての前記パリティ・チェックが満足されない場合はいつでも前記第２の条件が満足される、請求項４に記載の方法。
【請求項６】
満足されない前記ターゲット・ビットに対応したパリティ・チェックの数が第１の閾値よりも大きい場合はいつでも前記第１の条件が満足され、満足されない前記ターゲット・ビットに対応したパリティ・チェックの数が第２の閾値よりも大きい場合はいつでも前記第２の条件が満足され、前記第１の閾値と前記第２の閾値とは異なっている、請求項４に記載の方法。
【請求項７】
−前記ビット状態セットが第３の状態（Ｓ３）および第４の状態（Ｓ４）を更に含み、
−前記条件セットが条件対の第１のサブセットを含み、
・対の一方の条件が、ビット状態をｉ番目の状態からｊ番目の状態へと変更するための条件であり、
・前記対の他方の条件が、ビット状態を前記ｊ番目の状態から前記ｉ番目の状態へと変更するための条件であり、
・対の前記条件は異なっており、
・前記第１の条件および前記第２の条件が前記第１のサブセットの対を形成し、
−前記条件セットが条件対の第２のサブセットも含み、
・対の一方の条件が、ビット状態をｋ番目の状態からｌ番目の状態へと変更するための条件であり、
・前記対の他方の条件が、ビット状態を前記ｌ番目の状態から前記ｋ番目の状態へと変更するための条件であり、
・前記第２のサブセットの対の前記条件は同一である、
請求項１から３のいずれかに記載の方法。
【請求項８】
前記条件セットが、ビット状態をｍ番目の状態からｎ番目の状態へと変更するための少なくとも１つの条件を含む第３のサブセットを更に含み、前記条件セットにおいて、ビット状態を前記ｍ番目の状態から前記ｎ番目の状態へ変更するための条件は存在しない、請求項７に記載の方法。
【請求項９】
前記ターゲット・ビットに対応した全ての前記パリティ・チェックの全て、または少なくとも１つであるが過半数よりも少数、または過半数が満足されないか、または前記ターゲット・ビットに対応した全ての前記パリティ・チェックが満足された場合はいつでも、条件が満足される、請求項８のいずれかに記載の方法。
【請求項１０】
−前記第１のビット状態が、前記メモリへの書き込み対象の前記ビットの前記値が０であることの高い信頼度に対応し、
−前記第２の状態が、前記メモリへの書き込み対象の前記ビットの前記値が０であることの低い信頼度に対応し、
−前記第３の状態が、前記メモリへの書き込み対象の前記ビットの前記値が１であることの高い信頼度に対応し、
−前記第４の状態が、前記メモリへの書き込み対象の前記ビットの前記値が１であることの低い信頼度に対応し、
前記条件の第１のサブセットが、
−前記ターゲット・ビットに対応した全ての前記パリティ・チェックの少なくとも１つであるが過半数よりも少数が満足されない場合に満足される前記第１の条件と、
−前記ターゲット・ビットに対応した全ての前記パリティ・チェックが満足されない場合に満足される前記第２の条件と、
−前記ターゲット・ビットに対応した全ての前記パリティ・チェックの少なくとも１つであるが過半数よりも少数が満足されない場合に満足される、ビットを前記第３の状態から前記第４の状態へと変更させるための第３の条件と、
−前記ターゲット・ビットに対応した全ての前記パリティ・チェックが満足されない場合に満足される、ビットを前記第４の状態から前記第３の状態へと変更させるための第４の条件と、
を含み、前記条件の第２のサブセットが、
−前記ターゲット・ビットに対応した全ての前記パリティ・チェックの過半数が満足されない場合に満足される、ビットを前記第２の状態から前記第４の状態へと変更させるための第５の条件と、
−前記ターゲット・ビットに対応した全ての前記パリティ・チェックの過半数が満足されない場合に満足される、ビットを前記第４の状態から前記第２の状態へと変更させるための第６の条件と、
を含み、前記条件の第３のサブセットが、
−前記ターゲット・ビットに対応した全ての前記パリティ・チェックの過半数が満足されない場合に満足される、ビットを前記第１の状態から前記第４の状態へと変更させるための第７の条件と、
−前記ターゲット・ビットに対応した全ての前記パリティ・チェックの過半数が満足されない場合に満足される、ビットを前記第３の状態から前記第２の状態へと変更させるための第８の条件と、
を含む、請求項８に記載の方法。
【請求項１１】
前記ターゲット・ビットに対応した前記パリティ・チェックの計算が、対応するビット状態によって決定された前記シーケンスのビットの値に従って実行される、請求項１から１０のいずれか１項に記載の方法。
【請求項１２】
コンピュータによって実行するための命令を含むコンピュータ・プログラムが記録されたコンピュータ読み取り可能記憶媒体であって、前記命令が請求項１から１１のいずれかに記載の方法を実行するための手段を含む、コンピュータ読み取り可能記憶媒体。
【請求項１３】
−ＬＤＰＣコードによって符号化されたビット・シーケンスを書き込むのに適したメモリと、
−請求項１から１１のいずれかに記載の方法を実行するための手段と、
を含む、システム。
【請求項１４】
前記メモリが、好ましくは浮動ゲート・トランジスタ技術に基づくフラッシュ・メモリである、請求項１３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ科学の分野に関し、具体的には低密度パリティ・チェック・コード復号の分野に関する。
【背景技術】
【０００２】
低密度パリティ・チェック（ＬＤＰＣ：Low-density parity-check）コードは、最初にＧａｌｌａｇｅｒにより導入され、ＭａｃｋａｙおよびＭｅａｌにより知名度が高まったものであり、許容可能な冗長性レベルで符号化された情報の高速かつロバストな検索を可能とする強力なコードである。このためＬＤＰＣコードは、情報をメモリに記憶するためまたは情報を送信するために広く用いられている。なぜなら、それらが必要とする情報の冗長性、ならびに、書き込みと読み取りとの間および送信と受信との間の情報に生じたエラーを訂正するために必要な時間が、極端に大きくはないからである。
【０００３】
メモリ記憶において、情報および符号化理論で広く用いられる言葉であるチャネル・モデルは、読み取られた符号化データと書き込み対象の符号化データとの間で観察されるエラーを記述するために用いられるモデルである。モデルによると、データにエラーが生じた場合、１個のデータはチャネルに追従すると言われる。典型的に、１個のデータが含むビット・シーケンスがメモリへの書き込み対象であり次いで読み取られる場合、ビットの真の値（すなわち書き込み対象のビットの値）は、書き込みの間、または記憶の間、または読み取りの間にも、変わる場合がある。用途およびエラーの理由についての仮説に応じて、異なるチャネル・モードを用いることができる。広く用いられるチャネルは、加法性ホワイト・ガウス・ノイズ（ＡＷＧＮ：additive white Gaussian noise）・チャネルおよび２進対称チャネル（ＢＳＣ：binary symmetric channel）を含む。
【０００４】
シングル・レベル・セル（ＳＬＣ）・フラッシュ・メモリは、ビットを書き込むことができる個別のセルから成るメモリである。このため、各セルは単一のビットを表す。フラッシュ・セルは浮動ゲート・トランジスタ技術に基づいている。すなわち、フラッシュ・セルのトランジスタ・ゲート上に「トラップされた」電荷が、フラッシュ・セル上で読み取られる論理レベル（すなわちビットの値）を決定する。いくぶん簡略化すると、フラッシュの動作方法は以下のように説明することができる。セルを「消去する」場合、ゲート上に電荷を配し、このセルを論理１として読み取る（すなわちビットの値が１である）。セル上に「０をプログラムすること（すなわち書き込むこと）」は、ゲートを放電することに相当し、論理値をゼロとする。消去された（それぞれ荷電された）セルをプログラムする（それぞれ放電する）ことができるだけである。
【０００５】
フラッシュは、ページおよびブロックで構成されている。ページは、典型的に多数のフラッシュ・セル（例えば情報ビットを記憶するための４０９６バイトおよび冗長ビットを記憶するための１２８バイト）から成り、ブロックは、多数のページ（例えば６４）から成る。通常、読み取りおよび書き込み動作はページ・レベルで行われるが、消去動作は全ブロックに対して実行される。０に書き込まれているビットのみが放電されているので、残りのビットはなお荷電されている。これが意味するのは、いずれかの特定のセル／ビットに生じる実際の摩耗は、それまでそこに書き込まれた０の数に比例するということである。典型的にフラッシュ・セルは、１０，０００消去／書き込みサイクルの耐久性仕様を有する。すなわち、各セルは０により１０，０００回消去および書き込みを行うことができる。
【０００６】
フラッシュの読み取り／書き込み／消去動作に固有の荷電／放電プロセスのために、最も多く観察されるエラー・パターンは１から０への望ましくない変換であることが認められている。これは、図１に示すいわゆる２進非対称チャネル（ＢＡＣ：binary asymmetric channel）によってモデル化することができる。図１を参照すると、書き込まれた１は、確率１−ａで１として、エラー確率ａで０として読み取ることができ、記憶された０は、確率１−ａ／ｂで０として、エラー確率１−ａ／ｂで１として読み取ることができる。ここでａは１０−３から１０−５までの範囲の小さい数であり、ｂは例えば１０のような１よりも大きい実数である。あるいは図２に示すように、０から１へのエラー・パターンを無視することによって、フラッシュ・メモリをＺチャネルでモデル化することができるが、これはｂが無限大になるときのＢＡＣの特別な場合である。
【０００７】
他のチャネル・モデルにおいてと同様、ＬＤＰＣコードによって符号化されたビット・シーケンスをフラッシュ・メモリ上に書き込むことができる。非特許文献１〜非特許文献４は、非対称チャネルについてのＬＤＰＣ符号化を扱っている。
【０００８】
ＬＤＰＣコードで符号化された情報を復号するために、実用的な復号アルゴリズムが用いられる。これらには、ビット反転（bitflipping）、Ｇａｌｌａｇｅｒ  Ａ／Ｂ、確率伝播（belief propagation）、および積和（sum-product）等のアルゴリズムが含まれ、これらは長いＬＤＰＣコードで動作し、例外的なエラー保護を与えることが実証されている。これらの復号アルゴリズムのうち、ビット反転は最も簡単で実施が容易なものである。
【０００９】
ビット反転アルゴリズムの１つの利点は、他のアルゴリズムに比べて関連する復号の複雑度が著しく低いことである。例えばＦｅｎｇ  ＧｕｏおよびＬａｊｏｓ  Ｈａｎｚｏｌの「Ｒｅｌｉａｂｉｌｉｔｙ  Ｒａｄｉｏ  Ｂａｓｅｄ  Ｗｅｉｇｈｔｅｄ  Ｂｉｔ−Ｆｌｉｐｐｉｎｇ  Ｄｅｃｏｄｉｎｇ  ｆｏｒ  ＬＤＰＣ  ｃｏｄｅｓ」と題する文書に開示された、積和アルゴリズムに対する比較を簡単に述べる。積和アルゴリズムでは、繰り返し当たりの符号化ビット当たり、２ｊｑ数の加算および７ｊｑ／ｌｏｇ２（ｑ）の乗算が必要である。ここでｑは復号フィールドのサイズであり、この２進状況では２である。ブロック長が１０００ビットであり最大の繰り返し数が１０である場合、必要な算術演算数は２００，０００の加算および７００，０００の乗算である。更に、ビット反転アルゴリズムでは、高コストの加算および乗算を何ら必要としない。ビット反転アルゴリズムでは、シンドロームを評価することによる論理演算を必要とするだけであり、これはデジタル論理をほとんど必要とせず、極めて高速とすることができる。
【００１０】
非特許文献５〜７は、ＬＤＰＣコードの繰り返し復号についてビット反転アルゴリズムの様々なバージョンを扱っている。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】「ＬＤＰＣ  ｃｏｄｅｓ  ｆｏｒ  ｂｉｎａｒｙ  ａｓｙｍｍｅｔｒｉｃ  ｃｈａｎｎｅｌｓ」Ｍａｒｉｎａ，  Ｎ．、ＩＣＴ  ２００８、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｔｅｌｅｃｏｍｍｕｎｉｃａｔｉｏｎｓ，  ２００８、２００８年６月１６〜１９日、１〜７ページ。
【非特許文献２】「Ｄｏｅｓ  ｔｈｅ  Ｐｅｒｆｏｒｍａｎｃｅ  ｏｆ  ＬＤＰＣ  Ｃｏｄｅｓ  Ｄｅｐｅｎｄ  ｏｎ  ｔｈｅ  Ｃｈａｎｎｅｌ  ？」Ｆｒａｎｃｅｓｃｈｉｎｉ，  Ｍ．、Ｆｅｒｒａｒｉ，  Ｇ．、Ｒａｈｅｌｉ，  Ｒ．、ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ、Ｖｏｌｕｍｅ  ５４、Ｉｓｓｕｅ  １２、２００６年１２月、２１２９〜２１３２ページ。
【非特許文献３】「Ｍａｘｉｍｕｍ  Ｌｉｋｅｌｉｈｏｏｄ  Ｄｅｃｏｄｉｎｇ  ｏｆ  Ｃｏｄｅｓ  ｏｎ  ｔｈｅ  Ｚ−ｃｈａｎｎｅｌ」Ｂａｒｂｅｒｏ，  Ａ、Ｅｌｌｉｎｇｓｅｎ，  Ｐ．、Ｓｐｉｎｓａｎｔｅ，  Ｓ．、Ｙｔｒｅｈｕｓ，  Ｏ．、ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ，  ２００６、Ｖｏｌｕｍｅ  ３、２００６年６月、１２００〜１２０５ページ。
【非特許文献４】「Ｄｅｎｓｉｔｙ  ｅｖｏｌｕｔｉｏｎ  ｆｏｒ  ａｓｙｍｍｅｔｒｉｃ  ｍｅｍｏｒｙｌｅｓｓ  ｃｈａｎｎｅｌｓ」Ｗａｎｇ，  Ｃ．−Ｃ．、Ｋｕｌｋａｒｎｉ，  Ｓ．Ｒ．、Ｐｏｏｒ，  Ｈ．Ｖ．、ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｈｅｏｒｙ、Ｖｏｌｕｍｅ  ５１、Ｉｓｓｕｅ  １２、２００５年１２月、４２１６〜４２３６ページ。
【非特許文献５】「Ａｎ  ｉｍｐｒｏｖｅｍｅｎｔ  ｏｎ  ｔｈｅ  ｍｏｄｉｆｉｅｄ  ｗｅｉｇｈｔｅｄ  ｂｉｔ  ｆｌｉｐｐｉｎｇ  ｄｅｃｏｄｉｎｇ  ａｌｇｏｒｉｔｈｍ  ｆｏｒ  ＬＤＰＣ  ｃｏｄｅｓ」Ｍｉｎｇ  Ｊｉａｎｇ、Ｃｈｕｎｍｉｎｇ  Ｚｈａｏ、Ｚｈｉｈｕａ  Ｓｈｉ、Ｙｕ  Ｃｈｅｎ、ＩＥＥＥ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｌｅｔｔｅｒｓ、Ｖｏｌｕｍｅ  ９、Ｉｓｓｕｅ  ９、２００５年９月、８１４〜８１６ページ。
【非特許文献６】「Ｏｎ  ｔｈｅ  Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  ｏｆ  Ｒｅｇｕｌａｒ  ＬＤＰＣ  Ｃｏｄｅｓ  Ｕｓｉｎｇ  ｔｈｅ  Ｆｌｉｐｐｉｎｇ  Ａｌｇｏｒｉｔｈｍ」Ｂｕｒｓｈｔｅｉｎ，  Ｄ．、ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｈｅｏｒｙ、Ｖｏｌｕｍｅ  ５４、Ｉｓｓｕｅ  ２、２００８年２月、５１７〜５３０ページ。
【非特許文献７】「Ａ  Ｍｏｄｉｆｉｃａｔｉｏｎ  ｔｏ  Ｗｅｉｇｈｔｅｄ  Ｂｉｔ−Ｆｌｉｐｐｉｎｇ  Ｄｅｃｏｄｉｎｇ  Ａｌｇｏｒｉｔｈｍ  ｆｏｒ  ＬＤＰＣ  Ｃｏｄｅｓ  Ｂａｓｅｄ  ｏｎ  Ｒｅｌｉａｂｉｌｉｔｙ  Ａｄｊｕｓｔｍｅｎｔ」Ｄａｊｕｎ  Ｑｉａｎ、Ｍｉｎｇ  Ｊｉａｎｇ、Ｃｈｕｎｍｉｎｇ  Ｚｈａｏ、Ｘｉａｏｆｕ  Ｗｕ、ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ，  ２００８、ＩＣＣ  ’０８、２００８年５月１９日〜２３日、１１６１〜１１６５ページ。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
以下では、広い範囲でのビット反転アルゴリズムを説明する。
【００１３】
長さＮおよび次元Ｋの２進（Ｎ，Ｋ）ＬＤＰＣコードは典型的に、パリティ・チェックの行列Ｈによって規定される。ＨはＮ列およびＭ行を有し、Ｍ≧Ｎ−Ｋである。Ｈの各列は情報ビットまたはパリティ・ビットに相当し、各行はチェック・サムに相当する。いずれかの一時的なビット決定ベクトルｂについて、チェック・サムのセットまたはシンドロームはベクトルｓ＝ｂＨＴである。
【００１４】
ビット反転アルゴリズムにおいて、復号器は、簡単なＸＯＲ演算によって２進入力シーケンスｂ（すなわち読み取ったフラッシュ・ページ）を用いて各パリティ・チェックを計算する（すなわちｓ＝ｂＨＴ）。パリティ・チェックは、ｓにおける対応するビットが０の場合は満足され、これが１の場合は満足されない。次いで、あるビットを含む満足されないチェックの数が固定の反転閾値ｔを超えた場合に、このビットを反転するようにスケジュールする。そして、反転したビットを復号プロセスの次の繰り返しで用いる。復号アルゴリズムは、パリティ・チェックが全て満足された場合または既定の最大繰り返し限度に達した場合に停止する。従って、この結果得られたビット反転アルゴリズムのための疑似コードは、以下のステップを含む。
【００１５】
ｉ．ｓ＝ｂＨＴを用いてパリティ・チェックを計算する。これらのパリティ・チェックの全てが満足された場合、復号を停止する。
ｉｉ．さもなければ、各ビットについて満足されないパリティ・チェックの数を検出する。ビットの各々を順番にターゲットと見なす。
ｉｉｉ．ターゲット・ビットを用いたパリティ・チェック式の過半数が満足されない場合、次の復号繰り返しの前にそのビットを反転する。
ｉｖ．ステップ（ｉ）から（ｉｉｉ）を繰り返す。
【００１６】
上述のアルゴリズムは、２進対称チャネルに書き込まれたＬＤＰＣコードを復号する際に満足な結果を提供する。しかしながら、ＬＤＰＣコードの復号を改良する方法を提供することが必要とされている。
【課題を解決するための手段】
【００１７】
第１の態様によれば、本発明は、フラッシュ・メモリ等の２進非対称チャネルに追従するメモリ上に書き込まれたビット・シーケンスを復号するための方法として具現化され、ビット・シーケンスが低密度パリティ・チェック・コードすなわちＬＤＰＣにより符号化されており、これによってシーケンスの各ビットがＬＤＰＣコードにより規定された対応するパリティ・チェックを有する。この方法は、
−第１の状態および第２の状態を含むビット状態セットと、条件セットと、を提供することであって、条件が満足された場合にビット状態が変更されることになり、条件セットが、ビット状態を第１の状態から第２の状態へと変更するための第１の条件と、ビット状態を第２の状態から第１の状態へと変更するための第２の条件と、を含み、第１の条件と第２の条件とは異なっている、ことと、
−ビット・シーケンスの各ビットの値を読み取り、読み取った値に従って各ビットをセットの各状態に関連付けることと、
−ビット・シーケンスのターゲット・ビットについて、条件を評価することであって、
・条件は、ターゲット・ビットの状態に従って条件セットから選択され、
・条件を評価することは、ターゲット・ビットに対応したパリティ・チェックの計算結果を用いる、ことと、
−条件が満足されたことを判定することと、
−条件が満足されたことの結果としてターゲット・ビットの状態を変更することと、
−ターゲット・ビットの状態に従ってターゲット・ビットの値を設定することと、
を含む。
【００１８】
実施形態において、この方法はいかの特徴の１つ以上を含むことができる。
−評価するステップを繰り返し、ターゲット・ビットが、評価するステップの各繰り返しにおいてシーケンスの異なるビットであり、
−パリティ・チェックの計算の結果によって全てのパリティ・チェックが満足されたことが示されるか、または最大繰り返し数に達するまで、評価するステップを繰り返す、
−ビット状態セットが第１の状態および第２の状態から成り、条件セットが第１の状態および第２の状態から成り、各ビットを関連付けるステップにおいて、ビットを、ビットの値が０と読み取られた場合は第１の状態に、ビットの値が１と読み取られた場合は第２の状態に関連付け、ターゲット・ビットの値を設定するステップにおいて、ターゲット・ビットの値を、ターゲット・ビットが第１の状態に関連付けられている場合は０に、ターゲット・ビットが第２の状態に関連付けられている場合は１に設定する、
−ターゲット・ビットに対応したパリティ・チェックの過半数が満足されない場合はいつでも第１の条件が満足され、ターゲット・ビットに対応した全てのパリティ・チェックが満足されない場合はいつでも第２の条件が満足される、
−満足されないターゲット・ビットに対応したパリティ・チェックの数が第１の閾値よりも大きい場合はいつでも第１の条件が満足され、満足されないターゲット・ビットに対応したパリティ・チェックの数が第２の閾値よりも大きい場合はいつでも第２の条件が満足され、第１の閾値と第２の閾値とは異なっている、
−ビット状態セットが第３の状態および第４の状態を更に含み、条件セットが条件対の第１のサブセットを含み、対の一方の条件が、ビット状態をｉ番目の状態からｊ番目の状態へと変更するための条件であり、対の他方の条件が、ビット状態をｊ番目の状態からｉ番目の状態へと変更するための条件であり、対の条件は異なっており、第１の条件および第２の条件が第１のサブセットの対を形成し、条件セットが条件対の第２のサブセットも含み、対の一方の条件が、ビット状態をｋ番目の状態からｌ番目の状態へと変更するための条件であり、対の他方の条件が、ビット状態をｌ番目の状態からｋ番目の状態へと変更するための条件であり、第２のサブセットの対の条件は同一である、
−条件セットが、ビット状態をｍ番目の状態からｎ番目の状態へと変更するための少なくとも１つの条件を含む第３のサブセットを更に含み、条件セットにおいて、ビット状態をｍ番目の状態からｎ番目の状態へ変更するための条件は存在しない、
−ターゲット・ビットに対応した全てのパリティ・チェックの全て、または少なくとも１つであるが過半数よりも少数、または過半数が満足されないか、またはターゲット・ビットに対応した全てのパリティ・チェックが満足された場合はいつでも、条件が満足される、
−第１のビット状態が、メモリへの書き込み対象のビットの値が０であることの高い信頼度に対応し、第２の状態が、メモリへの書き込み対象のビットの値が０であることの低い信頼度に対応し、第３の状態が、メモリへの書き込み対象のビットの値が１であることの高い信頼度に対応し、第４の状態が、メモリへの書き込み対象のビットの値が１であることの低い信頼度に対応し、条件の第１のサブセットが、ターゲット・ビットに対応した全てのパリティ・チェックの少なくとも１つであるが過半数よりも少数が満足されない場合に満足される第１の条件と、ターゲット・ビットに対応した全てのパリティ・チェックが満足されない場合に満足される第２の条件と、ターゲット・ビットに対応した全てのパリティ・チェックの少なくとも１つであるが過半数よりも少数が満足されない場合に満足される、ビットを第３の状態から第４の状態へと変更させるための第３の条件と、ターゲット・ビットに対応した全てのパリティ・チェックが満足されない場合に満足される、ビットを第４の状態から第３の状態へと変更させるための第４の条件と、を含み、条件の第２のサブセットが、ターゲット・ビットに対応した全てのパリティ・チェックの過半数が満足されない場合に満足される、ビットを第２の状態から第４の状態へと変更させるための第５の条件と、ターゲット・ビットに対応した全てのパリティ・チェックの過半数が満足されない場合に満足される、ビットを第４の状態から第２の状態へと変更させるための第６の条件と、を含み、条件の第３のサブセットが、ターゲット・ビットに対応した全てのパリティ・チェックの過半数が満足されない場合に満足される、ビットを第１の状態から第４の状態へと変更させるための第７の条件と、ターゲット・ビットに対応した全てのパリティ・チェックの過半数が満足されない場合に満足される、ビットを第３の状態から第２の状態へと変更させるための第８の条件と、を含む、
−ターゲット・ビットに対応したパリティ・チェックの計算が、対応するビット状態によって決定されたシーケンスのビットの値に従って実行される。
【００１９】
別の態様によれば、本発明は、コンピュータによって実行するための命令を含むコンピュータ・プログラムが記録されたコンピュータ読み取り可能記憶媒体として具現化され、この命令が上述の方法を実行するための手段を含む。
【００２０】
更に別の態様によれば、本発明はシステムとして具現化され、これは、
−ＬＤＰＣコードによって符号化されたビット・シーケンスを書き込むのに適したメモリと、
−上述の方法を実行するための手段と、
を含む。
【００２１】
実施形態において、メモリは、好ましくは浮動ゲート・トランジスタ技術に基づくフラッシュ・メモリである。
【００２２】
本発明の更に別の特徴および利点は、以下に列挙する添付図面を参照して、非限定の例として与えられる本発明の実施形態の以下の記載から明らかとなろう。
【図面の簡単な説明】
【００２３】
【図１】２進非対称チャネルの例を示す。
【図２】２進非対称チャネルの例を示す。
【図３】ビット・シーケンスを復号するための方法の一例のフローチャートを示す。
【図４】ビット・シーケンスを復号するための方法の一例における状態および条件のセットを表す。
【図５】ビット・シーケンスを復号するための方法の一例における状態および条件のセットを表す。
【図６】ビット・シーケンスを復号するための方法のシミュレーションの結果を示す。
【図７】本発明の一実施形態によるコンピュータ・ハードウェアのブロック図である。
【発明を実施するための形態】
【００２４】
メモリ上に書き込まれたビット・シーケンスを復号するためのコンピュータ実施方法を提供する。ビット・シーケンスは、低密度パリティ・チェック（すなわちＬＤＰＣ）・コードによって符号化されており、これによってビット・シーケンスは、ＬＤＰＣコードにより規定された対応するパリティ・チェックを有する。この方法は、第１の状態および第２の状態を含むビット状態セットと、条件セットと、を提供することを含む。１つの条件が満足された場合、ビットの状態は変更されることになる。条件セットは少なくとも第１の条件および第２の条件を含む。第１の条件は、ビット状態を第１の状態から第２の状態へと変更するためのものである。第２の条件は、ビット状態を第２の状態から第１の状態へと変更するためのものである。第１の条件と第２の条件とは異なっている。この方法は、メモリ上に書き込まれたビット・シーケンスの各ビットの値を読み取ることと、読み取った値に従って各ビットをセットの各状態に関連付けることと、を含む。この方法は、ビット・シーケンスのターゲット・ビットについて条件を評価することを含む。評価する条件は、ターゲット・ビットの状態に従って条件セットから選択する。評価するステップは、ターゲット・ビットに対応するパリティ・チェックの計算結果を利用する。この方法は、条件が満足されたことを判定し、条件が満足されたことの結果としてターゲット・ビットの状態を変更するステップを含む。次いで、この方法は、その状態に従ってターゲットの値を設定することができる。好ましくは、この方法を、読み取ったビット・シーケンスの各ビットについて繰り返す。最後に、シーケンスの各ビットの値をその各状態に従って設定する。かかる方法は、伝統的なビット反転アルゴリズムよりも優れた性能で、複雑度をわずかに増すだけで、ＬＤＰＣコードにより符号化されたビット・シーケンスを復号するためのソリューションを提供する。
【００２５】
メモリ上に書き込まれたビット・シーケンスを復号するとは、この方法が、書き込み対象のビット・シーケンスにできる限り近付くことを意味する。この復号方法は、ビット・シーケンスを復号することだけでなく復号後に例えばＬＤＰＣコードのビット・シーケンスを単語と関連付けた辞書を用いてビット・シーケンスを解釈することも含むもっと広い方法の一部とすることができる。
【００２６】
ビット・シーケンスはＬＤＰＣコードにより符号化されており、これは、書き込み対象のビット・シーケンスの値のシーケンスがＬＤＰＣコードにより承認されたシーケンスであることを意味するので、シーケンスのビットはＬＤＰＣコードにより規定された対応するパリティ・チェックを有する。これは本質的にＬＤＰＣ符号化として知られる。以下において、シーケンスを（ｂ１、．．．、ｂＮ）で表す。シーケンスのビットｂｉの少なくとも一部について、ｂｉおよび他のビットに関連した動作（すなわちパリティ・チェック）がある。例えばＪ回の動作の各々が、ｋ（ｊ）の他のビット（Ｂ１ｉ、．．．、ｂｋ（ｊ）ｉ）に関連し（ｊは１からＪである）、これについて予想される結果がある。動作はＸＯＲ演算であり、ｂｉ＋ｂ１ｉ＋．．．＋ｂｋ（ｊ）ｉとすることができ、０に等しいことが予想される。以下において、パリティ・チェックとは、この演算の結果を意味することができる。パリティ・チェックは、予想された値と等しい場合は満足されると言われ、予想されていない値に等しい場合は満足されていないと言われる。
【００２７】
この方法は、第１の状態および第２の状態を含む少なくとも２つの異なる状態を有するビット状態セットと、条件セットと、を提供することを含む。１つの条件が満足された場合、ビットの状態は変更されることになる。条件セットは、第１の条件および第２の条件を含む少なくとも２つの条件を含む。第１の条件は、ビット状態を第１の状態から第２の状態へと変更するための条件である。第２の条件は、ビット状態を第２の状態から第１の状態へと変更するための条件である。第１の条件と第２の条件とは異なっている。状態は、この方法において用いられビットに関連付けられた中間変数である。ビットの状態は、ビットの値にリンクされることになり、従ってビットの値の検索を可能とする。これについては以下で例示する。条件は、ビットの状態を変更するための必要条件である。条件が満足された（すなわち満たされた）と評価されると、ビットの状態はある状態から別の状態へと変更されることになる。状態がｓｉであるビットｂｉでは、条件は、ｂｉまたはｓｉあるいはその両方に応じたブール関数とすることができる。関数の評価の結果が真である（それぞれ偽である）場合、条件が満足された（それぞれ満足されない）と言われる。この場合、第１の条件および第２の条件が異なっているという事実により、少なくとも２つの関数が同一の入力について異なる結果を生じるようになっていることが示される。
【００２８】
この方法は、メモリ上に書き込まれたビット・シーケンスの各ビットの値を読み取ることと、読み取った値に従って各ビットをセットの各状態に関連付けることと、を含む。ビットの値は従来の方法で規定される。すなわち、これはその論理レベルであり、１または０に等しい。どのように関連付けを行うかについての例を後に示す。
【００２９】
この方法は、ターゲット・ビットｂｉｔの状態に従って条件セットから選択した条件を評価することを含む。パリティ・ビットは、シーケンスの１つのビットであり、例えばシーケンスの第１のビットである。ターゲット・ビットの状態ｓｉｔに従って選択を実行するので、状態ｓｉｔを別の状態に変更させない条件、すなわち状態ｓ≠ｓｉｔを別の状態に変更させる条件の評価は行わないことが保証される。これによって、不必要な条件を評価することを防止し、この方法を迅速化する。実施形態において、評価するステップは、ターゲット・ビットに対応したパリティ・チェックを計算することを含む。典型的に、パリティ・チェックの計算は、条件の評価を行うターゲット・ビットを選択した後に行う。しかしながら、他の実施形態では、シーケンスの全ビットに対応したパリティ・チェックの計算を、所与のターゲット・ビットを選択する前、すなわち関連するビットの対応した状態によって決定した現在のビット値に基づいて実行する。このため一般に、評価するステップは、（少なくとも）ターゲット・ビットに対応したパリティ・チェックの計算結果を利用するものと見なすことができる。具体的には、満足されないパリティ・チェックまたは満足されたパリティ・チェックあるいはその両方のパリティ・チェックの数を含む比較を行うことができる。例えば、満足されないパリティ・チェックまたは満足されたパリティ・チェックあるいはその両方の数を閾値と比較することができる。このように、評価によって復号を迅速に実行することができる。
【００３０】
条件が満足されたと評価した場合、この方法は、条件が満足されたことの結果としてターゲット・ビットの状態を変更する。これによって、この方法の終了時に最も適切な状態がターゲット・ビットに関連付けられていることが確実となる。この方法は次いで、ターゲット・ビットの値、およびおそらくは各ビットの状態に従ったシーケンスの各ビットの値を設定することができる。このステップは、何を読み取るかには無関係に、書き込み対象とされたビットの値を決定することになる。ビットを変更し、最も適切な状態をビットに関連付ける可能性によって、各ビットの値を設定した場合に、（少なくとも部分的に）ビットの「正しい」値の検索を可能とする。
【００３１】
パリティ・チェックの計算は、ターゲット・ビットの状態に従って、およびターゲット・ビットに対応したパリティ・チェックに含まれる他のビットの状態に従って実行することができる。パリティ・チェックを計算するために先に与えた式ｂｉ＋ｂ１ｉ＋．．．＋ｂｋ（ｊ）ｉにおいて、用いた値ｂｉ、ｂ１ｉ、．．．、ｂｋ（ｊ）ｉは、対応するビット状態に従って各ビットについて設定した値とすることができる。これについては後に例示する。
【００３２】
見て取れるように、複雑な式を解く必要はない。このため、従来技術のビット反転アルゴリズムにおいてと同様、この方法は複雑度が低く、著しく迅速である。
【００３３】
従来技術の伝統的なビット反転アルゴリズムにおいては、ターゲット・ビットに対応したパリティ・チェックの過半数が満足されない場合はいつでもビットの値を反転する。換言すると、条件は１つだけである。本方法では、少なくとも２つの異なる条件を有する条件セットが提供される。異なる条件を有することによって、例えばチャネルの非対称性からメリットを得ることができる。このため、ビットを反転するか否かの決定は、現在のビットの状態に左右される。この方法は、複数のビットに繰り返した場合、終了時に観察されるエラー・レート（エラー・レートは、ターゲット・ビットまたはシーケンスの他のビットあるいはその両方の値を設定するステップの後にこの方法が出力するビット・シーケンスと書き込み対象のビット・シーケンスとの間の差を表すものである）は、伝統的なビット反転アルゴリズムのものよりも低いことが確実とする。従ってこの方法では、ビット反転アルゴリズムが改善（すなわちエラー・レートが低下）し、複雑度は線形に変化するだけである。
【００３４】
先に注記したように、メモリは２進非対称チャネルに従うことができる。これは例えばフラッシュ・メモリとすることができる。この場合、図１および図２を参照すると、この方法の非対称性（すなわちセットの２つの状態が異なるという事実）によってエラー・レートが著しく低下する。このため、ビットの状態に条件を適合させることができる。その考えは、１が読み取られた場合、書き込み対象のビットが１であった可能性が高いことを意味するということである。実際、チャネルは、０が誤って１に変換される確率が低いようになっている。一般的に、１を０に変更する条件は、０を１に変更する条件と同一でない方が良い。２つの異なる条件を有する条件セットによって、確実にこれが検証される。原理的に、ビット反転アルゴリズムは、変更なしの２進非対称チャネル（ＢＡＣ）上で用いることができるが、ＢＡＣの特別な性質のために著しい性能劣化があり、これは特に、フラッシュ・メモリにおける場合のようにｂが比較的大きい場合に当てはまる。
【００３５】
図３を参照すると、この方法の一実施形態を示すフローチャートが示されている。まず、ビット状態セット１０を提供する。これは例えば第１の状態および第２の状態を含む。更に、状態セット２０を提供する。前述のように、条件が満足されたと評価した場合にビットの状態を変更するように、条件が設計されている。条件は少なくとも以下を含む。
【００３６】
−第１の条件、すなわち第１の状態から第２の状態へとビット状態を変更させるか否かについて。
−第２の条件、すなわち第２の状態から第１の状態へとビット状態を変更させるためのもの。第２の条件は第１の条件とは異なっている。
【００３７】
図示のように、書き込んだビット・シーケンスの各ビットの値を読み取る。次いで、読み取ったビットの値に従って、対応するビットを各状態に関連付ける（ステップＳ１００）。
【００３８】
次いで、シーケンスの所与のターゲット・ビット（３０）について、条件を評価する（ステップＳ２００）。以下のことに留意すべきである。
【００３９】
−条件は、ターゲット・ビットの状態に従って、条件セット２０から選択する。
−条件の評価は、先に注記したように、ターゲット・ビットに対応したパリティ・チェックの計算結果を利用する。
【００４０】
全てのパリティ・チェックは、ターゲット・ビット３０の選択前に計算可能であることに留意すべきである。これに対して、ターゲット・ビットに対応したパリティ・チェックは、ターゲット・ビットの選択後、条件自体を評価する前に計算することができる。これについては以下で更に詳細に論じる。
【００４１】
次にステップＳ３００において、選択した条件が満足されたと判定した場合、これに応じてターゲット・ビットの状態を変更する（ステップＳ４００）。あるいは、ターゲット・ビットの状態を変更しない（ステップＳ３００ａ）。
【００４２】
最後に、ターゲット・ビットの値を、その各状態に従って設定することができる（ステップＳ５００）。
【００４３】
好ましくは、図３に示すようなプロセスを繰り返す（ステップＳ６００）。ターゲット・ビット３０は、各繰り返しにおいて異なるビットであり、例えばシーケンス内の全てのビットを処理するためにシーケンス内の次のビットとする。各繰り返しは、適切に選択した条件を評価すること、条件が満足されたか否かを判定すること、および、必要な場合は現在処理しているビットの状態を変更することを含む。
【００４４】
一実施形態では、各繰り返しにおいてターゲット・ビットに対応したパリティ・チェックを計算する必要がある。前述のように、パリティ・チェックの計算は、シーケンスのビットの現在の状態から検索することができるビット値を含む。次いで、必要な場合には、現在のターゲット・ビットの値を、（繰り返しの完了時に得た）その現在の状態に従って設定することができる。かかる実施形態は図３のフローチャートに対応する。
【００４５】
一つの変形例においては、パリティ・チェックは最初に、対応した状態によって決定されるシーケンス内のビットの現在の値に従って計算される。次いで、シーケンスの全ビットを繰り返し処理することができる。すなわち、各繰り返しは、適切に選択した条件を評価すること、条件が満足されたか否かを判定すること、および、必要な場合には現在処理しているビットの状態を変更することを含む。最後に、ビット繰り返しが完了すると、シーケンスの各ビットの値を、前記各ビットの現在の状態に従って設定する。これは、ビット繰り返しにおいて各ビットについてパリティ・チェックを再計算する必要がなく時間の節約になるという利点を有する。
【００４６】
全ての場合において、評価ステップは、ターゲット・ビットに対応したパリティ・チェックの計算結果を利用する。
【００４７】
実施形態においては、全てのパリティ・チェックが満足されるまで、すなわちパリティ・チェック計算の結果によってこれが示されるまで、プロセスを更に繰り返す。変形例では、収斂を確実とするために、最大繰り返し数に達するまでプロセスを繰り返す。
【００４８】
従って、繰り返しにより、シーケンスのビットのほとんどが終了時に最も適切な状態に関連付けられていることが確実となる。このため、ビットの値を設定するステップにおいて、設定される値は最も正確であると考えられる。
【００４９】
以下で、この方法の２つの実施形態について図４および図５を参照して論じる。これらは、ビット状態セットおよび条件セットの実際の実施を例示する。
【００５０】
図４の例（「変更ビット反転アルゴリズム」とも称する）において、状態セットは第１の状態Ｓ１および第２の状態Ｓ２から成る。換言すると、ここではビット状態は２つだけである。このため、ビットが例えば１または０の２進値を有すると仮定した場合、ビットの状態と値との間の全単射対応関係が可能となる（これを以下で考察する）。例えば、Ｓ１は０に相当し、Ｓ２は１に相当する。条件セットは第１の状態Ｃ１および第２の状態Ｃ２から成る。各ビットを各状態に関連付けた場合、ビットの値が０と読み取られた場合これは第１の状態Ｓ１に関連付けられ、ビットの値が１と読み取られた場合これは第２の状態Ｓ２に関連付けられる。上述のように、２つの条件に依拠する。第１の条件Ｃ１はビット状態をＳ１からＳ２に変更するものであり、第２の条件Ｃ２はビット状態をＳ２からＳ１に変更するものである。しかしながら、例えばチャネルの非対称性からメリットを得るために、第１の条件と第２の条件とは異なっている。評価プロセスの完了時に、ターゲット・ビットの状態が第１の状態Ｓ１である場合はターゲット・ビットの値を０に設定し、ターゲット・ビットの状態が第２の状態Ｓ２である場合はターゲット・ビットの値を１に設定する。かかる復号方法は、特に複雑度が低い。このため、この例では、状態Ｓ１およびＳ２は中間変数であり、ビット値と状態との間には完全な対応関係がある。
【００５１】
更に詳細には、ターゲット・ビットに対応したパリティ・チェックの過半数が満足されない場合はいつでも、または、満足されないターゲット・ビットに対応したパリティ・チェックの数が第１の閾値ｔ１よりも大きい場合はいつでも、第１の条件Ｃ１を満足させることができる。ターゲット・ビットに対応した全てのパリティ・チェックが満足されない場合はいつでも、または、満足されないターゲット・ビットに対応したパリティ・チェックの数が第２の閾値ｔ２よりも大きい場合はいつでも、第２の条件Ｃ２を満足させることができる。第１の閾値ｔ１および第２の閾値ｔ２を用いる場合、これらはそれぞれ異なっている。典型的に、Ｓ１は０に相当し、Ｓ２は１に相当するので、ｔ１＜ｔ２である。あるいは、比較のために割合を用いることができる。上述の方法の範囲内で、他にも多くの適切な条件を想定することができる。一般に、ターゲット・ビットに対応したパリティ・チェックの全て、または少なくとも１つであるが過半数よりも少数、または過半数が満足されない場合はいつでも、条件を満足させることができる。他の種類の条件について、第２の例を参照して述べる。２つの例のいずれかに当てはまる条件は、他の例にも適用することができる。閾値の値は、チャネルの値ａおよびｂに応じて決めることができる。これによって、この方法が実行されるメモリに応じてこの方法を適合することが保証される。
【００５２】
この方法を実行する第２の例（「２ビット−ビット反転アルゴリズム」とも称する）について、図５を参照して論じる。図５に例示するように、ビット状態セットは、第３の状態Ｓ３および第４の状態Ｓ４を更に含むことができる。条件セットは、例えば｛（Ｃ１、Ｃ２）、（Ｃ３、Ｃ４）｝等、条件対の第１のサブセットを含むことができる。形式上、対（Ｃ１、Ｃ２）または（Ｃ３、Ｃ４）の一方の条件（Ｃ１またはＣ３）は、ビット状態をｉ番目の状態からｊ番目の状態へと変更するための条件である。対の他方の条件（Ｃ２またはＣ４）は、ビット状態をｊ番目の状態からｉ番目の状態へと変更するための条件である。ここで、対の条件はそれぞれ異なっている。すなわち、第１の条件Ｃ１および第２の条件Ｃ２は第１のサブセット｛（Ｃ１、Ｃ２）、（Ｃ３、Ｃ４）｝の対（Ｃ１、Ｃ２）を形成する。ｉ番目の状態はＳ１またはＳ３とすることができ、ｊ番目の状態はＳ２またはＳ４とすることができる。
【００５３】
図５の例において、条件セットは、｛（Ｃ５、Ｃ６）｝等、条件対の第２のサブセットも含む。ここで、対｛（Ｃ５、Ｃ６）｝の一方の条件Ｃ５は、ビット状態をｋ番目の状態（例えばＳ２）からｌ番目の状態（例えばＳ４）へと変更するための条件であり、他方の条件Ｃ６は、ビット状態をｌ番目の状態からｋ番目の状態へと変更するための条件である。条件対の第１のサブセットとは異なり、条件は同一である。図５の場合、第２のサブセットは対を１つだけ（Ｃ５、Ｃ６）を有する。このため、この場合、パラメータｋおよびｌは値５または６を取ることができる。しかしながら、例えば５つ以上の状態がある場合、第２のサブセットは一般に２つ以上の対を有することができる。かかる方法は、中間状態を導入することによって状態間の遷移を改善する。第１のサブセットは、異なる状態間に非対称性を導入する。非対称性および中間状態の組み合わせにより、書き込み対象のシーケンスにいっそう近い最終結果に達することができる。
【００５４】
条件セットは、｛（Ｃ７、Ｃ８）｝等の第３のサブセットを更に含むことができ、これは、ビット状態をｍ番目の状態（例えばＳ１またはＳ３）からｎ番目の状態（例えばＳ４またはＳ２）へと変更するための少なくとも１つの条件Ｃ７またはＣ８を含む。この場合、対になる条件、すなわちビット状態をｍ番目の状態からｎ番目の状態へ変更するための条件は存在しないことに留意すべきである。これによって、この方法に更に非対称性が導入され、実際の正確さが改善する。
【００５５】
以下の表Ｉおよび図６に示す場合のように、第１のビット状態Ｓ１は、メモリへの書き込み対象のビットの値が０であることの高い信頼度に対応することができる。第２の状態Ｓ２は、メモリへの書き込み対象のビットの値が０であることの低い信頼度に対応することができる。第３の状態Ｓ３は、メモリへの書き込み対象のビットの値が１であることの高い信頼度に対応することができる。第２の状態は、メモリへの書き込み対象のビットの値が１であることの低い信頼度に対応することができる。かかる場合に各ビットをセットの各状態に関連付けると、値が０と読み取られた場合はビットを状態Ｓ１またはＳ２に関連付けることができ、値が１と読み取られた場合はＳ３またはＳ４に関連付けることができる。シーケンスの各ビットの値を設定するステップでは、ビットの状態がＳ１またはＳ２である場合は値を０に設定することができ、状態がＳ３またはＳ４である場合は１に設定することができる。このため、図４の例においてと同様に、状態と、ビットが有することができる２つの値０または１との間に、対応関係を持たせることができる（これは一般に当てはまるはずである）。
【００５６】
更に、この対応関係は、パリティ・チェックを計算するために先に与えた式ｂｉ＋ｂ１ｉ＋．．．＋ｂｋ（ｊ）ｉにおいて用いることができる。実際、ビットの状態ｂｉ、ｂ１ｉ、．．．、ｂｋ（ｊ）ｉがＳ１またはＳ２である場合は、用いる値を０とすることができ、ビットの状態ｂｉ、ｂ１ｉ、．．．、ｂｋ（ｊ）ｉがＳ３またはＳ４である場合は、１とすることができる。この第２の例および第１の例で示したように、ターゲット・ビットに対応したパリティ・チェックの計算は、一般的な場合、例えば対応するビット状態によって決定されたシーケンスのビットの値に従って実行することができる。
【００５７】
この方法の第２の例では、状態セットは４つの状態から成ることができる。この場合、ビット状態は各状態について２ビット論理で実施することができ、第１の例に比べてオーバーヘッドを招く。
【００５８】
この方法の第２の例は、条件セットを適切に変更することによって２進対称チャネル（ＢＳＣ）等の他のチャネル・モデルに使用可能であることに留意すべきである。
【００５９】
以下の表１は、特定の例についての拡張条件セットおよび対応する状態セットを示す。この場合も、かかる状態および条件のセットの実施は、複雑度が比較的低く、実際に良好な結果を達成する。
【００６０】
【表１】
2013532422.tif 000003
【００６１】
図６は、ランダム・レギュラーＬＤＰＣコードのシミュレーション結果を示す。コード長は１９０８であり、列重みは４であり、レートは０．８８８９である。この結果は、４つの異なる復号方法を用いる場合のフレーム・エラー・レート対遷移確率ａを示す。ａの値は、図１の２進非対称チャネルで用いたものであり、ｂは１０に等しい。フレーム・エラー・レートは、復号方法を実行した後に残っているグローバル・エラーである。換言すると、これは、復号方法が出力したビット・シーケンスと書き込み対象のビット・シーケンスとの間の差である。復号方法の２つは、従来技術のＧａｌｌａｇｅｒ  Ｂアルゴリズムおよび前述した通常のビット反転アルゴリズムである。他の２つの復号方法の一方は、第１の例に対応する「変更ビット反転アルゴリズム」であり、ｔ１およびｔ２はａおよびｂに従って選択する。他の２つの方法の他方は、表１に対応する「２ビット−ビット反転アルゴリズム」である。
【００６２】
この結果からわかるように、シミュレーションを行うａの全ての値について、「２ビット−ビット反転アルゴリズム」および「変更ビット反転アルゴリズム」の双方では、最終フレーム・エラー・レートがそれぞれ低く、従来技術のアルゴリズムに比べて復号の改善を示す。
【００６３】
コンピュータ・プログラムは、コンピュータ化システムによって実行するための命令を含むことができる。この命令は、上述の方法の一部または全てを実行するための手段を含む。かかるコンピュータ・プログラムは、例えばＣＤ、ハード・ディスク、またはフラッシュ・メモリのようなコンピュータ読み取り可能記憶媒体上に記録することができる。
【００６４】
システムは、ＬＤＰＣコードにより符号化されたビット・シーケンスを書き込むのに適したメモリ、および、上述の復号方法を実行するためにこのメモリに適切に接続された手段を含むことができる。メモリは、好ましくは浮動ゲート・トランジスタ技術に基づいたフラッシュ・メモリとすることができる。かかるシステムは、データの記憶について特にロバストである。実際、復号方法を実行するための手段があるので、変更した／失われたデータの検索が迅速かつ正確である。
【００６５】
本発明は、システム、方法、またはコンピュータ・プログラムとして具現化可能であることは理解されよう。具体的には、本発明はコンピュータ実施方法として具現化することができる。従って、本発明の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、または、ソフトウェアおよびハードウェアの態様を組み合わせた実施形態という形態を取ることができ、それらは全て本明細書において、「回路」、「モジュール」、または「システム」と一般的に称することができる。更に、本発明の態様は、具現化されたコンピュータ読み取り可能プログラム・コードを有する１つ以上のコンピュータ読み取り可能媒体（複数の媒体）において具現化されたコンピュータ・プログラムの形態を取ることも可能である。
【００６６】
１つ以上のコンピュータ読み取り可能媒体（複数の媒体）のあらゆる組み合わせを利用することができる。コンピュータ読み取り可能媒体は、コンピュータ読み取り可能信号媒体またはコンピュータ読み取り可能記憶媒体とすることができる。コンピュータ読み取り可能記憶媒体は例えば、限定ではないが、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、デバイス、または前述のもののいずれかの適切な組み合わせとすることができる。コンピュータ読み取り可能記憶媒体の更に具体的な例（非網羅的な列挙）は、以下を含む。すなわち、１本以上のワイヤを含む電気的接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、または前述のもののいずれかの適切な組み合わせである。前述のいずれのものも、特別に設計したＡＳＩＣ（特定用途向け集積回路）によって補足することができ、またはそれに組み込むことができる。この文書の文脈において、コンピュータ読み取り可能記憶媒体は、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを含有または記憶することが可能ないずれかのタンジブルな媒体とすることができる。
【００６７】
コンピュータ読み取り可能信号媒体は、例えばベースバンドにおいてまたは搬送波の一部として、具現化されたコンピュータ読み取り可能プログラム・コードを有する伝播データ信号を含むことができる。かかる伝播信号は様々な形態のいずれかを取ることができ、それらは限定ではないが、電磁、光、またはそれらのいずれかの適切な組み合わせを含む。コンピュータ読み取り可能信号媒体は、コンピュータ読み取り可能記憶媒体でないが、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを伝達、伝播、または転送することが可能ないずれかのコンピュータ読み取り可能媒体とすることができる。
【００６８】
コンピュータ読み取り可能媒体上で具現化されるプログラム・コードは、限定ではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等、または前述のもののいずれかの適切な組み合わせを含むいずれかの適切な媒体を用いて伝送することができる。
【００６９】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋等のオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語等の従来の手順プログラミング言語を含む１つ以上のプログラミング言語のいずれかの組み合わせにおいて記述することができる。プログラム・コードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でおよび部分的に遠隔コンピュータ上で、または全体的に遠隔コンピュータもしくはサーバ上で、実行することができる。後者の場合、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続することができ、または、接続は、（例えばインターネット・サービス・プロバイダを用いてインターネットを介して）外部コンピュータに対して行うことができる。
【００７０】
図７は、本発明の一実施形態によるコンピュータ・ハードウェアのブロック図である。本発明の一実施形態によるコンピュータ・システム（５０１）は、ＣＰＵ（５０４）およびメイン・メモリ（５０２）を含み、これらはバス（５００）に接続されている。バス（５００）はディスプレイ・コントローラ（５１２）に接続され、これはＬＣＤモニタ等のディスプレイ（５１４）に接続されている。ディスプレイ（５１４）は、コンピュータ・システムに関する情報を表示するために用いられる。また、バス（５００）は、ＩＤＥまたはＳＡＴＡコントローラ等のデバイス・コントローラ（５０６）を介して、ハード・ディスク（５０８）またはＤＶＤ（５１０）等の記憶デバイスに接続されている。バス（５００）は、更に、キーボード／マウス・コントローラ（５２０）またはＵＳＢコントローラ（図示せず）を介して、キーボード（５２２）およびマウス（５２４）に接続されている。また、バスは、例えばイーサネット・プロトコルに準拠した通信コントローラ（５１８）に接続されている。通信コントローラ（５１８）は、コンピュータ・システム（５０１）をネットワーク（５１６）に物理的に接続するために用いられる。
【００７１】
本発明の態様について、本発明の実施形態に従った方法、装置（システム）、およびコンピュータ・プログラムのフローチャート図またはブロック図あるいはその両方を参照して上述した。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実施可能であるか、または少なくとも誘発されることは理解されよう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて機械を生成することができ、これによって、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施するための手段を生成するようになっている。
【００７２】
また、これらのコンピュータ・プログラム命令はコンピュータ読み取り可能媒体に記憶することができ、これによって、コンピュータまたは他のプログラマブル・データ処理装置に特定の方法で機能するように指示することができ、これにより、コンピュータ読み取り可能媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施する命令を含む製造品を生成するようになっている。
【００７３】
また、コンピュータ・プログラム命令を、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードして、そのコンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させてコンピュータ実施プロセスを生成することができ、これによって、コンピュータまたは他のプログラマブル装置上で実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施するためのプロセスを提供するようになっている。
【００７４】
図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態に従ったシステム、方法、およびコンピュータ・プログラムの可能な実施のアーキテクチャ、機能性、および動作を例示する。この点で、フローチャートまたはブロック図における各ブロックは、規定された論理機能（複数の機能）を実施するための１つ以上の実行可能命令を含むコードのモジュール、セグメント、または一部を表すことができる。また、いくつかの代替的な実施において、ブロックに明記した機能は、図面に明記した順序どおりでなく発生する場合があることに留意すべきである。例えば、関与する機能性に応じて、連続して示した２つのブロックは実際には実質的に同時に実行されることがあり、またはブロックは時に逆の順序で実行される場合がある。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせは、規定された機能もしくは行為を実行する特殊目的ハードウェア・ベースのシステム、または特殊目的ハードウェアおよびコンピュータ命令の組み合わせによって実施可能であることに留意すべきである。
【図１】
2013532422.tif 000004
【図２】
2013532422.tif 000005
【図３】
2013532422.tif 000006
【図４】
2013532422.tif 000007
【図５】
2013532422.tif 000008
【図６】
2013532422.tif 000009
【図７】
2013532422.tif 000010
【国際調査報告】
2013532422.tif 000011
2013532422.tif 000012
2013532422.tif 000013