(57)【要約】【課題】データ破壊個所が多い場合で誤り訂正を可能とすることにある。【解決手段】複数バイト元データにＣＲＣのチェックデータを付加したデータブロックの伝送時等のデータ破壊を復元する破壊データ復元方法であって、関数式ＣＲＣＸ＝Ｇ（ＣＲＣＸ＋１，ＤＴＸ）及びデータブロック末尾のＣＲＣ初期値を用いて、ＣＲＣの逆方向計算を行う。この逆方向によるＣＲＣ計算結果を格納する第１のレジスタとＣＲＣの初期値を格納する第２のレジスタとの最下位８ビットを除くデータを比較し、両データが等しくない場合、破壊個所が現在位置Ｘのデータでないと判断し、Ｘ＋１番目のＣＲＣの計算結果を取得し、再度戻って処理し、両データが等しい時に現在位置Ｘのデータ破壊と判断し、前記関数式からＸ＋１番目のＣＲＣの計算結果ＣＲＣ２Ｘ＋１と第２のレジスタの下位８ビットとを用いて現在位置Ｘの修復データを作成するステップとを有する。【選択図】    図８
2004180132.tif 000002
【特許請求の範囲】
【請求項１】
複数バイトの元データにＣＲＣ（巡回冗長符号）の計算により得られるチェックデータを付加したデータブロックの保存時又は伝送時のデータ破壊を復元する破壊データ復元方法において、
前記元データの各バイトを順方向で計算する関数がＣＲＣＸ＋１＝Ｆ（ＣＲＣＸ，ＤＴＸ）で表し、
また、前記ＣＲＣの各バイトを逆方向で計算する関数がＣＲＣＸ＝Ｇ（ＣＲＣＸ＋１，ＤＴＸ）で表すとともに、当該ＣＲＣＸ＝Ｇ（ＣＲＣＸ＋１，ＤＴＸ）及び既知正常時のＣＲＣ計算結果を初期値として、逆方向にＣＲＣを計算し、データブロックの破壊をチェックすることを特徴とする破壊データ復元方法。
但し、前記関数式において、ＣＲＣＸ＋１：Ｘ＋１バイト目のＣＲＣの計算結果値、ＣＲＣＸ：Ｘバイト目のＣＲＣの計算結果値、ＤＴＸ：データブロックのＸバイト目のデータを意味する。
【請求項２】
複数バイトの元データにＣＲＣ（巡回冗長符号）の計算により得られるチェックデータを付加したデータブロックの保存時又は伝送時のデータ破壊を復元する破壊データ復元方法において、
前記ＣＲＣの各バイトを逆方向で計算する関数がＣＲＣＸ＝Ｇ（ＣＲＣＸ＋１，ＤＴＸ）（Ｘはデータブロックのバイト位置であって、０，１，２，…）で表すとともに、当該ＣＲＣＸ＝Ｇ（ＣＲＣＸ＋１，ＤＴＸ）及び既知正常時のＣＲＣ計算結果を初期値として、逆方向にＣＲＣを計算する第１のステップと、
予め第１及び第２のレジスタが設けられ、当該第１のレジスタには逆方向によるＣＲＣ計算結果値を格納し、当該第２のレジスタには前記ＣＲＣ計算の初期値を格納する第２のステップと、
現在計算バイト位置Ｘに基づき、前記第１及び第２のレジスタの最下位８ビットを除くビットデータを比較し、両ビットデータが等しい場合に現在計算バイト位置Ｘのデータブロックのデータが破壊されていると判断する第３のステップと、
この第３のステップにおいて、両ビットデータが等しくない場合、破壊個所が現在計算バイト位置Ｘのデータブロックのデータでないと判断し、当該データブロックのＸ番目のデータ値と前記第１及び第２のレジスタに格納されるデータとを用いてＸ＋１番目のＣＲＣの計算結果を取得し、前記第１及び第２のレジスタに格納し、前記第３のステップに戻って処理する第４のステップと、
前記第３のステップでデータ破壊と判断された場合、前記関数式からＸ＋１番目のＣＲＣの計算結果値ＣＲＣ２Ｘ＋１と前記第２のレジスタの下位８ビットとを用いて前記現在計算位置Ｘの修復データを作成する第５のステップと
を有することを特徴とする破壊データ復元方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ保存中または伝送中に破壊されるデータブロックから元データを復元する破壊データ復元方法に関する。
【０００２】
【従来の技術】
一般に、複数バイトの元データを保存又は伝送する場合、その保存中又は伝送途中に元データが部分的に破壊する可能性がある。
【０００３】
そこで、従来、幾つかのエラー訂正方法が考えられている。
【０００４】
その１つは、パリティチェックを用いたエラー訂正の簡単な方法であって、元データにパリティビットを付加し、元データとパリティビットデータとを合わせたデータブロックの形式で保存又は伝送し、データ保存後又はデータ伝送後、元データを含むパリティビットデータを用いて、元データが破壊されているか否かをチェックする。具体的には、予め８ビット中の１のビットの個数が常に偶数又は奇数になるように定めておき、保存後又は伝送後に８ビット中で１つのビットが誤って反転した場合に偶数又は奇数にならないことから破壊されたと検出するものであり、この段階では、元データが破壊されていることが判るが、どの部分が破壊されているか不明である。そこで、元データの水平パリティと垂直パリティとを用いて、破壊部分を見つけ出し、訂正するものである。
【０００５】
他の１つの訂正方法は、複雑なリードソロモン符号（Ｒｅｅｄ−Ｓｏｌｏｍｏｎ  ｃｏｄｅ）を用いた訂正方法であって、ランダム誤り訂正巡回符号に使用されるＢＣＨ符号（Ｂｏｓｅ−Ｃｈａｕｄｈｕｒｉ−Ｈｏｃｑｕｅｎｇｈｅｍ  ｃｏｄｅ）のうち、ｍ＝１となる原始ＢＣＨ符号（Ｐｒｉｍｉｔｉｖｅ  Ｂｏｓｅ−Ｃｈａｕｄｈｕｒｉ−Ｈｏｃｑｕｅｎｇｈｅｍ  ｃｏｄｅ）を用いて訂正する方法である。
【０００６】
【発明が解決しようとする課題】
ところで、以上のような訂正方法のうち、前者のパリティチェックを用いた方法は、チェック用のパリティビットデータの量に比べ、元データの訂正可能なビット数が少なく、データブロック中の必要な元データの割合を考えたとき、非常に訂正効率が悪いものとなる。
【０００７】
一方、後者のリードソロモン符号（Ｒｅｅｄ−Ｓｏｌｏｍｏｎ  ｃｏｄｅ）を用いた方法は、誤り訂正能力が高く、複数個所が破壊されても訂正することが可能であるが、複雑なマトリクス計算が必要であり、ｎビットの計算を行う場合にｎの２乗に比例する計算が必要になり、訂正効率を上げようとすると、計算量が膨大に増える問題がある。
【０００８】
本発明は上記事情にかんがみてなされたもので、データ破壊個所が多い場合であっても誤り訂正を可能とし、ひいては訂正効率の向上を図る破壊データ復元方法を提供することを目的とする。
【０００９】
【課題を解決するための手段】
上記課題を解決するために、複数バイトの元データにＣＲＣによる計算により得られるチェックデータを付加したデータブロックの保存時又は伝送時のデータ破壊を復元する破壊データ復元方法であって、
ＣＲＣの各バイトを逆方向で計算する関数がＣＲＣＸ＝Ｇ（ＣＲＣＸ＋１，ＤＴＸ）（Ｘはデータブロックのバイト位置であって、０，１，２，…）で表すとともに、当該ＣＲＣＸ＝Ｇ（ＣＲＣＸ＋１，ＤＴＸ）及び既知正常時のＣＲＣ計算結果を初期値として、逆方向にＣＲＣを計算する第１のステップと、予め第１及び第２のレジスタが設けられ、当該第１のレジスタには逆方向によるＣＲＣ計算結果値を格納し、当該第２のレジスタには前記ＣＲＣ計算の初期値を格納する第２のステップと、現在計算バイト位置Ｘに基づき、前記第１及び第２のレジスタの最下位８ビットを除くビットデータを比較し、両ビットデータが等しい場合に現在計算バイト位置Ｘのデータブロックのデータが破壊されていると判断する第３のステップと、この第３のステップにおいて、両ビットデータが等しくない場合、破壊個所が現在計算バイト位置Ｘのデータブロックのデータでないと判断し、当該データブロックのＸ番目のデータ値と前記第１及び第２のレジスタに格納されるデータとを用いてＸ＋１番目のＣＲＣの計算結果を取得し、前記第１及び第２のレジスタに格納し、第３のステップに戻って処理する第４のステップと、第３のステップでデータ破壊と判断された場合、前記関数式からＸ＋１番目のＣＲＣの計算結果値ＣＲＣ２Ｘ＋１と第２のレジスタの下位８ビットとを用いて現在計算位置Ｘの修復データを作成する第５のステップとを有するものである。
【００１０】
従って、本発明は以上のような方法とすることにより、ＣＲＣの逆方向計算手順を用いて、１バイト以内の破壊を見つけて修正することが可能であり、訂正効率を上げることが可能となる。
【００１１】
【発明の実施の形態】
以下、本発明に係わる破壊データ復元方法の一実施の形態について図面を参照して説明する。
【００１２】
（１）  データブロック及びＣＲＣについて。
【００１３】
本発明による破壊データ復元方法は、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ：巡回冗長符号）を使用することから、当該ＣＲＣについて説明するが、それに先立って保存又は伝送すべきデータについて説明する。
【００１４】
保存又は伝送すべきデータとしては、図１に示すようにｎ（ｎは整数、かつ、複数）バイトの元データにチェックデータを付加し、ブロックデータとして構成する。チェックデータは、４バイト３２ビットのＣＲＣを使用するので、３２ビット分のチェックデータとなる。従って、データブロックサイズはｎ＋４バイトから成っている。
【００１５】
一方、ＣＲＣとしては、検査対象データのビット列を２進データとみなし、このビット列データにおける２進データの高次多項式と考え、この高次多項式を予め定める生成多項式を用いて割り算し、得られる余りのデータを所定ビット数のチェックデータとする。そして、元データにチェックデータを付加してなるデータブロックを保存又は伝送する。従って、受信側では、元データを同じ生成多項式で割り、余りが無ければ送信は正しいと判断する。
【００１６】
ところで、本発明においては、具体的には、ｎバイト元データの高次多項式を予め定める生成多項式（０ｘＥＤＢ８８３２０：固定値）を用いて割り算する。このとき、ＣＲＣの計算の初期値には、「０ｘＦＦＦＦＦＦＦＦ」を用いる。
【００１７】
チェック時は、ＣＲＣ３２を含めたデータブロック全体のＣＲＣを計算し、この計算結果から「０ｘＤＥＢＢ２０Ｅ３」が得られた場合、正常と判断する。
【００１８】
（２）  ＣＲＣの順方向計算例について。
【００１９】
そこで、本発明の復元方法は、以上の説明を前提としつつ、ＣＲＣ３２の逆方向計算を行って誤り訂正を行うものであるが、その前に各データブロックのバイトデータにおけるＣＲＣ３２の順方向計算について説明する。
【００２０】
今、データブロックを構成するバイトごとのデータについてＤＴＸの記号で表すものとする。この記号ＤＴＸにおいて、Ｘはデータのバイト位置を表す。従って、データブロックの各バイトデータを記号で表わせば、先頭バイトデータはＤＴ０、元データの末尾バイトデータはＤＴｎ−１となる。また、元データのＣＲＣ３２の最初の計算結果は、図１に示すようにＤＴｎ、ＣＲＣ３２の計算結果の末尾はデータブロック末尾に等しくＤＴｎ＋３となる。
【００２１】
そこで、先ず、ＣＲＣ順方向計算に先立ち、例えば図２に示すＣＲＣ３２テーブル作成プログラムを用いて、ＣＲＣ計算を実行し、図３に示す計算結果をＣＲ３２テーブル１０に格納する。
【００２２】
一方、ＣＲＣ３２の１バイト分を計算する関数は、
ＣＲＣＸ＋１＝Ｆ（ＣＲＣＸ，ＤＴＸ）                      …  （１）
で表わされる。その結果、Ｘ＋１バイト目のＣＲＣ３２の計算結果値は、図４に示す手順に従って、Ｘバイト目のＣＲＣ３２の計算結果値（＝ＣＲＣＸ）１１とＸバイト目のデータブロック値（＝ＤＴＸ）１２から計算できることを意味する。このＣＲＣＸは、０バイトから順次Ｘバイト目までのＣＲＣ３２の計算中間計算値であると言える。つまり、Ｘ番目のＣＲＣ３２の計算中間結果となるＣＲＣＸの下位８ビットデータｃとＸ番目の元データであるａとのＸＯＲ（排他的論理和）をとり、これをｄとし、ＣＲＣ３２計算用８ビットテーブル１０のインデックスｄからデータを取り出す。このデータをｅとする。このデータｅとＸ番目のＣＲＣ３２の計算中間結果となるＣＲＣＸの上位２４ビットデータｂとのＸＯＲをとれば、Ｘ＋１バイト目のＣＲＣ３２の中間結果１３が得られる。
【００２３】
このことは、０バイト目，つまりデータブロックの最初の元データを用いたＣＲＣ３２の計算結果であるＣＲＣ０は前述するように初期値０ｘＦＦＦＦＦＦＦＦが用いられる。従って、１バイト目のＣＲＣ３２の計算結果ＣＲＣ１は、０バイト目のＣＲＣ３２の計算結果値（ＣＲＣ０＝０ｘＦＦＦＦＦＦＦＦ）と０バイト目のデータブロック値（＝ＤＴ０）から計算でき、２バイト目のＣＲＣ３２の計算結果ＣＲＣ２は、１バイト目のＣＲＣ３２の計算結果値（ＣＲＣ１）と１バイト目のデータブロック値（＝ＤＴ１）から計算することができる。よって、
2004180132.tif 000003
なる関係が成り立っている。
【００２４】
よって、ＣＲＣ３２の生成手順は、概略次の通りとなる。
【００２５】
▲１▼  ＣＲＣ３２中間結果の初期値ｆ、０ｘＦＦＦＦＦＦＦＦである。生成多項式は０ｘＥＤＢ８８３２０である。
【００２６】
▲２▼  元データを０番目からｎ−１番目までｎ個分についてチェックする。そして、その結果が最終ＣＲＣ３２となり、この最終ＣＲＣ３２のビット反転値がｎ番目から４バイト分に格納される。
【００２７】
▲３▼  チェック時は、ＣＲＣ３２を元データの最後に付加したまま、元データの０番目からｎ−１番目を過ぎ、ｎ＋３にあるＣＲＣ３２の最終バイトまでｎ＋４個分チェックする。
【００２８】
▲４▼  以上の計算結果が０ｘＤＥＢＢ２０Ｅ３になれば、データ及び最終ＣＲＣ３２の両方が正常と判定する。その他の値の時はデータ部分または最終ＣＲＣ３２の何れかの１ビット以上が破壊されていると判定する。
【００２９】
従って、以上の関係から、ｎバイト目のデータブロック値ＤＴｎが破壊されていない場合、当該データブロックのＣＲＣ３２の計算結果ＣＲＣｎ−１はｎバイト目に入っているチェックデータそのものであり、図１に示すＣＲＣ０〜ＣＲＣ３で表わすブロック全体のＣＲＣ３２の値に等しい。同様にデータブロック全体の値が破壊されていない場合、ＣＲＣ３２を含めたデータブロック全体のＣＲＣ３２の計算結果値ＣＲＣｎ＋３は前述する０ｘＤＥＢＢ２０Ｅ３となる。
【００３０】
（３）  ＣＲＣ３２の逆方向計算例について。
【００３１】
本発明に係わる破壊データ復元方法で用いられるＣＲＣ３２の逆方向計算例について図５を参照して説明する。
【００３２】
以上述べたＣＲＣ３２の順方向計算例を利用することにより、ＣＲＣ３２を逆方向に計算する関数は次式で表わすことができる。
【００３３】
ＣＲＣＸ＝Ｇ（ＣＲＣＸ＋１，ＤＴＸ）                      …  （２）
この記号の意味は前述する（１）式と同じである。ＣＲＣｎ＋３のＣＲＣ３２の計算結果値は前述するように０ｘＤＥＢＢ２０Ｅ３であることは明らかであり、この値はＣＲＣ３２の逆方向計算時の初期値となる。よって、前記（２）式のＧ（  ）を用いて、データブロックの末尾から先頭方向に溯ってＣＲＣ３２を計算していくと、データブロックの内容が破壊されていない場合には、ＣＲＣ３２の計算結果ＣＲＣ０は０ｘＦＦＦＦＦＦＦＦとなるはずである。そして、途中のＸ番目位置のＣＲＣの計算結果ＣＲＣＸは順方向計算によるＦ（  ）を用いて得られた値と同じ計算結果となる。
【００３４】
逆方向計算はハードウエア的には次の手順によって行われる。
【００３５】
（ａ）  図１に示すごとく、ｎバイトの元データに前述するＣＲＣ３２の計算を行って得られた３２ビットのチェックデータが付加され、ブロックデータとして保存又は伝送する。このデータ保存後又はデータ受信時にブロックデータが破壊されているか否かをチェックするが、このときＣＲＣ３２の逆方向計算の処理を実行する。
【００３６】
（ｂ）  前記（２）式に示すＸ＋１番目データブロックのＣＲＣ計算中間結果となるＣＲＣＸ＋１の初期値は、ＣＲＣｎ＋３の初期値０ｘＤＥＢＢ２０Ｅ３が用いられる。前述するＣＲＣの順方向計算とは全く逆方向の計算を行うため、ＣＲＣの順方向計算で求めた最終ＣＲＣ計算結果である「０ｘＤＥＢＢ２０Ｅ３」が用いられる。
【００３７】
（ｃ）  そこで、先ず、ＲＣ３２計算用８ビットテーブル１０ａとＣＲＣ３２計算用２４ビットテーブル１０ｂとを用意し、そのうちＣＲＣ３２計算用８ビットテーブル１０ａは８ビットのインデックスとして用いられ、当該テーブル１０ａの先頭から順に以下のデータが格納される。図６は、ＲＣ３２計算用８ビットテーブル１０ａのデータ配列図であって、データ０００，０６５，１９５，１３０，１３４，１９９，０６９，００４，０７７，０１２，１４２，２０７，２０３，１３８，００８，０７３，……が格納されている。
【００３８】
一方、ＣＲＣ３２計算用２４ビットテーブル１０ｂは、ＣＲＣ３２テーブルの上位８ビットを削除したデータ配列図であって、８ビットテーブル１０ａのインデックスに対応して２４ビットテーブル１０ｂの先頭から順に次のようなデータが格納される。つまり、０ｘ００００００，０ｘ０７３０９６，０ｘ０ｅ６１２ｃ，０ｘ０９５１ｂａ，０ｘ６ｄｃ４１９，０ｘ６ａｆ４８ｆ，０ｘ６３ａ５３５，０ｘ６４９５ａ３，……等が格納されている。
【００３９】
（ｄ）  ＣＲＣＸ＋１の上位８ビットをｂとし、そのｂのインデックスに基づいてＣＲＣ３２計算用８ビットテーブル１０ａからデータを取り出す。このデータ値をｄとする。
【００４０】
（ｅ）  さらに、Ｘ＋１番目の１つ前のＸ番目の元データであるａとＣＲＣ３２計算用８ビットテーブル１０ａのインデックスｂから取り出したｄとのＸＯＲをとり、この出力をｅとし、Ｘ番目のＣＲＣ３２の計算中間結果となるＣＲＣＸの下位８ビットに格納する。
【００４１】
（ｆ）  さらに、ＣＲＣ３２計算用８ビットテーブル１０ａのインデックスｂのデータｄをインデックスとし、ＣＲＣ３２計算用２４ビットテーブル１０ｂの該当エリアからデータｆを取り出す。
【００４２】
（ｇ）  そして、ＣＲＣＸ＋１の下位２４ビットのデータｃとＣＲＣ３２計算用２４ビットテーブル１０ｂから取り出したデータｆとのＸＯＲをとり、この出力をｇとし、Ｘ番目のＣＲＣ３２の計算中間結果であるＣＲＣＸの上位２４ビットに格納する。
【００４３】
よって、この段階において、Ｘ番目のＣＲＣ３２の計算結果ＣＲＣＸを求めることができる。
【００４４】
（ｈ）  以下、順次、Ｘ番目のＣＲＣ３２の計算結果ＣＲＣＸを用いて、Ｘ−１番目のＣＲＣ３２の計算結果ＣＲＣＸ−１を求めていく。
【００４５】
ここで、仮にデータブロックの１部分（ＣＲＣ３２を使用する場合、３２ビット以内のバースト誤り）が破壊されている場合、前記（１）式のＦ（  ）を用いてデータブロックを先頭から末尾に向かって全バイトを計算したとき、０ｘＤＥＢＢ２０Ｅ３にはならない。同様に、前記（２）式のＧ（  ）を用いてデータブロックを末尾から先頭に向かって全バイトを計算したとき、０ｘＦＦＦＦＦＦＦＦにはならない。
【００４６】
そこで、特にＣＲＣ３２を使用した場合には、１バイト以内のデータの破壊を修正することが可能である。但し、１バイトのデータを修正する場合、データブロックのサイズは６４Ｋバイト程度になる。１ビットの誤りを訂正するためには、データブロックのサイズは２の２４乗バイト近くまで大きくすることができる。
【００４７】
（４）  本発明に係わる破壊データ復元方法について（図８参照）。
【００４８】
（ａ）  先ず、本発明に係わる破壊データ復元方法を実施するために、ＣＲＣ３２による逆方法計算による計算結果を格納する第１のレジスタ２０とＣＲＣ３２の順方向計算結果を格納する第２のレジスタ３０とが設けられている。
【００４９】
この状態において、データブロックが破壊されていないか否かをチェックする。このチェックは、前記４項に記載するＣＲＣ３２による逆方法計算例に基づき、データブロックの末尾から先頭までのＣＲＣ３２の計算を実行し、その計算結果が第１のレジスタ２０に格納される。
【００５０】
ところで、ＣＲＣ３２の計算結果である先頭バイトデータのＣＲＣ２０（０はＸの位置が０であることを意味する）が第１のレジスタ１０に格納されるが、このＣＲＣ２０が０ｘＦＦＦＦＦＦＦＦである場合、データブロックは破壊されていないことを意味する。ＣＲＣ２０が０ｘＦＦＦＦＦＦＦＦでない場合、データブロックは破壊されているので、以下の手順に従って復元処理を実行する。
【００５１】
（ｂ）  そこで、前述するように順方向のＣＲＣ３２の計算結果を格納する第２のレジスタ３０（＝ＣＲＣ１０（０はＸの位置が０であることを意味する））を用意し、この第２のレジスタ３０に初期値として「０ｘＦＦＦＦＦＦＦＦ」を格納する。
【００５２】
（ｃ）  これら第１及び第２のレジスタ２０，３０に格納されるＣＲＣ１ｘとＣＲＣ２ｘとのうち、それぞれの上位２４ビットのデータｃとａとを比較し（Ｓ１）、両データが等しいときには後記する（ｆ）に進んで、次のＸ＋１番目のＣＲＣ３２の値ｘ＋１を計算する。一方、データｃとａとが等しくない場合には次のステップ（ｄ）に進む。
【００５３】
（ｄ）  すなわち、両データｃ、ａが等しくない場合、その位置Ｘがデータブロックの末尾か否かを判断し（Ｓ２）、末尾の場合には復元が不可能と判断し、異常終了する。なお、この異常終了する原因としては、複数個所または８ビット異常のバースト誤りがあることが考えられる。
【００５４】
（ｅ）  Ｓ２において、Ｘがデータブロックの末尾でない場合、Ｆ（  ）を用い、Ｘ番目のデータブロックの値ＤＴＸと、ＣＲＣ１ＸとＣＲＣ２Ｘのそれぞれの値とからＸ＋１番目のＣＲＣ３２の値であるＣＲＣ１Ｘ＋１とＣＲＣ２Ｘ＋１とを計算し（Ｓ３）、Ｘ＋１を新しいＸとし、前記（ｃ）に移行し、それぞれの上位２４ビットを比較し、同様に等しいか、等しくないかを判断する。
【００５５】
（ｆ）  前記（ｃ）において、両データａ，ｃが等しい場合、前記（２）式のＦ（  ）を用い、Ｘ番目のデータブロックの値ＤＴＸとＣＲＣ２Ｘ値とからＸ＋１番目のＣＲＣ３２の値であるＣＲＣ２Ｘ＋１を計算する。その値の上位８ビットをｄとする（Ｓ４）。
【００５６】
（ｇ）  このｄをインデックスとし、ＣＲＣ３２計算用８ビットテーブルから値ｅを取り出す（Ｓ５）。
【００５７】
（ｈ）  ＣＲＣ１Ｘの下位８ビットをｂとし、このｂとｅとのＸＯＲをとり（Ｓ６）、この取り出した値を復元データｆとする。
【００５８】
（ｉ）  この復元データｆをデータブロックのｘの位置に書込み、データ復元が正常に終了する。
【００５９】
従って、この復元方法においては、８ビットに整列された８ビットデータまでを復元できる。元データサイズが大きい場合は、復元ビット数を小さくすることによって対応できる。つまり、復元するビット数に制限を加えることにより、データブロックサイズを大きくすることができる。例えば復元ビット数を１ビットに制限する場合、上記手順を次のように変更する。
【００６０】
（ｈ）’ｆとデータブロックの元データＤＴｘとを比較し、１ビット以上異なっていた場合、前記（ｆ）に進む。１ビットのみ異なっている場合、復元データｆをデータブロックのｘの位置に書き込み、復元が正常終了する。
【００６１】
なお、本願発明は、上記実施の形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変形して実施できる。例えば上記実施の形態では、ＣＲＣ３２を用いたが、データブロックサイズが小さい場合は、１６ビット生成多項式のＣＲＣを用い、またデータブロックサイズが大きい場合は、６４ビット生成多項式のＣＲＣを用いて、同じ方法により訂正することが可能である。また、ビットサイズを変更する場合、２４ビットデータとして扱っていたところを、８ビットデータ、或いは５６ビットデータとして扱えばよいものである。
【００６２】
また、各実施の形態は可能な限り組み合わせて実施することが可能であり、その場合には組み合わせによる効果が得られる。さらに、上記各実施の形態には種々の上位，下位段階の発明が含まれており、開示された複数の構成要素の適宜な組み合わせにより種々の発明が抽出され得るものである。例えば問題点を解決するための手段に記載される全構成要件から幾つかの構成要件が省略されうることで発明が抽出された場合には、その抽出された発明を実施する場合には省略部分が周知慣用技術で適宜補われるものである。
【００６３】
【発明の効果】
以上説明したように本発明によれば、データ破壊個所が多い場合であっても誤り訂正を可能となる。例えばＣＲＣ３２を用いた場合、４バイトのチェックデータにより、２の２４乗程度のバイト数まで１ビット誤りを訂正することができ、ひいては訂正効率を大幅に向上させることができる。
【図面の簡単な説明】
【図１】本発明に係わる破壊データ復元方法に用いられる保存又は伝送するデータブロックの構成図。
【図２】ＣＲＣ３２テーブルを作成するためのプログラムデータ図。
【図３】図２に示すプログラムにより作成されたＣＲＣ３２テーブルのデータ配列図。
【図４】ＣＲＣ３２を生成する方法を説明する図。
【図５】本発明に係わる破壊データ復元方法に用いられるＣＲＣ３２の逆方向計算例を説明する図。
【図６】本発明に係わる破壊データ復元方法に用いられるＣＲＣ計算用８ビットテーブルのデータ配列図。
【図７】本発明に係わる破壊データ復元方法に用いられるＣＲＣ計算用２４ビットテーブルのデータ配列図。
【図８】本発明に係わる破壊データ復元方法の一実施の形態を説明する図。
【符号の説明】
１０ａ…ＣＲＣ計算用８ビットテーブル
１０ｂ…ＣＲＣ計算用２４ビットテーブル
２０…第１のレジスタ
３０…第２のレジスタ
【図１】
2004180132.tif 000004
【図２】
2004180132.tif 000005
【図３】
2004180132.tif 000006
【図４】
2004180132.tif 000007
【図５】
2004180132.tif 000008
【図６】
2004180132.tif 000009
【図７】
2004180132.tif 000010
【図８】
2004180132.tif 000011