【文献】
田中丸 周平 他,SSD向けエラー訂正手法の比較と符号長の動的最適化手法,電子情報通信学会技術研究報告,2010年12月 9日,Vol.110, No.344,pp.147-152,ICD2010-124
(58)【調査した分野】(Int.Cl.,DB名)
一つのページを構成する符号化する前のデータを該一つのページの一端にある第1データブロックから該一つのページの他端にある第Mデータブロックに分割するステップと、ここで、Mは3以上の整数であり、
第1データブロックを符号化して第1誤り訂正符号を得るステップと、
第1誤り訂正符号または第1データブロックの一部と第2データブロックを合わせて符号化して第2誤り訂正符号を得るステップと、
第2データブロックに対して行った処理を合わせる誤り訂正符号またはデータブロックを一つずらしながら第3データブロック以降第M−1データブロックまで行うステップと、
第M−1誤り訂正符号または第M−1データブロックの一部と第Mデータブロックを合わせて符号化して第M誤り訂正符号を得るステップと
を含み、第1誤り訂正符号を得るステップから第M誤り訂正符号を得るステップを順次または同時に行うものである、符号化方法。
一つのページを構成する符号化する前のデータを該一つのページの一端にある第1データブロックから該一つのページの他端にある第Mデータブロックに分割するステップと、ここで、Mは3以上の整数であり、
第1データブロックと第2データブロックの一部を合わせて符号化して第1誤り訂正符号を得るステップと、
第1誤り訂正符号または第1データブロックの一部と第2データブロックと第3データブロックの一部を合わせて符号化して第2誤り訂正符号を得るステップと、
第2データブロックに対して行った処理を合わせる誤り訂正符号またはデータブロックを一つずらしながら第3データブロック以降第M−1データブロックまで行うステップと、
第M−1誤り訂正符号または第M−1データブロックの一部と第Mデータブロックと合わせて符号化して第M誤り訂正符号を得るステップと
を含み、第1誤り訂正符号を得るステップから第M誤り訂正符号を得るステップを順次または同時に行うものである、誤り訂正符号化方法。
合わせて符号化される部分が符号化の対象となるデータの大きさに比して小さいデータブロックに対して、そうでないデータブロックに対するより強力な誤り訂正能力を適用することを含む請求項1又は2に記載の誤り訂正符号化方法。
一つのページを構成する符号化する前のデータを該一つのページの一端にある第1データブロックから該一つのページの他端にある第Mデータブロックに分割するページデータ分割部と、元のデータブロックに、一定のルールに従って、隣接するデータブロックまたは誤り訂正符号の一部のデータを付加して、符号化の対象となるデータを作成する符号化準備部と、作成されたデータに対する符号化を行って各データブロックに対応する誤り訂正符号を生成する誤り訂正符号化部と、生成された誤り訂正符号を結合して、符号化ページデータを作成する結合部とを備える符号化装置。
符号化の際に使ったルールに基づいて符号化ページデータをそれを構成する個々の誤り訂正符号に分離する符号分離部と、分離された誤り訂正符号を復号 する復号部と、復号されたデータが誤りを含むか否かをチェックする誤り検出部と、もし、ある誤り訂正符号を復号して得られたデータに誤りがあった場合に、当該誤り訂正符号と合わせて符号化された部分がある1または2の誤り訂正符号が誤りなく訂正できるかを誤り検出部により判断して、誤りなく訂正できた誤り訂正符号を利用して当該誤り訂正符号の部分を置換して、置換誤り訂正符号を作成して、前記バッファに戻す置換符号作成部と、誤りなく訂正されたページデータを出力するページデータ再構成部とを備える復号装置。
【背景技術】
【0002】
現在、情報処理と情報通信の分野において、文章、静止画、動画、音声等の伝達したい情報をバイナリ化した情報記号系列すなわちデータの送受信や保存に伴って発生する誤りを発見し、訂正することは必須となっている。ネットワークにおける通信や、DVD、フラッシュメモリなどの記憶メディアへのデータの書き込みと、それらからのデータの読み出しなどの際に、ノイズの混入やメディアの不完全性などによるデータの誤りが生じる。このような誤りの発生に対処するため、あらかじめデータに加えておいた冗長符号を用いて、誤りが生じたかどうかを発見し、誤りがあれば元のデータを再現することが行われる。つまりもとのデータに冗長符号を追加して符号語系列に変換することが行われている。このような冗長化された符号語系列を誤り訂正符号と言う。
【0003】
例えば、フラッシュメモリと呼ばれる不揮発性半導体メモリは、小型化、大容量化が進んでいる。このようなフラッシュメモリの記憶領域は、一定のサイズの複数のブロックから構成されており、各ブロックは一定のサイズの複数のページから構成されている。そして、データの消去はブロック単位で行われ、データの読み込み及び書き込みはページ単位で行われる。このフラッシュメモリのセルの微細化と多値化により、記憶容量が大きくなっている。その副作用として、誤りビットも増加する。この誤りを訂正するために、誤り訂正符号(ECC, Error Correcting Code)を用いて誤り訂正を行うことが一般的である。誤り訂正符号の例としては、BCH符号、リード・ソロモン符号(Reed-Solomon Code)、低密度パリティ検査符号(LDPC Code, Low-Density Parity-Check Code)が挙げられる。
【0004】
フラッシュメモリにおいて、ある1つのページは例えば4つに分割されている。つまり、領域が4つ並んで1つのページが構成されることになる。そして、このような領域の一つ一つに一個の誤り訂正符号を格納する。この誤り訂正符号は、情報記号(元のデータ)に加えて、ある誤り訂正符号化方式に対応するパリティ検査記号(冗長ビット)を有している。符号化方式が同じであれば冗長ビットの数が大きければ大きいほど、誤り訂正能力は向上する。メモリセルの多値化や微細化に対応して、あるいは信頼性の向上を目的として、冗長ビット数は増大する傾向にある。その一方で、冗長ビットの数またはそれに対応して決まる訂正可能な誤りビットの数が増加すると、誤り訂正回路の規模も増大する。このような回路規模の増大は、メモリの実装面積の減少を招き、記憶容量の減少をもたらす。また、ユーザデータを読み取って再生するのに要する時間の増加にもつながる。したがって、冗長ビット数を増加させずに、誤り訂正能力を向上させることが求められている。
【0005】
誤り訂正能力の向上は、通信分野においても同様に重要である。通信回線速度の向上などに伴い、より高い誤り訂正能力が限定的な物理的リソースの中で求められている。本願明細書及び特許請求の範囲においては主に記憶媒体の分野で用いられる「ページ」という言葉を主に使用するが、これは、一単位のデータというほどの意味であって、送信データブロックとかトランスポートブロックと呼ばれている通信の分野で用いられる概念をも包含するものである。例えば、Long Term Evolution(LTE)規格、または標準化団体である3GPPにおけるE-UTRA (Evolved Universal Terrestrial Radio Access)規格における「トランスポートブロック」がそれに相当する。
【0006】
特許文献1には、誤り率の高い部分と低い部分を一つのECCフレームに混在させることで、各ECCフレーム間で誤り率の場所依存によるバラツキが均一化されて、誤り訂正の効率が向上する不揮発性半導体記憶装置が記載されている。
【0007】
特許文献2には、トランスポートブロックを、各コードブロックが他のコードブロックの一部を含むように複数のコードブロックに分割し、複数のコードブロックの各々に対して誤り訂正符号化処理を行ってコードブロックコードワードを生成し、コードブロックコードワードを結合してトランスポートブロックコードワードを生成する技術が開示されている。図示された全ての例において、最左端と最右端のコードブロックの間で重複部分を設けている。
【発明の概要】
【発明が解決しようとする課題】
【0009】
このような課題に鑑み、本発明は、新たな誤り訂正符号の作成方法を提供するものである。
【課題を解決するための手段】
【0010】
本発明の第1の実施態様によれば、一つのページを構成する符号化する前のデータを該一つのページの一端にある第1データブロックから該一つのページの他端にある第Mデータブロックに分割するステップと、ここで、Mは3以上の整数であり、第1データブロックを符号化して第1誤り訂正符号を得るステップと、第1誤り訂正符号または第1データブロックの一部と第2データブロックを合わせて符号化して第2誤り訂正符号を得るステップと、第2データブロックに対して行った処理を合わせる誤り訂正符号またはデータブロックを一つずらしながら第3データブロック以降第M−1データブロックまで行うステップと、第M−1誤り訂正符号または第M−1データブロックの一部と第Mデータブロックを合わせて符号化して第M誤り訂正符号を得るステップとを含み、第1誤り訂正符号を得るステップから第M誤り訂正符号を得るステップを順次または同時に行うものである、符号化方法が提供される。
【0011】
また、本発明の第2の実施態様によれば、一つのページを構成する符号化する前のデータを該一つのページの一端にある第1データブロックから該一つのページの他端にある第Mデータブロックに分割するステップと、ここで、Mは3以上の整数であり、第1データブロックと第2データブロックの一部を合わせて符号化して第1誤り訂正符号を得るステップと、第1誤り訂正符号または第1データブロックの一部と第2データブロックと第3データブロックの一部を合わせて符号化して第2誤り訂正符号を得るステップと、第2データブロックに対して行った処理を合わせる誤り訂正符号またはデータブロックを一つずらしながら第3データブロック以降第M−1データブロックまで行うステップと、第M−1誤り訂正符号または第M−1データブロックの一部と第Mデータブロックと合わせて符号化して第M誤り訂正符号を得るステップとを含み、第1誤り訂正符号を得るステップから第M誤り訂正符号を得るステップを順次または同時に行うものである、誤り訂正符号化方法が提供される。
【0012】
ここで、合わせて符号化する部分が元のデータブロックの大きさに比べて小さい、あるいは、重複して符号化されない部分が比較的大きいデータブロックに対して、そうでないデータブロックに対するより強力な誤り訂正能力を適用して、全体的な性能を向上させることができる。
【0013】
本発明の第3の実施態様によれば、上記のいずれかの誤り訂正符号化方法により符号化された第k誤り訂正符号を復号して、誤りの訂正が可能であったか否かを判断するステップと、訂正ができなかった場合には、第k誤り訂正符号と合わせて符号化された部分がある第k+1誤り訂正符号または第k−1誤り訂正符号あるいはそれらの両方が訂正できるかを判断して 、訂正できた誤り訂正符号を利用して第k誤り訂正符号の対応する部分を置換するステップと、置換された第k誤り訂正符号を復号するステップとを含んでなる誤り訂正復号方法が提供される。
【0014】
また、上記の符号化方法においてM=2の場合を考えると、本発明の第4の実施態様によれば、一つのページを構成する符号化する前のデータを第1データブロックと第2データブロックの二つのデータブロックに分割するステップと、第1データブロックを符号化して第1誤り訂正符号を得るステップと、第1誤り訂正符号または第1データブロックの一部と第2データブロックを合わせて符号化して第2誤り訂正符号を得るステップとを含んでなる符号化方法が提供される。
【0015】
また、変形例として、第1 データブロックと第2データブロックの一部を合わせて符号化して第1誤り訂正符号を得て、第1誤り訂正符号または第1データブロックの一部と第2データブロックを合わせて符号化して第2誤り訂正符号を得る符号化方法が提供される。
【0016】
上記の第4の実施態様とその変形例により符号化された第1誤り訂正符号を復号して、誤りの訂正が可能であったか否かを判断するステップと、訂正ができなかった場合には、第2誤り訂正符号が訂正できるかを判断して、訂正できた誤り訂正符号を利用して第1誤り訂正符号の一部分を置換するステップと、第1誤り訂正符号の訂正ができた場合には、第2誤り訂正符号の第1誤り訂正符号と合わせて符号化された部分を置換して、第2誤り訂正符号の復号を行うステップとを含んでなる誤り訂正復号方法が提供される。
【0017】
さらに、本発明の装置にかかる第5の実施態様として、一つのページを構成する符号化する前のデータを該一つのページの一端にある第1データブロックから該一つのページの他端にある第Mデータブロックに分割するページデータ分割部と、元のデータブロックに、一定のルールに従って、隣接するデータブロックまたは誤り訂正符号の一部のデータを付加して、符号化の対象となるデータを作成する符号化準備部と、作成されたデータに対する符号化を行って各データブロックに対応する誤り訂正符号を生成する誤り訂正符号化部と、生成された誤り訂正符号を結合して、符号化ページデータを作成する結合部とを備える符号化装置が提供される。
【0018】
そして、本発明の第6の実施態様として、符号化の際に使ったルールに基づいて符号化ページデータをそれを構成する個々の誤り訂正符号に分離する符号分離部と、分離された誤り訂正符号を復号 する復号部と、復号されたデータが誤りを含むか否かをチェックする誤り検出部と、もし、ある誤り訂正符号を復号して得られたデータに誤りがあった場合に、当該誤り訂正符号と合わせて符号化された部分がある1または2の誤り訂正符号が誤りなく訂正できるかを誤り検出部により判断して、誤りなく訂正できた誤り訂正符号を利用して当該誤り訂正符号の部分を置換して、置換誤り訂正符号を作成して、前記バッファに戻す置換符号作成部と、誤りなく訂正されたページデータを出力するページデータ再構成部とを備える復号装置が提供される。
【発明を実施するための形態】
【0020】
以下に本発明の実施形態を説明する。ここでは、例としてBCH符号を用いてフラッシュメモリの誤り訂正を行う場合について説明するが、本発明は、組織符号(systematic code)であれば、BCH符号以外にも、RS符号、LDPC符号などを利用して、全く同様に実施できる。組織符号は、符号語に元のデータ(「情報記号」(information symbols)とも呼ばれるが、ここでは単に「データ」という)がそのままの形で表れる符号をいう。一つの符号語はデータと検査記号からなり、含まれるパリティ検査記号(parity check symbols; 以下、「パリティ」という)は、データに隣接して並べておいたり、データの中に置いたり、あるいは別の場所に保存したりすることがある。また、データの誤り訂正であれば、フラッシュメモリに限らず、通信、DVD、ハードディスクなどに求められるいずれの情報処理にあっても実施することができる。
【0021】
図1に本発明による符号化方法の一例を示す。一般に、組織符号(BCH符号、RS符号、LDPC符号など)により符号化する場合、データとそれに付加するパリティが作成される。
図1(A)に示すように、符号化の対象となる4つのデータブロックがあるものとする。通常のBCH符号化であれば、このうちのデータブロック1に対してまず、所定の処理を行って、パリティ1を作成する。データブロック1とパリティ1とは関連づけられていて、復号の際には読み取られたデータブロック1とパリティ1とを利用して、誤り訂正後のデータブロック1を得る。もちろん誤りがデータブロック1とパリティ1に多く含まれていれば、誤り訂正に失敗することになる。
【0022】
図1(A)では、BCH(t-bit/N-Byte)は、訂正可能な誤りの最大ビット数がtであって、BCH符号長がNであることを表す。ここで、Nの単位はバイトであるが、バイトに固定されるものではないことはいうまでもない。フラッシュメモリを例に取ると、ある符号化前のデータをいくつかに分割して得られたデータブロックのそれぞれを符号化してBCH符号語を得る。そして、誤り訂正は、データブロック1からデータブロック4のそれぞれに適用されており、隣のBCH符号の復号の結果が、そのBCH符号の復号の作業又は結果に影響を与えることはない。
【0023】
図1(A)に示した態様では、このBCH符号とパリティとは分けて1ページ内に保存されている。BCH符号は組織符号であるので、元のデータとパリティがあって、データブロック1からデータブロック4のあとにパリティ1からパリティ4までをまとめて保存する場合を図示している。ここでは、パリティが以下に説明する重ねて読み取る部分にない。このデータブロックとそれに対応するパリティの保存位置の物理的な関係はまったく任意である。これをデータブロック2、データブロック3と繰り返して符号化する。
【0024】
次に、本発明による符号化構造の第1例による処理プロセスを
図1(B)を参照して説明する。まず、
図1(A)のデータブロック1をBCH符号化して、そのパリティをパリティ1として右側に保存する。その後、データブロック2については、データブロック1の一部、
図1(B)において、データブロック1の斜線で示してある部分をデータブロック2に合わせて得られるN
2バイトのデータブロックに対してBCH符号化の処理を行い、パリティ2を得る。ここでの符号化はN
2バイトに対して、tビットの訂正能力を有するものとなる。同様の符号化を、データブロック2の右端の一部(斜線部)のデータをデータブロック3と合わせたものに対して行い、パリティ3を得る。データブロック4については、データブロック3の右端の一部(斜線部)のデータと合わせて符号化を行い、パリティ4を得る。つまり、斜線をした部分については、2回重ねて符号化の対象となるので、以下において「重複部分」あるいは「重複する部分」と呼ぶことがある。図示したパリティの保存位置は一例に過ぎない。パリティの保存位置は、任意であることは上述のとおりである。なお、上の説明では、わかりやすさを優先して、左端のデータブロックから右のデータブロックへと順次符号化をしていったように記載したが、実際には、全てのデータブロックに対する符号化を同時に行うことができ、その方が実行速度は当然速くなる。
【0025】
言い方を変えると、
図1(B)では、1ページを構成する4つのデータブロックのうち左端のデータブロック1についてはそのまま符号化を行い、それ以外の3つのデータブロックに対しては、BCH符号の長さを幾分増大させるように符号化している。つまり、増大させた部分のデータは次の右隣の符号の左端のデータ(斜線部)と同じになるように符号化を行う。逆に言えば、符号化されたデータブロックの右端にある符号化前のデータをそのまま用いて、次の領域のつまり、右隣の符号を作成する。その結果、対象となる4つのBCH符号が互いに「重複」する部分があるように符号化している。ここで「重複」とは、隣り合うデータブロックの一部を次のデータを符号化するときに再度用いることをいう。この「重複」のさせ方には、いろいろな態様が考えられるが、ここでは、BCH符号化の対象となったデータブロックの端が左隣のデータブロックの右端と同じになるようにしており、左端のBCH符号は左端のデータブロック1をそのまま符号化したものになる。ここで、データブロック2〜4のBCH符号の長さをN
2とするが、このN
2は上述のNより大きな整数である。左端のBCH符号されたデータブロックの大きさはもとのままNである。他方、BCH符号化されたデータブロック2〜4の大きさはNより大きいN
2であるので、これをBCH(t-bit/N
2-Byte)と表現することにする。ここで、重複部分のバイト数をLとし、重複していない部分のバイト数をMとすると、N
2=2L+Mとなる。なお、本願明細書においては、本願発明の実施態様と区別するために、このような重複を設けない符号化の例を「通常のBCH符号化」と呼んでいる。
【0026】
整理すると、
図1(B)に示した符号化においては、通常のBCH符号化と同じ訂正能力を有するデータブロックが必ず存在する。それは、図示した例では左端のデータブロック1である。このデータブロックは、通常のBCH符号化と同じ符号化がなされるので、通常のBCH符号で訂正できるのであれば、必ず訂正できる。それ以外のデータブロックについては、重複する部分については、重なり合っている2つのBCH符号の一方が訂正を実行することが可能であれば、BCH符号のもつtビットの訂正能力を使って、Nバイトより短いMバイトの訂正を担当することになるので、訂正できる確率が高くなる。したがって、通常のBCH符号化よりも本発明の
図1(B)に示した符号化は高い訂正能力を必ず示すことが分かる。
【0027】
図1(C)に、本発明の第2の符号化の例を示す。符号化の対象となるデータブロックの右隣にパリティを置いて、次のデータブロックを符号化する際の重複部分に含める態様である。より具体的には、まずデータブロック1を符号化して、パリティ1を得る。その後、その右隣にパリティ1を置いて、データブロック1の右端とパリティ1を重複部分としてデータブロック2を符号化する。そして、その結果得られたパリティ2をその符号化の対象となった重複部分を含んだデータブロックの右隣に置く。これを順次繰り返し、最後のデータブロック4と重複部分からなるデータの右隣にパリティ4を置いて符号化を終了する。この例であると、データブロック1から順次符号化していくことになり、全てのデータブロックに対して同時に符号化を行うことはできない。
【0028】
なお、
図1の(B)と(C)の符号化構造においては、符号化の様子をより分かり易くするために、符号化するデータブロックを階段状に並べて表示しているが、別に上のデータを下のデータにコピーしているわけではなく、上のデータの一部を下のデータの一部を符号化する際に含めているという意味である。実際のデータの保存状況は、
図1(A)の場合と何ら異なることはない。
図2以下においても、同様である。また、
図2以下の符号化構造を示す図においてはパリティを格納する物理的な位置は特に明示していないが、
図1(B)の態様と
図1(C)の態様の両方を包含しているものと解すべきである。
【0029】
ここで、注意しておきたいのは、
図1(B)と(C)のように、左から2番目以降のデータブロックの大きさを増大させることは必ずしも必要ないことである。左隣のデータブロックから重複して読み取った部分さえ設ければ、BCH符号の大きさはNのままでもかまわない。そのような場合には、重複部分の存在に対応してBCH符号の数が大きくなることになる。極端な例であるが、
図2に示すように、LをN/3として、同じページから読み取るNバイトのBCH符号の数を3から4にすることもできる。この場合には復号のための回路の数も3から4に増える。また、隣接するBCH符号の間で重複部分を設けているが、隣接している必要は必ずしも無く、一つおきなどの種々の態様で重複部分を設けることができる。なお、
図2以降においては、パリティの位置を図示していない。上述のようにパリティをどの物理的位置に保存するかは、本発明の文脈ではさほど重要でないからである。
【0030】
本発明の原理を理解するために、
図3に示すような簡単な例を考えてみる。
図3では、
図1(A)の4つのデータブロックk−1、データブロックk、データブロックk+1、データブロックk+2などを互いに重なり合うように読み取って、符号化する。
図3のそれぞれのデータブロックが一つ一つのBCH符号に対応しているのは上述の通りである。×印は、誤りビットの存在位置を意味している。データブロックk−1を見ると3個の誤りビットが存在している。このデータブロックk−1をそのまま符号化したものが符号k−1になる。ここで、訂正可能な誤りビット数t=4であると仮定すると、4以下である3個の誤りビットはうまく訂正できることになる。しかし、データブロックkとデータブロックkに隣接するデータブロックk−1との重複部分(斜線部)を符号化した符号kには6個の誤りビットがあるので想定しているBCH符号化方式では訂正ができない(つまり、5個以上の誤りビットは訂正できない)。通常であれば、この領域の訂正はあきらめるしかない。しかし、データブロックk+1とそれに隣接するデータブロックkとの重複部分を符号化した符号k+1を見ると、ここには4個の誤りビットしかないので、この符号k+1は正しく訂正できる。すると、符号k−1と符号k+1とが正しく復号できるので、正しいデータによって重複部分(斜線部)のデータを置換することによって、符号kのうちデータブロックk−1とデータブロックk+1とが重複する部分にある3個の誤りビットは訂正可能である。すると、符号kの残りの誤りビットは3個となり、両側の領域からの訂正を加味することによって符号kの誤りビットを訂正できることになる。ただ、重複していない部分に5個の誤りビットがある場合には、本実施態様によっては訂正ができない。
【0031】
他方、ここでは、1つの訂正不可能な符号の隣の符号が両方とも訂正可能である場合を例に取ったが、2つの隣接する符号が共に訂正不可能であっても、さらにその外側に隣接する2つの符号が訂正可能であれば、2つの訂正不可能な隣接符号の訂正が可能になって、真ん中の符号が訂正可能になる場合もありうる。
【0032】
本発明の原理から次のような特徴のうちの少なくとも1つがいえることが分かっている。すなわち、(1)まず、原理的に見て、通常の誤り訂正符号化法より、誤り訂正能力が下がることはない。言い換えれば、通常の誤り訂正符号化法により訂正できる場合は、本発明の重複の原理を利用した方法あるいは符号化構造でも必ず訂正できる一方、通常の誤り訂正によって訂正できない場合でも、本発明の重複の原理を利用した符号化構造または符号化方法によれば訂正できる可能性がある。(2)次に、誤りの状態が同じであれば(誤り率が同じであれば)、同じ冗長ビット数に対して、本発明のデータの重複を用いた符号化方法と復号方法によれば、必ず通常の誤り訂正より性能が向上する。(3)さらに、同じガロア域(Galois field)(例えば、2の14乗のガロア域)に対して本発明の符号の重複を用いる場合、通常の誤り訂正方法と比べて、必要とする訂正回路の物理的な規模はあまり変わらない。
【0033】
このような本願発明の一実施態様にかかる復号のための情報処理のフローの一例を
図4に示す。まずn個のBCH符号が各ページにあるとして、それらの符号をC(1)、C(2)、C(3)、…、C(n)とする。これは符号化のときに用いたルールを参照しつつページデータを各符号に切り分けることで作成されるものである。 L(k,0)とL(k,1)は、BCH符号C(k)におけるそれぞれC(k-1)とC(k+1)とのオーバーラップ領域を表すものとする。ここで、各符号についてその符号が訂正可能であるかどうかを表すフラグの数値列F={F(1), F(2),…, F(n)}を定義する。すなわちFはベクトル値を表すが、F(1), F(2)などはスカラ量である。C(k)が復号によって訂正可能であればF(k)=0とし、訂正不可能であればF(k)=1とする。その上で、
図4のフローを実行する。
【0034】
まず、kを初期値にセットする(k=1)(ステップS1)。C(k)を復号して、訂正が可能であったか不可能であったかを示すフラグ値F(k)を得る(ステップS2)。C(k)に含まれる誤りが訂正可能であればF(k)=0であるので、ステップS4に進むが、F(k)=1であればステップ5に進む(ステップS3)。F(k)=0であれば、復号されたビットの対応部分を用いてL(k+1,0)を置換する(ステップS4)。これをk=1からk=nまで繰り返す(ステップS5、S6)。k=nまで繰り返されると数値列Fの数値が全てゼロであるかをチェックする(ステップS7)。もし全てゼロであれば、復号の結果を出力して、処理を終了する(ステップS20)。数値列Fに一つでも1があれば、kを1にリセットして、FをF’として保存して(ステップS8)、隣接する符号の復号値を利用して、訂正できなかった符号が訂正できるかを試みる。
【0035】
まず、F(k)=1であるかを調べて、訂正できなかった符号を特定する(ステップS9)。F(k)=1であって、訂正できなかった場合には、F(k-1)がゼロであるか、つまりC(k-1)が訂正できているかを調べて(ステップS10)、もし訂正できていれば、C(k)の重複部分の一つであるL(k,0)をC(k-1)の復号結果を使って置換する(ステップS11)。C(k-1)が訂正できていなければ、何もせずに次のステップに移る。次に、F(k+1)がゼロであるか、つまりC(k+1)が訂正できているかを調べて(ステップS12)、もし訂正できていれば、C(k)の重複部分の残りの一つであるL(k,1)をC(k+1)の復号結果を使って置換する(ステップS13)。C(k+1)が訂正できていなければ、何もせずに次のステップに移ることになる。改めて、C(k)を復号し、その訂正が可能であったか否かの検証結果を新たなF(k)の値とする(ステップS14)。これをk=1からk=nまで繰り返す(ステップS15、S16)。
【0036】
もし、ステップS9においてF(k)=1でなければ、ステップS15に直接進む。
【0037】
もし新たなFと保存してあったF’が同じでなければ、つまり、訂正できなかった符号が一つでも訂正できていれば(ステップS17)、そして、トライアル回数がTmaxという予め設定した最大値を超えていなければ(ステップS19)、ステップS8に戻って、訂正できるようになった符号によって、訂正できなかった隣接する符号が正しく復号できるか試みる。F=F’であれば、それ以上繰り返してももう改善は望めない状態にあることになるので、F=0であれば(ステップS18)、現在までの結果であるC(k)の値を出力し(ステップS20)、数値列Fが一つでも1を含んでいれば(ステップS18)、正しい復号ができなかった旨を宣言して終了する(ステップS21)。この繰り返しは、それが必要な場合でも、1、2回程度行うことになるのが普通である。
【0038】
図5に本発明のBCH符号化の第3例と第4例を示す。
図5(A)に通常のBCH符号を参照のために示す。データ長がN−byteであるとし、訂正可能ビット数がtであるとすると、上と同様にBCH(t-bit/N-byte)と表現することができる。パリティはあえて図示していない。
図5(B)に、左右対称に重なり部分を作る場合である第3例を示す。ここでは、データブロック1に対応するECC1は、右側のみに重なる部分があって、BCH(t-bit/N
1-byte)となる。そして、その次のデータブロック2に対応するECC2は、左右に重なる部分があるので、BCH(t-bit/N
2-byte)となる。ECC3はECC2と同様であり、ECC4は重なり部分が左にあること以外はECC1と同じである。ここで、N<N
1<N
2であり、重なりがない部分は、ECC1からECC4間で同じ長さである。
【0039】
図5(C)に、本発明の符号化の第4例を示す。
図5(C)の例は、
図1(B)の例と似ているが、ECC4についてのみ訂正能力が高い符号化BCH((t+a)-bit/N
2-byte)を採用している。
図5(C)においては、4つのECCブロックは、非対称に配列される。つまり、ECC1の長さは通常のBCH符号と同じNである一方、ECC2とECC3は左右に重なり部分があって、その長さが大きくなっている。ECC2とECC3は、BCH(t-bit/N
2-byte)と表現できる。ここで、N<N
2である。そして、ECC4は、その長さがECC2とECC3と同じN
2である一方、重なり部分が一つしかないので誤り訂正能力は弱くなる。言い換えれば、重なりのない部分のデータの長さがECC4だけ大きくなっている。この符号化構造では、通常のBCH符号化の場合に訂正可能な誤りは、必ず訂正でき、通常のBCH符号化よりも性能がよいことが分かっているが、ここでは、さらに、ECC4の訂正能力を補強するために、aバイトの誤り訂正能力を付加する。aは任意の整数であるが、例えば、t=4であるとき、2バイト3バイト程度でも十分な効果があるものである。これにより全体的な訂正能力を一段と向上させることができる。ECC4だけ訂正能力を増やしても、誤り訂正回路の全体的な規模やパリティのサイズに対する影響はほんのわずかである。
【0040】
図6(B)に、
図6(A)の通常のBCH符号化と対比して、左右対称な符号化構造を採用したリング構成の符号化の場合を示す。実は、この構成は余り好ましくないことが分かっている。これは、基本的に
図5(C)の構成において、ECC4の右端に重なり部分を設け、これをECC1の左に付加する形で、ECC1の長さも他と同じN
2にした構造である。このような構造では、全体的な確率を考えると
図7(A)の通常の符号化の場合よりも性能はよいが、通常の符号化により補正できる場合であっても、
図6(B)の符号化では補正できない場合があることが分かっている。これを、
図7を使って説明する。
【0041】
図7(A)に示す通常のBCH符号化の場合において、xで示す誤りビットが含まれているとする。すると、この誤りビットの数はそれぞれのデータブロックにおいて4個か3個であるので、4ビットの訂正能力のあるBCH符号を用いれば、全て訂正できるはずである。ところが、
図7(B)に示すように、
図6(B)に関連して上に説明した符号化構造を採用すると、全てのECCに5以上の誤りがあるので、4ビットの訂正能力では、いずれのECCにおいても誤りを訂正できないことになる。現在、訂正能力のビット数に基づいてコントローラを設計しているので、通常の符号化で訂正できるものが新しい符号化構造を採用することによって訂正できなくなるのは好ましくない。
【0042】
図8(B)に示すように、
図1(A)に示した符号化を採用すれば、
図7(A)に示したような誤りの分布がある例であって、ECC4に特段強化された誤り訂正を掛けることがなくても、全ての誤りを4ビットの誤り訂正能力があれば訂正することができる。つまり、通常の符号化により訂正できるものは、本発明の符号化構造においても必ず訂正できることが分かっている。このことは、
図5(B)に示した符号化構造を採用した場合でも同じである。また、
図5(C)について説明したように、ECC4についてのみより訂正能力の高い、例えば、6ビットの訂正能力のある誤り訂正回路を採用することもできる。これにより全体的な誤り訂正回路の物理的な大きさはさほど増大させることなく、全体的な性能をさらに向上させることができる。
【0043】
図9〜
図13に、本発明の符号化方法によるデータの重複のさらなる実施形態を示す。ここでは、パリティの記載を省略している。
図9においては、第1の誤り訂正符号ECC1のデータ部分の領域Aのデータを隣接する第2の誤り訂正符号の領域Bに重複させて誤り訂正符号ECC2とする。重複部分のビットサイズは対応するもの同士同じであるが、重複部分のそれぞれの誤り訂正符号の中での位置が異なっている。
図10は、第1の誤り訂正符号ECC1と第2の誤り訂正符号ECC2との間の重複部分が二つある例を示す。ECC1の領域Aと領域Bとが、ECC2の領域Dと領域Cとでそれぞれ重複している。
図11は、同じデータAとデータBとを4つの誤り訂正符号ECC1、ECC2、ECC3、ECC4の間で共通になっている例を示す。ECC4は、他の誤り訂正符号より長さが短い。
図12は、誤り訂正符号の大きさが全て異なる場合を示している。同じデータAとデータBが3つの誤り訂正符号ECC1、ECC2、ECC3の間で共通になっている。
図13にある例では、第2の誤り訂正符号ECC2が第1の誤り訂正符号ECC1より短く、ECC2のすべてのデータが、第1の誤り訂正符号の一部と共通であるような例も可能である。このように重複部分の位置あるいは大きさを変えることによって、個々の領域のうちのエラーが起きやすい部分を重複部分として、復号の成功率を高めることができる。
【0044】
図14は、
図1(B)と
図5(C)の符号化の例の効果を、通常のBCH符号化方法と対比するためのシミュレーションの結果を示すグラフである。条件としては、ページサイズが8kBで、これを8つの領域に分けたので、各領域の大きさは1kBである。2元対称通信路 (Binary Symmetric Channel, BSC)においてランダムに誤りが発生するモデルを採用した。符号化率(code rate)は0.9609であるとした。比較のための通常のBCH符号としてはBCH(24bits/1024Bytes)を用い、本発明によるオーバーラップモデルとしてはBCH(24bits/1336Bytes)を採用した。つまり、基本的に、上記8つの領域のうちの左端にある領域にはBCH(24bits/1024Bytes)を用い、残りの領域については左隣の領域内の右端の312バイトのデータをそのまま用いて元のデータを符号化することにより全ての領域についてBCH(24bits/1336Bytes)とした 。ただし、「通常のBCH符号2」と「重複BCH符号2」については、
図5(C)に示したように、右端のECCの訂正能力を3ビット向上させたものとしてBCH(27bits/1336Bytes)を採用した。重複部分が少なくなるECCについてのみ、より強力な誤り訂正回路を適用することにより、通常のBCH符号化ではたいした性能の向上は見られないが(当然ではある)、本発明の重複符号化法においては、相当な性能の向上が見られた。通常の符号化と
図1(B)の符号化で誤り率は5分の1程度に減少していることが分かる。本発明の誤り訂正前の誤り率と訂正できなかったビット誤り率とをそれぞれ対数スケールでx軸とy軸とにプロットした。ここで、「訂正できないビット誤り率」は、「訂正できないページのカウント」を「全ページ数」と「ビットで表したページの大きさ」で除したものであると定義する。
【0045】
図15に本願発明にかかる符号化装置の一例のブロックダイアグラムを示す。符号化装置10は、符号化前のページデータを受け付けて、それを符号化ページデータとして出力するものである。符号化装置10は、ページデータ分割部12と、符号化準備部14と、誤り訂正符号化部16と、結合部18とを含んでいる。ページデータ分割部12は、一つのページを構成する符号化する前のデータを該一つのページの一端にある第1データブロックから該一つのページの他端にある第Mデータブロックに分割する(Mは2または3以上の整数)。そして、符号化準備部14は、元のデータブロックに、一定のルールに従って、隣接するデータブロックの一部のデータを付加して、符号化の対象となるデータを読み出す。そして、誤り訂正符号化部16によって、読み出されたデータに対する符号化が行われ、その結果、各データブロックに対応する誤り訂正符号が生成される。結合部18において、これらの誤り訂正符号が結合されて、符号化ページデータとなって、出力される。この時、符号化は、通常、全てのデータブロックに対して同時に実行されるが、一つ一つのデータブロックに対して順次符号化を行うこともできる。
図15には、全てのデータブロックに対して同時に符号化を行う場合が示されているが、この例に限定されないことは言うまでもない。
【0046】
なお、この符号化装置10によって作成された符号化ページデータが記憶媒体に格納されたり、通信の対象となる。
【0047】
図16に本願発明にかかる復号装置の一例のブロックダイアグラムを示す。この復号装置20は、
図15の符号化装置により作成された符号化ページデータを復号するためのものである。まず、符号分離部22により、符号化の際に使ったルールに基づいて符号化ページデータをそれを構成する個々の誤り訂正符号に分離する。分離された誤り訂正符号は、バッファ部24に格納される。なお、バッファ部24は、条件が合えば、省略することも可能である。次に、バッファ部24から取り出した、第k誤り訂正符号を復号部26により復号する。そして、復号されたデータが誤りを含むか否かを誤り検出部28でチェックする。
【0048】
もし、第k誤り訂正符号を復号して得られたデータに誤りがあった場合には、置換符号作成部30により、第k誤り訂正符号との合わせて符号化された部分がある第k+1誤り訂正符号または第k−1誤り訂正符号あるいはそれらの両方が訂正できるかを誤り検出部28により判断して、訂正できた誤り訂正符号を利用して第k誤り訂正符号の合わせて符号化された部分を置換して、置換第k誤り訂正符号を作成する。作成された置換第k誤り訂正符号は、バッファ部24を介してまたは直接に復号部26に送られる。復号部26は、置換第k誤り訂正符号を再度復号する。
【0049】
もし、第k誤り訂正符号を復号して得られたデータに誤りがない場合には、そのデータをページデータ再構成部32に送って、ここで出力されるページデータが再現される。