JP3622981B2 - 誤り訂正符号化装置及び方法、並びに誤り訂正復号化装置及び方法 - Google Patents
誤り訂正符号化装置及び方法、並びに誤り訂正復号化装置及び方法 Download PDFInfo
- Publication number
- JP3622981B2 JP3622981B2 JP51415497A JP51415497A JP3622981B2 JP 3622981 B2 JP3622981 B2 JP 3622981B2 JP 51415497 A JP51415497 A JP 51415497A JP 51415497 A JP51415497 A JP 51415497A JP 3622981 B2 JP3622981 B2 JP 3622981B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- input
- output
- bit
- error
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
Landscapes
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Algebra (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Error Detection And Correction (AREA)
- Detection And Correction Of Errors (AREA)
Description
本発明は、誤り訂正符号化装置及び方法、並びに誤り訂正復号化装置及び方法に関する。特に、ディジタル記録装置やディジタル通信装置等によって、ディジタルデータの記録又は再生、もしくは、送信又は受信を行う際に、ディジタルデータにおける誤りを訂正する誤り訂正符号を符号化するための誤り訂正符号化装置及び方法、並びに、誤り訂正符号を復号化するための誤り訂正復号化装置及び方法に関するものである。
背景技術
近年、ディジタル記録装置やディジタル通信装置の発達に伴い、ディジタルデータを記録又は再生する場合、もしくは、送信又は受信する場合において、ディジタルデータの誤りを如何に少なくするかは、重要な課題となっている。そこで、ディジタルデータの誤りを訂正するために、誤り訂正符号がディジタルデータを取り扱う各種の装置で用いられている。リード・ソロモン符号も、そのような誤り訂正符号の一種であって、主として、例えば、相変化を利用するPDドライバユニットなどのディジタル記録装置に用いられている。
リード・ソロモン符号は、符号語が、元の数が2Nであるガロア体GF(2N)の元から構成され、αをGF(2N)の原始元としたとき、生成多項式が次式で表される多元の巡回ハミング符号である。
G(X)=(X−α0)(X−α1)…(X−αd-2) …(1)
ただし、式(1)を含めて、以後、演算は全てガロア体GF(2N)上で行う。また、dは最小符号間距離を表す。
リード・ソロモン符号の符号語は以下のように生成する。
情報後ベクトルIを次式で表すと、
I=(i0,i1,…,ik-1) …(2)
情報多項式I(X)は
I(X)=i0・Xk-1+i1・Xk-2+…+ik-2・X+ik-1…(3)
と表すことができる。ただし、i0,i1,…,ik-1はそれぞれ情報シンボルであり、情報の元となるビットデータについて、Nビットを1かたまりとして、ガロア体GF(2N)上の元をベクトル表現したものと対応づける。
そして、符号多項式A(X)は、情報多項式I(X)と生成多項式G(X)から次式を用いて求めることができる。
A(X)=I(X)・G(X) …(4)
しかしながら、得られる符号は組織符号にならない。そこで、次のように符号語を作成する。
まず、情報多項式I(X)にXn-kをかけ、それをG(X)で割り、その商をQ(X)、剰余をR(X)とすると、
I(X)・Xn-k=Q(X)・G(X)+R(X) …(5)
と表わすことができる。ここで、
A(X)=R(X)+I(X)・Xn-k …(6)
とおくと、式(5)より
A(X)=Q(X)・G(X) …(7)
が成立する。式(7)によって求められたA(X)は生成多項式G(X)で割りきれるので、符号多項式になる。符号多項式R(X)を
で表わすと、式(6)で表される符号多項式A(X)は
A(X)=i0・Xn-1+i1・Xn-2+…
+ik-2・Xn-k+1+ik-1・Xn-k
+rn-k-1・Xn-k-1+rn-k-2・Xn-k-2+…+r1・X+r0…(9)
と表される。式(9)の符号多項式で表される符号語をベクトル表現で表記すると
A=i0,i1,…,ik-1,r0,r1,…,rn-k-1) …(10)
となり、式(10)で表される符号語ベクトルAは、情報語ベクトルIをそのまま含んでいるから、組織符号であることがわかる。この場合、符号語ベクトルAは(n,k)組織符号である。符号語を作成する際に、情報語ベクトルに付加するベクトルR、つまり
R=r0,r1,…,rn-k-1) …(11)
はパリティ語ベクトルである。
以上のように生成する符号を、リード・ソロモン符号RS(n,k,d=n−k+1)と書く。
図12にリード・ソロモン符号を用いた従来技術の誤り訂正符号化装置の一例を示す。この回路は、ガロア体GF(2N)の係数を有する多項式の除算を行うものである。図12において、誤り訂正符号化装置は、
(a)8ビット排他的論理和演算器195乃至206と、
(b)ガロア体上の係数k12乃至k1を有する係数乗算器171乃至182と、
(c)8ビットラッチ183乃至194と、
(d)リセット時に8ビットラッチ183乃至194の内容を0にクリアして初期化する初期値設定回路207とを備える。
当該誤り訂正符号化装置において、入力データは、排他的論理和演算器206の第1の入力端子に入力され、排他的論理和演算器206の出力端子から出力されるデータは、係数乗算器171を介してラッチ183に入力されるとともに、各係数乗算器172乃至182を介してそれぞれ排他的論理和演算器195乃至205に入力される。さらに、ラッチ183乃至194と、排他的論理和演算器195乃至206とは、交互に配置されかつ、データがラッチ183からラッチ194に向かって伝送されるように継続接続される。
次に、図12の誤り訂正符号化装置を用いて実際に8ビットを1シンボルとしたリード・ソロモン符号RS(32,20,d=13)を符号化する場合を説明する。
ただし、原始多項式m(X)と、原始元αと、生成多項式G(X)はそれぞれ以下のように定義する。
m(X)=X8+X4+X3+X2+1 …(12)
α=(00000010) …(13)
G(X)
11
=Π(X−αi)
i=0
=k1・X11+k2・X10+…+k11・X+k12 …(14)
ただし、式(14)のk1からk12は、生成多項式G(X)を展開して、Xの降べきの順に並べたときの、X11からX0にかかる係数を表す。
第1の入力データである第1の情報シンボルi000が排他的論理和演算器206に入力されると、第1の情報シンボルi000と、8ビットラッチ194の出力データである00Hとの排他的論理和が演算され、演算結果のデータがガロア体係数乗算器171乃至182に入力される。ここで、00HのHは、16進数表示を表わし、以下同様である。この場合において、ガロア体係数乗算器171乃至182に入力されるデータをd000とすると、第1の情報シンボルi000とデータ00Hとの排他的論理和であるデータd000は、次式で表わすことができる。
d000=i000 …(15)
これは、図13において、列番号R1でかつステップS101の3行分にある演算に対応する。次に、ガロア体係数乗算器171乃至182が、入力データd000とそれぞれの係数k12乃至k1とのガロア体上の積を出力する。これらの積は、図13における列番号R13からR2まででかつステップS101の2行目にあるデータに相当する。
次に、ガロア体係数乗算器171乃至182の出力データがそれぞれ8ビットラッチ183乃至194に格納される。ここで、各ラッチ183乃至194に格納されるデータをそれぞれp000からp011とすると、これらのデータ値は、図13において列番号R13からR2まででかつステップS101の3行分にある演算を行った結果に対応する。ただし、図13における加算記号は排他的論理和演算を表し、以下、演算EORは排他的論理和演算を表す。
次に、第2の入力データである第2の情報シンボルi001が排他的論理和演算器206に入力されると、第2の情報シンボルi001と、8ビットラッチ194の出力データであるp011との排他的論理和が演算され、演算結果のデータがガロア体係数乗算器171乃至182に入力される。この場合、ガロア体係数乗算器171乃至182に入力されるデータをd001とすると、第2の情報シンボルi001とデータp011との排他的論理和であるデータd001は次式で表わすことができる。
d001=i001+p011 …(16)
これは、図13において、列番号R2でかつステップS101の3行分にある演算に対応する。次に、ガロア体係数乗算器171乃至182は、入力データd001と、各係数k12乃至k1とのガロア体上の積を出力する。これらの積は、図13における列番号R14からR3まででかつステップS102の2行目にあるデータに対応する。
次に、ガロア体係数乗算器171乃至182の出力データがそれぞれ8ビットラッチ183乃至194に格納される。各ラッチ183乃至194に格納されるデータをp012からp023とすると、これらのデータ値は、図13において列番号R14からR3まででかつステップS102の3行分にある演算を行った結果に対応する。
以下、同様に、情報シンボルi002から情報シンボルi019を排他的論理和演算器206に入力していくと、図13に示す演算が続けられ、最後に、情報語(i000,i001,…,i019)を生成多項式(式(14))で割った余りであるパリティ語(p228,p229,…,p239)がそれぞれ、8ビットラッチ183乃至194に格納される。今まで入力した情報シンボルi000,i001,…,i019の続きに、最後に得られたパリティシンボルp228,p229,…,p239を付加すると、符号語(i000,i001,…,i019,p228,p229,…,p239)が完成する。
しかしながら、図12に示すような誤り訂正符号化装置では、ガロア体上の係数乗算器171乃至182はそれぞれ複雑な回路を有しているため、最小符号間距離の長い符号を符号化する場合、大規模な回路となる。また、図12に示すような誤り訂正符号化装置では、装置の構成を変えずに最小符号間距離を変更することは、困難である。装置の構成を変えずに最小符号間距離の変更を行うためには、装置の構成を変えずにガロア体上の係数乗算器の係数を変更可能にすることと、装置の構成を変えずに除算回路のループを変更できる回路にする必要があり、それらを実現するには、さらに複雑な回路になる。
本発明の第1の目的は以上の問題点を解決し、実用に値する符号化速度を持ちながら、従来技術に比較して小規模な回路構成で実現可能であるとともに、装置の構成を変えずに最小符号間距離dを自由に変更可能な誤り訂正符号化装置及び方法を提供することにある。
本発明の第2の目的は、実用に値する復号化速度を持ちながら、従来技術に比較して小規模な回路構成で実現可能であるとともに、装置の構成を変えずに最小符号間距離dを自由に変更可能な誤り訂正復号化装置及び方法を提供することにある。
発明の開示
本発明に係る誤り訂正符号化装置によれば、2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対する誤り訂正符号を符号化する誤り訂正符号化装置において、
各入力データと上記リード・ソロモン符号の生成多項式の各係数とのガロア体上の複数の積データをそれぞれ予め演算して、上記複数の積データを、各アドレスに対して複数b個の積データを1組として予め記憶する積データ記憶手段と、
それぞれN×bビットの記憶容量を有する自然数m個の記憶装置からなる第1の記憶手段と、
入力データに応答して、上記積データ記憶手段に記憶された複数の積データを、複数b個の積データを1組として並列に読み出すように上記積データ記憶手段を制御する読み出し制御手段と、
それぞれN×bビットの第1と第2の入力端子を有し、上記読み出し制御手段によって上記積データ記憶手段から並列に読み出される複数b個の積データが第1の入力端子に入力され、上記第1の入力端子に入力されるデータと、上記第2の入力端子に入力されるデータとの排他的論理和を演算して演算結果のデータを出力する排他的論理和演算手段と、
上記m個の記憶装置に記憶されたデータを1つの記憶装置毎に選択的に順次読み出して出力し、上記選択的に読み出して出力されるN×bビットのデータのうち上位N×(b−1)ビットのデータを上記排他的論理和演算手段の第2の入力端子の下位N×(b−1)ビットに出力するとともに、上記排他的論理和演算手段から出力される演算結果のデータを、上記m個の記憶装置のうちの1つに選択的に順次切り換えて書き込むように、上記第1の記憶手段を制御する第1の選択手段と、
Nビットの記憶容量を有し、上記第1の選択手段によって上記m個の記憶装置のうちの1つから選択的に出力されるN×bビットのデータのうち下位Nビットのデータを一時的に記憶して上記排他的論理和演算手段の第2の入力端子の上位Nビットに出力する第2の記憶手段と、
上記入力データを上記積データ記憶手段に順次入力することにより、上記第1の記憶手段のm個の記憶装置においてパリティデータを生成し、上記入力データに続いて、上記m個の記憶装置を1つの記憶装置毎に選択的に順次切り換えることにより、上記m個の記憶装置において生成される各パリティデータを順次出力する第2の選択手段とを備えたことを特徴とする。
また、上記誤り訂正符号化装置において、好ましくは、上記読み出し制御手段と、上記第1の選択手段と、上記第2の選択手段とは、別の記憶装置に記憶された所定のプログラムを実行する中央演算制御装置によって構成される。
また、本発明に係る誤り訂正復号化装置によれば、2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対して符号化された誤り訂正符号を復号化する誤り訂正復号化装置において、
上記入力データと、上記入力データに対するパリティデータとを含む複数の受信シンボルからなり、入力される受信語を各受信シンボル毎に記憶する受信語記憶手段と、
上記誤り訂正符号化装置を備え、上記リード・ソロモン符号の生成多項式を用いて、上記入力される受信語に対する剰余を演算して出力する剰余演算手段と、
上記剰余演算手段から出力される剰余に基づいて、上記受信語における誤り位置と、上記誤り位置に対応する誤り数値との組を演算して出力する誤り数値及び誤り位置演算手段と、
上記誤り数値及び誤り位置演算手段から出力される上記受信語における誤り位置に基づいて、上記受信語記憶手段に記憶された上記誤り位置における受信シンボルを上記受信語記憶手段から読み出して出力する読み出し制御手段と、
上記読み出し制御手段から出力される上記誤り位置における受信シンボルと、上記誤り数値及び誤り位置演算手段から出力される、上記誤り位置に対応する誤り数値との排他的論理和を演算して、演算結果のデータを出力する排他的論理和演算手段と、
上記排他的論理和演算手段から出力される演算結果のデータを、上記受信語記憶手段の上記誤り位置に書き込むことにより、上記誤り位置における受信シンボルを訂正する書き込み制御手段とを備えたことを特徴とする。
さらに、本発明に係る誤り訂正符号化方法によれば、2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対する誤り訂正符号を符号化する誤り訂正符号化方法において、
各入力データを上記リード・ソロモン符号の生成多項式の各係数とのガロア体上の複数の積データをそれぞれ予め演算して、上記複数の積データを、各アドレスに対して複数b個の積データを1組として積データ記憶手段に予め記憶するステップと、
入力データに応答して、上記積データ記憶手段に記憶された複数の積データを、複数b個の積データを1組として並列に読み出すように上記積データ記憶手段を制御するステップと、
それぞれN×bビットの第1と第2の入力端子を有する排他的論理和演算手段を用いて、上記積データ記憶手段から並列に読み出される複数b個の積データが第1の入力端子に入力され、上記第1の入力端子に入力されるデータと、上記第2の入力端子に入力されるデータとの排他的論理和を演算して演算結果のデータを出力するステップと、
それぞれN×bビットの記憶容量を有するm個の記憶装置の第1の記憶手段に記憶されたデータを1つの記憶装置毎に選択的に順次読み出して出力し、上記選択的に読み出して出力されるN×bビットのデータのうち上記N×(b−1)ビットのデータを上記排他的論理和演算手段の第2の入力端子の下位N×(b−1)ビットに出力するとともに、上記排他的論理和演算手段から出力される演算結果のデータを、上記m個の記憶装置のうちの1つに選択的に順次切り換えて書き込むように、上記第1の記憶手段を制御するステップと、
Nビットの記憶容量を有する第2の記憶手段を用いて、上記m個の記憶装置のうちの1つから選択的に出力されるN×bビットのデータのうち下位Nビットのデータを一時的に記憶して上記排他的論理和演算手段の第2の入力端子の上位Nビットに出力するステップと、
上記入力データを上記積データ記憶手段に順次入力することにより、上記第1の記憶手段のm個の記憶装置においてパリティデータを生成し、上記入力データに続いて、上記m個の記憶装置を1つの記憶装置毎に選択的に順次切り換えることにより、上記m個の記憶装置において生成される各パリティデータを順次出力するステップとを含むことを特徴とする。
またさらに、本発明に係る誤り訂正復号化方法によれば、2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対して符号化された誤り訂正符号を復号化する誤り訂正復号化方法において、
上記入力データと、上記入力データに対するパリティデータとを含む複数の受信シンボルからなり、入力される受信語を各受信シンボル毎に受信語記憶手段に記憶するステップと、
上記誤り訂正符号化方法により、上記リード・ソロモン符号の生成多項式を用いて、上記入力される受信語に対する剰余を演算して出力するステップと、
上記出力される剰余に基づいて、上記受信語における誤り位置と、上記誤り位置に対応する誤り数値との組を演算して出力するステップと
上記出力される上記受信語における誤り位置に基づいて、上記受信語記憶手段に記憶された上記誤り位置における受信シンボルを上記受信語記憶手段から読み出して出力するステップと、
上記出力される上記誤り位置における受信シンボルと、上記出力される、上記誤り位置に対応する誤り数値との排他的論理和を演算して、演算結果のデータを出力するステップと、
上記出力される演算結果のデータを、上記受信語記憶手段の上記誤り位置に書き込むことにより、上記誤り位置における受信シンボルを訂正するステップとを含むことを特徴とする。
【図面の簡単な説明】
図1は、本発明に係る第1の実施形態の誤り訂正符号化装置のブロック図である。
図2は、図1の誤り訂正符号化装置の動作を示すタイミングチャートである。
図3は、本発明に係る第2の実施形態の誤り訂正符号化装置のブロック図である。
図4は、図3の誤り訂正符号化装置においてm=3としたときのブロック図である。
図5は、図3の誤り訂正符号化装置のCPU61によって実行される符号化処理を示すフローチャートである。
図6は、図5のサブルーチンである初期化処理(ステップS1)を示すフローチャートである。
図7は、図5のサブルーチンである符号語生成処理(ステップS2)を示すフローチャートである。
図8は、図7のサブルーチン処理P1(ステップS7)を示すフローチャートである。
図9は、図7及び図8のサブルーチン処理P2(ステップS23,S35)を示すフローチャートである。
図10は、図8のサブルーチン処理P3(ステップS37)を示すフローチャートである。
図11は、図7のサブルーチン処理P4(ステップS24)を示すフローチャートである。
図12は、従来技術の誤り訂正符号化装置のブロック図である。
図13は、図12の誤り訂正符号化装置においてリード・ソロモン符号RS(n,n−12,d=13)の計算方法を説明するための図である。
図14は、図12の誤り訂正符号化装置においてリード・ソロモン符号RS(n,n−5,d=6)の計算方法を説明するための図である。
図15は、本発明に係る第3の実施形態の誤り訂正復号化装置のブロック図である。
発明を実施するための最良の形態
以下、本発明に係る実施形態について図面を参照して説明する。
<第1の実施形態>
本発明に係る第1の実施形態について、図面を参照しながら説明する。第1の実施形態では、8ビットを1シンボルとしたリード・ソロモン符号RS(32,20,d=13)を符号化する場合を説明する。ただし、原始多項式m(X)、原始元α、生成多項式G(X)はそれぞれ式(12)、式(13)、式(14)のように定義する。
図1は、本発明に係る第1の実施形態の誤り訂正符号化装置の構成を示すブロック図である。この第1の実施形態の誤り訂正符号化装置は、
(a)8ビットラッチ12,27と、
(b)4進カウンタ13と、
(c)ROM(読み出し専用メモリ)14と、
(d)8ビット排他的論理和演算器11,15,16,17,18と、
(e)32ビットバス選択器19,23と、
(f)32ビットラッチ20,21,22からなるキューメモリ30と、
(g)入力データ“1"をデコードしてパルス信号を出力するデコーダ24と、
(h)入力データ“2"をデコードしてパルス信号を出力するデコーダ25と、
(i)入力データ“3"をデコードしてパルス信号を出力するデコーダ26と、
(j)入力データ“0"をデコードしてパルス信号を出力するデコーダ28と、
(k)2ビットラッチ29と、
(l)3個のシンボル遅延回路301乃至303からなる遅延回路300と、
(m)8ビット出力データ選択器310とを備える。
図1の誤り訂正符号化装置において、8ビットの入力データは、排他的論理和演算器11の第1の入力端子に入力されるとともに、出力データ選択器310のd接点を介して出力データとして出力される。排他的論理和演算器18の出力端子からの出力データは、排他的論理和演算器11の第2の入力端子に入力される。一方、クロックCLKは、4進カウンタ13と、ラッチ29及び27に入力される。4進カウンタ13は、入力されるクロックCLKを計数し、かつ計数値が4となると0にリセットし、その計数値の2ビットのデータを、ラッチ29を介して上位2ビットのアドレスとしてROM14のアドレス端子に出力するとともに、選択信号としてバス選択器19,23及びデコーダ24,25,26,28に出力する。ここで、2ビットラッチ29は、4進カウンタ13の計数値の2ビットデータを、クロックCLKの立ち下がりのタイミングでラッチする。
デコーダ28は、4進カウンタ13の出力データが“0"の値を示したとき、クロックCLKの半周期の時間だけ遅れてクロックCLKの半周期の幅を有するパルス信号をラッチ27に出力する。また、デコーダ24は、4進カウンタ13の出力データが“1"の値を示したとき、クロックCLKの半周期の時間だけ遅れてクロックCLKの半周期の幅を有するパルス信号をラッチ20に出力する。さらに、デコーダ25は、4進カウンタ13の出力データが“2"の値を示したとき、クロックCLKの半周期の時間だけ遅れてクロックCLKの半周期の幅を有するパルス信号をラッチ21に出力する。またさらに、デコーダ26は、4進カウンタ13の出力データが“3"の値を示したとき、クロックCLKの半周期の時間だけ遅れてクロックCLKの半周期の幅を有するパルス信号をラッチ22に出力する。
ここで、8ビットラッチ12は、排他的論理和演算器11からの8ビットデータを、デコーダ26からのパルス信号のクロックCLKの立ち上がりのタイミングでラッチしてROM14に下位8ビットのアドレスとして出力する。ROM14には、ベクトル表現の入力シンボルに対して所定の係数をガロア体上で乗算した結果がベクトル表現で予め格納されている。入力データはアドレスの下位8ビットとして与え、アドレスの上位2ビットは係数を切り替えるために用いる。ROM14のデータ端子からの32ビットの出力データは、4個の排他的論理和演算器15乃至18の第1の入力端子に入力され、その出力端子から出力される32ビットのデータは、32ビットバス選択器19の入力端子に入力される。また、排他的論理和演算器18から出力される8ビットの出力データは排他的論理和演算器11の第2の入力端子に入力される。
ここで、32ビットバス選択器19,23はそれぞれ、8ビットバス4本分を連動して4回路に切り替えるバス選択器である。32ビットバス選択器19,23は、選択信号が“0"のとき最下位置のd接点に切り換えられて、バス選択器19の入力端子及びバス選択器23の出力端子はそれぞれオープン状態となる。また、32ビットバス選択器19,23は、選択信号が“1"のとき最上位置のa接点に切り換えられて、バス選択器19の入力端子は32ビットラッチ20の入力バスに接続されるとともに、バス選択器23は32ビットラッチ20の出力バスに接続される。さらに、32ビットバス選択器19,23は、選択信号が“2"のとき最上から2番目の位置のb接点に切り換えられて、バス選択器19の入力端子は32ビットラッチ21の入力バスに接続されるとともに、バス選択器23は32ビットラッチ21の出力バスに接続される。またさらに、32ビットバス選択器19,23は、選択信号が“3"のとき最上から3番目の位置のc接点に切り換えられて、バス選択器19の入力端子は32ビットラッチ22の入力バスに接続されるとともに、バス選択器23は32ビットラッチ22の出力バスに接続される。
バス選択器23から出力される32ビットの出力データのうち上位24ビットのデータは、排他的論理和演算器17,18,19の第2の入力端子に入力され、バス選択器23から出力される32ビットの出力データのうち下位8ビットのデータは、8ビットラッチ27を介して、排他的論理和演算器15の第2の入力端子に入力される。ここで、8ビットラッチ27は、入力される8ビットのデータを、クロックCLKの立ち上がりのタイミングでラッチした後、排他的論理和演算器15の第2の入力端子に出力し、デコーダ28からのパルス信号に応答して、ラッチしているデータを0にクリアする。
32ビットラッチ20から出力される32ビットの出力データはシンボル遅延回路301に入力され、シンボル遅延回路301は、入力される32ビットのデータのうち
(a)上位8ビットデータを、バス選択器310のa接点から出力される情報シンボルの後に、遅延することなく8ビットバス選択器310のb接点を介して出力データとして出力し(以下、この出力データの出力タイミングを基準出力タイミングという。)、
(b)次の上位8ビットデータを上記基準出力タイミングから1シンボル(=1バイト=8ビット)だけ遅延した後、8ビットバス選択器310のb接点を介して出力データとして出力し、
(c)次の上位8ビットデータを上記基準出力タイミングから2シンボルだけ遅延した後、8ビットバス選択器310のb接点を介して出力データとして出力し、
(d)次の下位8ビットデータを上記基準出力タイミングから3シンボルだけ遅延した後、8ビットバス選択器310のb接点を介して出力データとして出力する。
また、32ビットラッチ21から出力される32ビットの出力データはシンボル遅延回路302に入力され、シンボル遅延回路302は、入力される32ビットのデータのうち
(a)上位8ビットデータを上記基準出力タイミングから4シンボルだけ遅延した後、8ビットバス選択器310のc接点を介して出力データとして出力し、
(b)次の上位8ビットデータを上記基準出力タイミングから5シンボルだけ遅延した後、8ビットバス選択器310のc接点を介して出力データとして出力し、
(c)次の上位8ビットデータを上記基準出力タイミングから6シンボルだけ遅延した後、8ビットバス選択器310のc接点を介して出力データとして出力し、
(d)次の上位8ビットデータを上記基準出力タイミングから7シンボルだけ遅延した後、8ビットバス選択器310のc接点を介して出力データとして出力する。
さらに、32ビットラッチ22から出力される32ビットの出力データはシンボル遅延回路303に入力され、シンボル遅延回路303は、入力される32ビットのデータのうち
(a)上位8ビットデータを上記基準出力タイミングから8シンボルだけ遅延した後、8ビットバス選択器310のd接点を介して出力データとして出力し、
(b)次の上位8ビットデータを上記基準出力タイミングから9シンボルだけ遅延した後、8ビットバス選択器310のd接点を介して出力データとして出力し、
(c)次の上位8ビットデータを上記基準出力タイミングから10シンボルだけ遅延した後、8ビットバス選択器310のd接点を介して出力データとして出力し、
(d)次の上位8ビットデータを上記基準出力タイミングから11シンボルだけ遅延した後、8ビットバス選択器310のd接点を介して出力データとして出力する。
従って、当該誤り訂正符号化装置に入力される、例えば20シンボルの情報シンボルに続いて、誤り訂正符号化されラッチ20に格納された32ビット=4シンボルのパリティ語と、誤り訂正符号化されラッチ21に格納された32ビット=4シンボルのパリティ語と、誤り訂正符号化されラッチ22に格納された32ビット=4シンボルのパリティ語とが出力データとしてバス選択器310から出力される。
図2は、図1の誤り訂正符号化装置の動作を示すタイミングチャートである。入力データは8ビットで、クロックCLKの4個のパルスにつき1度入力される。また、4進カウンタ13の初期値は2に設定され、8ビットラッチ12,27、32ビットラッチ20,21,22の初期値は0に設定され、2ビットラッチ29の初期値は0に設定される。
表1及び表2は、ROM14に記憶されるデータの内容である。表1及び表2において、k1乃至k12は式(14)に示す生成多項式G(X)の係数であり、αは式(13)に示すガロア体GF(28)の原始元であり、積の記号はガロア体上の積を表す。km,αn(ここで、mは1から12までの自然数であり、nは0以上の整数である。)はどちらもガロア体GF(28)の元である。従って、kmとαnとの積もガロア体GF(28)の元であり、ベクトル表現を用いると8ビットの数値に対応するので、その積の数値データはROM14に予め格納される。
表1及び表2において、アドレスHは、ROM14の上位2ビットのアドレスであり、アドレスLはROM14の下位8ビットのアドレスである。また、b[31,…,24]は最上位8ビットの係数データであり、b[23,…,16]は次の上位8ビットの係数データであり、b[15,…,8]は次の上位8ビットの係数データであり、b[7,…,0]は最下位8ビットの係数データである。
表3はガロア体GF(28)上の元をベクトル表現からべき表現に変換するための変換表である。表3は参考のために記載したものであり、本実施形態において直接用いるデータではない。表3から明らかなように、表1及び表2に示すROM14のアドレスLのデータ値をべき表現に変換すれば、そのアドレスに書かれている値のαn(ここで、nは0以上の整数である。)の部分に対応することがわかる。従って、ROM14において、例えばアドレスHに0を入力し、アドレスLにベクトル表現(8ビット)のガロア体GF(28)の元を入力すると、ROM14は生成多項式の係数k12,k11,k10,k9とアドレスLに入力した値のガロア体上の積を出力することがわかる。
以下、図2を参照して図1の誤り訂正符号化装置における誤り符号化処理について説明する。
まず、第1番目のクロックCLKの立ち下がりと同期するデコーダ26の出力パルス信号の立ち上がりにおいて、32ビットバス選択器19,23は32ビットラッチ22を選択している。このとき、8ビット排他的論理和演算器18の入力データは、ROM14の出力データの下位8ビットであるデータ00Hと、32ビットラッチ22の出力データの第16ビットから第9ビットにあたるデータ00Hであるから、8ビット排他的論理和演算器18の出力データは00Hになる。そのため、8ビット排他的論理和演算器11の入力データは、8ビット排他的論理和演算器18の出力データであるデータ00Hと、入力データi000とになり、8ビットラッチ12にはデータi000が格納される。従って、図2のデータd000は式(15)によって表わすことができる。これと同時に、8ビットラッチ27の出力データと、ROM14の出力データの上位8ビットの排他的論理和のデータを8ビット排他的論理和演算器15が出力しており、また32ビットラッチ22の出力データの上位24ビットと、ROM14の出力データの下位24ビットとの排他的論理和の24ビットのデータを8ビット排他的論理和演算器16,17,18が出力している。従って、以上の4個の8ビット排他的論理和演算器15,16,17,18の出力データは32ビットラッチ22に書き込まれる。また、それと同時に8ビットラッチ27には、以前32ビットラッチ22に書き込まれていたデータの下位8ビットが書き込まれる。この場合、8ビット排他的論理和演算器15,16,17,18の各8ビットの入力データが全て00Hであるので、32ビットラッチ22に書き込まれるデータは00000000Hである。また、8ビットラッチ27に書き込まれるデータは00Hである。以上の動作の後に、ROM14に与えられるアドレスの下位8ビットはd000になり、その上位2ビットは“3"になる。ここで、ROM14には表1に示すようなデータが格納されており、ガロア体上の積の演算をテーブル参照で求めることができる。この場合、アドレスの上位2ビットは“3"であるので、ROM14はそのデータ端子からデータ00000000Hを出力する。従って、図2のROM14の出力データA0を8ビットずつ区切って表現すると、次式で表わすことができる。
A0=(00H,00H,00H,00H) …(17)
次に、第2番目のクロックCLKの立ち下がりと同期するデコーダ28の出力パルス信号の立ち上がりにおいて、8ビットラッチ27が0にクリアされる。また、ROM14に与えられるアドレスの下位8ビットはデータd000のまま変わらず、その上位2ビットは“0"になるため、表1より図2のROM14の出力データA1は次式で表わすことができる。
A1=(k12・d000,k11・d000,k10・d000,k9・d000)…(18)
ただし、積の記号“・”はガロア体上の積の演算を意味する。
次に、第3番目のクロックCLKの立ち下がりと同期するデコーダ24の出力信号の立ち上がりにおいて、32ビットバス選択器19,23は32ビットラッチ20を選択している。このとき、8ビットラッチ27の8ビットの出力データと、ROM14の出力データの上位8ビットの排他的論理和のデータを8ビット排他的論理和演算器15が出力しており、また32ビットラッチ20の出力データの上位24ビットと、ROM14の出力データの下位24ビットとの排他的論理和のデータを8ビット排他的論理和演算器16,17,18が出力している。従って、以上の8ビット排他的論理和演算器15,16,17,18の32ビットの出力データは、32ビットラッチ20に書き込まれる。また、それと同時に8ビットラッチ27には、以前32ビットラッチ20に書き込まれていたデータの下位8ビットが書き込まれる。この場合、8ビットラッチ27の出力データはデータ00Hであり、また32ビットラッチ20の出力データの上位24ビットもデータ000000Hであるので、32ビットラッチ20に書き込まれるデータは式(18)で表されるデータA1そのものである。従って、図2の32ビットラッチ20の出力データである(p000,p001,p002,p003)は次式で表わすことができる。
(p000,p001,p002,p003)
=(k12・d000,k11・d000,k10・d000,k9・d000) …(19)
また、8ビットラッチ27に書き込まれるデータはデータ00Hである。以上の動作の後に、ROM14に与えられるアドレスの下位8ビットはデータd000となり、その上位2ビットは“1"になる。従って、図2のROM14の出力データA2は次式で表わすことができる。
A2=(k8・d000,k7・d000,k6・d000,k5・d000)…(20)
同様にして、データ(p004,p005,p006,p007)は次式で表わすことができる。
(p004,p005,p006,p007)
=(k8・d000,k7・d000,k6・d000,k5・d000) …(21)
また、ROM14の出力データA3は次式で表わすことができる。
A3=(k4・d000,k3・d000,k2・d000,k1・d000)…(22)
また、データ(p008,p009,p010,p011)は次式で表わすことができる。
(p008,p009,p010,p011)
=(k4・d000,k3・d000,k2・d000,k1・d000) …(23)
ただし、第5番目のクロックCLKの立ち下がりと同期して8ビットラッチ12の出力データが変化する。具体的にはデコーダ26の出力パルス信号の立ち上がりにおいて、32ビットバス選択器19,23が32ビットラッチ22を選択しているため、第1番目のクロックCLKの時と同様に、8ビット排他的論理和演算器11の入力データは8ビット排他的論理和演算器18の出力データであるp011と、入力データi001になり、8ビットラッチ12には、式(15)で表されるデータd001が格納される。ただし、式(15)において和の記号はガロア体上の和の演算を意味する。
次に、第7番目のクロックCLKの立ち下がりと同期するデコーダ24の出力信号の立ち上がりにおける状態を説明する。このとき、32ビットバス選択器19,23は32ビットラッチ20を選択している。上記の処理と同様に考えると、8ビットラッチ27の出力データは00Hであり、また32ビットラッチ20の出力データの上位24ビットは、
(p000,p001,p002)
=(k12・d000,k11・d000,k10・d000) …(24)
であるので、
(p012,p013,p014,p015)
=(k12・d001,k11・d001+p000,
k10・d001+p001,k9・d001+p002)
=(k12・d001,k11・d001+k12・d000,k10・d001
+k11・d000,k9・d001+k10・d000) …(25)
で表されるデータが32ビットラッチ20に書き込まれる。
また、32ビットラッチ20の書き込み前のデータ値の下位8ビットであるデータp003が同時に8ビットラッチ27に書き込まれる。以上の動作の後に、ROM14に与えられるアドレスの下位8ビットはデータd001となり、その上位2ビットは“1"になる。
従って、図2のROM14の出力データB2は、次式で表わすことができる。
B2=(k8・d001,k7・d001,k6・d001,k5・d001)…(26)
同様にして、データ(p016,p017,p018,p019)は次式で表わすことができる。
(p016,p017,p018,p019)
=(k8・d001+p003,k7・d001+p004,
k6・d001+p005,k5・d001+p006)
=(k8・d001+k9・d000,k7・d001+k8・d000,
k6・d001+k7・d000,k5・d001+k6・d000) …(27)
また、ROM14の出力データB3は次式で表わすことができる。
B3=(k4・d001,k3・d001,k2・d001,k1・d001)…(28)
さらに、データ(p020,p021,p022,p023)は次式で表わすことができる。
(p020,p021,p022,p023)
=(k4・d001+p007,k3・d001+p008,
k2・d001+p009,k1・d001+p010)
=(k4・d001+k5・d000,k3・d001+k4・d000,
k2・d001+k3・d000,k1・d001+k2・d000) …(29)
また、第9番目のクロックCLKの立ち下がりと同期するデコーダ26の出力信号の立ち上がりにおいて、8ビット排他的論理和演算器18の出力データはp023であるため、データd002は次式で表わすことができる。
d002=i002+p023=i002+k1・d001 …(30)
以上の動作を第{4×20+1}番目のクロックCLKが入力されるまで繰り返すと、32ビットラッチ20,21,22に合計12シンボルのパリティ語が生成される。今まで入力した20シンボルの入力データの情報シンボル、すなわち情報語に、ここで生成した12シンボルのパリティ語を付加すると、合計32シンボルの符号語、つまり出力シンボル列が完成する。従って、遅延回路300及び出力データ選択器310とにより、20シンボルの情報語に続いて、12シンボルのパリティ語が8ビットずつパラレルに順次、誤り訂正符号化された符号語(=情報語+パリテイ語)の出力データとして出力される。
以上説明したように、本実施形態では、
(a)情報語である8ビットの入力データに応答して、生成多項式の各係数と入力情報シンボルのガロア体上の複数の積データをそれぞれ演算して、各アドレスに対して4個の積データを1組として記憶し、4個の積データを1組として並列に(同時に)排他的論理和演算器15乃至18に対して読み出し可能に構成された積データ記憶手段である32ビットROM14と、
(b)第1の記憶手段である3個の32ビットラッチ20,21,22と、(c)第2の記憶手段である8ビットラッチ27と、
(d)排他的論理和演算手段である8ビット排他的論理和演算器15,16,17,18と、
(e)第1の選択手段である32ビットバス選択器19,20と、
(f)読み出し制御手段である4進カウンタ13、ラッチ12,29及びデコーダ24乃至26,28と、
(g)第2の選択手段であるシンボル遅延回路300及び出力データ選択器310と
を用いることによって、最小符号間距離d=13であるリード・ソロモン符号RS(n,n−12,d=13)を符号化できる。
以上の第1の実施形態においては、複数の積データを記憶したROM14から4個の積データを1組として並列に(同時に)排他的論理和演算器15乃至18に対して読み出し可能に構成し、4個の積データを用いて同時に処理し、かつ3個の32ビットラッチ20乃至22を選択的に順次繰り返して使用することにより、符号化処理の演算をしているので、回路構成を、図14の従来技術の誤り訂正符号化装置の回路構成に比較して極めて簡単にすることができるとともに、効率的にかつ高速で演算することができ、実用に供することが可能な符号化速度で誤り訂正符号を符号化することができる。
第1の実施形態において、第1の記憶手段を構成する32ビットラッチ20,21,22の数を3以上の数mに増やし、それに伴ってROM14の内容を変更すれば、回路構成を変更することなく、同様な回路でさらに最小符号間距離dの長い誤り訂正符号も符号化できる。
<第2の実施形態>
図3は、本発明に係る第2の実施形態の誤り訂正符号化装置の構成を示すブロック図である。図3において、この第2の実施形態の誤り訂正符号化装置は、
(a)32ビットデータバス81を有し当該装置の動作を制御するCPU(中央演算制御装置)61と、
(b)CPU61からアドレスバス82を介して出力されるアドレスデータと、メモリ制御信号とに応答して、キューメモリ72における複数m個のラッチ72−1,72−2,…,72−mに対する制御信号を発生するラッチ制御装置62と、
(c)CPU61のワークエリアとして用いられる作業用RAM63と、
(d)8ビット排他的論理和演算器64,65,66,67と、
(e)32ビットバス選択器70と、
(f)例えばEPROM又はEEPROMにてなる書き換え可能なROM(読み出し専用メモリ)であって、CPU61によって実行される符号化処理のプログラム及びそれを実行するために必要なデータを予め格納するROM71と、
(g)複数m個の32ビットラッチ72−1乃至72−mを備えて、FIFO(First−in First−out)メモリであるシフトレジスタを構成する第1の記憶手段であるキューメモリ72と、
(h)CPU61の制御により、キューメモリ72の内容を一時的にラッチして読み出す32ビットラッチ69と、
(i)32ビットラッチ69の一部分であって、32ビットラッチ69における下位8ビットのデータをラッチする第2の記憶手段である8ビットラッチ68とを備える。
第2の実施形態では、第1の実施形態のバス選択器19,23に代わりに、複数m個の32ビットラッチ72−1乃至72−mを備えた32ビットm段のキューメモリ72を用いている。第2の実施形態の動作例の説明を簡潔にするために、キューメモリ72を構成するラッチ段数mを3とし、キューメモリ72は3個の32ビットラッチ73,74,75からなる。図3においてm=3のときのブロック図を図4に示す。従って、図4を参照して当該動作例について説明する。
図4において、CPU61は32ビットデータバス81に接続され、作業用RAM63も32ビットデータバス81に接続される。入力されて処理対象とされる情報語のデータは、32ビットデータバス81を介して作業用RAM63内の符号語バッファBufB[]の情報語領域に書き込まれ、当該領域から32ビットデータベス81を介して読み出されて8ビット排他的論理和演算器64,65,66,67の第1の入力端子に入力されて、以下に詳述する符号化処理が実行された後、上記情報語のデータに続いて、作業用RAM63内の符号語バッファBufB[]のパリティ語領域からパリティ語を読み出して符号化された符号語として出力する。
図4において、8ビット排他的論理和演算器64,65,66,67から出力されるデータは32ビットのキューメモリ72内で縦続接続された3個の32ビットラッチ73,74,75及び32ビットラッチ69を介して32ビットバス選択器70のb接点に入力される。32ビットラッチ75から出力される32ビットの出力データのうち上位24ビットのデータは、排他的論理和演算器65,66,67の第2の入力端子に入力され、また、8ビットラッチ68からの出力データは排他的論理和演算器65の第2の入力端子に入力される。また、32ビットラッチ73から出力される32ビットの出力データは、32ビットバス選択器70のa接点に入力される。32ビットバス選択器70は、ラッチ制御回路62から出力される制御信号に応答して、a接点に入力される32ビットのデータと、b接点に入力される32ビットのデータとのうちの1つの32ビットのデータを選択的に32ビットデータバス81を介してCPU61及び作業用RAM63に出力する。
図4において、縦続接続された3個の32ビットラッチ73,74,75はキューメモリ72を構成しており、32ビットラッチ73は書き込み用ラッチとして動作する一方、32ビットラッチ75は読み出し用ラッチとして動作するように選択される。当該選択は、物理的には固定であるが、キューメモリ72へのデータの書き込み動作、もしくはキューメモリ72からのデータの読み出し動作によって、各32ビットラッチに格納されているデータが次段の32ビットラッチに移動して行くので、論理的には固定ではなく、順番に32ビットラッチ内のデータを選択して行くことになる。本実施形態では、CPU61から入出力制御信号(以下、I/O制御信号という。)とともに、アドレスバス82を介して入出力アドレス(以下、I/Oアドレスという。)をラッチ制御回路62に送信することにより、ラッチ制御回路62は、以下に示す制御信号をラッチ73,74,75,69及びバス選択器70に送信して制御する。
(a)CPU61がアドレスデータバス82を介してI/Oアドレスとして“AdrsQueue"をラッチ制御回路62に出力するとともに、I/O制御信号として“書き込み信号”をラッチ制御回路62に出力する。これに応答して、ラッチ制御回路62は、クロックCLKに同期する書き込みクロック信号を発生して32ビットラッチ73,74,75,69に出力する。
(b)CPU61がアドレスデータバス82を介してI/Oアドレスとして“AdrsQueue"をラッチ制御回路62に出力するとともに、I/O制御信号として“読み出し信号”をラッチ制御回路62に出力する。これに応答して、ラッチ制御回路62は、クロックCLKに同期する書き込みクロック信号を発生して32ビットラッチ73,74,75,69に出力する。
(c)CPU61がアドレスデータバス82を介してI/Oアドレスとして“AdrsFeed"をラッチ制御回路62に出力するとともに、I/O制御信号として“書き込み信号”をラッチ制御回路62に出力する。これに応答して、ラッチ制御回路62は、クロックCLKに同期する書き込みクロック信号を発生して32ビットラッチ73,74,75に出力する。
(d)CPU61がアドレスデータバス82を介してI/Oアドレスとして“AdrsClearPort"をラッチ制御回路62に出力するとともに、I/O制御信号として“書き込み信号”をラッチ制御回路62に出力する。これに応答して、ラッチ制御回路62はクリア信号を32ビットラッチ69に出力して、32ビットラッチ69に記憶されているデータを0にクリアする。
(e)CPU61がアドレスデータバス82を介してI/Oアドレスとして“AdrsQueue"をラッチ制御回路62に出力するとともに、I/O制御信号として“アクセス信号”をラッチ制御回路62に出力する。これに応答して、ラッチ制御回路62は、バス選択器70をa接点に切り換える。これにより、32ビットラッチ73から出力されるデータは、バス選択器70のa接点及び32ビットデータバス81を介してCPU61及び作業用RAM63に入力される。
(f)CPU61がアドレスデータバス82を介してI/Oアドレスとして“AdrsQueueLast"をラッチ制御回路62に出力するとともに、I/O制御信号として“アクセス信号”をラッチ制御回路62に出力する。これに応答して、ラッチ制御回路62は、バス選択器70をb接点に切り換える。これにより、32ビットラッチ69から出力されるデータは、バス選択器70のb接点及び32ビットデータバス81を介してCPU61及び作業用RAM63に入力される。
図5は、図3の誤り訂正符号化装置のCPU61によって実行される符号化処理を示すフローチャートであり、図6は、図5のサブルーチンである初期化処理(ステップS1)を示すフローチャートであり、図5は、図5のサブルーチンである符号語生成処理(ステップS2)を示すフローチャートである。また、図8は、図7のサブルーチン処理P1(ステップS7)を示すフローチャートであり、図9は、図7及び図8のサブルーチン処理P2(ステップS23,S35)を示すフローチャートであり、図10は、図8のサブルーチン処理P3(ステップS37)を示すフローチャートであり、図11は、図7のサブルーチン処理P4(ステップS24)を示すフローチャートである。図5乃至図11に図示された符号化処理の制御フローのプログラムは、図3及び図4に示す誤り訂正符号化装置を動作させるために、CPU61に接続されたROM1に予め記憶され、CPU61によって実行される。
図5に示すように、まず、ステップS1で図6に示す初期化処理を実行した後、ステップS2で図7に示す符号語生成処理を実行して、当該符号化処理を終了する。
次いで、図6乃至図11における処理で用いる種々の記号について説明する。テーブル名の[]及びバッファ名の[]はそれぞれ配列を表し、メモリ領域の名前をnameとすると、一次元配列の要素はname[m]、二次元配列の要素はname[m][n]のように表し、ここで、m及びnはそれぞれ0以上の整数である。また、配列の大きさを表すときにname[M][N]と書くとすると、有効な要素はname[0][0]からname[M−1][N−1]である。
IOReadW(address)は、32ビットのワードデータをaddressで表されるI/Oアドレスから読み出したデータ値を表す関数である。また、IOWriteW(address,data)はdataで表される32ビットのワードデータをaddressで表されるIOアドレスに書き込む処理である。GetByte(data,index)はdataで表される32ビットのワードデータの上位からindex番目のバイトデータを表す関数である。ただし、indexは1から数える自然数である。
スラッシュ記号“/"は整数の除算を表わす二項演算子であり、A MOD BはAをBで除算したときの剰余を演算する二項演算子である。また、ANDはビットごとの論理積を演算する二項演算子であり、EORはビットごとの排他的論理和を演算する二項演算子である。
さらに、配列名をnameとすると、name[x,…,y]は配列nameのx番目の要素からy番目の要素までを表す。変数名又は配列名の最後の1文字であるW,Bは、それぞれ32ビットのデータ、8ビットのデータを表す。
ガロア体演算テーブルtGaloisW[nQueueLatch][256]は、入力データと生成多項式の各係数とのガロア体上の積のデータであって、予め演算されてROM71に格納された後、CPU61の初期化時や、誤り訂正符号の最小符号化距離dの変更に伴う初期化処理において、ROM71から作業用RAM63内の領域に転送されて書き込まれる。第1の実施形態と同様の12シンボルのパリティ語を付加する場合では、表1及び表2に示したROM14の内容と同一のデータが当該ガロア体演算テーブルtGaloisW[nQueueLatch][256]に予め記憶される(ステップS11)。ただし、tGaloisW[m][n]は、第1の実施形態におけるROM14のアドレスHをmとし、アドレスLをnとしたデータ内容を表す。
符号語バッファBufB[]は、作業用RAM63内の領域に設定されたバッファメモリであり、情報語領域とパリティ語領域とに分割され、当該符号語バッファBufB[]の情報語領域において、この符号化処理を実行する前に入力された符号化すべき情報語が先頭から予め格納される一方、符号語バッファBufB[]のパリティ語領域において、上記入力された情報語に基づいて当該符号化処理を実行したときに得られるパリティ語が格納された後、情報語とパリティ語が符号語として外部装置に出力される。
I/OアドレスのAdrsQueueLastは、32ビットラッチ73の内容を読み出すためのアドレスである。ここで、CPU61がI/O制御信号の“読み出し信号”とともに、I/Oアドレスとして“AdrsQueueLast"をラッチ制御回路62に出力した場合であっても、上述のように、32ビットラッチ73,74,75,69に対して書き込みクロック信号を発生しないので、キューメモリ72内の記憶データの内容はそのままである。
表4は、図5乃至図11のフローチャートに従って本実施形態の誤り訂正符号化装置が動作する場合において、本動作例での図4の各32ビットラッチ73,74,75,69の記憶データを示す。表4における二重下線はデータの書き込みを表し、下線はデータの読み込みを表す。また、p000から始まるパリティシンボルの記号は、第1の実施形態のものと同一であり、図13に示す従来技術の計算方法で演算される値である。
以下に、第1の実施形態と同様に、本実施形態を用いて8ビットを1シンボルとしたリード・ソロモン符号RS(32,20,d=13)を符号化する処理例(以下、第1の動作例という。)を、図6乃至図11及び表4を参照して説明する。本動作例の場合、情報シンボル数nInfoは20であり、パリティシンボル数nParityは12である。
まず、図6の初期化処理について以下説明する。
図6のステップS11において、ガロア体演算テーブルtGalois[nQueueLatch][256]の初期化を行う。本動作例の場合、キューメモリ72を構成する32ビットラッチの数nQueueLatch(=m)は3である。本動作例のように最小符号間距離dが13の場合、ガロア体演算テーブルtGalois[nQueueLatch][256]の内容は、表1と表2に示す第1の実施形態におけるROM14のデータ内容と同一になるようにROM71から作業用RAM63に転送されて初期化される。また、32ビットラッチ73,74,75,69は0にクリアされる。この処理は表4のステップS1001に対応する。
次いで、ステップS12において、
nFeed=nQueueLatch−(nParity+3)/4 …(31)
で表すことができるキューメモリ72のフィード回数nFeedを演算して、フィード回数パラメータnFeedに代入される。本動作例の場合、キューメモリ72を構成する32ビットラッチの数nQueueLatchは3であり、付加するパリティシンボル数nParityは12であるから、キューメモリ72のフィード回数nFeedは0に初期化される。次いで、ステップS13において、
nQ=(nParity+3)/4 …(32)
で表すことができるキューメモリ72の書き込み数nQを演算して書き込み数パラメータnQに代入される。本動作例の場合、付加するパリティシンボル数nParityは12であるから、キューメモリ72の書き込み数nQは3になる。
次いで、ステップS14において、
index=((nParity+3)MOD4)+1 …(33)
で表すことができるキュー溢れシンボル取り出し位置indexを演算して、キュー溢れシンボル取り出し位置パラメータindexに代入する。ここで、キュー溢れシンボル取り出し位置indexは、キューメモリ72を8ビット×nParity段のキューとして動作させるために、擬似的にキューメモリ72のnParity段目から8ビットシンボルが溢れたように取り出す位置を示す。本動作例の場合、付加するパリティシンボル数nParityは12であるから、キュー溢れシンボル取り出し位置indexは4になる。以上で初期化処理を終了する。
次に、図7から図11を参照して実際の符号語生成処理を説明する。
まず、図7のステップS21において、作業用RAM63内の符号語バッファBufB[]から情報語を読み出し、当該符号語生成処理によって生成したパリティ語をキューメモリ72上に作成する。この処理をサブルーチン処理P1とする。
次に、サブルーチン処理P1の内容を図8を参照して具体的に説明する。まず、図8のステップS31において、情報シンボルカウンタcntを0に初期化し、ステップS32において、符号語バッファから情報シンボルカウンタcnt番目の8ビットの情報シンボルBufB[cnt]を読み出して入力データinDataBとする。この場合、情報シンボルカウンタcntは0であるから、入力データinDataBは、符号語バッファの先頭のシンボルである。以後、ここで取り出した先頭の情報シンボルをi000とする。次いで、ステップS33において、入力ポートである32ビットラッチ73から32ビットのデータを読み出し、その上位からindex(本動作例の場合は4)バイト目、つまり下位8ビットを得る。この場合、32ビットラッチ73の内容は、クリアされて00000000Hであるので、その下位8ビットは00Hである。これは表4のステップS1002に対応する。さらに、ステップS34において、出力ポートである32ビットラッチ69の内容を0にクリアする。これは表4のステップS1003に対応する。
次いで、ステップS35において、キューメモリ72の内容を、キューメモリ72のフィード回数nFeed回だけ進める。当該処理においては、32ビットラッチ75のデータを32ビットラッチ69に書き込み、32ビットラッチ74のデータを32ビットラッチ75に書き込み、32ビットラッチ73のデータを32ビットラッチ74に書き込む。ここで、フィード回数nFeed回だけ進めるとは、上記ラッチからラッチへの書き込み処理をnFeed回だけ繰り返すことを意味する。ここで、入力ポートである32ビットラッチ73のデータはそのまま保存される。この処理をサブルーチン処理P2とする。
次に、サブルーチン処理P2の内容を図9を参照して具体的に説明する。まず、図9のステップS41において、キューメモリ72のフィードカウンタの計数値cntFeedをキュー72のフィード回数nFeedに初期化する。本動作例の場合、フィード回数nFeedは0であるので、計数値cntFeedは0になる。次いで、ステップS42において、キューメモリ72のフィードカウンタの計数値cntFeedは0であるから、サブルーチン処理P2を終了して図8の元のサブルーチン処理P1に戻る。つまり、本動作例の場合、サブルーチン処理P2では何も実行しない。
図8のステップS36において、入力データinDataBとステップS33で求めた32ビットラッチ73の下位8ビットのデータpDataBとの排他的論理和を求め、演算結果のデータdataBの値をd000とする。この場合、入力データi000とデータ00Hとの排他的論理和なので、第1の実施形態と同様に、演算結果のデータd000は式(15)で表される。次いで、ステップS37において、ステップS36で求めた演算結果のデータdataBと生成多項式の各係数との積を作業用RAM63内のガロア体演算テーブルから読み出してキューメモリ72に書き込む。この処理をサブルーチン処理P3とする。
次に、サブルーチン処理P3の内容を図10を参照して具体的に説明する。まず、図10のステップS51において、キュー書き込みカウンタの計数値cntWQを0に初期化する。次いで、ステップS52において、ステップS36で求めたデータd000と生成多項式(式(14))の係数とのガロア体上の積を、4シンボル(32ビット)だけ作業用RAM63内のガロア体演算テーブルから読み出す。ここで、キュー書き込みカウンタの計数値cntWQが0の時には、生成多項式(式(14))の係数としてk12,k11,k10,k9が選ばれる。次いで、ステップS53において、ステップS52で読み出したガロア体上の積のデータをキューメモリ72に書き込む。このとき、32ビットラッチ75は、データ00000000Hを出力しており、8ビットラッチ68はデータ00Hを出力しているので、排他的論理和演算器64,65,66,67の入力データはデータ(00H,00H,00H,00H)と、データ(k12・d000,k11・d000,k10・d000,k9・d000)である。従って、排他的論理和演算器64,65,66,67の出力データを(p000,p001,p002,p003)すると、第1の実施形態と同様に、このデータ値は式(19)で表すことができる。これは表4のステップS1004に対応する。
次いで、ステップS54において、キュー書き込みカウンタの計数値cntWQを1だけインクリメントする。このとき、キュー書き込みカウンタの計数値cntWQは1になる。そして、ステップS55において、キュー書き込みカウンタの計数値cntWQがキュー書き込み数nQより小さい場合は、ステップS52に戻る一方、そうでない場合はサブルーチン処理P3を終了してリターンする。この場合、キュー書き込みカウンタの計数値cntWQは1であり、キュー書き込み数nQは3であるから、ステップS52に戻る。
次いで、ステップS52において、ステップS36で求めたデータd000と生成多項式(式(14))の係数とのガロア体上の積を、4シンボル(32ビット)求める。その際に、ガロア体演算テーブルを用いるが、キュー書き込みカウンタの計数値cntWQが1の時には、生成多項式(式(14))の係数としてk8,k7,k6,k5が選ばれる。さらに、ステップS53において、ステップS52で求めた積のデータをキューメモリ72に書き込む。このとき、32ビットラッチ75はデータ00000000Hを出力しており、8ビットラッチ68はデータ00Hを出力しているので、排他的論理和演算器64,65,66,67の入力データは、(00H,00H,00H,00H)と、データ(k8・d000,k7・d000,k6・d000,k5・d000)である。従って、排他的論理和演算器64,65,66,67の出力を(p004,p005,p006,p007)とすると、第1の実施形態と同様に、このデータ値は式(21)で表すことができる。これは表4のステップS1005に対応する。
次いで、ステップS54において、キュー書き込みカウンタの計数値cntWQを1だけインクリメントする。このとき、キュー書き込みカウンタの計数値cntWQは2になる。そして、ステップS55において、キュー書き込みカウンタの計数値cntWQがキュー書き込み数nQより小さい場合は、ステップS52に戻る一方、そうでない場合はサブルーチン処理P3を終了してリターンする。この場合、キュー書き込みカウンタの計数値cntWQは2であり、キュー書き込み数nQは3であるから、ステップS52に戻るが、その後、上記の処理と同様にステップS52、ステップS53、ステップS54を経て、再びステップS55に進む。この時、キュー書き込みカウンタの計数値cntWQは3であるから、当該サブルーチン処理P3を終了して、図8のサブルーチン処理P1に戻る。
図8のステップS38において、情報シンボルカウンタの計数値cntを1だけインクリメントする。このとき、情報シンボルカウンタの計数値cntは1になる。そして、ステップS39において、情報シンボルカウンタの計数値cntが情報シンボル数nInfoより小さい場合はステップS32に戻る一方、そうでない場合はサブルーチン処理P1を終了してリターンする。この場合、情報シンボルカウンタの計数値cntは1であり、かつ情報シンボル数nInfoは20であるから、ステップS32に戻る。
ステップS32において、符号語バッファから情報シンボルカウンタの計数値cnt番目の情報シンボルBufB[cnt]を読み出す。この場合、情報シンボルカウンタの計数値cntは1であるから、符号語バッファの先頭から2番目のシンボルである。ここで読み出した2番目の情報シンボルをi001とする。次いで、ステップS33において、32ビットラッチ73から32ビットのデータを読み出し、その上位からindex(本動作例の場合は4)バイト目、つまり下位8ビットのデータを得る。この場合、32ビットラッチ73内のデータはデータ(p008,p009,p010,p011)であるので、その下位8ビットのデータはp011である。これは表4のステップS1007に対応する。さらに、ステップS34において、32ビットラッチ69の内容をクリアする。これは表4のステップS1008に対応する。
次いで、ステップS35において、キューメモリ72の内容を、キューメモリ72のフィード回数nFeed回だけ進めるが、上記の処理と同様に、本動作例の場合、当該サブルーチン処理P2において何も実行しない。さらに、ステップS36において、入力データinDataBとステップS33で求めた32ビットラッチ73の下位8ビットのデータとの排他的論理和を演算し、演算結果のデータ値をd001とすると、この場合、入力データi001とデータp011との排他的論理和なので、第1の実施形態と同様に、演算結果のデータd001は式(16)で表される。さらに、ステップS37において、ステップS36で求めたデータ値と生成多項式の各係数との積を、キューメモリ72に書き込む処理であるサブルーチン処理P3を実行する。
次に、サブルーチン処理P3の内容を図10を参照して具体的に説明する。まず、図10のステップS51において、キュー書き込みカウンタの計数値cntWQを0に初期化し、ステップS52において、ステップS36で求めたデータd001と生成多項式(式(14))の係数とのガロア体上の積を、4シンボル(32ビット)求める。その際に、ガロア体演算テーブルを用いるが、キュー書き込みカウンタの計数値cntWQが0の時には、生成多項式(式(14))の係数としてk12,k11,k10,k9が選ばれる。そして、ステップS53において、ステップS52で求めた結果のデータをキューメモリ72に書き込む。このとき、32ビットラッチ75はデータ(p000,p001,p002,p003)を出力しており、8ビットラッチ68はデータ00Hを出力しているので、排他的論理和演算器64,65,66,67の入力データはデータ(00H,p000,p001,p002)とデータ(k12・d001,k11・d001,k10・d001,k9・d001)である。従って、排他的論理和演算器64,65,66,67の出力データをデータ(p012,p013,p014,p015)とすると、第1の実施形態と同様に、このデータ値は式(25)で表すことができる。これは表4のステップS1009に対応する。
次いで、ステップS54において、キュー書き込みカウンタの計数値cntWQを1だけインクリメントする。このとき、キュー書き込みカウンタの計数値cntWQは1になる。さらに、ステップS55において、キュー書き込みカウンタの計数値cntWQがキュー書き込み数nQより小さい場合はステップS52に戻る一方、そうでない場合は当該サブルーチン処理P3を終了してリターンする。この場合、キュー書き込みカウンタの計数値cntWQは1であり、キュー書き込み数nQは3であるから、ステップS52に戻る。
ステップS52において、ステップS36で求めたデータd001と生成多項式(式(14))の係数とのガロア体上の積を、4シンボル(32ビット)求める。その際に、ガロア体演算テーブルを用いるが、キュー書き込みカウンタの計数値cntWQが1の時には、生成多項式(式(14))の係数としてk8,k7,k6,k5が選ばれる。そして、ステップS53において、ステップS52で求めた結果データをキューメモリ72に書き込む。このとき、32ビットラッチ75はデータ(p004,p005,p006,p007)を出力しており、8ビットラッチ68はデータp003を出力しているので、排他的論理和演算器64,65,6,67の入力データはデータ(p003,p004,p005,p006)とデータ(k8・d001,k7・d001,k6・d001,k5・d001)である。従って、排他的論理和演算器64,65,66,67の出力データをデータ(p016,p017,p018,p019)とすると、第1の実施形態と同様に、このデータ値は式(27)で表すことができる。これは表4のステップS1010に対応する。
次いで、ステップS54において、キュー書き込みカウンタの計数値cntWQを1だけインクリメントする。このとき、キュー書き込みカウンタの計数値cntWQは2になる。次いで、ステップS55において、キュー書き込みカウンタの計数値cntWQがキュー書き込み数nQより小さい場合はステップS52に戻る一方、そうでない場合はサブルーチン処理P3を終了してリターンする。この場合、キュー書き込みカウンタの計数値cntWQは2であり、キュー書き込み数nQは3であるから、ステップS52に戻る。その後、上記の処理と同様にステップS52、ステップS53、ステップS54を経て、再びステップS55に進む。この時、キュー書き込みカウンタの計数値cntWQは3であるから、当該サブルーチン処理P3を終了して、図8のサブルーチン処理P1にリターンする。
図8のステップS38において、情報シンボルカウンタの計数値cntを1だけインクリメントする。このとき、情報シンボルカウンタの計数値cntは2になる。次いで、ステップS39において、情報シンボルカウンタの計数値cntが情報シンボル数nInfoより小さい場合はステップS32に戻り、そうでない場合はサブルーチン処理P1を終了してリターンする。この場合、情報シンボルカウンタの計数値cntは2であり、情報シンボル数nInfoは20であるから、ステップS32に戻る。
ステップS32において、符号語バッファから情報シンボルカウンタの計数値cnt番目の情報シンボルBufB[cnt]を読み出す。この場合、情報シンボルカウンタの計数値cntは2であるから、符号語バッファの先頭から3番目のシンボルである。ここで取り出した3番目の情報シンボルをデータi002とする。そして、ステップS33において、32ビットラッチ73から32ビットのデータを読み出し、その上位からindex(本動作例の場合は4)バイト目、つまり下位8ビットを得る。この場合、32ビットラッチ73の内容はデータ(p020,p021,p022,p023)であるので、その下位8ビットのデータはp023である。これは表4のステップS1012に対応する。次いで、ステップS34において、出力ポートの32ビットラッチ69の内容をクリアする。これは表4のステップS1013に対応する。そして、ステップS35において、キューメモリ72の内容を、キューメモリ72のフィード回数nFeed回だけ進めるが、上記の処理と同様に、本動作例の場合、当該サブルーチン処理P2において何も実行しない。
次いで、ステップS36において、入力データとステップS33で求めた32ビットラッチ73の下位8ビットのデータとの排他的論理和を求める。このデータ値をd002とすると、この場合、入力データi002とデータp023との排他的論理和なので、第1の実施形態と同様に、データd002は式(30)で表される。以下、上記の処理と同様に、ステップS37、S38、S39と進み、さらに、情報シンボルカウンタの計数値cntが情報シンボル数nInfo(本動作例の場合は20)に一致するまで、ステップS32からステップS39までの処理を繰り返し、サブルーチン処理P1を終了して図7のメインルーチンに戻る。
そして、図7のステップS22において、キューメモリ72から溢れた32ビットのデータをダミーデータとして読み出す。これは表4のステップS1102に対応する。次いで、ステップS23において、キューメモリ72の内容を、キューメモリ72のフィード回数nFeed回だけ進めるが、上記の処理と同様に、本動作例の場合、当該サブルーチン処理P2において何も実行しない。次いで、ステップS24において、キューメモリ72からパリティシンボルを4シンボルずつ合計nParityシンボル読み出し、符号語バッファBufB[]のパリティ語領域に格納する。この処理をサブルーチン処理P4とする。
次に、サブルーチン処理P4の内容を図11を参照して具体的に説明する。まず、ステップS61において、キュー読み出しカウンタの計数値cntRQを0に初期化する。次いで、ステップS62において、キューメモリ72からパリティシンボルを4シンボルずつ読み出し、ステップS63において、符号語バッファのパリティ語領域に、ステップS62で取り出した4シンボル(32ビット)分のパリティシンボルを格納する。この場合、情報シンボル数nInfoは20であり、キュー読み出しカウンタの計数値cntRQは0であるから、符号語バッファに格納する位置BufB[nInfo+cntRQ・4,…,nInfo+cntRQ・4+3]はBufB[20,…,23]となる。本実施形態の場合、4シンボル(=32ビット)分のデータ(a,b,c,d)を符号語バッファBufB[i,…,i+3]に格納する場合、BufB[i]にはデータaが、BufB[i+1]にはデータbが、BufB[i+2]にはデータcが、BufB[i+3]にはデータdが格納されるものとする。
さらに、ステップS64において、キュー読み出しカウンタの計数値cntRQを1だけインクリメントする。この場合、計数値cntRQは1になる。次いで、ステップS65において、キュー読み出しカウンタの計数値cntRQがキュー書き込み回数nQより小さい場合、ステップS62に戻る一方、そうでない場合、当該サブルーチン処理P4を終了してリターンする。この場合、計数値cntRQは1であり、キュー書き込み回数nQは3であるから、ステップS62に戻る。
次に、ステップS62において、キューメモリ72からパリティシンボルを4シンボルずつ読み出し、ステップS63において、符号語バッファのパリティ語領域に、ステップS62で読み出した4シンボル(=32ビット)分のパリティシンボルを格納する。この場合、情報シンボル数nInfoは20であり、キュー読み出しカウンタの計数値cntRQは1であるから、符号語バッファに格納する位置BufB[nInfo+cntRQ・4,…,nInfo+cntRQ・4+3]はBufB[24,…,27]となる。そして、ステップS64において、キュー読み出しカウンタの計数値cntRQを1だけインクリメントする。この場合、計数値cntRQは2になる。さらに、ステップS65において、キュー読み出しカウンタの計数値cntRQがキュー書き込み数nQより小さい場合、ステップS62に戻る一方、そうでない場合、当該サブルーチン処理P4を終了してリターンする。この場合、計数値cntRQは2であり、書き込み回数nQは3であるから、ステップS62に戻る。以降、ステップS62、S63、S64の処理を同様に実行し、その後ステップS65に進む。このとき、計数値cntRQは3であり、書き込み回数nQは3であるから、当該サブルーチン処理P4を終了して元のメインルーチンに戻る。上記サブルーチン処理P4は、表4のステップS1103、S1104、及びS1105の処理に対応する。
以上で、本動作例であるRS(32,20,d=13)の符号語生成処理を終了する。ただし、符号語は符号語バッファBufB[0,…,nInfo+nParity−1]に格納されている。この場合、情報シンボル数nInfoは20、パリティシンボル数nParityは12であるから、符号語は符号語バッファBufB[0,…,31]に格納されている。
次に、本実施形態の誤り訂正符号化装置を用いて、上記第1の動作例と異なる最小符号間距離dを有し、8ビットを1シンボルとしたリード・ソロモン符号RS(15,10,d=6)を符号化する処理について、図5乃至図11及び表5を用いて説明する。これを第2の動作例とする。
ただし、原始多項式m(X)と原始元αは、第1の実施形態と同様にそれぞれ式(12)、式(13)で表される。ただし、生成多項式G(X)は次式で表わすことができる。
G(X)
8
=Π(X−αi)
i=0
=k1・X8+k2・X7+…+k8・X+k9 …(34)
従って、第2の動作例では、係数kn(1≦n≦5)の値が第1の実施形態や本実施形態の第1の動作例とは異なる。
表5は、図5乃至図11のフローチャートに従って、誤り訂正符号化装置が動作する場合において、本動作例での図4の各32ビットラッチの状態である。表5の2重下線はデータの書き込みを表し、下線はデータの読み込みを表す。また、データp000から始まるパリティシンボルの記号やデータd000から始まる記号は、第1の実施形態や本実施形態の第1の動作例における記号と異なり、図14に示すような計算方法で求められる値である。本動作例の場合、情報シンボル数nInfoは10であり、パリティシンボル数nParityは5である。
以下に、本実施形態の第2の動作例における初期化処理について図6を参照して説明する。
まず、図6のステップS11において、ガロア体演算テーブルtGalois[nQueueLatch][256]の初期化を行う。本動作例の場合、キューメモリ72を構成する32ビットラッチの数nQueueLatchは3である。本動作例のように最小符号間距離が6の場合、ガロア体演算テーブルの内容は、表6及び表7に示す内容となるように初期化される。また、32ビットラッチ73,74,75,69を0にクリアする。これは表5のステップS2001に対応する。
次に、ステップS12において、式(31)で表わされるキューメモリ72のフィード回数nFeedを求める。本動作例の場合、キューメモリ72を構成する32ビットラッチの数nQueueLatchは3であり、付加するパリティシンボル数nParityは5であるから、キューメモリ72のフィード回数nFeedは1になる。次いで、テップS13において、式(32)で表わされるキューメモリ72の書き込み数nQを求める。本動作例の場合、付加するパリティシンボル数nParityは5であるから、キューメモリ72の書き込み数nQは2になる。さらに、ステップS14において、式(33)で表わすことができるキュー溢れシンボル取り出し位置indexを求める。本動作例の場合、付加するパリティシンボル数nParityは5であるから、キュー溢れシンボル取り出し位置indexは1になる。以上で初期化処理を終了する。
次に、図7乃至図11を用いて実際の符号語生成処理を説明する。まず、図7のステップS21において、作業用RAM63内の符号語バッファBufB[]から情報語を読み出し、パリティ語をキューメモリ72上に作成するサブルーチン処理P1を実行する。ここで、以下、当該サブルーチン処理P1の内容を図8を参照して具体的に説明する。
まず、図8のステップS31において、情報シンボルカウンタの計数値cntを0に初期化する。次いで、ステップS32において、符号語バッファから情報シンボルカウンタの計数値cnt番目の情報シンボルBufB[cnt]を読み出す。この場合、情報シンボルカウンタの計数値cntは0であるから、符号語バッファの先頭のシンボルである。以後、ここで読み出した先頭の情報シンボルをデータi000とする。さらに、ステップS33において、32ビットラッチ73から32ビットのデータを読み出し、その上位からindex(本動作例の場合は1)バイト目、つまり上位8ビットを得る。この場合、32ビットラッチ73の内容は、クリアされて00000000Hであるので、その上位8ビットのデータはデータ00Hである。これは表5のステップS2002に対応する。次いで、ステップS34において、32ビットラッチ69の内容を0にクリアする。これは表5のステップS2003に対応する。さらに、ステップS35において、キューメモリ72の内容を、キューメモリ72のフィード回数nFeed回だけ進めるサブルーチン処理P2を実行する。
次に、このサブルーチン処理P2を図9を参照して具体的に説明する。まず、ステップS41において、キューメモリ72のフィードカウンタの計数値cntFeedをキューメモリ72のフィード回数nFeedに初期化する。本動作例の場合、フィード回数nFeedは1であるので、計数値cntFeedは1になる。次いで、ステップS42において、キューメモリ72のフィードカウンタの計数値cntFeedが0より大きければステップS43に進む一方、そうでないからサブルーチン処理P2を終了してリターンする。この場合、計数値cntFeedは1であるから、ステップS43に進む。ステップS43において、キューメモリ72の内容を進める。ただし、この時32ビットラッチ69の内容はそのままに保たれる。これは表5のステップS2004に対応する。次いで、ステップS44でキューメモリ72のフィードカウンタの計数値cntFeedを1だけデクリメントする。この場合、計数値cntFeedは0になる。そして、ステップS42において、キューメモリ72のフィードカウンタの計数値cntFeedが0より大きければステップS43に進む一方、そうでないならサブルーチン処理P2を終了してリターンする。この場合、計数値cntFeedは0であるから、サブルーチン処理P2を終了して、図8のサブルーチン処理P1に戻る。
図8のステップS36において、入力データとステップS33で求めた32ビットラッチ73の上位8ビットのデータとの排他的論理和を求める。このデータ値をd000とすると、この場合、入力データi000とデータ00Hとの排他的論理和なので、データd000は次式で表わすことができる。
d000=i000 …(35)
次いで、ステップS37において、ステップS36で求めたデータ値と生成多項式の各係数との積をキューメモリ72に書き込むサブルーチン処理P3を実行する。以下、このサブルーチン処理P3を図10を参照して具体的に説明する。
まず、図10のステップS51において、キュー書き込みカウンタの計数値cntWQを0に初期化し、ステップS52において、ステップS56で求めたデータd000と生成多項式(式(34))の係数とのガロア体上の積を、4シンボル(32ビット)だけ求める。その際に、ガロア体演算テーブルを用いるが、キュー書き込みカウンタの計数値cntWQが0の時には、生成多項式(式(34))の係数としてk5,k4,k3,k2が選ばれる。さらに、ステップS53において、ステップS52で求めた結果のデータをキューメモリ72に書き込む。このとき、32ビットラッチ75はデータ00000000Hを出力しており、8ビットラッチ68はデータ00Hを出力しているので、排他的論理和演算器64,65,66,67の入力データは、データ(00H,00H,00H,00H)と、データ(k5・d000,k4・d000,k3・d000,k2・d000)である。従って、排他的論理和演算器64,65,66,67の出力データをデータ(p000,p001,p002,p003)とすると、このデータは次式で表わすことができる。
(p000,p001,p002,p003)
=(k5・d000,k4・d000,k3・d000,k2・d000) …(36)
これは表5のステップS2005に対応する。
次に、ステップS54において、キュー書き込みカウンタの計数値cntWQを1だけインクリメントする。この場合、キュー書き込みカウンタの計数値cntWQは1になる。次いで、ステップS55において、キュー書き込みカウンタの計数値cntWQがキュー書き込み数nQより小さい場合はステップS52に戻り、そうでない場合はサブルーチン処理P3を終了してリターンする。この場合、キュー書き込みカウンタの計数値cntWQは1であり、キュー書き込み数nQは2であるから、ステップS52に戻る。
ステップS52において、ステップS36で求めたデータd000と生成多項式(式(34))の係数とのガロア体上の積を、4シンボル(32ビット)だけ求める。その際に、ガロア体演算テーブルを用いるが、キュー書き込みカウンタの計数値cntWQが1の時には、生成多項式(式(14))の係数としてk1,0,0,0が選ばれる。次いで、ステップS53において、S52で求めた結果のデータをキューメモリ72に書き込む。このとき、32ビットラッチ75はデータ00000000Hを出力しており、8ビットラッチ68はデータ00Hを出力しているので、排他的論理和演算器64,65,66,67の入力データは、データ(00H,00H,00H,00H)と、データ(k1・d000,00H,00H,00H)である。従って、排他的論理和演算器64,65,66,67からの出力データを(p004,00H,00H,00H)とすると、データp004は次式で表わすことができる。
p004=k1・d000 …(37)
これは表5のステップS2006に対応する。
次に、ステップS54において、キュー書き込みカウンタの計数値cntWQを1だけインクリメントする。つまり、キュー書き込みカウンタの計数値cntWQは2になる。次いで、ステップS55において、キュー書き込みカウンタの計数値cntWQがキュー書き込み数nQより小さい場合はステップS52に戻り、そうでない場合はサブルーチン処理P3を終了してリターンする。この場合、キュー書き込みカウンタの計数値cntWQは2であり、キュー書き込み数nQは2であるから、サブルーチン処理P3を終了して、図8のサブルーチン処理P1にリターンする。
図8のステップS38において、情報シンボルカウンタの計数値cntを1だけインクリメントする。この場合、情報シンボルカウンタの計数値cntは1になる。次いで、ステップS39において、情報シンボルカウンタの計数値cntが情報シンボル数nInfoより小さい場合はステップS32に戻る一方、そうでない場合はサブルーチン処理P1を終了する。この場合、情報シンボルカウンタの計数値cntは1であり、情報シンボル数nInfoは10であるから、ステップS32に戻る。
ステップS32において、符号語バッファから情報シンボルカウンタの計数値cnt番目の情報シンボルつまりBufB[cnt]を読み出す。この場合、情報シンボルカウンタの計数値cntは1であるから、符号語バッファの先頭から2番目のシンボルである。ここで取り出した2番目の情報シンボルをデータi001とする。次いで、ステップS33において、32ビットラッチ73から32ビットのデータを読み出し、その上位からindex(本動作例の場合は1)バイト目、つまり上位8ビットを得る。この場合、32ビットラッチ73の内容は、データ(p004,00H,00H,00H)であるので、その上位8ビットのデータはp004である。これは表5のステップS2007に対応する。次いで、ステップS34において、32ビットラッチ69の内容を0にクリアする。これは表5のステップS2008に対応する。
さらに、ステップS35において、キューメモリ72の内容を、キューメモリ72のフィード回数nFeed回だけ進めるサブルーチン処理P2を実行する。当該サブルーチン処理P2では、上記の処理と同様にしてキューメモリ72を1回だけ進める。これは表5のステップS2009に対応する。そして、図8のステップS36において、入力データとステップS33で求めた32ビットラッチ73の上位8ビットのデータとの排他的論理和を求める。このデータ値をd001とすると、この場合、入力データi001とデータp004との排他的論理和なので、データd001は次式で表わすことができる。
d001=i001+p004 …(38)
次に、ステップS37において、ステップS36で求めたデータ値と生成多項式の各係数との積をキューメモリ72に書き込むサブルーチン処理P3を実行する。以下、そのサブルーチン処理P3を図10を参照して具体的に説明する。
まず、図10のステップS51において、キュー書き込みカウンタの計数値cntWQを0に初期化し、ステップS52において、ステップS36で求めたデータd001と生成多項式(式(34))の係数とのガロア体上の積を、4シンボル(32ビット)だけ求める。その際に、ガロア体演算テーブルを用いるが、キュー書き込みカウンタの計数値cntWQが0の時には、生成多項式(式(34))の係数としてk5,k4,k3,k2が選ばれる。さらに、ステップS53において、ステップS52で求めた結果データをキューメモリ72に書き込む。このとき、32ビットラッチ75は、データ(p000,p001,p002,p003)を出力しており、8ビットラッチ68はデータ00Hを出力しているので、排他的論理和演算器64,65,66,67の入力データは、データ(00H,p000,p001,p002)と、データ(k5・d001,k4・d001,k3・d001,k2・d001)である。従って、排他的論理和演算器64,65,66,67の出力データを(p005,p006,p007,p008)とすると、この出力データは、次式で表わすことができる。
これは表5のステップS2010に対応する。
次に、ステップS54において、キュー書き込みカウンタの計数値cntWQを1だけインクリメントする。つまり、キュー書き込みカウンタの計数値cntWQは1になる。次いで、ステップS55において、キュー書き込みカウンタの計数値cntWQがキュー書き込み数nQより小さい場合はステップS52に戻る一方、そうでない場合はサブルーチン処理P3を終了する。この場合、キュー書き込みカウンタの計数値cntWQは1であり、かつキュー書き込み数nQは2であるから、ステップS52に戻る。
ステップS52において、ステップS36で求めたデータd001と生成多項式(式(34))の係数とのガロア体上の積を、4シンボル(32ビット)だけ求める。その際に、ガロア体演算テーブルを用いるが、キュー書き込みカウンタの計数値cntWQが1の時には、生成多項式(式(14))の係数としてk1,0,0,0が選ばれる。次いで、ステップS53において、S52で求めた結果データをキューメモリ72に書き込む。このとき、32ビットラッチ75は、データ(p004,00H,00H,00H)を出力しており、8ビットラッチ68はp003を出力しているので、排他的論理和演算器64,65,66,67の入力データは、データ(p003,p004,00H,00H)と、データ(k1・d001,00H,00H,00H)である。従って、排他的論理和演算器64,65,66,67の出力データをデータ(p009,p004,00H,00H)とすると、データp009は次式で表わすことができる。
p009=k1・d001+p003 …(40)
これは表5のステップS2011に対応する。
次に、図10のステップS54において、キュー書き込みカウンタの計数値cntWQを1だけインクリメントする。つまり、キュー書き込みカウンタの計数値cntWQは2になる。次いで、ステップS55において、キュー書き込みカウンタの計数値cntWQがキュー書き込みnQより小さい場合はステップS52に戻る一方、そうでない場合はサブルーチン処理P3を終了してリターンする。この場合、キュー書き込みカウンタの計数値cntWQは2であり、キュー書き込み数nQは2であるから、サブルーチン処理P3を終了して、図8のサブルーチン処理P1に戻る。
図8のステップS38において、情報シンボルカウンタの計数値cntを1だけインクリメントする。つまり、情報シンボルカウンタの計数値cntは2になる。次いで、ステップS39において、情報シンボルカウンタの計数値cntが情報シンボル数nInfoより小さい場合はステップS32に戻る一方、そうでない場合はサブルーチン処理P1を終了してリターンする。この場合、情報シンボルカウンタの計数値cntは2であり、情報シンボル数nInfoは10であるから、ステップS32に戻る。
ステップS32において、作業用RAM63内の符号語バッファから情報シンボルカウンタの計数値cnt番目の情報シンボルBufB[cnt]を読み出す。この場合、情報シンボルカウンタの計数値cntは2であるから、符号語バッファの先頭から3番目のシンボルである。ここで取り出した3番目の情報シンボルをデータi002とする。次いで、ステップS33において、32ビットラッチ73から32ビットのデータを取り出し、その上位からindex(本動作例の場合は1)バイト目、つまり上位8ビットのデータを得る。この場合、32ビットラッチ73の内容は(p009,p004,00H,00H)であるので、その上位8ビットのデータはp009である。これは表5のステップS2012に対応する。さらに、ステップS34において、32ビットラッチ69の内容を0にクリアする。これは表5のステップS2013に対応する。
次いで、ステップS35において、キューメモリ72の内容を、キューメモリ72のフィード回数nFeed回だけ進めるサブルーチン処理P2を実行する。当該サブルーチン処理P2では、上記の処理と同様にしてキューメモリ72を1回だけ進める。これは表5のステップS2014に対応する。
次いで、図8のステップS36において、入力データとステップS33で求めた32ビットラッチ73の上位8ビットのデータとの排他的論理和を求める。このデータ値をd002とすると、この場合、入力データi002とデータp009との排他的論理和なので、データd002は次式で表わすことができる。
d002=i002+p009 …(41)
以下、上記の処理と同様に、ステップS37、S38、S39と進み、さらに、情報シンボルカウンタの計数値cntが情報シンボル数nInfo(本動作例において、nInfo=10である。)に一致するまでステップS32からステップS39までの処理を繰り返し、サブルーチン処理P1を終了して、図7のメインルーチンに戻る。
次いで、図7のステップS22において、キューメモリ72から溢れた32ビットのデータをダミーデータとして読み出す。これは表5のステップS2052に対応する。次いで、ステップS23において、キューメモリ72の内容を、キューメモリ72のフィード回数nFeed回だけ進めるサブルーチン処理P2を実行する。当該サブルーチン処理P2では、上記の処理と同様にしてキューメモリ72を1回だけ進める。これは表5のステップS2053に対応する。
次に、図7のステップS24において、キューメモリ72からパリティシンボルを4シンボルずつ合計nParityシンボル読み出し、作業用RAM63内の符号語バッファBufB[]のパリティ語領域に格納するサブルーチン処理P4を実行する。次に、当該サブルーチン処理P4の内容を図11を参照して具体的に説明する。
まず、図11のステップS61において、キュー読み出しカウンタの計数値cntRQを0に初期化し、ステップS62において、キューメモリ72からパリティシンボルを4シンボルずつ読み出す。さらに、ステップS63において、作業用RAM63内の符号語バッファのパリティ語領域に、ステップS62で読み出した4シンボル(32ビット)分のパリティシンボルを格納する。この場合、情報シンボル数nInfoは10であり、キュー読み出しカウンタの計数値cntRQは0であるから、符号語バッファに格納する位置BufB[nInfo+cntRQ・4,…,nInfo+cntRQ・4+3]はBufB[10,…,13]となる。そして、ステップS64において、キュー読み出しカウンタの計数値cntRQを1だけインクリメントする。この場合、計数値cntRQは1になる。次いで、ステップS65において、キュー読み出しカウンタの計数値cntRQがキュー書き込み回数nQより小さい場合、ステップS62に戻る一方、そうでない場合、サブルーチン処理P4を終了してリターンする。この場合、計数値cntRQは1であり、キュー書き込み回数nQは2であるから、ステップS62に戻る。
ステップS62において、キューメモリ72からパリティシンボルを4シンボルずつ読み出し、次いで、ステップS63において、作業用RAM63内の符号語バッファのパリティ語領域に、ステップS62で読み出した4シンボル(32ビット)分のパリティシンボルを格納する。この場合、情報シンボル数nInfoは10であり、キュー読み出しカウンタの計数値cntRQは1であるから、符号語バッファに格納する位置BufB[nInfo+cntRQ・4,…,nInfo+cntRQ・4+3]はBufB[14,…,17]となる。さらに、ステップS64において、キュー読み出しカウンタの計数値cntRQを1だけインクリメントする。この場合、計数値cntRQは2になる。次いで、ステップS65において、キュー読み出しカウンタの計数値cntRQがキュー書き込み回数nQより小さい場合、ステップS62に戻る一方、そうでない場合、サブルーチン処理P4を終了してリターンする。この場合、計数値cntRQは2であり、キュー書き込み回数nQは2であるから、サブルーチン処理P4を終了してメインルーチンにリターンする。このサブルーチン処理P4は、表5のステップS2054及びS2055に対応する。
以上で、本動作例であるRS(15,10,d=6)の符号語生成処理を終了する。ただし、符号語は符号語バッファBufB[0,…,nInfo+nParity−1]に格納されている。この場合、情報シンボル数nInfoは10であり、パリティシンボル数nParityは5であるから、符号語は符号語バッファBufB[0,…,14]に格納されている。
当該第2の本実施形態においては、第1の実施形態に示した効果に加えて以下のような効果が得られる。入力データと生成多項式の各係数とのガロア体上の積データを予め演算してROM71に格納され、初期化処理時に作業用RAM63に転送され、作業用RAM63は係数記憶手段を構成する。図3及び図4の回路装置では、係数記憶手段である作業用RAM63から同時に4シンボルの積データを読み出すことができるように構成される。また、m段の32ビットラッチ72−1乃至72−mからなるキューメモリ72を用いて、第1の記憶手段と選択手段を実現する一方、8ビットラッチ68を用いて、第2の記憶手段を実現する。さらに、8ビット排他的論理和演算器64,65,66,67を用いて、排他的論理和演算手段を実現し、また、ROM71に格納されたプログラムを実行するCPU61とラッチ制御装置62とを用いて、読み出し制御手段と第1と第2の選択手段を実現する。
従って、誤り訂正符号化装置の回路構成を従来技術に比較して簡単化することができるとともに、リード・ソロモン符号RS(n,n−P,d=P+1)を、1以上4×m以下である任意のPについて符号化できる。例えば、m=16とすると、最小符号間距離dを2から65まで自由に設定できる。ここで、ガロア体上の積データを含むガロア体演算テーブルは、初期化処理において、ROM71から作業用RAM63上に転送されて設定されるので、上記初期化処理において、転送する積データを変更しかつ初期化のパラメータ(本実施形態においては、32ビットラッチの数nQueueLatchと、パリティシンボル数nParityである。)を変更することにより、装置の回路構成を変えずに、原始多項式の変更や符号語の最小符号間距離dの変更が可能である。また、符号語バッファを作業用RAM63上に有しているので、ROM71に格納されるプログラムにおいて、情報シンボルの取り込み処理の内容とパリティシンボル格納処理の内容を変更することによって、種々の積符号などの誤り訂正符号を符号化することができる。また、このようなプログラムの変更を行うと、LDCと積符号の切り換えも、装置の回路構成を変えずに行えるという特有の効果を有する。
<第3の実施形態>
図15は、本発明に係る第3の実施形態の誤り訂正復号化装置の構成を示すブロック図である。図15に示すように、この第3の実施形態の誤り訂正復号化装置は、
(a)図3に示す誤り訂正符号化装置と同様の構成を有する剰余演算器208と、
(b)誤り数値及び誤り位置演算器209と、
(c)受信語記憶装置読み出しコントローラ210と、
(d)排他的論理和演算器211と、
(e)受信語記憶装置書き込みコントローラ212と、
(f)複数N個のラッチが縦続接続されたシフトレジスタからなる受信語記憶装置213とを備える。
以下、図15を参照してリード・ソロモン符号RS(N,N−2t,d=2t+1)の誤り訂正処理について説明する。
まず、シンドロームを演算する処理を述べる。リード・ソロモン符号RS(N,N−2t,d=2t+1)の生成多項式は次式で表わすことができる。
G(X)=(X−α0)(X−α1)…(X−α2t-1) …(42)
ここで、受信すべき符号語Aを符号シンボルaiの列として次式で表し、
A=(a0,a1,a2,…,an-1) …(43)
受信時の誤りパターンEを誤りシンボルeiの列として次式で表し、
E=(e0,e1,e2,…,en-1) …(44)
受信語Yを受信シンボルyiの列として次式で表すとき、
Y=(y0,y1,y2,…,yn-1) …(45)
符号多項式A(X)を
A(X)=a0+a1・X+a2・X2+…+an-1・Xn-1 …(46)
とし、誤り多項式E(X)を
E(X)=e0+e1・X+e2・X2+…+en-1・Xn-1 …(47)
とし、受信多項式Y(X)を
Y(X)=y0+y1・X+y2・X2+…+yn-1・Xn-1 …(48)
と定義する。受信語Yは受信すべき符号語Aに対して誤りパターンEが加わったものであるから、受信多項式Y(X)は、
Y(X)=A(X)+E(X) …(49)
と表わすことができる。ここで、剰余多項式r(X)を
r(X)=[Y(X)]MOD G(X) …(50)
として定義する。ここで、A MOD BはAをBで除算したときの剰余を演算する演算子である。符号語A(X)は生成多項式G(X)で割り切れるので、式(49)及び式(50)から次式を得る。
r(X)=[E(X)]MOD G(X) …(51)
また、式(51)を展開した次式
r(X)=r0+r1・X+r2・X2+…+r2t-1・X2t-1…(52)
を用いて、剰余多項式r(X)の各係数r0,r1,r2,…,r2t-1を並べたベクトル表現である剰余ベクトルを次式で表わす。
r=(r0,r1,r2,…,r2t-1) …(53)
剰余多項式r(X)は、受信多項式Y(X)を生成多項式G(X)で割った余りであるから、情報多項式I(X)を生成多項式G(X)で割った余りであるパリティ多項式R(X)を求める方法と同じ方法で求められることがわかる。つまり、誤り訂正符号化装置に受信語Yを入力すると、入力された受信語Yを生成多項式G(X)で割ったときの剰余としてパリティ語の代わりに剰余ベクトルrが得られる。
以上説明したように、剰余演算器208として、第2の実施形態の誤り訂正符号化装置を用いることができる。剰余ベクトルrを得ると、例えば、次式を用いて、
一般化シンドロームS(X)を演算することができる(例えば、従来技術文献「荒木純道(Kiyomichi Araki)ほか,“リード・ソロモン符号の復号のための一般化シンドローム多項式",1991年電子情報通信学会春季全国大会,A−278,pp.1−280,1991年」参照。)。従って、第2の実施形態の誤り訂正符号化装置である剰余演算器208に受信語Yを入力し、式(54)の演算を行うことによって、出力として一般化シンドロームS(X)が得られる。
次いで、誤り数値及び誤り位置を求める処理について述べる。ここで、誤りがL個の位置(j1,j2,…,jL)に生じたと仮定して説明する。ここで、L≦tであり、0≦j1<j2<…<jL≦n−1とする。
式(54)より、WelchとBerlekampの方法(例えば、米国特許第4,633,470号参照。)や公知のユークリッド互除法等を用いて誤り数値と誤り位置の組(ejn,jn),n=1,2,…,Lを求めることができる。誤り数値及び誤り位置演算器209には、剰余演算器208から剰余ベクトルrが入力され、誤り数値及び誤り位置演算器209は、上記の公知の方法によって、誤り数値と誤り位置の組(ejn,jn)を求め、その誤り数値と誤り位置の組(ejn,jn)をn=1からn=L(L≦t)まで誤り個数だけ順次出力する。ここで、誤り数値のデータは排他的論理和演算器211の第2の入力端子に出力される一方、誤り位置のデータはアドレスとして受信語記憶装置読み出しコントローラ210及び受信語記憶装置書き込みコントローラ212に出力される。
さらに、誤り訂正処理について述べる。誤り数値及び誤り位置演算器209は誤り数値と誤り位置の組(ejn,jn)を出力するが、その誤り位置jnに位置する受信シンボルyjnに誤り数値ejnを加えることにより、誤りを訂正する。そのために、以下の処理を実行する。まず、受信語記憶装置213のデータ読み出し動作を制御する受信語記憶装置読み出しコントローラ210にアドレスとして誤り位置jnを入力して、誤り位置jnに位置する受信シンボルyjnを受信語記憶装置213から読み出す。その読み出した受信シンボルyjnと、それに対応する誤り数値ejnとを、排他的論理和演算器211に入力することにより、受信シンボルyjnと誤り数値ejnの和yjn+ejnをその出力データとして得る。この出力データyjn+ejnが訂正後の符号シンボルajnとなるので、この訂正後の符号シンボルajnを、元の誤り位置jnをアドレスとし、受信語記憶装置213のデータ書き込み動作を制御する受信語記憶装置書き込みコントローラ212を用いて、受信語記憶装置213に書き込む。以上の処理を、誤り数値及び誤り位置演算器209が、n=1からn=L(L≦t)まで順次誤り数値と誤り位置の組(ejn,jn)を出力することによって繰り返すことにより、すべての受信語に対して誤り訂正を実行して誤り復号化処理を完了することができる。このとき、受信語記憶装置213において、誤り訂正された符号語Aを得ることができる。そして、当該符号語Aは、受信語記憶装置213のアドレスを順次インクリメントしながら、受信語記憶装置読み出しコントローラ210に入力することにより、受信語記憶装置読み出しコントローラ210により、読み出されて誤り訂正された出力データとして出力される。
以上説明したように、第3の実施形態によれば、第2の実施形態の誤り訂正符号化装置を用いて誤り訂正復号化装置を実現することができる。従って、第1及び第2の実施形態と同様に、従来技術の装置に比較して回路構成が簡単であって、回路構成を変更することなく、実用に供することができる復号化速度を有して、種々の最小符号間距離を有する誤り訂正符号を復号化することができる誤り訂正復号化装置を実現することができる。
<変形例>
以上の実施形態において、誤り訂正符号化装置を以下のように構成してもよい。すなわち、変形例の誤り訂正符号化装置は、2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対する誤り訂正符号を符号化する誤り訂正符号化装置において、
各入力データと上記リード・ソロモン符号の生成多項式の各係数とのガロア体上の複数の積データをそれぞれ予め演算して、上記複数の積データを、各アドレスに対して複数b個の積データを1組として予め記憶する積データ記憶手段と、
それぞれN×bビットの記憶容量を有する自然数m個の記憶装置からなる第1の記憶手段と、
入力データに応答して、上記積データ記憶手段に記憶された複数の積データを、複数b個の積データを1組として並列に読み出すように上記積データ記憶手段を制御する読み出し制御手段と、
それぞれN×bビットの第1と第2の入力端子を有し、上記読み出し制御手段によって上記積データ記憶手段から並列に読み出される複数b個の積データが第1の入力端子に入力され、上記第1の入力端子に入力されるデータと、上記第2の入力端子に入力されるデータとの排他的論理和を演算して演算結果のデータを出力する排他的論理和演算手段と、
上記m個の記憶装置に記憶されたデータを1つの記憶装置毎に選択的に順次読み出して出力し、上記選択的に読み出して出力されるN×bビットのデータのうち上位N×(b−1)ビットのデータを上記排他的論理和演算手段の第2の入力端子の下位N×(b−1)ビットに出力するとともに、上記排他的論理和演算手段から出力される演算結果のデータを、上記m個の記憶装置のうちの1つに選択的に順次切り換えて書き込むように、上記第1の記憶手段を制御する第1の選択手段と、
Nビットの記憶容量を有し、上記第1の選択手段によって上記m個の記憶装置のうちの1つから選択的に出力されるN×bビットのデータのうち下位Nビットのデータを一時的に記憶して上記排他的論理和演算手段の第2の入力端子の上位Nビットに出力する第2の記憶手段と、
上記入力データを上記積データ記憶手段に順次入力することにより、上記第1の記憶手段のm個の記憶装置においてパリティデータを生成し、上記入力データに続いて、上記m個の記憶装置を1つの記憶装置毎に選択的に順次切り換えることにより、上記m個の記憶装置において生成される各パリティデータを順次出力する第2の選択手段とを備える。なお、図1及び図4の実施形態においては、N=8、b=4、及びm=3である。
以上の実施形態において、積データを記憶するためにROM14を用いているが、本発明はこれに限らず、ROM14に代えて、論理回路素子の組み合わせによる論理回路により構成され、入力データに対して積データを演算する演算手段を用いてもよい。
産業上の利用可能性
本発明によれば、2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対する誤り訂正符号を符号化する誤り訂正符号化装置及び方法において、積データ記憶手段であるROM(14)は、各入力データと上記リード・ソロモン符号の生成多項式の各係数とのガロア体上の複数の積データをそれぞれ予め演算して、上記複数の積データを、各アドレスに対して複数b個の積データを1組として予め記憶する。読み出し制御手段(12,13,24−26,28)は、入力データに応答して、ROM(14)に記憶された複数の積データを、上記複数b個の積データを1組として並列に読み出した後、排他的論理和演算器(15−18)及びバス選択器(19)を介して自然数m個の記憶装置(20−22)に選択的に順次書き込む。入力データをROM(14)に順次入力することにより、m個の記憶装置においてパリティデータを生成して出力する。
従って、複数の積データを記憶したROM14から4個の積データを1組として並列に(同時に)排他的論理和演算器(15−18)に対して読み出し可能に構成し、4個の積データを用いて同時に処理し、かつ3個の32ビットラッチ(20−22)を選択的に順次繰り返して使用することにより、符号化処理の演算をしているので、回路構成を、図14の従来技術の誤り訂正符号化装置の回路構成に比較して極めて簡単にすることができるとともに、効率的にかつ高速で演算することができ、実用に供することが可能な符号化速度で誤り訂正符号を符号化することができる。
また、本発明に係る上記誤り訂正符号化装置を用いて誤り訂正復号化装置を構成することにより、回路構成を極めて簡単にすることができるとともに、効率的にかつ高速で演算することができ、実用に供することが可能な復号化速度で誤り訂正符号を復号化することができる。
Claims (5)
- 2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対する誤り訂正符号を符号化する誤り訂正符号化装置において、
各入力データと上記リード・ソロモン符号の生成多項式の各係数とのガロア体上の複数の積データをそれぞれ予め演算して、上記複数の積データを、各アドレスに対して複数b個の積データを1組として予め記憶する積データ記憶手段と、
それぞれN×bビットの記憶容量を有する自然数m個の記憶装置からなる第1の記憶手段と、
入力データに応答して、上記積データ記憶手段に記憶された複数の積データを、複数b個の積データを1組として並列に読み出すように上記積データ記憶手段を制御する読み出し制御手段と、
それぞれN×bビットの第1と第2の入力端子を有し、上記読み出し制御手段によって上記積データ記憶手段から並列に読み出される複数b個の積データが第1の入力端子に入力され、上記第1の入力端子に入力されるデータと、上記第2の入力端子に入力されるデータとの排他的論理和を演算して演算結果のデータを出力する排他的論理和演算手段と、
上記m個の記憶装置に記憶されたデータを1つの記憶装置毎に選択的に順次読み出して出力し、上記選択的に読み出して出力されるN×bビットのデータのうち上位N×(b−1)ビットのデータを上記排他的論理和演算手段の第2の入力端子の下位N×(b−1)ビットに出力するとともに、上記排他的論理和演算手段から出力される演算結果のデータを、上記m個の記憶装置のうちの1つに選択的に順次切り換えて書き込むように、上記第1の記憶手段を制御する第1の選択手段と、
Nビットの記憶容量を有し、上記第1の選択手段によって上記m個の記憶装置のうちの1つから選択的に出力されるN×bビットのデータのうち下位Nビットのデータを一時的に記憶して上記排他的論理和演算手段の第2の入力端子の上位Nビットに出力する第2の記憶手段と、
上記入力データを上記積データ記憶手段に順次入力することにより、上記第1の記憶手段のm個の記憶装置においてパリティデータを生成し、上記入力データに続いて、上記m個の記憶装置を1つの記憶装置毎に選択的に順次切り換えることにより、上記m個の記憶装置において生成される各パリティデータを順次出力する第2の選択手段とを備えたことを特徴とする誤り訂正符号化装置。 - 上記読み出し制御手段と、上記第1の選択手段と、上記第2の選択手段とは、別の記憶装置に記憶された所定のプログラムを実行する中央演算制御装置によって構成されたことを特徴とする請求項1記載の誤り訂正符号化装置。
- 2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対して符号化された誤り訂正符号を復号化する誤り訂正復号化装置において、
上記入力データと、上記入力データに対するパリティデータとを含む複数の受信シンボルからなり、入力される受信語を各受信シンボル毎に記憶する受信語記憶手段と、
請求項1記載の誤り訂正符号化装置を備え、上記リード・ソロモン符号の生成多項式を用いて、上記入力される受信語に対する剰余を演算して出力する剰余演算手段と、
上記剰余演算手段から出力される剰余に基づいて、上記受信語における誤り位置と、上記誤り位置に対応する誤り数値との組を演算して出力する誤り数値及び誤り位置演算手段と、
上記誤り数値及び誤り位置演算手段から出力される上記受信語における誤り位置に基づいて、上記受信語記憶手段に記憶された上記誤り位置における受信シンボルを上記受信語記憶手段から読み出して出力する読み出し制御手段と、
上記読み出し制御手段から出力される上記誤り位置における受信シンボルと、上記誤り数値及び誤り位置演算手段から出力される、上記誤り位置に対応する誤り数値との排他的論理和を演算して、演算結果のデータを出力する排他的論理和演算手段と、
上記排他的論理和演算手段から出力される演算結果のデータを、上記受信語記憶手段の上記誤り位置に書き込むことにより、上記誤り位置における受信シンボルを訂正する書き込み制御手段とを備えたことを特徴とする誤り訂正復号化装置。 - 2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対する誤り訂正符号を符号化する誤り訂正符号化方法において、
各入力データと上記リード・ソロモン符号の生成多項式の各係数とのガロア体上の複数の積データをそれぞれ予め演算して、上記複数の積データを、各アドレスに対して複数b個の積データを1組として積データ記憶手段に予め記憶するステップと、
入力データに応答して、上記積データ記憶手段に記憶された複数の積データを、複数b個の積データを1組として並列に読み出すように上記積データ記憶手段を制御するステップと、
それぞれN×bビットの第1と第2の入力端子を有する排他的論理和演算手段を用いて、上記積データ記憶手段から並列に読み出される複数b個の積データが第1の入力端子に入力され、上記第1の入力端子に入力されるデータと、上記第2の入力端子に入力されるデータとの排他的論理和を演算して演算結果のデータを出力するステップと、
それぞれN×bビットの記憶容量を有するm個の記憶装置の第1の記憶手段に記憶されたデータを1つの記憶装置毎に選択的に順次読み出して出力し、上記選択的に読み出して出力されるN×bビットのデータのうち上記N×(b−1)ビットのデータを上記排他的論理和演算手段の第2の入力端子の下位N×(b−1)ビットに出力するとともに、上記排他的論理和演算手段から出力される演算結果のデータを、上記m個の記憶装置のうちの1つに選択的に順次切り換えて書き込むように、上記第1の記憶手段を制御するステップと、
Nビットの記憶容量を有する第2の記憶手段を用いて、上記m個の記憶装置のうちの1つから選択的に出力されるN×bビットのデータのうち下位Nビットのデータを一時的に記憶して上記排他的論理和演算手段の第2の入力端子の上位Nビットに出力するステップと、
上記入力データを上記積データ記憶手段に順次入力することにより、上記第1の記憶手段のm個の記憶装置においてパリティデータを生成し、上記入力データに続いて、上記m個の記憶装置を1つの記憶装置毎に選択的に順次切り換えることにより、上記m個の記憶装置において生成される各パリティデータを順次出力するステップとを含むことを特徴とする誤り訂正符号化方法。 - 2Nの元の数を有するガロア体GF(2N)上の元を有するリード・ソロモン符号を用いて、1シンボル当たり自然数Nビットの入力データに対して符号化された誤り訂正符号を復号化する誤り訂正復号化方法において、
上記入力データと、上記入力データに対するパリティデータとを含む複数の受信シンボルからなり、入力される受信語を各受信シンボル毎に受信語記憶手段に記憶するステップと、
請求項4記載の誤り訂正符号化方法により、上記リード・ソロモン符号の生成多項式を用いて、上記入力される受信語に対する剰余を演算して出力するステップと、
上記出力される剰余に基づいて、上記受信語における誤り位置と、上記誤り位置に対応する誤り数値との組を演算して出力するステップと
上記出力される上記受信語における誤り位置に基づいて、上記受信語記憶手段に記憶された上記誤り位置における受信シンボルを上記受信語記憶手段から読み出して出力するステップと、
上記出力される上記誤り位置における受信シンボルと、上記出力される、上記誤り位置に対応する誤り数値との排他的論理和を演算して、演算結果のデータを出力するステップと、
上記出力される演算結果のデータを、上記受信語記憶手段の上記誤り位置に書き込むことにより、上記誤り位置における受信シンボルを訂正するステップとを含むことを特徴とする誤り訂正復号化方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP25599195 | 1995-10-03 | ||
PCT/JP1996/002866 WO1997013328A1 (fr) | 1995-10-03 | 1996-10-02 | Dispositifs et procedes de codage/decodage des corrections d'erreurs |
Publications (1)
Publication Number | Publication Date |
---|---|
JP3622981B2 true JP3622981B2 (ja) | 2005-02-23 |
Family
ID=17286386
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP51415497A Expired - Fee Related JP3622981B2 (ja) | 1995-10-03 | 1996-10-02 | 誤り訂正符号化装置及び方法、並びに誤り訂正復号化装置及び方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US5914969A (ja) |
EP (1) | EP0806839B1 (ja) |
JP (1) | JP3622981B2 (ja) |
DE (1) | DE69618930T2 (ja) |
WO (1) | WO1997013328A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111788559A (zh) * | 2018-03-05 | 2020-10-16 | 阿里巴巴集团控股有限公司 | 通过伽罗瓦域维折叠支持具有唯一纠错码的多页长度 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998044415A1 (fr) * | 1997-04-02 | 1998-10-08 | Matsushita Electric Industrial Co., Ltd. | Equipement servant a ajouter des informations de detection d'erreurs |
JP3238128B2 (ja) | 1998-06-02 | 2001-12-10 | 松下電器産業株式会社 | リードソロモン符号化装置および方法 |
US6598201B1 (en) * | 1999-03-15 | 2003-07-22 | Texas Instruments Incorporated | Error coding structure and method |
US6360348B1 (en) * | 1999-08-27 | 2002-03-19 | Motorola, Inc. | Method and apparatus for coding and decoding data |
US8645803B2 (en) | 2010-05-10 | 2014-02-04 | Ternarylogic Llc | Methods and systems for rapid error correction by forward and reverse determination of coding states |
US9203438B2 (en) * | 2006-07-12 | 2015-12-01 | Ternarylogic Llc | Error correction by symbol reconstruction in binary and multi-valued cyclic codes |
US8201060B2 (en) * | 2007-07-11 | 2012-06-12 | Ternarylocig LLC | Methods and systems for rapid error correction of Reed-Solomon codes |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4162480A (en) * | 1977-01-28 | 1979-07-24 | Cyclotomics, Inc. | Galois field computer |
US4410989A (en) * | 1980-12-11 | 1983-10-18 | Cyclotomics, Inc. | Bit serial encoder |
US4633470A (en) * | 1983-09-27 | 1986-12-30 | Cyclotomics, Inc. | Error correction for algebraic block codes |
US4649541A (en) * | 1984-11-21 | 1987-03-10 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Reed-Solomon decoder |
JPS61289731A (ja) * | 1985-06-18 | 1986-12-19 | Sanyo Electric Co Ltd | Bch府号の復号方式 |
US4928280A (en) * | 1988-04-29 | 1990-05-22 | International Business Machines Corporation | Fast processor for multi-bit error correction codes |
US4907233A (en) * | 1988-05-18 | 1990-03-06 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | VLSI single-chip (255,223) Reed-Solomon encoder with interleaver |
US5140596A (en) * | 1990-02-20 | 1992-08-18 | Eastman Kodak Company | High speed encoder for non-systematic codes |
JP2662472B2 (ja) * | 1991-06-13 | 1997-10-15 | シャープ株式会社 | 誤り訂正処理用シンドローム演算回路 |
JPH0774655A (ja) * | 1993-09-03 | 1995-03-17 | Toshiba Corp | 誤り訂正符号化器 |
-
1996
- 1996-10-02 US US08/849,388 patent/US5914969A/en not_active Expired - Fee Related
- 1996-10-02 WO PCT/JP1996/002866 patent/WO1997013328A1/ja active IP Right Grant
- 1996-10-02 JP JP51415497A patent/JP3622981B2/ja not_active Expired - Fee Related
- 1996-10-02 DE DE69618930T patent/DE69618930T2/de not_active Expired - Fee Related
- 1996-10-02 EP EP96932801A patent/EP0806839B1/en not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111788559A (zh) * | 2018-03-05 | 2020-10-16 | 阿里巴巴集团控股有限公司 | 通过伽罗瓦域维折叠支持具有唯一纠错码的多页长度 |
Also Published As
Publication number | Publication date |
---|---|
WO1997013328A1 (fr) | 1997-04-10 |
US5914969A (en) | 1999-06-22 |
DE69618930D1 (de) | 2002-03-14 |
EP0806839A4 (en) | 2000-12-13 |
DE69618930T2 (de) | 2002-09-19 |
EP0806839B1 (en) | 2002-01-30 |
EP0806839A1 (en) | 1997-11-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3238128B2 (ja) | リードソロモン符号化装置および方法 | |
JP2005512183A (ja) | ガロア体乗算システム | |
JP4777258B2 (ja) | ガロア体乗算のためのルックアップテーブルを使用するリード・ソロモン符号の符号化および復号化 | |
US5901158A (en) | Error correction encoder/decoder | |
JP3622981B2 (ja) | 誤り訂正符号化装置及び方法、並びに誤り訂正復号化装置及び方法 | |
JP4357561B2 (ja) | 符号化装置及び符号化方法 | |
KR100894234B1 (ko) | 선형 블록 코드의 인코딩 방법 및 장치 | |
Geisel | Tutorial on reed-solomon error correction coding | |
JP3834122B2 (ja) | 誤り位置検出多項式計算装置 | |
US5822337A (en) | Programmable redundancy/syndrome generator | |
JP3502583B2 (ja) | 誤り訂正方法および誤り訂正装置 | |
US5471486A (en) | Methods and devices for encoding data symbols in accordance with a BCH code to obtain a code word in which parity symbols are located in the middle of the code word | |
JP2694792B2 (ja) | 誤り位置多項式演算回路 | |
JP3239522B2 (ja) | データ消失訂正方法とその回路 | |
JP3913173B2 (ja) | ディジタルメッセージを伝送する方法および前記方法を実施するシステム | |
JPH0476540B2 (ja) | ||
JP3429623B2 (ja) | 高速可変長符号復号化装置 | |
TWI226758B (en) | Encoding method and apparatus for cross interleaved cyclic codes | |
JP2963018B2 (ja) | リード・ソロモン誤り訂正符号復号化回路 | |
EP0584864B1 (en) | A hardware-efficient method and device for encoding BCH codes and in particular Reed-Solomon codes | |
JPH09305572A (ja) | ガロア体の除算方法および除算装置 | |
RU157943U1 (ru) | Параллельный реконфигурируемый кодер бчх кодов | |
JP2002118471A (ja) | 記録再生装置及び誤り訂正符号化方法並びに情報記録方法 | |
JPH0677844A (ja) | 誤り訂正装置 | |
JPH07262031A (ja) | 誤り訂正符号化装置および誤り訂正符号化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20041116 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041122 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R154 | Certificate of patent or utility model (reissue) |
Free format text: JAPANESE INTERMEDIATE CODE: R154 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20071203 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081203 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |