(57)【要約】データを符号化するための方法および装置が提供される。この方法は、（ａ）符号生成係数を乗じた第１の構成要素値の第１のテーブルおよび前記符号生成係数を乗じた第２の構成要素値の第２のテーブルを設けるステップ、（ｂ）メッセージシンボルおよび高次剰余シンボルに基づきガロア体要素を特定するステップ、（ｃ）前記ガロア体要素を第１および第２の構成要素に分離すること、（ｄ）前記第１の構成要素および生成係数指標を使用して、前記第１のテーブルにおける、１つまたは２つ以上の第１のテーブル値にアクセスし、かつ前記第２の構成要素および生成係数指標を使用して、前記第２のテーブルにおける、１つまたは２つ以上の第２のテーブル値にアクセスするステップ、（ｅ）等しい生成係数指標を有する、第１および第２のテーブル値と、先の剰余シンボルとに基づいて、現在剰余シンボルを特定するステップ、（ｆ）符号生成器の各生成係数に対してステップ（ｅ）を実行して、１組の剰余シンボルを提供するステップ、および（ｇ）符号語における各メッセージシンボルに対して、ステップ（ｂ）〜（ｆ）を実行して、前記符号語のメッセージシンボルと共に伝送される検査シンボルを構成する１組の最終剰余シンボルを提供するステップを含む。
2007514371.tif 000002
【特許請求の範囲】
【請求項１】
（ａ）符号生成係数を乗じた第１の構成要素値の第１のテーブルおよび前記符号生成係数を乗じた第２の構成要素値の第２のテーブルを設けるステップ；
（ｂ）メッセージシンボルおよび高次剰余シンボルに基づきガロア体要素を特定するステップ、
（ｃ）前記ガロア体要素を第１および第２の構成要素に分離するステップ、
（ｄ）前記第１の構成要素および生成係数指標を使用して、前記第１のテーブルにおける、１つまたは２つ以上の第１のテーブル値にアクセスし、かつ前記第２の構成要素および生成係数指標を使用して、前記第２のテーブルにおける、１つまたは２つ以上の第２のテーブル値にアクセスするステップ、
（ｅ）等しい生成係数指標を有する、第１および第２のテーブル値と、先の剰余シンボルとに基づいて、現在剰余シンボルを特定するステップ、
（ｆ）符号生成器の各生成係数に対してステップ（ｅ）を実行して、１組の剰余シンボルを提供するステップ、および
（ｇ）符号語における各メッセージシンボルに対して、ステップ（ｂ）〜（ｆ）を実行して、前記符号語のメッセージシンボルと共に伝送される検査シンボルを構成する１組の最終剰余シンボルを提供するステップ、を含むデータを符号化する方法。
【請求項２】
ステップ（ｂ）は、メッセージシンボルおよび高次剰余シンボルについての排他的ＯＲ演算を含む、請求項１に記載の方法。
【請求項３】
ステップ（ｅ）は、中間値をもたらす、第１および第２のテーブル値についての排他的ＯＲ演算と、現在剰余シンボルをもたらす、中間値および先の剰余シンボルについての排他的ＯＲ演算とを含む、請求項２に記載の方法。
【請求項４】
第１および第２の構成要素は、それぞれガロア体要素の上位半語および下位半語を含む、請求項１に記載の方法。
【請求項５】
符号語のメッセージシンボルはメッセージバイトを含む、請求項１に記載の方法。
【請求項６】
ステップ（ｇ）は、符号語内で８つまでの誤りを訂正するための１６の検査シンボルを生成する、請求項５に記載の方法。
【請求項７】
ステップ（ｄ）は、２組以上の第１および第２のテーブル値に並列にアクセスすることを含み、ステップ（ｅ）は、２つ以上の現在剰余シンボルを並列に特定することを含む、請求項１に記載の方法。
【請求項８】
ガロア体要素を第１および第２の構成要素に分離することは、ガロア体要素を第１および第２のマスクとＡＮＤ演算することを含む、請求項１に記載の方法。
【請求項９】
ステップ（ｄ）は、ｗ組の第１および第２のテーブル値に並列にアクセスすることを含み、ｗは、ガロア体要素のユニットにおける符号化を実行するプロセッサのワード幅を表わし、ステップ（ｅ）は、ｗ個の現在剰余シンボルを並列に特定することを含む、請求項１に記載の方法。
【請求項１０】
ステップ（ａ）は、動作中に、所定の符号パラメータのための第１および第２のテーブルにおけるテーブル値を生成することを含む、請求項１に記載の方法。
【請求項１１】
ステップ（ｇ）は、生成係数の数に等しい、ある数の検査シンボルを提供することを含む、請求項１に記載の方法。
【請求項１２】
ステップ（ｇ）は、生成係数の数よりも小さい、ある数の検査シンボルを提供することを含む、請求項１に記載の方法。
【請求項１３】
データを符号化するための装置であって、
符号生成係数を乗じた第１の構成要素値を含む、第１のルックアップテーブル；
符号生成係数を乗じた第２の構成要素値を含む、第２のルックアップテーブル；および
プロセッサであって、
メッセージシンボルおよび高次剰余シンボルに基づいてガロア体要素を特定する手段と、
ガロア体要素を第１および第２の構成要素に分離する手段と、
前記第１の構成要素および生成係数指標を使用して、前記第１のルックアップテーブル内の１つまたは２つ以上の第１のテーブル値にアクセスする手段と、
前記第２の構成要素および生成係数指標を使用して、前記第２のルックアップテーブル内の１つまたは２つ以上の第２のテーブル値にアクセスする手段と、
等しい生成係数指標を有する第１および第２のテーブル値に基づいて、現在剰余シンボル、および符号生成器の各生成係数に対して、先の剰余シンボルを特定して、１群の剰余シンボルを提供する手段であって、符号語の各メッセージシンボルが処理されて、前記符号語のメッセージシンボルと共に伝送すべき検査シンボルを構成する、１群の最終剰余シンボルを提供する前記手段とを含む、前記プロセッサ；
を含む、前記装置。
【請求項１４】
ガロア体要素を特定する手段は、メッセージシンボルおよび高次剰余シンボルについての排他的ＯＲ演算を実行する手段を含む、請求項１３に記載の装置。
【請求項１５】
現在剰余シンボルを特定する手段は、第１のおよび第２のテーブル値について排他的ＯＲ演算を実行して中間値を提供する手段と、前記中間値および先の剰余シンボルに対して排他的ＯＲを実行して現在剰余シンボルを提供する手段と含む、請求項１３に記載の装置。
【請求項１６】
第１および第２の構成要素は、それぞれ、ガロア体要素の上位半語および下位半語を含む、請求項１３に記載の装置。
【請求項１７】
符号語のメッセージシンボルは、メッセージバイトを含む、請求項１３に記載の装置。
【請求項１８】
プロセッサは、符号語内で８個までの誤りを訂正するための１６個の検査シンボルを生成するように構成されている、請求項１３に記載の装置。
【請求項１９】
第１および第２のテーブル値にアクセスする手段は、２組以上の第１および第２のテーブル値に並列にアクセスする手段を含み、現在剰余シンボルを特定する手段は、２組以上の第１および第２のテーブル値に並列にアクセスする手段を含む、請求項１３に記載の装置。
【請求項２０】
ガロア体要素を第１および第２の構成要素に分離する手段は、前記ガロア体要素と第１および第２のマスクとのＡＮＤ演算をする手段を含む、請求項１３に記載の装置。
【請求項２１】
第１および第２のテーブル値にアクセスする手段は、ｗ組の第１および第２のテーブル値に並列にアクセスする手段を含み、ここでｗは、ガロア体要素のユニットにおけるプロセッサのワード幅を表わし、現在剰余シンボルを特定する手段は、ｗ個の現在剰余シンボルを並列に特定する手段を含む、請求項１３に記載の装置。
【請求項２２】
プロセッサは、動作中に、所定の符号パラメータのための、第１および第２のルックアップテーブルにおけるテーブル値を生成する手段をさらに含む、請求項１３に記載の装置。
【請求項２３】
符号語の各メッセージシンボルは、処理されて生成係数の数に等しい、ある数の検査シンボルを提供する、請求項１３に記載の装置。
【請求項２４】
符号語の各メッセージシンボルは、処理されて、生成係数よりも小さい、ある数の検査シンボルを提供する、請求項１３に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明は、データの符号化に関し、より詳細には、リード・ソロモン（Reed-Solomon）符号化のための方法および装置に関する。
【背景技術】
【０００２】
発明の背景
誤り検出および訂正のために、リード・ソロモン符号を使用して情報を送受信する処理手順は以下のように説明することができる。ビットのストリームとして普遍的に表現される、送信すべき情報は、ある大きさｍの小ブロックに分割される。ｍビットのこれらの小ブロックは、２ｍ個の可能なすべてのｍビットブロックの集合と、次元２ｍのガロア体（ＧＦ：Galois Field）、すなわちＧＦ（２ｍ）のすべての２ｍ個の要素の集合との間に１対１の写像が存在するという意味において、有限体（またはガロア体）と呼ばれる数学的構造の要素によって識別することができる。ガロア体それ自体は、その要素が０と１である、「基底」２進体（"ground" binary field）、ＧＦ（２）からの係数を用いて、次数＜ｍである全多項式の集合として構築することができ、その２つの体演算である、加算および乗算は次のように定義される：加算は、順序づけられたｍ−タプル（m-tuple）の多項式係数についての「排他的ＯＲ」（ＸＯＲ）演算として実行され、乗算は、次数ｍのある「原始」２進多項式（"primitive" binary polynomial）をモジュロ（modulo）とする多項式乗算として実現され、ここで、「原始」２進多項式は、既約（irreducible）であり（より低次の２進多項式の積に因数分解することができない）、さらに、ｄ＜２ｍ−１であるｘｄ−１の形態のいかなる２進多項式も割ることがない。
【０００３】
最も重要かつ一般的な場合が、ｍ＝８であり、この場合には、そのようなブロックのそれぞれはバイトとして表現されて、任意の種類のコンピュータによって便宜に取り扱うことが可能であり、したがって、以下の考察は、バイトがＧＦ（２５６）の要素である場合に対するものであり、「バイト」はｍ≠８の次元２ｍのガロア体の要素、または「シンボル」であると理解される。ＧＦ（２５６）の構築を可能にする原始多項式は、ｐ（ｘ）＝ｘ８＋ｘ４＋ｘ３＋ｘ２＋ｌである。
【０００４】
情報（バイトまたはシンボル）の基本ユニットおよび対応するガロア体（ＧＦ）を設定した後に、送信すべき情報は、等しい大きさｋのシンボルの群に分割され、この大きさｋは、符号の所望の誤り訂正能力に基づいて求められる。そのような群のそれぞれは、「メッセージ」と呼ばれる。メッセージは、さらに、次数ｋ−１のＧＦ上の多項式Ｍ（ｘ）として解釈される。
【数１】
2007514371.tif 000003
この多項式の昇順の係数ｍｉは、ＧＦ要素として処理される元のビットのストリームからそれらが得られた順序での、情報シンボルである。
【０００５】
ｔ個の誤りを訂正することのできるリード・ソロモン符号を構築するために、生成多項式として知られている、次数２ｔの多項式Ｇ（ｘ）が以下の式に従って定義される。
【数２】
2007514371.tif 000004
ここで、ａは、２つの重要な（かつ関係する）特性を有するＧＦのいわゆる「原始」元（"primitive" element）を表わす：第１に、それは、式ｐ（ａ）＝０を満足し、第２に、結果として、ＧＦの全非ゼロ要素を原始元のベキ数として表わし、ＧＦ乗算の演算下で、アベール群（abelian group）（または可換群（commutative group））を形成することができる。このテーブルを使用してＧＦ要素の乗算を実行する便利な方法を確立する、「逆対数（anti-log）」テーブルの生成を可能にするのは、正にこの特性である。
【０００６】
次いで、ｘ２ｔを乗じたメッセージ多項式Ｍ（ｘ）の、生成多項式Ｇ（ｘ）による除算の剰余Ｒ（ｘ）が求められる。
【数３】
2007514371.tif 000005
【０００７】
剰余は、次数２ｔ−１の多項式であり、最終的に、この多項式の２ｔ個の係数が、検査シンボルとして使用され、この検査シンボルは、「符号語（codeword）」を体系的形態で含む、ｋ＋２ｔ個のシンボルのストリングを形成する、ｋ個のメッセージシンボルに添付される。符号語の長さは、ＧＦ内の非ゼロ要素の数、ｎ−１を超えてはならない。したがって、通信チャネル上を実際に伝送されるメッセージは、次の多項式として表わすことができる。
【数４】
2007514371.tif 000006
ここで、ｒｍは検査シンボル、すなわちｔ個までの誤りの検出および訂正を可能にする冗長シンボルである。
【０００８】
したがって、符号化のタスクは、その係数が、何らかのＧＦのシンボルである多項式の除算を実行することからなる。ＧＦにおける計算を行う、従来式のソフトウエア手法は、２つのルックアップテーブル（lookup table）を使用することを基礎としており、この表に、ＧＦシンボルの多項式形態から指数形態への変換および逆変換が格納されている。この方法は、（ここでのＧＦ（２８）の主要な場合に対して）以下のように要約することができる。
１．多項式形態におけるシンボル（ＧＦの要素）は、バイトとして表わされる：
【数５】
2007514371.tif 000007
２．シンボルの合計は、ビット単位ＸＯＲ演算：ｆ＋ｇ＝ｆ＾ｇとして求めることができる。
【０００９】
３．多項式形態における原始元ａは、ａ＝（００００００１０）で表わされ、これは、多項式表記では、ａ（ｘ）＝ｘに対応する。
４．それぞれの非ゼロシンボルｓは、あるベキ乗ｓ＝ａｋまで拡大された原始元ａである。２進多項式による多項式代数乗算を使用して、離散対数テーブルｌｏｇ＿ｔａｂｌｅと、指数テーブルｅｘｐ＿ｔａｂｌｅとが事前計算されて、（非ゼロ）要素の指数（ベキ）表現と多項式（バイト）表現との間の変換を、次のように容易にする。
【数６】
2007514371.tif 000008
【００１０】
これらのテーブルを使用してＧＦシンボルを乗算するためには、オペランドｕおよびｖを仮定して以下の演算の連鎖を実行しなくてはならず、結果ｒはバイト形態となる：
【数７】
2007514371.tif 000009
ここで、％はモジュロ演算を表わす（ｘ％２５５は、ｘを２５５で除算した剰余である）。
【００１１】
このアプローチに基づくＧＦ上での乗算の結果を計算する速度は、テーブルへの多重アクセスが必要であり、指数テーブル中へのエントリのアドレスを加算によって計算しなければならないということによって制限されることは明らかである。多くの場合に、修正アドレスレジスタを介するアクセスには、２〜３の待ち受けサイクルが必要であり、そのために、１回のＧＦ乗算の合計時間は、シンボル（バイト）当り、１０〜１２クロックサイクルとなり得る。このことから、リード・ソロモン符号のソフトウエア実装は困難な問題となり、例えば、１８８データバイトと１６の検査バイトを有する（２０４，１８８，１６）リード・ソロモン符号の典型的な場合において、１つの符号語を符号化するのに、以下に記述するように、１８８＊１６＊（１０〜１２）≒３０〜３６Ｋサイクルが必要となる。したがって、例えば、４Ｋシンボル／秒の伝送速度のＡＤＳＬ用途に対して、符号器動作だけのためのＭＩＰＳの全消費は、１２０〜１４４ＭＩＰＳであり、これは高すぎるものである。
【発明の開示】
【００１２】
発明の概要
本発明の第１の観点によれば、データを符号化するための方法が提供される。この方法は、（ａ）符号生成係数を乗じた第１の構成要素値の第１のテーブルおよび前記符号生成係数を乗じた第２の構成要素値の第２のテーブルを設けるステップ、（ｂ）メッセージシンボルおよび高次剰余シンボルに基づきガロア体要素を特定するステップ、（ｃ）前記ガロア体要素を第１および第２の構成要素に分離するステップ、（ｄ）前記第１の構成要素および生成係数指標を使用して、前記第１のテーブルにおける、１つまたは２つ以上の第１のテーブル値にアクセスし、かつ前記第２の構成要素および生成係数指標を使用して、前記第２のテーブルにおける、１つまたは２つ以上の第２のテーブル値にアクセスするステップ、（ｅ）等しい生成係数指標を有する、第１および第２のテーブル値と、先の剰余シンボルとに基づいて、現在剰余シンボルを特定するステップ、（ｆ）符号生成器（code generator）の各生成係数に対してステップ（ｅ）を実行して、１組の剰余シンボルを提供するステップ、および（ｇ）符号語における各メッセージシンボルに対して、ステップ（ｂ）〜（ｆ）を実行して、前記符号語のメッセージシンボルと共に伝送される検査シンボルを構成する、１組の最終剰余シンボルを提供するステップを含む。
【００１３】
本発明の第２の観点によれば、データの符号化のための装置が提供される。この装置は、符号生成係数を乗じた第１の構成要素値を含む、第１のルックアップテーブル、符号生成係数を乗じた第２の構成要素値を含む、第２のルックアップテーブル、およびプロセッサを含む。このプロセッサは、メッセージシンボルおよび高次剰余シンボルに基づいてガロア体要素を特定する手段と、ガロア体要素を第１および第２の構成要素に分離する手段と、前記第１の構成要素および生成係数指標を使用して、前記第１のルックアップテーブル内の１つまたは２つ以上の第１のテーブル値にアクセスする手段と、前記第２の構成要素と、生成係数指標とを使用して、前記第２のルックアップテーブル内の１つまたは２つ以上の第２のテーブル値にアクセスする手段と、等しい生成係数指標を有する、第１および第２のテーブル値に基づいて、現在剰余シンボル、および符号生成器の各生成係数に対して、先の剰余シンボルを特定して、１組の剰余シンボルを提供する手段とを含む。符号語の各メッセージシンボルが処理されて、この最終剰余シンボルは、符号語のメッセージシンボルと共に伝送すべき検査シンボルを構成する、１組の最終剰余シンボルが得られる。
本発明をより詳細に理解するために、参照により本明細書に組み入れてある、添付図面を参照する。
【００１４】
詳細な説明
本発明のリード・ソロモン（ＲＳ）符号化過程によるメッセージの符号化の具体的なタスクを実行する、より効率的な方法を説明するためには、それに伴う計算についての詳細な説明が必要となる。この問題は、ｘ２ｔを乗じたメッセージ多項式Ｍ（ｘ）の、符号生成多項式Ｇ（ｘ）による除算の剰余を求めることとして定式化される。
【００１５】
この剰余はメッセージを反復することによって、すなわちその長さを増大させ、すでに受け取ったメッセージのバイトを左にシフトし、右から新しいバイトを入れて、その結果、第１のステップにおいて、メッセージＭ０（ｘ）が、１バイトｍ０だけを含むようにして、計算することができる。
【数８】
2007514371.tif 000010
また、メッセージＭ１（ｘ）は２つのバイト、ｍ１およびｍ０を含み、その第１のバイトｍ０が１位置だけ左にシフトされていると考えられ、これは多項式表記において次のように書くことができる。
【数９】
2007514371.tif 000011
【００１６】
生成多項式Ｇ（ｘ）の「テイル（tail）」ｇ（ｘ）を、次のように導入するのが便利であり、
【数１０】
2007514371.tif 000012
これには、次の特性がある。
【数１１】
2007514371.tif 000013
【００１７】
この特性を用いて、第１のステップにおいて、メッセージの最初のシンボルだけが符号化される（剰余ｒ０が求められる）とき、次の関係が成り立つ。
【数１２】
2007514371.tif 000014
したがって、反復は次式で開始される。
【数１３】
2007514371.tif 000015
【００１８】
第２ステップの後に、剰余を以下のように計算することができる。
【数１４】
2007514371.tif 000016
したがって、
【数１５】
2007514371.tif 000017
【００１９】
この手法を用いて、一般に、ステップｋ＋１後の剰余ｒｋ＋１（ｘ）を、先のステップｋにおける剰余ｒｋ（ｘ）および新入力バイトｍｋ＋１からまったく同じ方法で、以下のように計算することができる。
【数１６】
2007514371.tif 000018
【００２０】
この計算は、２ｔ個のシンボルからなる、一般名称では「シフトレジスタ」ｒを使用して実現することができる。
【数１７】
2007514371.tif 000019
各反復において、２ｔ個のシンボルが左にシフトされ、ゼロのシンボルが右からシフトされて入り、最左端シンボルｒ２ｔ−１はシフトされてレジスタから出される―この最左端シンボルは、入ってくるシンボルと加算（ＸＯＲ処理）されて、「フィードバック」シンボルを形成する。
【数１８】
2007514371.tif 000020
【００２１】
これらの定義を使用して、剰余Ｒｋ（ｘ）は、次式によって反復処理される。
【数１９】
2007514371.tif 000021
【００２２】
剰余の反復を表す概略図を図１に示してある。図１において、メッセージシンボル１０（ｍｓ）が、高次剰余４６（ｒ３）と合計されて、ガロア体要素１４（ｆ）が得られる。上記のように、ガロア体加算は、排他的ＯＲ演算として実行される。ガロア体要素１４に、符号生成係数２０、２２、２４、２６（ｇ1、ｇ１、ｇ２、ｇ３）を乗じて、中間値３０、３２、３４、３６が得られる。この中間値は、先の剰余シンボルと合計されて、現在剰余シンボルが得られる。すなわち、積ｆｇ０はゼロと合計されて、剰余シンボル４０（ｒ０）が得られる；積ｆｇ１は先の剰余４０と合計されて、現在剰余シンボル４２（ｒ１）が得られる；積ｆｇ２は先の剰余４２と合計されて、現在剰余シンボル４４（ｒ２）が得られる；積ｆｇ３は先の剰余４４と合計されて、現在剰余シンボル４６（ｒ３）が得られる。
【００２３】
このプロセスは、符号語中の各メッセージシンボル１０に対して、反復される。符号語中のすべてのメッセージシンボルが処理された後に、剰余シンボル４０、４２、４４、４６は、メッセージシンボルと共に伝送するための、検査シンボルを表す。したがって、符号語は、メッセージシンボルおよび検査シンボルを含む。図１の例は、メッセージシンボルと共に伝送するための、４つの検査シンボルを生成し、符号語中の２つの誤りを訂正することができる。より一般的な例において、符号生成器は、１６の符号生成係数ｇｉを含み、符号語中の８つの誤りを訂正するための１６の検査シンボルを生成する。
【００２４】
剰余多項式の計算に従来式ルックアップテーブル手法を使用する場合には、計算の流れにおける主なボトルネックは、ＧＦにおける乗算の結果の反復計算であることがわかる。メッセージの各バイトに対して、２ｔ回の乗算が必要であり、そのためにｎ個の情報バイトと２ｔ個の検査バイトを有する１つの符号語を符号化するのに、２ｎｔ回のＧＦ乗算を実行しなければならない。
ｔ＝８、ｎ＝２３９以下のＧＦ（２５６）からのシンボルについて、８つの誤りを訂正するリード・ソロモン符号の重要な場合において、合計３８２４回のＧＦ演算が実行される。１０〜１２サイクル／演算とすると、これは、最大４０Ｋサイクル／符号語にのぼる。
【００２５】
Ｙａｎｇに対して２００２年３月１９日に発行のされた米国特許第６,３６０,３４８号においては、剰余多項式の１回の反復に伴うすべてのＧＦ演算は第２オペランドの同じ組、すなわち符号生成多項式ｇ（ｘ）の２ｔ個の係数について実行されるという観察に基づいて計算を容易にするために、ルックアップテーブルが構築される。それに対応して、ＧＦの全ｎ個の要素を符号生成多項式ｇ（ｘ）の２ｔ個の係数によって乗算した結果の２ｔ＊ｎ個の値が、事前計算されてルックアップテーブルに格納され、それによってテーブル中の各エントリＦ（ｆ，ｉ）の内容は、次式で定義される。
【数２０】
2007514371.tif 000022
ここで、ｆは多項式形態におけるガロア体要素を表し、ｇｉは符号生成多項式の係数であり、符号
【数２１】
2007514371.tif 000023
は、ガロア体乗算演算を表す。
【００２６】
この手法を使用する場合には、訂正される誤りの数が比較的小さい場合、例えば８個の誤りであり、使用されるガロア体がＧＦ（２５６）である場合でも、テーブルの大きさは、４Ｋバイトである（１６＊２５６＊１バイト、１６は、８つの誤りを訂正するための検査バイトの数である）。ＲＳ符号用のいくつかの異なる選択肢を実行しなくてはならず、例えば、ＡＤＳＬ用途においていくつかのレーテンシ経路を使用する場合に、１つのレーテンシ経路における符号語は、１６の検査バイトを有し、別のレーテンシ経路において、１２の検査バイトを有し、この場合に、メモリサイズは７Ｋｂなどとなる。
【００２７】
本発明の特徴によれば、ＧＦ演算
【数２２】
2007514371.tif 000024
―ただし、ｆは任意のＧＦ要素を表し、ｇｉは符号生成多項式の係数であり、符号
【数２３】
2007514371.tif 000025
は、ガロア体乗算演算を表す―は２つの小さなテーブルを使用して２段階で実行される。
１）任意のＧＦ要素ｆは、その「下位」および「上位」部分の合計として最初に表わされ、例えば、ＧＦ（２５６）において、次のように書ける。
【数２４】
2007514371.tif 000026
ここで、ＨおよびＬは、上位マスクおよび下位マスクを使用する２回のＡＮＤ演算で、ｆから得ることができる。
【数２５】
2007514371.tif 000027
【００２８】
２）ＧＦＭＵＬ演算
【数２６】
2007514371.tif 000028
は、ガロア体の特性を用いて、次のように実行することができる。
【数２７】
2007514371.tif 000029
【００２９】
式（２３）〜（２５）の演算を、図２に示してある。図のように、ガロア体要素１４は、式（２４）による上位マスクおよび下位マスクを用いて、上位半語（high halfword）５０（Ｈ０）と下位半語（low halfword）５２（ＯＬ）とに分離される。上位半語および下位半語には、それぞれ、符号生成係数２０、２２、２４、２６を乗じる。それぞれの積が合計されて、中間値が得られる。この中間値は、先の剰余シンボルと合計されて、現在剰余シンボルが得られる。図２のアーキテクチャは、ルックアップテーブルと組み合わされ、これによって有利な結果が達成される。
【００３０】
３）式（２５）を用いて、２つの小さなルックアップテーブルを構築し、それぞれのテーブルは、「下位」および「上位」の半語の１６のすべての可能な場合によって、生成多項式係数ｇｉの組をＧＦＭＵＬ（ガロア体乗算）した、連続的な結果を保持する：
【数２８】
2007514371.tif 000030
４）ＧＦ（２５６）および符号生成多項式の１６の係数の場合における、各テーブルの大きさは２５６バイトであり、２つのテーブルの合計の大きさは５１２バイト―先行技術手法におけるよりも８分の１の大きさであり、合計実行時間は約５０％長いだけであるが、この理由は、演算の約５０％がＧＦＭＵＬ演算の実行と直接に連結されていないためである。
【００３１】
１ステップ（１情報シンボル／バイト）による剰余の反復に関与する演算は、次の順序で実行することができる。
【数２９】
2007514371.tif 000031
【数３０】
2007514371.tif 000032
i=1 : 2t-1に対して、
【数３１】
2007514371.tif 000033
各反復には、ルックアップテーブルへの２回のアクセスと、任意のプロセッサにおいて容易に利用可能である、それに続くＸＯＲ演算とが必要である。
【００３２】
ルックアップテーブルＴＨ，ＴＬを使用する符号生成を、図３に図式的に示してある。上述のように、第１のルックアップテーブルは、符号生成係数のそれぞれを乗じた上位半語Ｈ０の値を包含し、第２のルックアップテーブルは、符号生成係数のそれぞれを乗じた下位半語０Ｌの値を包含する。上位半語値を、係数指標と共に使用して、テーブルＴＨにアクセスすることによって、１つまたは２つ以上の上位テーブル値５４が得られ、下位半語値を、係数指標と共に使用して、テーブルＴＬにアクセスすることによって、１つまたは２つ以上の下位テーブル値５６が得られる。ある係数指標（coefficient index）を有する上位テーブルおよび下位テーブルのそれぞれのテーブル値を、合計演算６０によって合計することによって、中間値が得られ、この中間値を、合計演算６２において、それぞれの先の剰余シンボルと合計することによって、現在剰余シンボル４０、４２、４４、４６が得られる。以下に考察するように、これらのルックアップテーブルから、符号生成を実行するシステムのアーキテクチャに応じて、合計すべき１組のテーブル値、または合計すべき２組以上のテーブル値が得られる。
【００３３】
本発明の一態様によるルックアップテーブルの内容を図４Ａおよび図４Ｂに示してある。図４Ａは、上位半語テーブル７０（ＴＨ）を示し、図４Ｂは、下位半語テーブル７２（ＴＬ）を示す。図のように、テーブル７０は、上位半語Ｈ０の可能なそれぞれの値に、符号生成係数のそれぞれを乗じた積を包含する。したがって、テーブル７０における各エントリはｇｉＨの値を含み、ここでｉは、０から２ｔ−１の範囲であり、Ｈは０から上位半語Ｈの最大値までの範囲である。同様に、テーブル７２における各エントリはｇｉＬの値を含み、ここでｉは、０から２ｔ−１の範囲であり、Ｌは０から下位半語Ｌの最大値までの範囲である。メッセージシンボルがバイトである、一般的な場合に対して、上位半語は、（１６進表記を用いて）００からＦ０までの範囲の１６の可能な値を有する。
【００３４】
符号生成係数の数は、所望の検査シンボルの数によって決まり、８個の検査シンボルの場合には、１６とすることができる。同様に、テーブル７２は、下位半語０Ｌの可能なそれぞれの値に、符号生成係数のそれぞれを乗じた積を包含する。メッセージシンボルがバイトである場合には、下位半語値は０からＦまでの範囲となる。したがって、メッセージシンボルがバイトであり、符号生成器が１６個の係数を有する場合に対して、ルックアップテーブル７０、７２のそれぞれは、２５６のエントリを有する。図４Ａ、４Ｂの例において、テーブル７０、７２は、各行が、１つの半語値に対応する積を包含するように構成されている。以下に考察するように、この構成によって、一般的なプロセッサにおける、並列実行が容易になる。
【００３５】
８ビットガロア体要素が上位半語と下位半語に分割されて、２つのルックアップテーブルが使用される態様に関連して、本発明を説明した。他の態様においては、それぞれのガロア体要素は、８ビットよりも大きくてもよい。さらに、各ガロア体要素は、２を超える構成要素に分割して、２を超えるルックアップテーブルを使用してもよい。１６ビットガロア体要素を考える。米国特許第６,３６０,３４８号に記載された手法は、２Ｍバイトルックアップテーブルを必要とする。それぞれの１６ビットガロア体要素が２つの構成要素に分離された一態様においては、それぞれが８Ｋバイト（１６係数×２５６の２分ＧＦ要素値（half GF element value）×２バイト／エントリ）の２つのルックアップテーブルが必要である。それぞれの１６ビットガロア体要素が４つの構成要素に分割されている一態様においては、それぞれが５１２バイト（１６係数×１６の４分ＧＦ要素値（quarter GF element value）×２バイト／エントリ）の、４つのルックアップテーブルが必要である。
【００３６】
これはすべての現代のＤＳＰに当てはまることであるが、８ビット幅よりも大きいデータアクセスワードサイズを有する任意のＤＳＰ（ディジタル信号プロセッサ）に対して、この態様のさらなる利点を達成することが可能であり、その理由は、テーブルアクセスは、単調増加する第２指標で実施することが可能であり、それによって、連続アクセスの１次元配列としてテーブルを使用することが可能であり、シフトレジスタセルは厳密に連続順序で使用されることによるものである。これによって実行が大幅に高速化し、その理由は、第１に、１サイクルにおいて複数エントリが読み取られこと、第２に、ＸＯＲ演算の実行も、複数ガロア体シンボルについて同時に、例えば３２ビットデータワードパスを備えるＤＳＰに実装されるときには一度に４シンボル、６４ビットデータワードパスを有するＤＳＰに対して８シンボル、などのように行うこともできるためである。例えば、ある種の制約がある３２ビットデータパスを有する、Ｂｌａｃｋｆｉｎ  ＤＳＰ上の特定の実装は、１．５サイクル／検査バイト／データバイトで動作し、これは従来式方法よりも５〜６倍速く、組込みガロア体乗算器を有するＤＳＰよりも２倍の速さである。
【００３７】
本発明の一態様による、データを符号化するためのディジタル信号プロセッサのブロック図を図５に示してある。ｗ個のガロア体要素のワード幅を有するディジタル信号プロセッサにおいてデータを符号化するプロセスを図６に示してある。図５の態様において、ディジタル信号プロセッサのコアプロセッサ１００は、メッセージシンボルｍを受け取り、符号語のメッセージシンボルと共に伝送すべき、検査シンボルｒを供給する。コアプロセッサ１００は、上位半語ルックアップテーブル１１０にアクセスして、テーブル値ｇｉＨ、ｇｉ＋ｌＨ、 ｇｉ＋２Ｈ、 ｇｉ＋３Ｈを受け取る。コアプロセッサ１００は、また、下位半語ルックアップテーブル１１２にアクセスして、テーブル値ｇｉＬ、 ｇｉ＋１Ｌ、 ｇｉ＋２Ｌ、ｇｉ＋３Ｌを受け取る。図５の態様において、メッセージシンボルｍはバイトであり、コアプロセッサ１００は３２ビットのワード幅を有する。したがって、コアプロセッサ１００は、図５に示し、以下に説明するように、ルックアップテーブル１１０およびルックアップテーブル１１２のそれぞれから、サイクル当たり４つのテーブル値を処理することができる。異なるワード幅を有するコアプロセッサは、サイクル当たり、より多くの、または少ないテーブル値を処理することもできる。
【００３８】
再び図６を参照すると、次メッセージ信号ｍが受け取られて、ステップ１５０において、処理される。ステップ１５２において、ガロア体要素ｆが、式（２８）に示すように、メッセージシンボルおよび高次剰余シンボルから計算される。ステップ１５４において、ガロア体要素は、式（２３）、（２４）に示すように、第１および第２の構成要素、Ｈ０および０Ｌに分離される。この態様においては、ガロア体要素は、上位半語と下位半語とに分離される。しかしながら、その他の態様においては、ガロア体要素は、２を超える数の構成要素に分離することもできる。
【００３９】
ステップ１５６において、上位半語Ｈ０および指標ｉを使用して、ルックアップテーブル１１０（図５）からのｗ個のテーブル値にアクセスされる。指標ｉは、生成係数の指標ｇｉである。符号語が１６個の検査シンボルを有し、符号生成多項式が１６の係数を有する例においては、指標ｉは、０から１５の範囲である。ステップ１５６において、下位半語０Ｌおよび指標ｉを使用して、ルックアップテーブル１１２（図５）からｗテーブル値が得られる。上記のように、同時にアクセスされるテーブル値の数は、ガロア体要素の単位で表される、コアプロセッサ１００のワード幅に依存する。コアプロセッサ１００が３２ビットワード幅を有し、メッセージシンボルがバイトである典型的な場合に対して、ルックアップテーブル１１０、１１２のそれぞれにおいて、ｗ＝４のテーブル値が同時にアクセスされる。
【００４０】
ステップ１６０およびステップ１６２において、ステップ１５６においてアクセスされたｗ組のテーブル値のそれぞれに対して、剰余シンボルｒｉが計算される。より具体的には、ステップ１６０において、中間値ｓｉが、式（３０）に示すように、ｗ組のテーブル値のそれぞれに対して計算される。１組のテーブル値は、ルックアップテーブル１１０からのテーブル値およびルックアップテーブル１１２からのテーブル値を含み、この２つのテーブル値は、同一の生成係数指標を有する。次いで、現在剰余シンボルｒｉが、はやり式（３０）に示すように、ｗ個の中間値ｓｉのそれぞれに対して、中間値ｓｉと、先の剰余シンボルｒｉ−１とに対する排他的ＯＲ演算によって計算される。すなわち、ステップ１６２において、ｗ個の剰余シンボルが計算される。
【００４１】
ステップ１７０において、２ｔ個の剰余シンボルが計算されたかどうかについての判定が行われ、ここで２ｔは、符号生成多項式における係数の数を表す。２ｔ個の剰余シンボルが、計算されていない場合には、ステップ１７２において、指標ｉはｗだけ増分される。次いで、プロセスは、ステップ１５６に戻り、テーブル１１０におけるｗ個の新テーブル値、およびテーブル１１２におけるｗ個の新テーブル値にアクセスする。ステップ１５６、１６０、１６２、１７０、１７２を含むループが、２ｔ個の剰余シンボルが計算されるまで反復される。ｗ＝４、かつ２ｔ＝１６である例に対して、このループの４回の反復が必要である。
【００４２】
２ｔ個の剰余シンボルが計算されている場合には、ステップ１８０において、符号語の末端に達したかどうかの判定が行われる。典型的な符号語は、１８８のメッセージシンボルを含むことができる。符号語の末端に到達していない場合には、プロセスは、ステップ１５０に戻り、次のメッセージシンボルｍが処理される。符号語の末端に到達している場合には、ステップ１８２において、２ｔ個の検査シンボルが出力される。したがって、例えば、符号語の１８８のメッセージシンボルと共に伝送するために、１６の検査シンボルを出力することができる。
【００４３】
ＡＤＳＬモデムなどの、いくつかの用途においては、ＲＳ符号のパラメータは、「オンザフライ（on the fly）」に設定して、１つのＡＤＳＬチャネル内において、異なる伝達チャネル（bearer channel）に対して変えることができる。この場合には、符号化の２つの方法を、本発明に基づいて実現することができる。第１の方法によれば、可能な最大数の検査バイトに対するテーブルだけが生成され、誤り訂正能力の低い符号を使用する場合には、符号器は次のように２段階で動作する。
【００４４】
第１に、より高い次数の符号生成多項式Ｇ２ｔは、より低次の符号生成多項式Ｇ２ｓを要素として包含することがわかる。
【数３２】
2007514371.tif 000034
ここで、
【数３３】
2007514371.tif 000035
また、ｄ＝ｔ−ｓは、符号の誤り訂正能力間の差である。
【００４５】
それに対応して、次数ｎのメッセージ多項式は、２つの部分―高次のｎ−２ｄ項および低次の２ｄ項に区分され、
【数３４】
2007514371.tif 000036
符号生成多項式をそれに分割するべき、シフトされたメッセージ多項式は、次のように表される。
【数３５】
2007514371.tif 000037
【００４６】
ここで、高次２ｔの符号生成多項式に関係する、メッセージの最初のｎ−２ｄバイトに対する剰余は、次式のように得られる。
【数３６】
2007514371.tif 000038
ここで、第１項は次のように書くことができる。
【数３７】
2007514371.tif 000039
ここで、
【数３８】
2007514371.tif 000040
【００４７】
同じ論理に従って、２ｔ個からなる「長い」剰余Ｒ（ｘ）は、２つの部分、すなわち高次２ｄ項と低次２ｓ項に分解される。
【数３９】
2007514371.tif 000041
そして、最終的に、符号化を次の式によって実行することができる。
【数４０】
2007514371.tif 000042
【００４８】
これは、比較的短い（２ｄバイトだけの）メッセージを符号化すること、
【数４１】
2007514371.tif 000043
およびこの演算の結果を、「長い」符号化の「短縮された」結果に加えることと等価である。
【数４２】
2007514371.tif 000044
【００４９】
結果的に、符号化の全体連鎖は、次のように説明することができる。メッセージＭ２ｄ（ｘ）の最後の２ｄバイトを、得られた剰余ｒ２ｄ（ｘ）の最初の（最左端の）２ｄバイトに加え、そして、これらの２ｄバイトを、短いメッセージとして取り扱って、従来式方法を用いて符号化し、この結果を、「長い」剰余Ｒ（ｘ）の残りのバイトに加える―これは符号化の最終結果である。
【００５０】
この方法には、２ｄバイトの追加の「再符号化」に起因するオーバヘッドＤ（ｔ、ｄ）があり、これは、符号化されるバイト数および結果
【数４３】
2007514371.tif 000045
におけるバイト数に比例し、ここでＫは、従来式の符号化に対して必要なサイクル数―通常は１０〜１２―である。このオーバヘッドは、ｄ＝ｔ／２  Ｋ＊ｒ２に対して最大値を有し、Ｋ＝１２、ｔ＝８について７６８サイクルのレベルとすることができ、これは符号化の主要部分の約２０％を構成する。
【００５１】
別の選択肢は、任意の必要な符号パラメータに対して、オンザフライで「右」テーブルを生成することであり、これは追加のメモリを必要とすることがある。広いデータパスを有するＤＳＰを完全に利用するが、しかしこの場合には、本発明の一観点に従って、検査バイトが４の倍数の整数でない場合に、テーブルは、３２＊４ｋのサイズで生成され、ここで４ｋは、検査バイトの指定数より上であって、それに最も近い４の倍数の整数であり、例えば、１４に対して１６、１０に対して１２などである。残りの６４バイトは、ゼロで埋められて、それによってこれらの値が読み取られるときに、それらが計算の結果に影響を与えないようにする。
【００５２】
符号器において使用される同一のテーブルを、以下の方法で、復号器において、シンドローム（syndrome）を計算するのに使用することができる。システム的形態の受け取った符号語は、最初に、再符号化される―符号器機構が、符号語の情報バイトについて実行されて、実際に受け取られる検査バイトの列の「コピー」が得られる。次いで、この再構築された「コピー」が、論理ＡＮＤ演算子を用いて、シンドロームと緊密に関係する多項式を形成する、実際に受け取る検査バイトとビット毎に比較される―すなわち、ＧＦの原始元の連続ベキ乗に基づくこの多項式の値は、まさにシンドロームの構成要素であり、その理由は次の関係である。
【数４４】
2007514371.tif 000046
この理由は、以下の符号生成多項式の定義によりＧ（ａｋ）＝０であるためである。
【数４５】
2007514371.tif 000047
【００５３】
したがって、シンドロームの蓄積は、従来式手法を用いて、長さｎバイトの元の符号語よりもずっと短い２ｔバイトのシーケンスに対して実行することができる。これには、（２ｔ−１）２回のノントリビアルなＧＦ乗算を必要とし、これは、バールカンプ・マッセイ（Berlekamp-Massey）またはユークリッドのアルゴリズムを実装して、誤りロケータ多項式の係数を発見するのに必要な演算と同程度のものである。ＧＦ乗算は、オペランドの１つの一定の組に対して実行されるので、この計算の速度は、実際には、一般ＧＦ乗算よりも３０〜５０％高く、したがって、（２５５、２３９、１６）ＲＳ符号の場合には、最大２２５＊６＝１３５０サイクルが必要であり、これは３０％のオーバヘッドである。
【００５４】
これまで、本発明の概念およびいくつかの例証的態様について説明したが、本発明は様々な方法で実施が可能であること、および修正形態および完全形態を当業者は容易に思いつくことは、当業者には明白である。したがって、与えられた例は、限定的なものではなく、例示の目的だけで提示したものである。本発明は、添付のクレームとその均等物によって必要とされる場合にのみ限定される。
【図面の簡単な説明】
【００５５】
【図１】リード・ソロモン符号化の従来技術方法の概略ブロック図である。
【図２】符号生成係数を乗じる前にガロア体要素が半語符号に分離される、リード・ソロモン符号化の方法を示す、概略ブロック図である。
【図３】本発明の一態様による、リード・ソロモン符号化を示す、概略ブロック図である。
【図４Ａ】本発明による、リード・ソロモン符号化のためのルックアップテーブルの態様を示す図である。
【図４Ｂ】本発明による、リード・ソロモン符号化のためのルックアップテーブルの態様を示す図である。
【図５】本発明の一態様による、ディジタル信号プロセッサにおけるリード・ソロモン符号化を示す、概略ブロック図である。
【図６】本発明の一態様による、リード・ソロモン符号化を示す、フローチャートである。
【図１】
2007514371.tif 000048
【図２】
2007514371.tif 000049
【図３】
2007514371.tif 000050
【図４Ａ】
2007514371.tif 000051
【図４Ｂ】
2007514371.tif 000052
【図５】
2007514371.tif 000053
【図６】
2007514371.tif 000054
【国際調査報告】
2007514371.tif 000055
2007514371.tif 000056
2007514371.tif 000057