(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-11-15
(45)【発行日】2024-11-25
(54)【発明の名称】誤り訂正装置及び誤り訂正方法
(51)【国際特許分類】
H03M 13/37 20060101AFI20241118BHJP
H03M 13/09 20060101ALI20241118BHJP
【FI】
H03M13/37
H03M13/09
(21)【出願番号】P 2024013719
(22)【出願日】2024-01-31
【審査請求日】2024-02-01
【審判番号】
【審判請求日】2024-08-20
【早期審理対象出願】
(73)【特許権者】
【識別番号】593145560
【氏名又は名称】田代 正昭
(74)【代理人】
【識別番号】100114269
【氏名又は名称】五十嵐 貞喜
(72)【発明者】
【氏名】田代 正昭
【合議体】
【審判長】高野 洋
【審判官】衣鳩 文彦
【審判官】丸山 高政
(56)【参考文献】
【文献】米国特許第5491700(US,A)
【文献】米国特許出願公開第2015/0278008(US,A1)
【文献】特開平6-326690(JP,A)
【文献】特開2009-141542(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H03M 13/15
H04L 1/00
(57)【特許請求の範囲】
【請求項1】
誤り検出方法として巡回冗長検査(以下「CRC」という。)を採用するデジタル通信における通信エラーの発生の有無を検知するとともに、誤った受信データを訂正する機能を備えた誤り訂正装置であって、該誤り訂正装置は、
受信した送信データ(X)のCRC剰余項(以下CRC(X)という。)と、前記受信データ(Y)から生成したCRC剰余項(以下CRC(Y)という。)との排他的論理和(CRC(X)^CRC(Y))をとり、その結果に基づいて前記通信エラー
の発生の有無を検知する誤り検知手段と、
前記送信データ(受信データ)と同じビット数を有する誤りビットの分布パターン(X^Y)と、該誤りビットの分布パターンのCRC剰余項(CRC(X^Y))とを対応付けて格納したルックアップテーブルと、
前記受信データ(Y)の訂正を行う誤り訂正手段と
を備えるとともに、
前記誤り検知手段が前記通信エラー
の発生を検知すると、前記誤り訂正手段は、前記CRC(X)と前記CRC(Y)との排他的論理和(CRC(X)^CRC(Y))を前記ルックアップテーブルに入力し、出力された誤りビットの分布パターン(X^Y)と前記受信データ(Y)との排他的論理和((X^Y)^Y)を取ることにより、前記受信データ(Y)の誤りを訂正することを特徴とする誤り訂正装置。
【請求項2】
誤り検出方法としてCRCを採用するデジタル通信における通信エラーの発生の有無を検知するとともに、誤った受信データを訂正する誤り訂正方法であって、該誤り訂正方法は、
受信した送信データ(X)のCRC(X)と、前記受信データ(Y)から生成したCRC(Y)とを比較して前記通信エラー
の発生の有無を検知するステップと、
前記通信エラー
の発生が検知されたときに、前記CRC(X)と前記CRC(Y)との排他的論理和(CRC(X)^CRC(Y))を、誤りビットの分布パターン(X^Y)と該誤りビットの分布パターンのCRC剰余項(CRC(X^Y))とを対応付けて格納したルックアップテーブルに入力するステップと、
前記ルックアップテーブルから出力された誤りビットの分布パターン(X^Y)と前記受信データ(Y)との排他的論理和((X^Y)^Y)を取ることにより、前記受信データ(Y)の誤りを訂正するステップとを備えたことを特徴とする誤り訂正方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、本発明は、誤り訂正装置に関し、特に、デジタル信号によるデータ通信における通信エラー発生の有無を判定し、エラーが発生したときは訂正する機能を備えた誤り訂正装置に関する。
【背景技術】
【0002】
デジタル通信の分野におけるデータ伝送の誤りを検出する方法として、巡回冗長検査(Cyclic Redundancy Check、以下「CRC」という。)が用いられている。CRCとは、ディスク等の読み出し/書き込み等、主にシリアルインタフェースのI/Oアクセスにおいて、データに誤りを検出する符号を付加することでデータ伝送の誤りを検出する機能である。データを送信する側では、送信するデータを特定の数を用いて割り算を行い、割り算の「余り」を誤り検出符号としてデータに付加して送信する。データの受信側では、受信したデータを同じ特定の数を用いて割り算を行い、算出した「余り」が受信した「余り」と等しければ、データ伝送途中にデータに誤りがなかったことになり、受信データは正しいと判断できる。これに対し、「余り」が一致しなかった場合は、データ伝送に誤りがあると判断できる。
【0003】
しかしながら、CRCでは誤りのあるデータを訂正することはできないとされ、今まで技術的検討が充分にはなされてこなかった。したがって、これに関する先行技術文献(特許文献)は見つかっていない。これはCRCが、多くの教育機関等で「誤り訂正不可能な符号」として分類され、長年固定観念的に教育されてきたことも原因だと思われる。
誤りが訂正できない場合は、受信側は送られてきたデータを破棄し、送信側にデータの再送を要求し、送信側は再送の要求を受けて再度データを送信することになる。
【0004】
このように、訂正不可能と思われた一つの理由として、受信したデータのどの部分(ビット)に誤りがあるのかが分からないことが挙げられる。
誤りビットが一つと仮定すると、nビットのデータの右(最下位)からm番目(1≦m≦n)に誤りがあることが分かれば、m番目のみを「1」残りをすべて「0」にした「訂正用データ」を作り、それと受信データ(nビット)とのビット毎の排他的論理和(以下断らない限り、「排他的論理和」は「ビット毎の排他的論理和」を指すものとする。)をとれば、受信データのm番目のビットを訂正し(「1→0」又は「0→1」)、元の正しいデータを復元することができる。
誤りビットの数が2以上の場合でも、誤りの場所を特定できれば、同様の方法で訂正することができる。
【先行技術文献】
【非特許文献】
【0005】
【文献】Keith,Lockstone, Mark Lomas, “Active attacks on stream ciphers with cyclic redundancy checks (crcs),”、インターネット<URL: https://www.cix.co.uk/~klockstone/crchack.htm>
【文献】Amitangshu Pal, Alireza Jolfaei, Krishna Kant, “A Fast Prekeying Based Integrity Protection for Smart Grid Communications”, IEEE Transactions on Industrial Informatics,Volume17,Issue8, August 2021, インターネット<URL: https://ieeexplore.ieee.org/ielaam/9424/9422988/9222075-aam.pdf>
【文献】Wikipedia, “Cyclic redundancy check”, インターネット、<URL: https://en.wikipedia.org/wiki/Cyclic_redundancy_check>
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、受信側で得られる情報は、受信データ(「Y」とする。)、送信データ(以下「X」とする。)を特定の数(以下「生成多項式」という。)で割った剰余項(以下CRC(X)とする。)及び受信データ(Y)から生成した剰余項CRC(Y)の3つしかない。
もし、送信データ(X)と受信データ(Y)との排他的論理和(以下これを「X^Y」と表す。)をとることができれば、エラーが発生した場所のビットだけが「1」となるので、それがそのまま上記の「訂正用データ」になるので、誤り訂正ができる。
しかしながら、受信側では送信データ(X)を知ることはできないから、直接(X^Y)を求めることはできない。そこで、本発明者は、CRC(X)とCRC(Y)を用いて(X^Y)を求める方法について鋭意検討を重ねた結果、次の考えに到達した。
【0007】
CRC(X)の計算においては、次の式1が成り立つことが知られている(上記非特許文献1~3参照)。
CRC(X^Y)=CRC(X)^CRC(Y)…(式1)
本発明者は、式1の右辺の計算を行うことによってCRC(X^Y)を求めれば、そこからエラービットの数等に関して一定の制限はあるが、(X^Y)を求めることができることに想到した。
本発明は、上述のような事情に鑑みなされたものであり、送信データ(X)のCRC剰余項CRC(X)と受信データ(Y)のCRC剰余項CRC(Y)に基づいて通信エラーの発生の有無を検出するとともに、通信エラーが発生したときはCRC(X)とCRC(Y)に基づいてエラーの訂正を行う機能を備えた誤り訂正装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明は、誤り検出方法として巡回冗長検査(以下「CRC」という。)を採用するデジタル通信における通信エラーの発生の有無を検知するとともに、誤った受信データを訂正する機能を備えた誤り訂正装置に関し、本発明の上記目的は、該誤り訂正装置が、受信した送信データ(X)のCRC剰余項(以下CRC(X)という。)と、前記受信データ(Y)から生成したCRC剰余項(以下CRC(Y)という。)との排他的論理和(CRC(X)^CRC(Y))をとり、その結果に基づいて前記通信エラーの発生の有無を検知する誤り検知手段と、前記送信データ(受信データ)と同じビット数を有する誤りビットの分布パターン(X^Y)と、該誤りビットの分布パターンのCRC剰余項(CRC(X^Y))とを対応付けて格納したルックアップテーブルと、 前記受信データ(Y)の訂正を行う誤り訂正手段とを備えるとともに、前記誤り検知手段が前記通信エラーの発生を検知すると、前記誤り訂正手段は、前記CRC(X)と前記CRC(Y)との排他的論理和(CRC(X)^CRC(Y))を前記ルックアップテーブルに入力し、出力された誤りビットの分布パターン(X^Y)と前記受信データ(Y)との排他的論理和((X^Y)^Y)を取ることにより、前記受信データ(Y)の誤りを訂正することによって達成される。
【0009】
また、本発明は、誤り検出方法としてCRCを採用するデジタル通信における通信エラーの発生の有無を検知するとともに、誤った受信データを訂正する誤り訂正方法に関し、本発明の上記目的は、該誤り訂正方法が、受信した送信データ(X)のCRC(X)と、前記受信データ(Y)から生成したCRC(Y)とを比較して前記通信エラーの発生の有無を検知するステップと、前記通信エラーの発生が検知されたときに、前記CRC(X)と前記CRC(Y)との排他的論理和(CRC(X)^CRC(Y))を、誤りビットの分布パターン(X^Y)と該誤りビットの分布パターンのCRC剰余項(CRC(X^Y))とを対応付けて格納したルックアップテーブルに入力するステップと、前記ルックアップテーブルから出力された誤りビットの分布パターン(X^Y)と前記受信データ(Y)との排他的論理和((X^Y)^Y)を取ることにより、前記受信データ(Y)の誤りを訂正するステップとを備えることにより達成される。
【発明の効果】
【0010】
本発明に係る誤り訂正装置及びその方法によれば、簡便な方法により、エラーが生じたデータの訂正を行うことができる。
【図面の簡単な説明】
【0011】
【
図1】本発明に係る誤り訂正装置のハードウェア構成の一例を示す図である。
【
図2】ルックアップテーブルの一例を示す図である。
【
図3】本発明に係る誤り訂正装置が行う処理の流れを示すフローチャートの一例である。
【
図4】エラー検知のメカニズムを説明するための図である。
【
図5】受信データの訂正方法を説明するための図である。
【発明を実施するための形態】
【0012】
以下、本発明に係る誤り訂正装置及び方法の実施形態について図面を参照しつつ詳細に説明する。
図1は、本発明に係る誤り訂正装置のハードウェア構成の一例を示す図である。
本発明に係る誤り訂正装置10はコンピュータ等に接続して使用するものであるが、コンピュータ等にその機能を内蔵させてもよいことは言うまでもない。ここでは説明の都合上、外付けの場合を例として説明するが、これに限定されるものではない。
誤り訂正装置10は、外部との接続を行い、データのやり取りを行うインタフェース(I/F)11を備えている。例えばコネクタである。また、制御プログラムに基づいて装置全体の制御を行うCPU12、制御プログラム等が格納された記憶手段であるROM13、CPU12の作業領域であるRAM14、入力に対して排他的論理和を出力するXORゲート15、後述のルックアップテーブルが格納された記憶手段16を備えている。
なお、ルックアップテーブル16はROM13の中に格納してもよいことは勿論であるが、説明の都合上、別々にしてある。また、XORゲートとしては、例えば市販されているXORゲート(SN74LS86A、テキサスインスツルメント社製のデジタルIC)が利用可能である。
上述の「誤り検知手段」としては、CPU12,ROM13、RAM14及びXORゲート15が協働してその機能を果たし、「誤り訂正手段」としてはCPU12,ROM13、RAM14、XORゲート15及びルックアップテーブル16が協働してその機能を果たす。
【0013】
コンピュータ科学におけるルックアップテーブルとは、ウィキペディアによれば、「複雑な計算処理を単純な配列の参照処理で置き換えて効率化を図るために作られた、配列や連想配列などのデータ構造のことをいう。例えば大きな負担がかかる処理をコンピュータに行わせる場合、あらかじめ先に計算できるデータは計算しておき、その値を配列(ルックアップテーブル)に保存しておく。コンピュータはその都度計算を行う代わりに配列から目的のデータを取り出すことによって、計算の負担を軽減し効率よく処理を行うことができる。」ものをいう。
また、剰余項CRC(X)から逆に「X」の値を求めることは困難であるが、それを予めテーブルの形にしておけば、剰余項CRC(X)から「X」の値を求めることは容易にできるという利点がある。
【0014】
図2は、上述のルックアップテーブル(以下単に「テーブル」という。)の一例を示す図である。この明細書では説明の都合上、送受信データは16ビットとしているが、これには限定されないことは勿論である。
デジタル通信において通信エラーが発生した場合、送信データ(X)と受信データ(Y)との排他的論理和をとると、エラーが発生したビットだけが「1」となり、他のビットはすべて「0」になる。これをここでは「誤りビットの分布パターン」と称する。
この誤りビットの分布パターンに対応するCRC剰余項(以下単に「剰余項」という。)を求め、これを「誤りビットの分布パターンの剰余項」という。この誤りビットの分布パターンとその剰余項とを対応つけて格納したのが表1のテーブルである。
【0015】
なお、剰余項を生成するための多項式は、(X
16+X
12+X
5+1)を用いた。このテーブルでは最も確率の高い誤りビット数が1個の場合を載せているが、誤りビット数が2個の場合の誤りビットの分布パターンは、全部で
16C
2=120通りあり、それに対応する剰余項は、
図2の表1を用いれば簡単に求められる。
例えば、誤りビットの分布パターンが「0010001000000000」の場合は、表1のNo.10とNo.14の排他的論理和で求められるので、その剰余項も、上記式1により、それぞれの剰余項の排他的論理和で求められる。
すなわち、「0110011001100010」^「0000011011100110」=「0110000010000100」
誤りビット数が3個以上の場合も同様にして求められる。上記式1において、Yの代わりに「Y^Z」とすると、CRC(X^Y^Z)=CRC(X)^CRC(Y^Z)=CRC(X)^CRC(Y)^CRC(Z)となるからである。
【0016】
言うまでもなく、送信データ(X)と受信データ(Y)との排他的論理和(X^Y)を直接求めることはできない。なぜなら、受信側は送信データ(X)を知ることができないからである。そこで、後述のように、受信データ(Y)から剰余項CRC(Y)を生成し、CRC(X)^CRC(Y)を求めれば、上記式1に基づきCRC(X)^CRC(Y)=CRC(X^Y)を知ることができ、テーブルを参照して、CRC(X^Y)と一致する「誤りビットの分布パターンの剰余項」と対応する「誤りビットの分布パターン」を求めることができる。求めた「誤りビットの分布パターン」は求めようとする(X^Y)に他ならない。
【0017】
図3は、本発明に係る誤り訂正装置が行う処理の流れを示すフローチャートの一例である。
誤り検出方法としてCRCを採用するデジタル通信においては、送信データ(X)に剰余項CRC(X)を付加したデータを送信するが、受信側が受信するのは、受信データ(Y)にCRC(X)が付加されたものになる(ステップS1)。送信データ(X)と受信データ(Y)が常に一致するとは限らないからである。そこで、受信した受信データ(Y)から剰余項CRC(Y)を生成する(ステップS2)。これはCPU12が制御プログラムに基づいて計算する。
次に、受信したCRC(X)と、新たに生成したCRC(Y)との排他的論理和CRC(X)^CRC(Y)を求める(ステップS3)。これはXORゲート15を用いて行うが、ソフトウェア的に比較してもよい。
CRC(X)^CRC(Y)=0(XORゲート15の出力が「Low」)の場合(ステップS4のYes)は、X=Yであり、エラーは発生していないと判定して処理を終了する。
【0018】
一方、CRC(X)^CRC(Y)=1(XORゲート15の出力が「High」)の場合(ステップS4のNo)は、X≠Yであり、エラーが発生していると判定する。
図4は、エラー検知のメカニズムを説明するための図である。
図4を参照しつつ説明する。送信データ(X)を、例えば「1000110001010100」とする。
生成多項式を「X
16+X
12+X
5+1」とすると、CRC(X)=「0100010010000100」となる。送信データ(X)にCRC(X)を付加したデータ列を送信し、送信データ(X)が通信エラーによって変化して「1000110001010110」になって受信データ(Y)として受信されたものとする。
受信側で受信データ(Y)の剰余項CRC(Y)を生成すると、CRC(Y)=「0110010011000110」となる。CRC(X)とCRC(Y)をXORゲート15に入力して排他的論理和をとると、
CRC(X)≠CRC(Y)であるから、XORゲート15の出力は「1」(High)となり、通信エラーと判定される。
【0019】
図3に戻って、エラー発生と判定されると、CRC(X)^CRC(Y)の値(0010000001000010)をルックアップテーブル16に入力し、CRC(X)^CRC(Y)の値と対応する「誤りビットの分布パターン」を出力する(ステップS5)。
次に、誤りビットの分布パターン(X^Y)と受信データ(Y)との排他的論理和をとり、受信データ(Y)の誤りビットを訂正し(ステップS6)、処理を終了する。
【0020】
図5は、受信データ(Y)の訂正方法を説明するための図である。
図4のステップS5~S6の処理を具体的に説明する。
送信データ(X)を「1000110001010100」、受信データ(Y)を「1000110001010110」とする。すなわち、受信データ(Y)は送信データ(X)の右から2番目のビットが「0→1」に変化したものとする。
生成多項式を「X
16+X
12+X
5+1」とすると、CRC(X)=「0100010010000100」、CRC(Y)=「0110010011000110」となる。
CRC(X)^CRC(Y)=「0010000001000010」をテーブル16に入力すると、テーブルの上から2行目の「誤りビットの分布パターンの剰余項」と一致するので、テーブル16は、対応する上から2行目の「誤りビットの分布パターン」である「0000000000000010」を出力する。これが送信データ(X)と受信データ(Y)の差分「X^Y」に相当するものである。
そこで、誤りビットの分布パターン「0000000000000010」と受信データ(Y) 「1000110001010110」との排他的論理和をとり、受信データ(Y)を訂正する。すなわち、(X^Y)^Y=X^(Y^Y)=X となって、送信データ(X) 「1000110001010100」が復元される。
【0021】
以上は、誤り検出符号として巡回冗長符号(Cyclic Redundancy Code)を用いた誤り訂正装置について説明したが、誤り検出符号を生成するハッシュ関数HASH(X)が上記式1の関係を満たせばCRCの場合と同様に本発明を適用できる。
したがって、HASH(X^Y)=HASH(X)^HASH(Y)…(式2)の関係を満たすハッシュ関数HASH(X)を誤り検出符号の生成に用いれば、CRCの場合と同様に本発明を適用できる。
図2における「剰余項」を「ハッシュ値」と、
図3における「CRC」を「HASH」と、
図4における「CRC剰余項」を「ハッシュ値」、「CRC」を「HASH」と、
図5における「CRC剰余項」を「ハッシュ値」とそれぞれ読み替えれば、上記の説明がそのまま利用できる。
なお、(式2)を満たすハッシュ関数の例として、線形性を有するものがあげられるが、例えば、データ(X)(例えば「01001101」)を1ビット左にずらす関数を考える。
この場合、HASH(X)=10011010 となる。
同様にY=00011101とすると、HASH(Y)=00111010 となるから、
X^Y=01010000、 ∴HASH(X^Y)=10100000
一方、HASH(X)^HASH(Y)=10100000 である。
従って、HASH(X^Y)=HASH(X)^HASH(Y)となり、上記(式2)が成立しているのが分かる。
【0022】
以上で実施形態の説明を終了するが、本発明は、上述した実施の形態に限定されるものではなく、本発明の主旨を損なわない範囲で変更することが可能である。
【符号の説明】
【0023】
10:誤り訂正装置
11:インタフェース
12:CPU
13:ROM
14:RAM
15:XORゲート
16:ルックアップテーブル
【要約】 (修正有)
【課題】巡回冗長検査(CRC)によって、受信データ列に誤りが発生したと判断されたときに、そのデータ列を訂正する誤り訂正装置を提供する。
【解決手段】受信した送信データ(X)のCRC剰余項(CRC(X))と、受信データ(Y)から生成したCRC剰余項(CRC(Y))との排他的論理和をとり、その結果に基づいて通信エラーを検知する誤り検知手段と、送信データ(受信データ)と同じビット数を有する誤りビットの分布パターンと、該誤りビットの分布パターンのCRC剰余項とを対応付けて格納したルックアップテーブルと、受信データ(Y)の訂正を行う誤り訂正手段とを備えるとともに、誤り訂正手段は、RC(X)とCRC(Y)との排他的論理和をルックアップテーブルに入力し、出力された誤りビットの分布パターンと受信データ(Y)との排他的論理和を取ることにより、受信データ(Y)の語りを訂正する。
【選択図】
図3