(57)【要約】【課題】より正確な通信を、より容易に行うことができるようにする。【解決手段】送信装置１１は、送信用データを分割した元データと、元データを、予め用意された係数行列を用いてEOR演算して生成した冗長データを受信装置１３に送信する。その際、送信装置１１は、復元処理に関する情報である復元関連情報を元データと冗長データに付加して送信する。受信装置１３は、受信した元データと冗長データに付加された復元処理に関する情報に基づいて、ロスした元データを特定するとともに、取得した冗長データを整列させて、予め用意された係数行列を利用してEOR演算を行うことにより、ロスした元データを復元し、元の送信データに対応する受信データを生成する。本発明は、例えば、通信システムに適用できる。【選択図】図１
2005223684.tif 000002
【特許請求の範囲】
【請求項１】
送信用データを送信する送信装置と、前記送信装置により送信される前記送信用データを受信する受信装置を備える送受信システムであって、
前記送信装置は、前記送信用データのブロックデータを所定のサイズに分割することにより複数の第１のデータを生成し、生成した複数の前記第１のデータから、前記第１のデータを任意に、複数選択し、選択した前記第１のデータの排他的論理和演算結果である第２のデータを生成し、前記受信装置による前記第１のデータの復元処理に関する情報である第１の関連情報および第２の関連情報を、それぞれ、前記第１のデータおよび第２のデータに付加し、前記第１の関連情報を付加した前記第１のデータ、および、前記第２の関連情報を付加した前記第２のデータを、それぞれパケット化して前記受信装置に送信し、
前記受信装置は、前記第１のデータおよび前記第２のデータの両方を受信し、受信した前記第１のデータに付加された前記第１の関連情報に基づいて、受信できなかった前記第１のデータが存在するか否かを判定し、受信できなかった前記第１のデータが存在すると判定された場合、受信した前記第２のデータに付加された前記第２の関連情報に基づいて、前記復元処理のための、排他的論理和演算を用いた行列式を作成し、作成した前記行列式を解くことにより、前記復元処理を行い、前記第１のデータを復元する
ことを特徴とする送受信システム。
【請求項２】
送信用データを受信装置に送信する送信装置であって、
前記送信用データのブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成手段と、
前記第１の生成手段により生成された複数の前記第１のデータから、前記第１のデータを任意に、複数選択し、選択した前記第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成手段と、
前記受信装置による、受信した前記第２のデータを用いた、受信できなかった前記第１のデータの復元処理に関する情報である復元関連情報を、前記第１の生成手段により生成された前記第１のデータ、および前記第２の生成手段により生成された前記第２のデータの少なくとも一方に付加する付加手段と、
前記付加手段により前記復元関連情報が少なくとも一方に付加された、前記第１のデータおよび前記第２のデータを、それぞれパケット化して前記受信装置に送信する送信手段と
を備えることを特徴とする送信装置。
【請求項３】
前記復元関連情報は、前記受信装置が受信できなかった前記第１のデータを特定するための第１の関連情報、および、前記受信装置が、前記復元処理において、受信した前記第２のデータを整列させるための第２の関連情報を含み、
前記付加手段は、前記第１の関連情報を前記第１のデータに付加し、前記第２の関連情報を前記第２のデータに付加する
ことを特徴とする請求項２に記載の送信装置。
【請求項４】
前記第１の関連情報は、前記第１のデータを識別するための第１のパケット番号であり、
前記第２の関連情報は、前記第２のデータを識別するための第２のパケット番号である
ことを特徴とする請求項３に記載の送信装置。
【請求項５】
前記復元関連情報は、前記受信装置が受信した前記第１のデータまたは前記第２のデータが対応する前記ブロックデータを特定する第３の関連情報をさらに含み、
前記付加手段は、前記第３の関連情報を前記第１のデータおよび前記第２のデータに付加する
ことを特徴とする請求項３に記載の送信装置。
【請求項６】
前記第３の関連情報は、前記ブロックデータを識別するためのブロック番号である
ことを特徴とする請求項５に記載の送信装置。
【請求項７】
前記第２の生成手段は、前記第１のデータを任意に選択するための、予め用意された所定の係数行列を用いて、前記第２のデータを生成する
ことを特徴とする請求項３に記載の送信装置。
【請求項８】
前記復元関連情報は、前記受信装置が受信できなかった前記第１のデータを特定するための第１の関連情報、および、前記受信装置が、前記復元処理の演算に用いられる係数行列を生成するための第２の関連情報を含み、
前記付加手段は、前記第１の関連情報を前記第１のデータに付加し、前記第２の関連情報を前記第２のデータに付加する
ことを特徴とする請求項２に記載の送信装置。
【請求項９】
前記第２の生成手段は、前記第２の関連情報に基づいて、前記第１のデータを任意に、複数選択するための係数行列を生成し、生成した前記係数行列を用いて、前記第２のデータを生成する
ことを特徴とする請求項８に記載の送信装置。
【請求項１０】
前記第１の関連情報は、前記第１のデータを識別するための第１のパケット番号であり、
前記第２の関連情報は、前記第２のデータを識別するための第２のパケット番号である
ことを特徴とする請求項８に記載の送信装置。
【請求項１１】
前記復元関連情報は、前記受信装置が受信した前記第１のデータまたは前記第２のデータが対応する前記ブロックデータを特定する第３の関連情報をさらに含み、
前記付加手段は、前記第３の関連情報を前記第１のデータおよび前記第２のデータに付加する
ことを特徴とする請求項８に記載の送信装置。
【請求項１２】
前記第３の関連情報は、前記ブロックデータを識別するためのブロック番号である
ことを特徴とする請求項１１に記載の送信装置。
【請求項１３】
前記送信手段は、パケット化された前記第１のデータおよび前記第２のデータを、任意の順序で送信する
ことを特徴とする請求項２に記載の送信装置。
【請求項１４】
送信用データを受信装置に送信する送信装置の送信方法であって、
前記送信用データのブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成ステップと、
前記第１の生成ステップの処理により生成された複数の前記第１のデータから、前記第１のデータを任意に、複数選択し、選択した前記第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成ステップと、
前記受信装置による、受信した前記第２のデータを用いた、受信できなかった前記第１のデータの復元処理に関する情報である復元関連情報を、前記第１の生成ステップの処理により生成された前記第１のデータおよび前記第２の生成ステップの処理により生成された前記第２のデータの少なくとも一方に付加する付加ステップと、
前記付加ステップの処理により前記復元関連情報が少なくとも一方に付加された、前記第１のデータおよび前記第２のデータを、それぞれパケット化して前記受信装置に送信するように制御する送信制御ステップと
を含むことを特徴とする送信方法。
【請求項１５】
送信用データを受信装置に送信する送信処理を、コンピュータに行わせるプログラムにおいて、
前記送信用データの一部であるブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成ステップと、
前記第１の生成ステップの処理により生成された複数の前記第１のデータから、前記第１のデータを任意に、複数選択し、選択した前記第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成ステップと、
前記受信装置による、受信した前記第２のデータを用いた、受信できなかった前記第１のデータの復元処理に関する情報である復元関連情報を、前記第１の生成ステップの処理により生成された前記第１のデータおよび前記第２の生成ステップの処理により生成された前記第２のデータの少なくとも一方に付加する付加ステップと、
前記付加ステップの処理により前記復元関連情報が少なくとも一方に付加された、前記第１のデータおよび前記第２のデータを、それぞれパケット化して前記受信装置に送信するように制御する送信制御ステップと
を含むことを特徴とするプログラム。
【請求項１６】
送信装置が送信する送信用データのブロックデータが分割されたパケットデータを受信する受信装置であって、
前記パケットデータである第１のデータ、並びに、複数の前記第１のデータの排他的論理和演算結果である第２のデータの両方を受信する受信手段と、
前記受信手段により受信された前記第１のデータに付加された、復元処理に関する第１の関連情報に基づいて、受信できなかった前記第１のデータが存在するか否かを判定する判定手段と、
前記判定手段の判定により、受信できなかった前記第１のデータが存在すると判定された場合、受信した前記第２のデータに付加された、復元処理に関する第２の関連情報に基づいて、前記復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成手段と、
前記行列式作成手段により作成された前記行列式を解くことにより、前記復元処理を行い、前記第１のデータを復元する復元手段と
を備えることを特徴とする受信装置。
【請求項１７】
前記第１の関連情報は、前記第１のデータを識別するための第１のパケット番号であり、
前記第２の関連情報は、前記第２のデータを識別するための第２のパケット番号である
ことを特徴とする請求項１６に記載の受信装置。
【請求項１８】
前記行列式作成手段は、前記第２の関連情報に基づいて、前記第２のデータを整列させ、整列させた前記第２のデータ、受信した前記第１のデータ、および、予め用意された所定の係数行列を用いて前記行列式を作成する
ことを特徴とする請求項１６に記載の受信装置。
【請求項１９】
前記行列式作成手段は、受信した前記第２のデータおよび前記第１のデータを用いて、演算用の前記第２のデータを生成し、生成した前記第２のデータ、受信した前記第１のデータ、および、予め用意された所定の係数行列を用いて前記行列式を作成する
ことを特徴とする請求項１６に記載の受信装置。
【請求項２０】
前記第２の関連情報を用いて、前記復元処理のための係数行列を生成する係数行列生成手段をさらに備え、
前記行列式作成手段は、受信した前記第１のデータおよび前記第２のデータ、並びに、前記係数行列生成手段により生成された前記係数行列を用いて前記行列式を作成する
ことを特徴とする請求項１６に記載の受信装置。
【請求項２１】
送信装置が送信する送信用データのブロックデータが分割されたパケットデータを受信する受信装置の受信方法であって、
前記パケットデータである第１のデータ、並びに、複数の前記第１のデータの排他的論理和演算結果である第２のデータの両方を受信するように制御する受信制御ステップと、
前記受信制御ステップの処理により制御されて受信された前記第１のデータに付加された、復元処理に関する第１の関連情報に基づいて、受信できなかった前記第１のデータが存在するか否かを判定する判定ステップと、
前記判定ステップの判定処理により、受信できなかった前記第１のデータが存在すると判定された場合、受信した前記第２のデータに付加された、復元処理に関する第２の関連情報に基づいて、前記復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップと、
前記行列式作成ステップの処理により作成された前記行列式を解くことにより、前記復元処理を行い、前記第１のデータを復元する復元ステップと
を含むことを特徴とする受信方法。
【請求項２２】
送信装置が送信する送信用データのブロックデータが分割されたパケットデータを受信する受信処理を、コンピュータに行わせるプログラムにおいて、
前記パケットデータである第１のデータ、並びに、複数の前記第１のデータの排他的論理和演算結果である第２のデータの両方を受信するように制御する受信制御ステップと、
前記受信制御ステップの処理により制御されて受信された前記第１のデータに付加された、復元処理に関する第１の関連情報に基づいて、受信できなかった前記第１のデータが存在するか否かを判定する判定ステップと、
前記判定ステップの判定処理により、受信できなかった前記第１のデータが存在すると判定された場合、受信した前記第２のデータに付加された、復元処理に関する第２の関連情報に基づいて、前記復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップと、
前記行列式作成ステップの処理により作成された前記行列式を解くことにより、前記復元処理を行い、前記第１のデータを復元する復元ステップと
を含むことを特徴とするプログラム。
【請求項２３】
送信用データを送受信する送受信装置であって、
前記送信用データのブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成手段と、
前記第１の生成手段により生成された複数の前記第１のデータから、前記第１のデータを任意に、複数選択し、選択した前記第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成手段と、
前記第１のデータの復元処理に関する第１の関連情報を、前記第１の生成手段により生成された前記第１のデータに付加し、前記受信装置による前記第１のデータの復元処理に関する第２の関連情報を、前記第２の生成手段により生成された前記第２のデータに付加する付加手段と、
前記付加手段により前記第１の関連情報が付加された前記第１のデータ、および、前記付加手段により前記第２の関連情報が付加された前記第２のデータを、それぞれパケット化して他の送受信装置に送信する送信手段と、
前記他の送受信装置が送信した前記第１のデータおよび第２のデータの両方を受信する受信手段と、
前記受信手段により受信された前記第１のデータに付加された前記第１の関連情報に基づいて、受信できなかった前記第１のデータが存在するか否かを判定する判定手段と、
前記判定手段の判定により、受信できなかった前記第１のデータが存在すると判定された場合、受信した前記第２のデータに付加された前記第２の関連情報に基づいて、前記復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成手段と、
前記行列式作成手段により作成された前記行列式を解くことにより、前記復元処理を行い、前記第１のデータを復元する復元手段と
を備えることを特徴とする送受信装置。
【請求項２４】
送信用データを送受信する送受信装置の送受信方法であって、
前記送信用データのブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成ステップと、
前記第１の生成ステップの処理により生成された複数の前記第１のデータから、前記第１のデータを任意に、複数選択し、選択した前記第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成ステップと、
前記第１のデータの復元処理に関する第１の関連情報を、前記第１の生成ステップの処理により生成された前記第１のデータに付加し、前記受信装置による前記第１のデータの復元処理に関する第２の関連情報を、前記第２の生成ステップの処理により生成された前記第２のデータに付加する付加ステップと、
前記付加ステップの処理により前記第１の関連情報を付加された前記第１のデータ、および、前記付加ステップの処理により前記第２の関連情報を付加された前記第２のデータを、それぞれパケット化して他の送受信装置に送信する送信ステップと、
前記他の送受信装置が送信した前記第１のデータおよび第２のデータの両方を受信するように制御する受信制御ステップと、
前記受信制御ステップの処理により制御されて受信された前記第１のデータに付加された前記第１の関連情報に基づいて、受信できなかった前記第１のデータが存在するか否かを判定する判定ステップと、
前記判定ステップの判定処理により、受信できなかった前記第１のデータが存在すると判定された場合、受信した前記第２のデータに付加された前記第２の関連情報に基づいて、前記復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップと、
前記行列式作成ステップの処理により作成された前記行列式を解くことにより、前記復元処理を行い、前記第１のデータを復元する復元ステップと
を含むことを特徴とする送受信方法。
【請求項２５】
送信用データを送受信する送受信処理を、コンピュータに行わせるプログラムにおいて、
前記送信用データのブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成ステップと、
前記第１の生成ステップの処理により生成された複数の前記第１のデータから、前記第１のデータを任意に、複数選択し、選択した前記第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成ステップと、
前記第１のデータの復元処理に関する第１の関連情報を、前記第１の生成ステップの処理により生成された前記第１のデータに付加し、前記受信装置による前記第１のデータの復元処理に関する第２の関連情報を、前記第２の生成ステップの処理により生成された前記第２のデータに付加する付加ステップと、
前記付加ステップの処理により前記第１の関連情報を付加された前記第１のデータ、および、前記付加ステップの処理により前記第２の関連情報を付加された前記第２のデータを、それぞれパケット化して他の送受信装置に送信する送信ステップと、
前記他の送受信装置が送信した前記第１のデータおよび第２のデータの両方を受信するように制御する受信制御ステップと、
前記受信制御ステップの処理により制御されて受信された前記第１のデータに付加された前記第１の関連情報に基づいて、受信できなかった前記第１のデータが存在するか否かを判定する判定ステップと、
前記判定ステップの判定処理により、受信できなかった前記第１のデータが存在すると判定された場合、受信した前記第２のデータに付加された前記第２の関連情報に基づいて、前記復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップと、
前記行列式作成ステップの処理により作成された前記行列式を解くことにより、前記復元処理を行い、前記第１のデータを復元する復元ステップと
を含むことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、送受信システム、送信装置および方法、受信装置および方法、送受信装置および方法、並びにプログラムに関し、特に、パケットロスの復元処理の負荷を軽減させ、より正確な通信を、より容易に行うことができるようにした送受信システム、送信装置および方法、受信装置および方法、送受信装置および方法、並びにプログラムに関する。
【背景技術】
【０００２】
従来、データ通信における誤り訂正方法として、様々な方法が提案されている。例えば、広い帯域に分散するレベルの大きい雑音が重畳するような有線，無線，光等の伝送媒体や記録媒体を介した複数チャネルのデータに対して、複数チャネルの中の少なくとも１チャネルをエラー訂正チャネルとし、他のチャネルの排他的論理和又はモジュロ加算の結果をエラー訂正チャネルのデータとして、受信判定した複数チャネルのデータ又は再生判定した複数チャネルのデータについて、エラー訂正チャネルの判定データと、そのエラー訂正チャネルと組としたチャネルの判定データとの排他的論理和又はモジュロ加算の結果が“０”等の予め定めた特定の値でない場合にエラー発生と判定し、且つチャネル毎の品質を検出して品質劣化のチャネルのデータのエラー発生確率が高いので、このチャネルのデータを除く他のチャネルのデータの排他的論理和又はモジュロ加算の結果を、品質劣化のチャネルのデータと置換することにより、エラー訂正を行う方法がある（例えば、特許文献１参照）。
【０００３】
データ通信としては、近年、ブロードバンド通信網の発達などにより、インターネットに代表されるネットワークを介して音声や映像等のデータのストリーミング配信やリアルタイムな放送等が数多く行われるようになってきた。
【０００４】
このようなネットワークを介したデータ配信においては、ネットワークにおいてパケットロスが発生する場合があり、上述したような受信したデータに対するエラー訂正だけでは対処できない場合があった。
【０００５】
そこで、ロスしたパケットに対するエラー訂正方法として、例えば、受信側が、ロスしたパケットの再送を送信側に要求する再送制御を行う方法やリードソロモン符号を用いた誤り検出訂正方法（FEC：Forward Error Correction）が提案されている（例えば、特許文献２参照）。
【０００６】
リードソロモン符号によるパケットロスに対するエラー訂正処理において、送信装置は、所定の大きさのブロック単位ごとに、送信データの誤り訂正コードを生成し、その誤り訂正コードより冗長パケットを生成し、その生成した冗長パケットをパケット化した元のデータとともに配信する。
【０００７】
受信装置は、このように配信された元のデータのパケットおよび冗長パケットを受信する。そして、元のデータのパケットをロスした場合は、受信した冗長パケットを用いて、そのロスしたパケットを復元する。
【０００８】
【特許文献１】特許３４２７３８２号
【０００９】
【特許文献２】特開平１１−１３６２２０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述した再送制御を行う方法においては、パケットロスが発生する度に、受信側から送信側に対して再送要求が供給されるため、高い確率でエラー訂正を行うことができるが、例えば、マルチキャストのように、複数の装置に対してデータを送信する場合、受信側の各装置より供給される再送要求が、送信側の装置に集中し、送信側の装置の負荷が増大する恐れがある。また、このような再送制御は、通信を伴うため、エラー訂正処理に所定の時間が必要になり、例えば、ストリーミング配信のように、受信側の再生処理にリアルタイム性が求められる場合、処理が間に合わない恐れがあった。
【００１１】
また、上述したようなリードソロモン符号を用いた誤り検出訂正方法の場合、冗長データの作成処理やロスパケットの復元処理において、ガロア体上の演算が必要であり、送受信処理の負荷が増大してしまうという課題があった。
【００１２】
従って、例えば、コンテンツの配信サーバが、マルチキャストやブロードキャスト等にように、多数の端末装置に対してコンテンツデータをストリーミング配信する際に、上述したようなリードソロモン符号を用いた誤り検出訂正方法を適用する場合、ストリーミング配信のために配信処理にリアルタイム性が求められるので、配信サーバには、負荷の高い冗長パケット生成処理を高速で実行するような高性能なハードウェアスペックが要求されるので、製造コストが増大してしまう。同様に、復元処理を実行する端末装置も、高性能なハードウェアスペックが要求され、製造コストが増大してしまう。
【００１３】
そこで、製造コストが下がるように、ガロア体上の演算処理を減らすために、生成する冗長パケットを削減する方法が考えられるが、冗長パケットを削減すると、端末装置において、パケットの復元性能が低下してしまい、エラー訂正ができない場合はパケットの再送を要求する必要が生じる場合がある。
【００１４】
しかしながら、マルチキャストやブロードキャストの場合、配信サーバが配信を行いながら各端末装置からの再送要求を全て処理すると、負荷が増大し、配信処理に影響を与えてしまう恐れがあった。さらに、ストリーミング配信の場合、その再送要求にもリアルタイム性を求められるため、再送要求に正常に応答するのは事実上困難であり、ストリーミング配信を正常に行うことができなくなってしまう恐れがあった。
【００１５】
本発明は、このような状況に鑑みてなされたものであり、復元処理の負荷を軽減させることにより、高速であり、かつ、復元性能の高い復元処理を、製造コストを増大せずに実現し、より容易に、より正確な通信を行うことができるようにするものである。
【課題を解決するための手段】
【００１６】
本発明の送受信システムは、送信用データを送信する送信装置と、送信装置により送信される送信用データを受信する受信装置を備える送受信システムであって、送信装置は、送信用データのブロックデータを所定のサイズに分割することにより複数の第１のデータを生成し、生成した複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータを生成し、受信装置による第１のデータの復元処理に関する情報である第１の関連情報および第２の関連情報を、それぞれ、第１のデータおよび第２のデータに付加し、第１の関連情報を付加した第１のデータ、および、第２の関連情報を付加した第２のデータを、それぞれパケット化して受信装置に送信し、受信装置は、第１のデータおよび第２のデータの両方を受信し、受信した第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定し、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成し、作成した行列式を解くことにより、復元処理を行い、第１のデータを復元することを特徴とする。
【００１７】
本発明の送信装置は、送信用データのブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成手段と、第１の生成手段により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成手段と、受信装置による、受信した第２のデータを用いた、受信できなかった第１のデータの復元処理に関する情報である復元関連情報を、第１の生成手段により生成された第１のデータ、および第２の生成手段により生成された第２のデータの少なくとも一方に付加する付加手段と、付加手段により復元関連情報が少なくとも一方に付加された、第１のデータおよび第２のデータを、それぞれパケット化して受信装置に送信する送信手段とを備えることを特徴とする。
【００１８】
前記復元関連情報は、受信装置が受信できなかった第１のデータを特定するための第１の関連情報、および、受信装置が、復元処理において、受信した第２のデータを整列させるための第２の関連情報を含み、付加手段は、第１の関連情報を第１のデータに付加し、第２の関連情報を第２のデータに付加するようにすることができる。
【００１９】
前記第１の関連情報は、第１のデータを識別するための第１のパケット番号であり、第２の関連情報は、第２のデータを識別するための第２のパケット番号であるようにすることができる。
【００２０】
前記復元関連情報は、受信装置が受信した第１のデータまたは第２のデータが対応するブロックデータを特定する第３の関連情報をさらに含み、付加手段は、第３の関連情報を第１のデータおよび第２のデータに付加するようにすることができる。
【００２１】
前記第３の関連情報は、ブロックデータを識別するためのブロック番号であるようにすることができる。
【００２２】
前記第２の生成手段は、第１のデータを任意に選択するための、予め用意された所定の係数行列を用いて、第２のデータを生成するようにすることができる。
【００２３】
前記復元関連情報は、受信装置が受信できなかった第１のデータを特定するための第１の関連情報、および、受信装置が、復元処理の演算に用いられる係数行列を生成するための第２の関連情報を含み、付加手段は、第１の関連情報を第１のデータに付加し、第２の関連情報を第２のデータに付加するようにすることができる。
【００２４】
前記第２の生成手段は、第２の関連情報に基づいて、第１のデータを任意に、複数選択するための係数行列を生成し、生成した係数行列を用いて、第２のデータを生成するようにすることができる。
【００２５】
前記第１の関連情報は、第１のデータを識別するための第１のパケット番号であり、第２の関連情報は、第２のデータを識別するための第２のパケット番号であるようにすることができる。
【００２６】
前記復元関連情報は、受信装置が受信した第１のデータまたは第２のデータが対応するブロックデータを特定する第３の関連情報をさらに含み、付加手段は、第３の関連情報を第１のデータおよび第２のデータに付加するようにすることができる。
【００２７】
前記第３の関連情報は、ブロックデータを識別するためのブロック番号であるようにすることができる。
【００２８】
前記送信手段は、パケット化された第１のデータおよび第２のデータを、任意の順序で送信するようにすることができる。
【００２９】
本発明の送信方法は、送信用データの一部であるブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成ステップと、第１の生成ステップの処理により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成ステップと、受信装置による、受信した第２のデータを用いた、受信できなかった第１のデータの復元処理に関する情報である復元関連情報を、第１の生成ステップの処理により生成された第１のデータおよび第２の生成ステップの処理により生成された第２のデータの少なくとも一方に付加する付加ステップと、付加ステップの処理により復元関連情報少なくとも一方に付加された第１のデータおよび第２のデータを、それぞれパケット化して受信装置に送信するように制御する送信制御ステップとを含むことを特徴とする。
【００３０】
本発明のプログラムは、送信用データの一部であるブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成ステップと、第１の生成ステップの処理により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成ステップと、受信装置による、受信した第２のデータを用いた、受信できなかった第１のデータの復元処理に関する情報である復元関連情報を、第１の生成ステップの処理により生成された第１のデータおよび第２の生成ステップの処理により生成された第２のデータの少なくとも一方に付加する付加ステップと、付加ステップの処理により復元関連情報少なくとも一方に付加された第１のデータおよび第２のデータを、それぞれパケット化して受信装置に送信するように制御する送信制御ステップとをコンピュータに実行させる。
【００３１】
本発明の受信装置は、パケットデータである第１のデータ、並びに、複数の第１のデータの排他的論理和演算結果である第２のデータの両方を受信する受信手段と、受信手段により受信された第１のデータに付加された、復元処理に関する第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定手段と、判定手段の判定により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された、復元処理に関する第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成手段と、行列式作成手段により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元手段とを備えることを特徴とする。
【００３２】
前記第１の関連情報は、第１のデータを識別するための第１のパケット番号であり、第２の関連情報は、第２のデータを識別するための第２のパケット番号であるようにすることができる。
【００３３】
前記行列式作成手段は、第２の関連情報に基づいて、第２のデータを整列させ、整列させた第２のデータ、受信した第１のデータ、および、予め用意された所定の係数行列を用いて行列式を作成するようにすることができる。
【００３４】
前記行列式作成手段は、受信した第２のデータおよび第１のデータを用いて、演算用の第２のデータを生成し、生成した第２のデータ、受信した第１のデータ、および、予め用意された所定の係数行列を用いて行列式を作成するようにすることができる。
【００３５】
前記第２の関連情報を用いて、復元処理のための係数行列を生成する係数行列生成手段をさらに備え、行列式作成手段は、受信した第１のデータおよび第２のデータ、並びに、係数行列生成手段により生成された係数行列を用いて行列式を作成するようにすることができる。
【００３６】
本発明の受信方法は、パケットデータである第１のデータ、並びに、複数の第１のデータの排他的論理和演算結果である第２のデータの両方を受信するように制御する受信制御ステップと、受信制御ステップの処理により制御されて受信された第１のデータに付加された、復元処理に関する第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定ステップと、判定ステップの判定処理により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された、復元処理に関する第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップと、行列式作成ステップの処理により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元ステップとを含むことを特徴とする。
【００３７】
本発明のプログラムは、パケットデータである第１のデータ、並びに、複数の第１のデータの排他的論理和演算結果である第２のデータの両方を受信するように制御する受信制御ステップと、受信制御ステップの処理により制御されて受信された第１のデータに付加された、復元処理に関する第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定ステップと、判定ステップの判定処理により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された、復元処理に関する第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップと、行列式作成ステップの処理により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元ステップとをコンピュータに実行させる。
【００３８】
本発明の送受信装置は、送信用データの一部であるブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成手段と、第１の生成手段により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成手段と、第１のデータの復元処理に関する第１の関連情報を、第１の生成手段により生成された第１のデータに付加し、受信装置による第１のデータの復元処理に関する第２の関連情報を、第２の生成手段により生成された第２のデータに付加する付加手段と、付加手段により第１の関連情報を付加された第１のデータ、および、付加手段により第２の関連情報を付加された第２のデータを、それぞれパケット化して他の送受信装置に送信する送信手段と、他の送受信装置が送信した第１のデータおよび第２のデータの両方を受信する受信手段と、受信手段により受信された第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定手段と、判定手段の判定により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成手段と、行列式作成手段により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元手段とを備えることを特徴とする。
【００３９】
本発明の送受信方法は、送信用データの一部であるブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成ステップと、第１の生成ステップの処理により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成ステップと、第１のデータの復元処理に関する第１の関連情報を、第１の生成ステップの処理により生成された第１のデータに付加し、受信装置による第１のデータの復元処理に関する第２の関連情報を、第２の生成ステップの処理により生成された第２のデータに付加する付加ステップと、付加ステップの処理により第１の関連情報を付加された第１のデータ、および、付加ステップの処理により第２の関連情報を付加された第２のデータを、それぞれパケット化して他の送受信装置に送信する送信ステップと、他の送受信装置が送信した第１のデータおよび第２のデータの両方を受信するように制御する受信制御ステップと、受信制御ステップの処理により制御されて受信された第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定ステップと、判定ステップの判定処理により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップと、行列式作成ステップの処理により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元ステップとを含むことを特徴とする。
【００４０】
本発明のプログラムは、送信用データの一部であるブロックデータを所定のサイズに分割することにより複数の第１のデータを生成する第１の生成ステップと、第１の生成ステップの処理により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータを生成する第２の生成ステップと、第１のデータの復元処理に関する第１の関連情報を、第１の生成ステップの処理により生成された第１のデータに付加し、受信装置による第１のデータの復元処理に関する第２の関連情報を、第２の生成ステップの処理により生成された第２のデータに付加する付加ステップと、付加ステップの処理により第１の関連情報を付加された第１のデータ、および、付加ステップの処理により第２の関連情報を付加された第２のデータを、それぞれパケット化して他の送受信装置に送信する送信ステップと、他の送受信装置が送信した第１のデータおよび第２のデータの両方を受信するように制御する受信制御ステップと、受信制御ステップの処理により制御されて受信された第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定ステップと、判定ステップの判定処理により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップと、行列式作成ステップの処理により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元ステップとをコンピュータに実行させる。
【００４１】
本発明の送受信システムにおいては、送信用データを送信する送信装置と、送信装置により送信される送信用データを受信する受信装置とが備えられ、送信装置においては、送信用データのブロックデータが所定のサイズに分割されることにより複数の第１のデータが生成され、生成された複数の第１のデータから、第１のデータが任意に、複数選択され、選択された第１のデータの排他的論理和演算結果である第２のデータが生成され、受信装置による第１のデータの復元処理に関する情報である第１の関連情報および第２の関連情報が、それぞれ、第１のデータおよび第２のデータに付加され、第１の関連情報を付加した第１のデータ、および、第２の関連情報が付加された第２のデータが、それぞれパケット化されて受信装置に送信され、受信装置においては、第１のデータおよび第２のデータの両方が受信され、受信された第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かが判定され、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式が作成され、作成された行列式を解くことにより、復元処理が行われ、第１のデータが復元される。
【００４２】
本発明の送信装置および方法、並びに第１のプログラムにおいては、送信用データのブロックデータが所定のサイズに分割されることにより複数の第１のデータが生成され、生成された複数の第１のデータから、第１のデータが任意に、複数選択され、選択された第１のデータの排他的論理和演算結果である第２のデータが生成され、受信装置による、受信した第２のデータを用いた、受信できなかった第１のデータの復元処理に関する情報である復元関連情報が、生成された第１のデータおよび第２のデータの少なくとも一方に付加され、復元関連情報が少なくとも一方に付加された、第１のデータおよび第２のデータが、それぞれパケット化されて受信装置に送信される。
【００４３】
本発明の受信装置および方法、並びに第２のプログラムにおいては、パケットデータである第１のデータ、並びに、複数の第１のデータの排他的論理和演算結果である第２のデータの両方が受信され、受信された第１のデータに付加された、復元処理に関する第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かが判定され、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された、復元処理に関する第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式が作成され、作成された行列式を解くことにより、復元処理が行われ、第１のデータが復元される。
【００４４】
本発明の送受信装置および方法、並びに第３のプログラムにおいては、送信用データのブロックデータが所定のサイズに分割されることにより複数の第１のデータが生成され、生成された複数の第１のデータから、第１のデータが任意に、複数選択され、その選択された第１のデータの排他的論理和演算結果である第２のデータが生成され、第１のデータの復元処理に関する第１の関連情報が、生成された第１のデータに付加され、受信装置による第１のデータの復元処理に関する第２の関連情報が、生成された第２のデータに付加され、第１の関連情報が付加された第１のデータ、および、第２の関連情報が付加された第２のデータが、それぞれパケット化されて他の送受信装置に送信され、他の送受信装置が送信した第１のデータおよび第２のデータの両方が受信され、受信された第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かが判定され、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式が作成され、作成された行列式を解くことにより、復元処理が行われ、第１のデータが復元される。
【発明の効果】
【００４５】
本発明によれば、データを送受信することができる。特に、より高性能な復元処理を行うことができ、より正確な通信を、より容易に行うことができる。
【発明を実施するための最良の形態】
【００４６】
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
【００４７】
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定したりするものではない。
【００４８】
本発明においては、送信用データ（例えば、図３の送信データ５１）を送信する送信装置（例えば、図１の送信装置１１）と、送信装置により送信される送信用データを受信する受信装置（例えば、図１の受信装置１３）を備える送受信システム（例えば、図１の通信システム１）が提供される。送信装置は、送信用データのブロックデータ（例えば、図３のブロック５２）を所定のサイズに分割することにより複数の第１のデータ（例えば、図３の元データ５３）を生成し（例えば、図１５のステップＳ１およびステップＳ２）、生成した複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータ（例えば、図３の冗長データ５４）を生成し（例えば、図１５のステップＳ３）、受信装置による第１のデータの復元処理に関する情報である第１の関連情報（例えば、図１０の元データパケット番号１３３）および第２の関連情報（例えば、図１０の冗長データパケット番号１４３）を、それぞれ、第１のデータおよび第２のデータに付加し（例えば、図１５のステップＳ４）、第１の関連情報を付加した第１のデータ、および、第２の関連情報を付加した第２のデータを、それぞれパケット化して受信装置に送信し（例えば、図１５のステップＳ７）、受信装置は、第１のデータおよび第２のデータの両方を受信し（例えば、図１９のステップＳ９１）、受信した第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定し（例えば、図１９のステップＳ９７）、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成し（例えば、図２０のステップＳ１２９）、作成した行列式を解くことにより、復元処理を行い、第１のデータを復元する（例えば、図２０のステップＳ１３０）。
【００４９】
本発明においては、送信用データ（例えば、図３の送信データ５１）を受信装置（例えば、図１の受信装置１３）に送信する送信装置（例えば、図１の送信装置１１）が提供される。この送信装置は、送信用データのブロックデータ（例えば、図３のブロック５２）を所定のサイズに分割することにより複数の第１のデータ（例えば、図３の元データ５３）を生成する第１の生成手段（例えば、図２のブロック分割部３２）と、第１の生成手段により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータ（例えば、図３の冗長データ５４）を生成する第２の生成手段（例えば、図２の冗長データ生成部３３）と、受信装置による、受信した第２のデータを用いた、受信できなかった第１のデータの復元処理に関する情報である復元関連情報（例えば、図１０の元データパケット番号１３３または冗長データパケット番号１４３）を、第１の生成手段により生成された第１のデータ、および第２の生成手段により生成された第２のデータの少なくとも一方に付加する付加手段（例えば、図２のアプリケーションデータ生成部３４）と、付加手段により復元関連情報が少なくとも一方に付加された、第１のデータおよび第２のデータを、それぞれパケット化して受信装置に送信する送信手段（例えば、図２のUDPパケット化部３５乃至イーサネット(R)処理部３９）とを備える。
【００５０】
前記復元関連情報は、受信装置が受信できなかった第１のデータを特定するための第１の関連情報（例えば、図１０の元データパケット番号１３３）、および、受信装置が、復元処理において、受信した第２のデータを整列させるための第２の関連情報（例えば、図１０の冗長データパケット番号）を含み、付加手段は、第１の関連情報を第１のデータに付加し、第２の関連情報を第２のデータに付加する（例えば、図１８のステップＳ６６およびステップＳ７０）ようにすることができる。
【００５１】
前記第１の関連情報は、第１のデータを識別するための第１のパケット番号（例えば、図１０の元データパケット番号１３３）であり、第２の関連情報は、第２のデータを識別するための第２のパケット番号（例えば、図１０の元データパケット番号１３３）であるようにすることができる。
【００５２】
前記復元関連情報は、受信装置が受信した第１のデータまたは第２のデータが対応するブロックデータを特定する第３の関連情報（例えば、図１０のブロック番号１３２およびブロック番号１４２）をさらに含み、付加手段は、第３の関連情報を第１のデータおよび第２のデータに付加する（例えば、図１８のステップＳ６６およびステップＳ７０）ようにすることができる。
【００５３】
前記第３の関連情報は、ブロックデータを識別するためのブロック番号である（例えば、図１０のブロック番号１３２およびブロック番号１４２）ようにすることができる。
【００５４】
前記第２の生成手段は、第１のデータを任意に選択するための、予め用意された所定の係数行列を用いて、第２のデータを生成するようにすることができる。
【００５５】
前記復元関連情報は、受信装置が受信できなかった第１のデータを特定するための第１の関連情報（例えば、図１０の元データパケット番号１３３）、および、受信装置が、復元処理の演算に用いられる係数行列を生成するための第２の関連情報（例えば、図１０の冗長データパケット番号）を含み、付加手段は、第１の関連情報を第１のデータに付加し、第２の関連情報を第２のデータに付加する（例えば、図１８のステップＳ６６およびステップＳ７０）ようにすることができる。
【００５６】
前記第２の生成手段は、第２の関連情報に基づいて、第１のデータを任意に、複数選択するための係数行列を生成し（例えば、図３６のステップＳ２２４）、生成した係数行列を用いて、第２のデータを生成する（例えば、図３６のステップＳ２３０）ようにすることができる。
【００５７】
前記第１の関連情報は、第１のデータを識別するための第１のパケット番号（例えば、図１０の元データパケット番号１３３）であり、第２の関連情報は、第２のデータを識別するための第２のパケット番号（例えば、図１０の冗長データパケット番号）であるようにすることができる。
【００５８】
前記復元関連情報は、受信装置が受信した第１のデータまたは第２のデータが対応するブロックデータを特定する第３の関連情報（例えば、図１０のブロック番号１３２およびブロック番号１４２）をさらに含み、付加手段は、第３の関連情報を第１のデータおよび第２のデータに付加する（例えば、図１８のステップＳ６６およびステップＳ７０）ようにすることができる。
【００５９】
前記第３の関連情報は、ブロックデータを識別するためのブロック番号（例えば、図１０のブロック番号１３２およびブロック番号１４２）であるようにすることができる。
【００６０】
前記送信手段は、パケット化された第１のデータおよび第２のデータを、任意の順序で送信する（例えば、図１５のステップＳ６およびステップＳ７）ようにすることができる。
【００６１】
本発明においては、送信用データ（例えば、図３の送信データ５１）を受信装置（例えば、図１の受信装置１３）に送信する送信装置（例えば、図１の送信装置１１）の送信方法が提供される。この送信方法は、送信用データの一部であるブロックデータ（例えば、図３のブロック５２）を所定のサイズに分割することにより複数の第１のデータ（例えば、図３の元データ５３）を生成する第１の生成ステップ（例えば、図１５のステップＳ１およびステップＳ２）と、第１の生成ステップの処理により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータ（例えば、図３の冗長データ５４）を生成する第２の生成ステップ（例えば、図１５のステップＳ３）と、受信装置による、受信した第２のデータを用いた、受信できなかった第１のデータの復元処理に関する情報である復元関連情報（例えば、図１０の元データパケット番号１３３または冗長データパケット番号１４３）を、第１の生成ステップの処理により生成された第１のデータおよび第２の生成ステップの処理により生成された第２のデータの少なくとも一方に付加する付加ステップ（例えば、図１５のステップＳ４）と、付加ステップの処理により復元関連情報少なくとも一方に付加された第１のデータおよび第２のデータを、それぞれパケット化して受信装置に送信するようにに制御する送信制御ステップ（例えば、図１５のステップＳ７）とを含む。
【００６２】
本発明においては、送信用データ（例えば、図３の送信データ５１）を受信装置（例えば、図１の受信装置１３）に送信する送信処理をコンピュータに実行させる第１のプログラムが提供される。この第１のプログラムは、送信用データの一部であるブロックデータ（例えば、図３のブロック５２）を所定のサイズに分割することにより複数の第１のデータ（例えば、図３の元データ５３）を生成する第１の生成ステップ（例えば、図１５のステップＳ１およびステップＳ２）と、第１の生成ステップの処理により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータ（例えば、図３の冗長データ５４）を生成する第２の生成ステップ（例えば、図１５のステップＳ３）と、受信装置による、受信した第２のデータを用いた、受信できなかった第１のデータの復元処理に関する情報である復元関連情報（例えば、図１０の元データパケット番号１３３または冗長データパケット番号１４３）を、第１の生成ステップの処理により生成された第１のデータおよび第２の生成ステップの処理により生成された第２のデータの少なくとも一方に付加する付加ステップ（例えば、図１５のステップＳ４）と、付加ステップの処理により復元関連情報少なくとも一方に付加された第１のデータおよび第２のデータを、それぞれパケット化して受信装置に送信するようにに制御する送信制御ステップ（例えば、図１５のステップＳ７）とを含む。
【００６３】
本発明においては、送信装置（例えば、図１の送信装置１１）が送信する送信用データ（例えば、図３の送信データ５１）のブロックデータ（例えば、図３のブロック５２）が分割されたパケットデータ（例えば、図６の元データ８１および冗長データ８２）を受信する受信装置（例えば、図１の受信装置１３）が提供される。この受信装置は、パケットデータである第１のデータ（例えば、図１３の元データ２４１）、並びに、複数の第１のデータの排他的論理和演算結果である第２のデータ（例えば、図１３の冗長データ２４２）の両方を受信する受信手段（例えば、図１２のイーサネット(R)処理部２２１）と、受信手段により受信された第１のデータに付加された、復元処理に関する第１の関連情報（例えば、図１０の元データパケット番号１３３）に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定手段（例えば、図１２のパケットロス判定部２２６）と、判定手段の判定により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された、復元処理に関する第２の関連情報（例えば、図１０の冗長データパケット番号１４３）に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成手段（例えば、図１４の行列式作成部２５３）と、行列式作成手段により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元手段（例えば、図１４の行列式演算部２５６）とを備える。
【００６４】
前記第１の関連情報は、第１のデータを識別するための第１のパケット番号（例えば、図１０の元データパケット番号１３３）であり、第２の関連情報は、第２のデータを識別するための第２のパケット番号（例えば、図１０の冗長データパケット番号１４３）であるようにすることができる。
【００６５】
前記行列式作成手段は、第２の関連情報に基づいて、第２のデータを整列させ（例えば、図２０のステップＳ１２４）、整列させた第２のデータ、受信した第１のデータ、および、予め用意された所定の係数行列を用いて行列式を作成する（例えば、図２０のステップＳ１２９）ようにすることができる。
【００６６】
前記行列式作成手段は、受信した第２のデータおよび第１のデータを用いて、演算用の第２のデータを生成し（例えば、図２０のステップＳ１２７）、生成した第２のデータ、受信した第１のデータ、および、予め用意された所定の係数行列を用いて行列式を作成するようにすることができる。
【００６７】
前記第２の関連情報を用いて、復元処理のための係数行列を生成する係数行列生成手段（例えば、図３６のステップＳ２２４の処理を実行する図１４の係数行列供給部２５５）をさらに備え、行列式作成手段は、受信した第１のデータおよび第２のデータ、並びに、係数行列生成手段により生成された係数行列を用いて行列式を作成するようにすることができる。
【００６８】
本発明においては、送信装置（例えば、図１の送信装置１１）が送信する送信用データ（例えば、図３の送信データ５１）のブロックデータ（例えば、図３のブロック５２）が分割されたパケットデータ（例えば、図６の元データ８１および冗長データ８２）を受信する受信装置（例えば、図１の受信装置１３）の受信方法が提供される。この受信方法は、パケットデータである第１のデータ（例えば、図１３の元データ２４１）、並びに、複数の第１のデータの排他的論理和演算結果である第２のデータ（例えば、図１３の冗長データ２４２）の両方を受信するように制御する受信制御ステップ（例えば、図１９のステップＳ９１）と、受信制御ステップの処理により制御されて受信された第１のデータに付加された、復元処理に関する第１の関連情報（例えば、図１０の元データパケット番号１３３）に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定ステップ（例えば、図１９のステップＳ９７）と、判定ステップの判定処理により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された、復元処理に関する第２の関連情報（例えば、図１０の冗長データパケット番号１４３）に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップ（例えば、図２０のステップＳ１２９）と、行列式作成ステップの処理により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元ステップ（例えば、図２０のステップＳ１３０）とを含む。
【００６９】
本発明においては、送信装置（例えば、図１の送信装置１１）が送信する送信用データ（例えば、図３の送信データ５１）のブロックデータ（例えば、図３のブロック５２）が分割されたパケットデータ（例えば、図６の元データ８１および冗長データ８２）を受信する受信処理をコンピュータに実行させる第２のプログラムが提供される。この第２のプログラムは、パケットデータである第１のデータ（例えば、図１３の元データ２４１）、並びに、複数の第１のデータの排他的論理和演算結果である第２のデータ（例えば、図１３の冗長データ２４２）の両方を受信するように制御する受信制御ステップ（例えば、図１９のステップＳ９１）と、受信制御ステップの処理により制御されて受信された第１のデータに付加された、復元処理に関する第１の関連情報（例えば、図１０の元データパケット番号１３３）に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定ステップ（例えば、図１９のステップＳ９７）と、判定ステップの判定処理により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された、復元処理に関する第２の関連情報（例えば、図１０の冗長データパケット番号１４３）に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップ（例えば、図２０のステップＳ１２９）と、行列式作成ステップの処理により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元ステップ（例えば、図２０のステップＳ１３０）とを含む。
【００７０】
本発明においては、送信用データ（例えば、図３の送信データ５１）を送受信する送受信装置（例えば、図３７の送受信装置５１１または送受信装置５１３）が提供される。この送受信装置は、送信用データの一部であるブロックデータ（例えば、図３のブロック５２）を所定のサイズに分割することにより複数の第１のデータ（例えば、図３の元データ５３）を生成する第１の生成手段（例えば、図２のブロック分割部３２）と、第１の生成手段により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータ（例えば、図３の冗長データ５４）を生成する第２の生成手段（例えば、図２の冗長データ生成部３３）と、第１のデータの復元処理に関する第１の関連情報（例えば、図１０の元データパケット番号１３３）を、第１の生成手段により生成された第１のデータに付加し、受信装置による第１のデータの復元処理に関する第２の関連情報（例えば、図１０の冗長データパケット番号１４３）を、第２の生成手段により生成された第２のデータに付加する付加手段（例えば、図２のアプリケーションデータ生成部３４）と、付加手段により第１の関連情報を付加された第１のデータ、および、付加手段により第２の関連情報を付加された第２のデータを、それぞれパケット化して他の送受信装置に送信する送信手段（例えば、図２のUDPパケット化部３５乃至イーサネット(R)処理部３９）と、他の送受信装置が送信した第１のデータおよび第２のデータの両方を受信する受信手段（例えば、図１２のイーサネット(R)処理部２２１）と、受信手段により受信された第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定手段（例えば、図１２のパケットロス判定部２２６）と、判定手段の判定により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成手段（例えば、図１４の行列式作成部２５３）と、行列式作成手段により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元手段（例えば、図１４の行列式演算部２５６）とを備える。
【００７１】
本発明においては、送信用データ（例えば、図３の送信データ５１）を送受信する送受信装置（例えば、図３７の送受信装置５１１または送受信装置５１３）の送受信方法が提供される。この送受信方法は、送信用データの一部であるブロックデータ（例えば、図３のブロック５２）を所定のサイズに分割することにより複数の第１のデータ（例えば、図３の元データ５３）を生成する第１の生成ステップ（例えば、図１５のステップＳ１およびステップＳ２）と、第１の生成ステップの処理により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータ（例えば、図３の冗長データ５４）を生成する第２の生成ステップ（例えば、図１５のステップＳ３）と、第１のデータの復元処理に関する第１の関連情報（例えば、図１０の元データパケット番号１３３）を、第１の生成ステップの処理により生成された第１のデータに付加し、受信装置による第１のデータの復元処理に関する第２の関連情報（例えば、図１０の冗長データパケット番号１４３）を、第２の生成ステップの処理により生成された第２のデータに付加する付加ステップ（例えば、図１５のステップＳ４）と、付加ステップの処理により第１の関連情報を付加された第１のデータ、および、付加ステップの処理により第２の関連情報を付加された第２のデータを、それぞれパケット化して他の送受信装置に送信する送信ステップ（例えば、図１５のステップＳ７）と、他の送受信装置が送信した第１のデータおよび第２のデータの両方を受信するように制御する受信制御ステップ（例えば、図１９のステップＳ９１）と、受信制御ステップの処理により制御されて受信された第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定ステップ（例えば、図１９のステップＳ９７）と、判定ステップの判定処理により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップ（例えば、図２０のステップＳ１２９）と、行列式作成ステップの処理により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元ステップ（例えば、図２０のステップＳ１３０）とを含む。
【００７２】
本発明においては、送信用データ（例えば、図３の送信データ５１）を送受信する送受信処理をコンピュータ（例えば、図３７の送受信装置５１１または送受信装置５１３）に実行させる第３のプログラムが提供される。この第３のプログラムは、送信用データの一部であるブロックデータ（例えば、図３のブロック５２）を所定のサイズに分割することにより複数の第１のデータ（例えば、図３の元データ５３）を生成する第１の生成ステップ（例えば、図１５のステップＳ１およびステップＳ２）と、第１の生成ステップの処理により生成された複数の第１のデータから、第１のデータを任意に、複数選択し、選択した第１のデータの排他的論理和演算結果である第２のデータ（例えば、図３の冗長データ５４）を生成する第２の生成ステップ（例えば、図１５のステップＳ３）と、第１のデータの復元処理に関する第１の関連情報（例えば、図１０の元データパケット番号１３３）を、第１の生成ステップの処理により生成された第１のデータに付加し、受信装置による第１のデータの復元処理に関する第２の関連情報（例えば、図１０の冗長データパケット番号１４３）を、第２の生成ステップの処理により生成された第２のデータに付加する付加ステップ（例えば、図１５のステップＳ４）と、付加ステップの処理により第１の関連情報を付加された第１のデータ、および、付加ステップの処理により第２の関連情報を付加された第２のデータを、それぞれパケット化して他の送受信装置に送信する送信ステップ（例えば、図１５のステップＳ７）と、他の送受信装置が送信した第１のデータおよび第２のデータの両方を受信するように制御する受信制御ステップ（例えば、図１９のステップＳ９１）と、受信制御ステップの処理により制御されて受信された第１のデータに付加された第１の関連情報に基づいて、受信できなかった第１のデータが存在するか否かを判定する判定ステップ（例えば、図１９のステップＳ９７）と、判定ステップの判定処理により、受信できなかった第１のデータが存在すると判定された場合、受信した第２のデータに付加された第２の関連情報に基づいて、復元処理のための、排他的論理和演算を用いた行列式を作成する行列式作成ステップ（例えば、図２０のステップＳ１２９）と、行列式作成ステップの処理により作成された行列式を解くことにより、復元処理を行い、第１のデータを復元する復元ステップ（例えば、図２０のステップＳ１３０）とを含む。
【００７３】
以下に、本発明の実施の形態について図面を参照して説明する。
【００７４】
図１は、本発明を適用した通信システムの構成例を表している。
【００７５】
図１の通信システム１は、データを送信する送信装置１１、LAN（Local Area Network）やインターネット等に代表されるネットワークであり、送信装置１１が接続されるネットワーク１２、および、ネットワーク１２に接続され、送信装置１１より送信されるデータを受信する受信装置１３により構成される。
【００７６】
送信装置１１は、外部より供給されたストリームデータ等の、送信用のコンテンツデータ（送信用データ）を取得すると、その送信用データを、ネットワーク１２を介して、データの送信先として設定されている受信装置１３に送信する。その際、送信装置１１は、送信用データを分割してパケット化し、UDP（User Datagram Protocol）等の所定のプロトコルを用いて各パケットを送信する。また、送信装置１１は、後述するように、送信用データからデータ復元処理用の冗長データを生成し、その冗長データもパケット化し、元のデータ（送信用データ）とともに受信装置１３に送信する。
【００７７】
受信装置１３は、送信装置１１より供給されるパケットを受信すると、受信したパケットに基づいて、元の送信用データ（コンテンツデータ）を復元し、復元したコンテンツデータを外部に供給する。その際、受信装置１３は、受信できなかった（ロスした）パケット（送信用データのパケット）を、受信した冗長データを用いて復元する。
【００７８】
以上のように、通信システム１において、送信装置１１は、送信用データの他に、その送信用データより生成した、パケットロスに対する誤り訂正用の冗長データを複数生成し、それらを送信用データとともに受信装置１３に送信する。受信装置１３は、その冗長データ（受信した冗長データ）に基づいて、受信できなかった元の送信用データの復元処理を行う。このようにすることにより、受信装置１３は、送信装置１１に再送要求を行うことなく、ロスしたデータを復元することができる。
【００７９】
図２は、送信装置１１の詳細な構成例を示すブロック図である。なお、送信装置１１により処理される送信用データの変化を、図３を用いて説明する。
【００８０】
例えば、図２において、送信装置１１のデータ分割部３１は、送信装置１１の外部より供給されたコンテンツデータ等の送信データを所定のデータサイズのブロックに分割し、それをブロック分割部３２に供給する。すなわち、データ分割部３１は、供給される送信データを内蔵するバッファ（図示せず）に蓄積していき、所定のデータサイズのデータが蓄積される度に、それをブロックとしてブロック分割部３２に供給する。
【００８１】
例えば、図３において、送信装置１１に供給される送信データ５１は、データ分割部３１により、所定のデータサイズ単位の複数のブロック５２に分割される。図３の場合、送信データ５１は３個のブロック５２に分割される。
【００８２】
ブロック分割部３２は、データ分割部３１と同様にして、データ分割部３１より供給されるブロック単位の送信データを、さらに所定のデータサイズに分割する。すなわち、ブロック分割部３２は、ブロック単位の送信データを、後段において、パケット化する際のデータサイズ（パケットサイズ）に分割し、パケット用のデータ（パケットデータ）を生成する。パケットデータを生成したブロック分割部３２は、それを、冗長データ生成部３３およびアプリケーションデータ生成部３４に供給する。
【００８３】
例えば、図３において、ブロック５２は、それぞれ、ブロック分割部３２により、パケット化する際のデータサイズのパケットデータである元データ５３に分割される。図３の場合、各ブロックはそれぞれ６個の元データ６１に分割される。もちろん、この分割数は、パケットデータのデータサイズとブロックのデータサイズによって決定されるものであり、１つのブロックをいくつのパケットデータに分割するようにしてもよい。
【００８４】
冗長データ生成部３３は、元の送信用データを分割したパケットデータ（元データ）を１ブロック分取得すると、その元データに基づいて、受信側においてロスしたパケットを復元するために用いられる冗長データを生成する。具体的には、冗長データ生成部３３は、１ブロック分の元データより、任意の元データを選択し、それらをEOR演算（Exclusive OR：排他的論理和）により合成し、冗長データとする。より具体的な生成方法については後述する。
【００８５】
なお、この復元処理用の冗長データは、EOR演算により複数の元データを合成したものであり、そのまま元データとして利用することはできないが、実質、元データの内容を含んでいることになる。従って、元データと情報が重複しているので、この復元処理用のデータのことを「冗長データ」と称する。また、この冗長データは、後述するように、元データと同じデータサイズであり、この冗長データもパケット化されて送信される。
【００８６】
すなわち、パケットデータ（パケットサイズのデータ）には、元データ（送信用データを分割して生成されたパケットデータ）と、冗長データ（元データに基づいて作成されたロスパケット復元用のパケットデータ）とがあり、以下においては、元データと冗長データを区別する必要がない場合は、パケットデータと称し、区別する必要がある場合は、それぞれを元データ、冗長データと称する。
【００８７】
冗長データ生成部３３は、生成した冗長データをアプリケーションデータ生成部３４に供給する。
【００８８】
アプリケーションデータ生成部３４は、ブロック分割部３２より供給された元データ、および、冗長データ生成部３３より供給された冗長データに、それぞれ、ヘッダを付加し、アプリケーションデータを生成する。すなわち、アプリケーションデータには、元データにヘッダが付加されたものと、冗長データにヘッダが付加されたものがある。ヘッダの内容については、後述する。
【００８９】
アプリケーションデータ生成部３４は、生成したアプリケーションデータをUDPパケット化部３５に供給する。
【００９０】
なお、ここまでの処理は、ISO（International Organization for Standardization）が制定した７階層のネットワークプロトコルの構造のモデルであるOSI階層モデル（Open Systems Interconnection layer model）における、アプリケーション層、プレゼンテーション層、およびセション層の処理である。
【００９１】
アプリケーションデータを供給されたUDPパケット化部３５は、そのアプリケーションデータをUDPプロトコルに基づいてパケット化し、その生成したUDPパケットをバッファ３６に供給する。
【００９２】
図４に示されるように、UDPパケット６１は、６４ビットのUDPヘッダ６２およびアプリケーションデータ６３によりにより構成される。UDPヘッダ６２には、送信元のポート番号、送信先のポート番号、アプリケーションデータ６３のデータ長、およびチェックサム等の情報が含まれる。アプリケーションデータのデータサイズは、任意に定められた所定の値であるが、通常１Ｋバイト程度である。
【００９３】
バッファ３６は、RAM（Random Access Memory）等の半導体メモリ等により構成され、UDPパケット化部３５より供給されるUDPパケットを蓄積し、出力制御部３７の制御に基づいて、その蓄積しているUDPパケットを出力する。
【００９４】
出力制御部３７は、バッファ３６にUDPパケットが１ブロック分蓄積されると、それらのUDPパケットを任意の（ランダムな）順番で取得し、それらをIP（Internet Protocol）処理部３８に供給する。すなわち、バッファ３６および出力制御部３７は、UDPパケット化部３５において生成されたUDPパケットの出力順を変更（シャッフル）し、元データを含むUDPパケットと、冗長データを含むUDPパケットを任意の順番で出力させる。
【００９５】
一般に、パケットの送信時にネットワーク等において、受信側が連続する複数のパケットをバースト的にロスする（受信できない）場合がある。また、後述するように、受信装置１３において、ロスした元データを復元する際の復元能力は、受信した冗長データの個数に約比例する。従って、送信装置１１が元データと冗長データをそれぞれ順番に出力した場合、そのようなバースト的パケットロスにより、パケットのロスが冗長データに集中してしまうと、復元能力が極端に低下する恐れがある。
【００９６】
そこで、送信装置１１のバッファ３６および出力制御部３７が、以上のようにUDPパケットの出力順をシャッフルして、元データと冗長データを混在させた順番で送信するようにすることにより、パケットの送信時にバースト的パケットロスが発生しても、そのロスが冗長データに集中することを抑制することができ、バースト的パケットロスに対する耐性を強くすることができる。すなわち、送信装置１１は、より正確にデータを受信装置１３に送信することができ、通信システム１は、より正確なデータの送受信を実現することができる。
【００９７】
例えば、図３において、元データ５３および冗長データ５４はUDPパケット化された後、その出力順がシャッフルされて、送信パケット５５として任意の順番で送信される。
【００９８】
なお、これらのUDPパケット化部３５乃至出力制御部３７による処理は、OSI階層モデルにおける、トランスポート層の処理である。
【００９９】
IP処理部３８は、OSI階層モデルにおける、ネットワーク層の処理を行い、IPプロトコルに基づいて、出力制御部３７より供給されるUDPパケットをそれぞれIPパケット化し、イーサネット(R)（Ethernet(R)）処理部３９に供給する。
【０１００】
イーサネット(R)処理部３９は、イーサネット(R)の規格に基づいて、データリンク層および物理層の処理を行い、IP処理部３８より供給されたIPパケットをさらにパケット化し、受信装置１３に送信するように、それを、ケーブル４０を介してネットワーク１２に出力する。
【０１０１】
イーサネット(R)処理部３９より出力されたパケットは、ネットワーク１２を介して受信装置１３に供給される。
【０１０２】
次に、図２の冗長データ生成部３３の詳細について説明する。なお、以下においては、送信装置１１は、１ブロックの送信データより、Ｎ個の元データＤ（Ｄ1乃至ＤN）を生成し、そのＮ個の元データＤよりＭ個の冗長データＳ（Ｓ1乃至ＳM）を生成する場合について説明する。図５は、冗長データ生成部３３の詳細な構成例を示すブロック図である。
【０１０３】
図５において、図２のブロック分割部３２より供給された元データは、元データ保持部７１に供給され、保持される。元データ保持部７１は、１ブロック分の元データを保持すると、その元データを行列式生成部７２に供給する。
【０１０４】
１ブロック分の元データを取得すると、行列式生成部７２は、係数行列供給部７３に対して、冗長データを生成するための行列式の生成に用いられる係数行列を要求する（図中、点線矢印）。係数行列は、全成分が「１」または「０」のＭ行Ｎ列の行列であり、EOR演算を行う元データを選択するための行列である。後述するように、全冗長データは、係数行列と、各元データを成分とする行列との積算により求められる。従って、係数行列の各行は、互いに異なる冗長データに対応し、その各行の各成分は、それぞれ互いに異なる元データと積算される。すなわち、各冗長データは、係数行列の値が「１」の成分と積算された元データのEOR演算結果となる。
【０１０５】
このような係数行列を要求された係数行列供給部７３は、その要求に対して、後述するように、線形合同法を用いた擬似乱数により予め生成された係数行列を行列式生成部７２に供給する。
【０１０６】
行列式生成部７２は、係数行列を取得すると、その係数行列と１ブロック分の元データを用いて、そのブロックに対する冗長データを生成するための行列式を生成する。具体的には、行列生成部７２は、以下の式（１）に示されるような行列式を生成する。
【０１０７】
【数１】
2005223684.tif 000003
【０１０８】
式（１）において、右辺第１項は、Ｍ行Ｎ列の係数行列であり、係数行列供給部７３より供給された係数行列である。右辺第２項は、元データＤ（Ｄ1乃至ＤN）の行列であり、左辺の行列は、この行列式により算出される冗長データＳ（Ｓ1乃至ＳM）である。なお、式（１）において、加算の代わりにビット毎のEOR演算が行われる。係数行列の各成分の値は、後述するように、ランダムに決定される。すなわち、式（１）は、各冗長データＳ1乃至ＳMが係数行列により、元データＤ1乃至ＤNの中から任意に選択された元データのEOR演算結果であることを示している。
【０１０９】
このような行列式を生成すると、行列式生成部７２は、この行列式を行列式演算部７４に供給する。なお、行列式は、所謂、連立方程式と同じものを示すものとする。以下においても同様である。
【０１１０】
行列式演算部７４は、式（１）に示されるような行列式を演算する。すなわち、行列式演算部７４は、右辺第１項の係数行列の各行において、その行の各列成分を、それらが対応する、右辺第２項における各行成分（元データＤ1乃至ＤN）とそれぞれ積算し、得られた各積算結果を用いて、互いに対応するビット毎にEOR演算を行うことにより、各行に１つのEOR演算結果を算出し、それを冗長データＳとする。
【０１１１】
ここで、通常の１０進数の場合の、２つの行列の積算における演算手順を説明すると、まず、第１項の行列の各行が第２項の行列の各列と積算される。具体的には、第１項の行列の各行と第２項の行列の各列が互いに対応する成分毎に積算される。例えば、第１項の第１行目について説明すると、その行の第ｉ列目の成分は、第２項の各列の第ｉ行目の成分と積算される。このように積算が行われると、次に、この積算毎に各成分の積算結果が全て加算される。例えば、第１項の行列がＮ列の行列であり、第２項の行列がＮ行の行列であるとすると、第１項の行列の各行と第２項の行列の各列の各積算において、それぞれ、Ｎ個の成分同士の積算結果が得られるので、それらのＮ個の積算結果が加算され、この加算結果が、第１項の行列の行と第２項の行列の列の積算結果とされる。
【０１１２】
上述した式（１）の行列式においても、基本的にはこのような演算手順と同様の演算手順により演算が行われる。しかしながら、元データＤや冗長データＳは、２進数のビット列であるので、上述した１０進数の場合の演算手順における、成分同士の積算結果の加算処理の代わりに、ビット毎のEOR演算が用いられる。
【０１１３】
演算手順の順序で説明すると、行列式演算部７４は、上述した１０進数の場合と同様に、式（１）の右辺第１項の係数行列の各行を、右辺第２項の行列（元データＤ1乃至ＤNを成分とする行列）の列と積算する。具体的には、右辺第１項の係数行列の各行の各列成分を、右辺第２項の行列の各成分（元データＤ1乃至ＤN）と、それぞれ積算する。右辺第１項の係数行列の各成分の値は「１」または「０」であるので、各成分の積算結果は、右辺第２項の各成分（元データＤ1乃至ＤN）となるか、若しくは、「０」（具体的には、元データＤと同じビット数であり、各ビットの値が「０」のビット列）となる。
【０１１４】
次に、行列式演算部７４は、これらの各成分の積算結果を、上述したように互いに対応するビット毎のEOR演算により合成する。なお、EOR演算について具体的に説明すると、値「０」と値「０」とのEOR演算結果の値は「０」であり、値「０」と値「１」とのEOR演算結果の値は「１」であり、値「１」と値「０」とのEOR演算結果の値は「１」であり、値「１」と値「１」とのEOR演算結果の値は「０」である。従って、例えば、「１１１１００００」のビット列と、「１０１０１０１０」のビット列とのEOR演算結果は、「０１０１１０１０」となる。行列式演算部７４は、このようなEOR演算を繰り返し、各成分の積算結果を全て合成する。そして、このEOR演算結果が、１つの冗長データＳとされる。
【０１１５】
以上のような演算を、式（１）の右辺第１項の係数行列の各行に対して繰り返し、全ての左辺第１項の行列の成分として示される冗長データＳ1乃至ＳMが求められる。
【０１１６】
なお、上述したように、係数行列の各成分の値は、「０」または「１」であるので、その各成分と元データＤ1乃至ＤNとの積算結果は、右辺第２項の各成分（元データＤ1乃至ＤN）となるか、若しくは、「０」となる。従って、この積算について換言すると、行列式演算部６２は、その各成分と元データＤ1乃至ＤNとの積算により、冗長データＳを生成するために用いる元データＤを選択（抽出）している。
【０１１７】
また、上述したように、各成分の積算結果が互いに対応するビット毎のEOR演算により合成されるので、合成結果（EOR演算結果）の各ビットの値は、そのビットが対応する、EOR演算される各積算結果のビットにおいて、値が「１」である積算結果の数が奇数である場合、「１」になり、値が「１」である積算結果の数が偶数である場合、「０」になる。従って、このEOR演算について換言すると、行列式演算部６２は、上述した成分毎の積算結果の各ビットの値を、互いに対応するビット毎に集計し、値が「１」である積算結果の数が奇数である場合、そのビットに対応する冗長データＳのビットの値を「１」とし、値が「１」である積算結果の数が偶数である場合、そのビットに対応する冗長データＳのビットの値を「０」とする。
【０１１８】
すなわち、行列式演算部６２は、元データＤ1乃至ＤNの中から、所定の方法により元データＤを選択し、その選択した各元データＤの、互いに対応するビットについて、値が「１」の数が奇数である場合、そのビットに対応する冗長データＳのビットの値を「１」とし、値が「１」の数が偶数である場合、そのビットに対応する冗長データＳのビットの値を「０」として、各冗長データＳを求める。
【０１１９】
行列式演算部６２は、以上のように演算を行い、冗長データＳ（Ｓ1乃至ＳM）を求め、その解を解出力部７５に供給する。すなわち、送信装置１１においては、送信データより、図６に示されるようなパケットデータが生成されて送信される。
【０１２０】
図６において、元データ８１は、パケットデータ８１−１乃至８１−Ｎにより構成され、冗長データ８２は、パケットデータ８２−１乃至８２−Ｍにより構成される。元データ８１であるパケットデータ８１−１乃至８１−Ｎは、それぞれ、元データＤ1乃至ＤNに対応しており、冗長データ８２であるパケットデータ８２−１乃至８２−Ｍは、元データＤ1乃至ＤNの中から任意に選択された元データのＥＯＲ演算結果（排他的論理和）である。
【０１２１】
解出力部７５は、それを、冗長データＳとして、所定のタイミングで図２のアプリケーションデータ生成部３４に供給する。
【０１２２】
次に、以上のようなEOR演算に用いられる係数行列について説明する。
【０１２３】
図７は、図５の係数行列供給部７３の詳細な構成例を示すブロック図である。
【０１２４】
図７において、種データ保持部９１は、RAM等の記憶素子により構成され、後述する擬似乱数の生成に用いられる種データを保持する。なお、種データとしてはどのような値であってもよいが、以下においては、予め定められた任意の定数を種データとする場合について説明する。
【０１２５】
擬似乱数生成部９２は、例えば、電源投入時等の所定のタイミングになると、種データ保持部９１に種データを要求する（図中点線矢印）。種データ保持部９１は、その要求に基づいて、種データを擬似乱数生成部９２に供給する。擬似乱数生成部９２は、種データを取得すると、その種データに基づいて、以下の式（２）に示されるような線形合同法のモジュロ演算を行い、擬似乱数を生成する。
【０１２６】
【数２】
2005223684.tif 000004
【０１２７】
式（２）において、変数Ｌは、種データである。また、右辺の変数randは、１回前の演算により算出された擬似変数（すなわち、１回前の演算における左辺のrand）である。変数randの初期値は「０」である。擬似乱数生成部９２は、式（２）のモジュロ演算を例えば３２ビット処理で行う。
【０１２８】
擬似乱数生成部９２は、式（２）を演算し、変数rand（擬似乱数）を算出すると、その値を擬似乱数バッファ９３に供給して保持させるとともに、係数判定部９４に供給する。擬似乱数バッファ９３に保持されている変数randは、擬似乱数生成部９２に再度読み出され、次回の擬似乱数演算において、式（２）の右辺の変数randに代入され、利用される。
【０１２９】
以上の処理を繰り返し、擬似乱数生成部９２は、擬似乱数をＭ×Ｎ個生成し、それらを順次、係数判定部９４に供給する。
【０１３０】
係数判定部９４は、取得した擬似乱数の値に基づいて、係数行列の各成分の値を１つずつ判定する。このとき、係数判定部９４は、取得した擬似乱数の値に対して、例えば、閾値を設け、取得した擬似乱数の値が、その閾値以上である場合は、係数行列の成分の値を「１」と判定し、閾値より小さい場合は、係数行列の成分の値を「０」と判定し、その判定結果を係数行列保持部９５に供給し、保持させる。
【０１３１】
その際、係数判定部９４は、係数生成確率保持部９５に保持されている係数生成確率ｐを取得し、この係数生成確率ｐの値に基づいて、閾値の値を決定する。すなわち、係数判定部９４は、値が「０」と「１」で構成される係数行列の全成分の内、値が「１」の成分の割合が係数生成確率ｐの値になるように（近づくように）、閾値の値を設定する。
【０１３２】
係数生成確率ｐは、予め定められた、「０」より大きく、かつ、「１」より小さい値の定数であり、係数行列の全成分の内、値が「１」の成分の割合がどの程度になるかを確率的に指定する値である。すなわち、例えば、係数生成確率ｐの値が「０．５」であった場合、係数判定部９４は、生成された係数行列において、値が「０」の成分の数と、値が「１」の成分の数とがほぼ１対１となるように（近似するように）閾値を設定する。例えば、擬似乱数の値が、均一の確率で３２ビット全体に分布すると仮定した場合、係数判定部９４は、閾値の値を「2147483648」に設定する。
【０１３３】
以上のようにして、係数行列保持部９６には、係数判定部９４より１つずつ判定結果（「０」または「１」）が供給され、係数行列保持部９６は、それらの判定結果を成分とするＭ行×Ｎ行の係数行列を生成し保持する。
【０１３４】
そして、係数行列出力部９７は、図５の行列式生成部７２より係数行列を要求されると、係数行列保持部９６に、保持している係数行列を要求して取得し、その係数行列を行列式生成部７２に供給する。
【０１３５】
以上のようにして、係数行列供給部７３は、係数行列を作成し、要求に基づいて、その係数行列を供給する。
【０１３６】
なお、係数行列を算出するタイミングは、係数行列を要求される以前であれば、どのタイミングであってももちろんよい。また、係数行列は、全ブロック間で共通であってもよいし、ブロック毎に新たに生成し、互いに独立した行列としてもよい。ただし、図８のように、曲線１０１で示される、ブロック間で係数行列を共通にした場合の方が、曲線１０２で示される、ブロック毎に新たに係数行列を生成した場合よりも、受信側における復元能力が高い。図８は、復元能力の関係を示すグラフであり、横軸はパケットロス数を示し、縦軸は、復元能力（復元不能頻度の逆数）を示す。
【０１３７】
次に、アプリケーションデータについて説明する。
【０１３８】
図９は、図２のアプリケーションデータ生成部３４の詳細な構成例を示すブロック図である。
【０１３９】
最初に、パケットデータが供給される前に、元データカウンタ１１２、ブロックカウンタ１１３、および、冗長データカウンタ１２３は、初期化される。すなわち、元データカウンタ１１２およびブロックカウンタ１１３のカウント値は、値「０」に設定され、冗長データカウンタ１２３のカウント値は、オフセット値供給部１２２より供給されるオフセット値に設定される。オフセット値供給部１２２は、例えば、１ブロックにおける元データのデータ数等のような所定の値をオフセット値として保持しており、その値を冗長データカウンタに供給し、後述するように、冗長データのパケット番号が、元データのパケット番号と重複しないように設定する。
【０１４０】
元データ受付部１１１は、ブロック分割部３２より元データが供給されると、その元データがブロックの最初のパケットデータである場合、元データカウンタ１１２とブロックカウンタ１１３をカウントアップさせる。また、ブロック分割部３２より供給された元データがブロックの最初のパケットデータでない場合、元データ受付部１１１は、元データカウンタ１１２のみをカウントアップさせる。元データカウンタ１１２およびブロックカウンタ１１３は、所定のタイミングで、そのカウント値をヘッダ付加部１１４に供給する。
【０１４１】
また、元データ受付部１１１は、ブロックの最後のパケットデータを処理した後に、元データカウンタ１１２のカウント値を初期化する。
【０１４２】
さらに、元データ受付部１１１は、各カウンタを調整すると、元データをヘッダ付加部１１４に供給する。ヘッダ付加部１１４は、元データ受付部１１１より供給された元データに対して、元データカウンタ１１２およびブロックカウンタ１１３より供給されたカウント値を、図１０Ａに示されるように、ヘッダとして元データに付加し、アプリケーションデータを生成する。
【０１４３】
図１０Ａにおいて、アプリケーションデータ１３１は、ヘッダとして付加されたブロック番号１３２および元データパケット番号１３３、並びに、元データ１３４により構成される。ブロック番号１３２は、各ブロックを識別するための番号であり、各ブロックに対して互いに異なる値が割り当てられる。その値は、ブロックカウンタ１１３より供給されるカウント値である。元データパケット番号１３３は、各元データを識別するための番号であり、各元データに対して互いに異なる値が割り当てられる。その値は、元データカウンタ１１２より供給されるカウント値である。すなわち、図１１の表１５１に示されるように、ブロック内において、ブロック番号１３２の値（図１１の場合「０」）は、各アプリケーションデータにおいて共通であり、元データパケット番号１３３の値は、1つずつ増加している（図１１の場合「０」乃至「９９９」）。
【０１４４】
このようなヘッダが元データ１３４に付加されて、アプリケーションデータ１３１が生成される。なお、ブロック番号１３２は、受信装置１３が取得したパケットデータがどのブロックに属するデータであるか（どのブロックデータに対応するか）を特定するための情報であり、元データパケット番号１３３は、受信装置１３がロスしたパケットを特定するための情報である。これらの情報をパケットデータに付加しアプリケーションデータとすることにより、受信装置１３は、アプリケーション層の処理において、これらの情報を参照することができる。すなわち、例えば、IPパケット等にもパケット番号が付加されるが、これは再送制御等に用いられる情報であり、データの復元処理等に利用することはできず、上述した情報とは用途や性質が異なる情報である。
【０１４５】
図９に戻り、冗長データ受付部１２１は、冗長データ生成部３３より冗長データが供給されると、冗長データカウンタ１２３をカウントアップさせる。冗長データカウンタ１２３およびブロックカウンタ１１３は、所定のタイミングで、そのカウント値をヘッダ付加部１１４に供給する。
【０１４６】
また、冗長データ受付部１２１は、ブロックの最後のパケットデータを処理した後に、冗長データカウンタ１２３のカウント値を初期化し、オフセット値供給部１２２よりオフセット値を冗長データカウンタ１２３に供給させる。
【０１４７】
さらに、冗長データ受付部１２１は、冗長データカウンタ１２３を調整すると、冗長データをヘッダ付加部１１４に供給する。ヘッダ付加部１１４は、冗長データ受付部１２１より供給された冗長データに対して、冗長データカウンタ１２３およびブロックカウンタ１１３より供給されたカウント値を、図１０Ｂに示されるように、ヘッダとして冗長データに付加し、アプリケーションデータを生成する。
【０１４８】
図１０Ｂにおいて、アプリケーションデータ１４１は、ヘッダとして付加されたブロック番号１４２および冗長データパケット番号１４３、並びに、冗長データ１４４により構成される。ブロック番号１４２の値は、ブロックカウンタ１１３より供給されるカウント値である。冗長データパケット番号１４３は、各冗長データを識別するための番号であり、各冗長データに対して異なる値が割り当てられる。その値は、冗長データカウンタ１２３より供給されるカウント値である。すなわち、図１１の表１５１に示されるように、ブロック内において、ブロック番号１４２の値（図１１の場合「０」）は、各アプリケーションデータにおいて共通であり、冗長データパケット番号１４３の値は、1つずつ増加している（図１１の場合「１０００」乃至「１０９９」）。図１１の場合、元データの１ブロック辺りの数が１０００個に設定されているので、オフセット値が「１０００」に設定されている。
【０１４９】
このようなヘッダが冗長データ１４４に付加されて、アプリケーションデータ１４１が生成される。なお、ブロック番号１４２は、受信装置１３が取得したパケットデータがどのブロックに属するデータであるかを特定するための情報であり、冗長データパケット番号１４３は、受信装置１３が取得したパケットを整列させるための情報である。これらの情報をパケットデータに付加しアプリケーションデータとすることにより、受信装置１３は、アプリケーション層の処理において、これらの情報を参照することができる。すなわち、例えば、IPパケット等にもパケット番号が付加されるが、これは再送制御等に用いられる情報であり、データの復元処理等に利用することはできず、上述した情報とは用途や性質が異なる情報である。
【０１５０】
以上のように、アプリケーションデータには、元データを含むものと、冗長データを含むものが存在する。これらのアプリケーションデータは、上述したようにUDPやIP等に基づいてパケット化され、ネットワークを介して受信装置１３に供給される。
【０１５１】
このように、アプリケーションデータ生成部３４がブロック番号を元データや冗長データに付加することにより、受信装置１３は、後述するように、受信したデータのブロックを識別することができ、ブロック単位で処理することができる。
【０１５２】
また、アプリケーションデータ生成部３４が元データパケット番号を元データに付加することにより、受信装置１３は、後述するように、そのパケット番号に基づいて、ロスした（受信できなかった）元データを特定することができる。
【０１５３】
さらに、アプリケーションデータ生成部３４が冗長データパケット番号を冗長データに付加することにより、受信装置１３は、後述するように、元データを復元する際に、冗長データを整列させることができるので、元データを復元するための行列式を容易かつ正確に生成することができる。
【０１５４】
さらに、アプリケーションデータ生成部３４が元データパケット番号を元データに付加し、冗長データパケット番号を冗長データに付加することにより、受信装置１３は、後述するように、元データを復元する際に、予め用意されたＭ行Ｎ列の係数行列より必要な部分を容易かつ正確に切り出すことができるので、元データを復元するための行列式を容易かつ正確に生成することができる。
【０１５５】
次に、データの受信側について説明する。
【０１５６】
図１２は、図１の受信装置１３の詳細な構成例を示すブロック図である。
【０１５７】
ネットワーク１２を介して受信装置１３に送信されたパケットは、ケーブル２１０を介してイーサネット(R)（Ethernet(R)）処理部２２１に供給される。イーサネット(R)処理部２２１は、イーサネット(R)の規格に基づいて、データリンク層および物理層の処理を行い、供給されたパケットからIPパケットを抽出し、IP処理部２２２に供給する。
【０１５８】
IP処理部２２２は、IPプロトコルに基づいて、ネットワーク層の処理を行い、供給されたIPパケットよりUDPパケットを抽出し、アプリケーションデータ抽出部２２３に供給する。アプリケーションデータ抽出部２２３は、UDPプロトコルに基づいてトランスポート層の処理を行い、UDPパケットより、アプリケーションデータを抽出し、それをバッファ２２４に供給する。
【０１５９】
バッファ２２４は、アプリケーションデータを保持し、アプリケーションデータに付加されたブロック番号に基づいて、アプリケーションデータをブロック単位で管理し、所定のタイミングでそれらをブロック毎にデータ分離部２２５に供給する。
【０１６０】
データ分離部２２５は、供給されたアプリケーションデータに付加されたパケット番号に基づいて、アプリケーションデータが元データを含むか、または冗長データを含むかで分類し、元データを含むアプリケーションデータをパケットロス判定部２２６に供給するとともに、冗長データを含むアプリケーションデータをロスパケット復元部２２８に供給する。
【０１６１】
送信装置１１より送信されたパケットは、受信装置１３に向けて送信されるが、様々な原因により、受信装置１３に受信されない場合がある。従って、図１３に示されるように、受信装置１３が、１つのブロックを構成するパケットの一部をロスすることもある。図１３においては、送信装置１１より供給される元データ２４１の３つのパケットデータ２４１Ａ乃至２４１Ｃと、冗長データ２４２の１つのパケットデータ２４２Ａをロスしている。このような場合、受信装置１３は、元データＤ1乃至Ｄ3が不足しており、受信できた元データ２４１だけでは、ブロックデータを復元することができない。そこで、受信装置１３は、このような場合には、受信できた冗長データ１４２を用いて、ロスしたパケットデータ２４１Ａ乃至２４１Ｃを復元する。
【０１６２】
パケットロス判定部２２６は、供給された元データのパケット番号に基づいて、パケットをロスしたか否かを判定する。ロスしたと判定した場合、パケットロス判定部２２６は、元データを含むアプリケーションデータをブロックデータ復元部２２７に供給するとともに、その判定結果と、元データを含むアプリケーションデータをロスパケット復元部２２８に供給する。パケットをロスしていない場合、パケットロス判定部２２６は、元データを含むアプリケーションデータをブロックデータ復元部２２７に供給する。
【０１６３】
ブロックデータ復元部２２７は、パケットロス判定部２２６より供給されたアプリケーションデータの元データを合成し、ブロックデータを復元する。また、受信装置１３がパケットをロスし、元データが不足している場合は、ロスパケット復元部２２８において復元された元データを利用する。ブロックデータを復元したブロックデータ復元部２２７は、それをブロック合成部２２９に供給する。
【０１６４】
ロスパケット復元部２２８は、パケットロス判定部２２６より供給された、元データを含むアプリケーションデータと、データ分離部２２５より供給された、冗長データを含むアプリケーションデータを用いて、EOR演算を行い、行列式を解くことにより、ロスした元データを復元し、それをブロックデータ復元部２２７に供給する。
【０１６５】
ブロック合成部２２９は、ブロックデータ復元部２２７より供給されるブロックデータを一時的に保持し、出力するタイミングを調整することにより、ブロック同士を合成し、１つの連続する受信データ（すなわち、送信装置１１における送信データ）として、受信装置１３の外部に出力する。
【０１６６】
なお、上述したバッファ２２４以降のモジュールが実行する処理は、OSI階層モデルにおける、アプリケーション層、プレゼンテーション層、およびセション層の処理である。
【０１６７】
このようにデータを受信し、ロスした元データをEOR演算により復元することにより、受信装置１３は、高速であり、かつ、復元性能の高い復元処理を、製造コストを増大せずに実現し、より容易に、より正確にデータを受信することができる。
【０１６８】
次に、ロスパケットの復元について説明する。なお、以下においては、送信装置１１より送信されたＮ個の元データおよびＭ個の冗長データＳの内、Ｋ個の元データとＬ個の冗長データをロスする場合について説明する。
【０１６９】
図１４は、ロスパケット復元部２２８の詳細な構成例を示すブロック図である。
【０１７０】
図１４において、図１２のパケットロス判定部２２６より供給される判定結果、および元データのアプリケーションデータは、判定結果取得部２５１に供給される。判定結果取得部は、それらの情報を取得すると、元データのアプリケーションデータを元データ保持部２５２に供給するとともに、判定結果に基づいて、行列式作成部２５３に行列式作成の指示を供給する。
【０１７１】
また、図１２のデータ分離部２２５より供給される冗長データのアプリケーションデータは、冗長データ保持部２５４に供給され、一時的に保持される。
【０１７２】
判定結果取得部２５１より行列式の作成を指示された行列式作成部２５３は、元データ保持部２５２に元データを要求して取得し、冗長データ保持部２５４に冗長データを要求して取得し、さらに、係数行列供給部２５５に係数行列を要求して取得する。なお、係数行列供給部２５５は、図７の係数行列供給部７３と基本的に同様の構成であり、同様に動作するので、その詳細な説明を省略する。
【０１７３】
行列式作成部２５３は、以上のように各情報を取得すると、ロスした元データを演算する行列式に必要な演算用の冗長データＱを算出するための行列式を生成する。ロスした元データは、後述するように、受信した元データと冗長データを用いて求めるが、受信した冗長データには、受信した元データの情報も含まれている場合があるため、第１段階として、まず、受信した元データの情報を受信した冗長データに代入し、ロスした元データのEOR演算結果のみで構成される演算用冗長データＱを生成する。行列式作成部２５３は、演算用冗長データＱを生成するために、式（３）を作成する。
【０１７４】
【数３】
2005223684.tif 000005
【０１７５】
なお、式（３）において、加算はEOR演算を示す。式（３）の左辺の行列の各成分Ｑ1乃至ＱM-Lは、それぞれ、右辺第３項の行列の各成分である、受信した冗長データＪ1乃至ＪM-Lに対応する演算用冗長データである。式（３）の右辺第２項の行列の各成分Ｒ1乃至ＲN-Kは受信した元データを示す。右辺第１項の係数行列は、予め係数行列供給部２５５において生成されたＭ行Ｎ列の係数行列より切り出されたＭ−Ｌ行Ｎ−Ｋ列の係数行列である。
【０１７６】
行列式作成部２５３は、受信した冗長データＪ1乃至ＪM-Lを冗長データパケット番号に基づいて整列し、受信した元データＲ1乃至ＲN-Kを元データパケット番号に基づいて整列し、さらに、係数行列供給部２５５が保持しているＭ行Ｎ列の係数行列より、受信した元データＲ1乃至ＲN-Kおよび受信した冗長データＪ1乃至ＪM-Lに対応する部分の成分を切り出して、式（３）を作成する。
【０１７７】
式（３）に示されるように、演算用冗長データＱ1乃至ＱM-Lは、それぞれ、受信した冗長データＪ1乃至ＪM-Lから、受信した元データＲ1乃至ＲN-KのEOR演算結果を除去したものである。なお、各冗長データは元データのEOR演算結果であるので、式（３）において、受信した冗長データＪは、再度、受信した元データＲをEOR演算することにより、冗長データＪに含まれる受信した元データの情報を除去することができる。
【０１７８】
すなわち、以上のようにして求められた演算用冗長データＱ1乃至ＱM-Lは、ロスした元データＰ1乃至ＰKのEOR演算結果となる。
【０１７９】
行列式作成部２５３は、以上のような行列式を作成すると、それを行列式演算部２５６に供給する。行列式演算部２５６は、この行列式を演算し、演算用冗長データＱを算出し、それを行列式作成部２５３に戻す。行列式作成部２５３は、演算用冗長データＱを取得すると、今度は、それを用いて元データを復元するための行列式を作成する。行列式作成部２５３は、受信した冗長データのパケット番号と、ロスした元データのパケット番号に基づいて、係数行列供給部２５５に保持されているＭ行Ｎ列の係数行列より、それらのパケット番号に対応する部分（Ｍ−Ｌ行Ｋ列）を切り出し、式（４）に示されるような行列式を生成する。
【０１８０】
【数４】
2005223684.tif 000006
【０１８１】
式（４）において、左辺第１項は、切り出した係数行列であり、左辺第２項の行列の各成分は、ロスした元データＰ1乃至ＰKであり、右辺の行列の各成分は、演算用冗長データＱ1乃至ＱM-Lである。
【０１８２】
なお、演算用冗長データＱ1乃至ＱM-Lの数を示す（Ｍ−Ｌ）の値は、ロスした元データの数を示すＫの値より大きい必要がある。すなわち、式（４）において係数行列は、列数よりも行数の方が多い必要がある。換言すると、受信装置１３は、すべての、ロスした元データを復元するためには、少なくとも、そのロスした元データの数よりも多く、冗長データを受信する必要がある。
【０１８３】
行列式作成部２５３は、式（４）に示されるような行列式を生成すると、それを行列式演算部２５６に供給する。行列式演算部２５６は、この行列式を取得すると、例えば、ガウスの消去法を用いて、ロスした元データＰ1乃至ＰKの解を求める。求解方法の例については後述するが、ロスした元データを算出することができるものであれば、どのようなものであってもよい。
【０１８４】
ロスした元データＰ1乃至ＰKの解を求めると、行列式演算部２５６は、その解を解出力部２５７に供給する。解出力部２５７は、その解よりロスした元データのアプリケーションデータを復元し、それを図１２のブロックデータ復元部２２７に供給する。
【０１８５】
以上のように受信処理を行うことにより、受信装置１３は、送信装置１１に再送要求をすることなしに、ロスした元データを復元することができる。また、この復元処理のための冗長データをEOR演算により生成するため、演算の付加が軽減し、容易に冗長データを生成したり、冗長データを用いて復元処理を行ったりすることができる。従って、高速であり、かつ、復元性能の高い復元処理を、送信装置１１および受信装置１３の製造コストを増大せずに実現し、より容易に、より正確な通信を行うことができる
【０１８６】
次に、送信装置１１における、上述した各部の処理の流れについて説明する。
【０１８７】
外部からの送信データの供給が開始されると、送信装置１１は、データ送信処理を開始する。図２の送信装置１１によるデータ送信処理を図１５のフローチャートを参照して説明する。
【０１８８】
最初に、送信データが外部より供給されると、送信装置１１のデータ分割部３１は、ステップＳ１において、送信データをブロックに分割し、分割したブロックデータをブロック分割部３２に供給する。ブロック分割部３２は、ステップＳ２において、供給されたブロックデータをさらにパケットデータに分割し、それを元データとして、冗長データ生成部３３およびアプリケーションデータ生成部３４に供給する。なお、以下の処理は、ブロック単位で行われる。
【０１８９】
パケットデータを供給された冗長データ生成部３３は、ステップＳ３において、冗長データ生成処理を実行して、EOR演算による冗長データを生成し、それをアプリケーションデータ生成部３４に供給する。冗長データ生成処理の詳細については、図１６のフローチャートを参照して説明する。
【０１９０】
元データおよび冗長データを供給されたアプリケーションデータ生成部３４は、ステップＳ４において、アプリケーションデータ生成処理を実行し、アプリケーションデータを生成し、生成したアプリケーションデータをUDPパケット化部３５に供給する。なお、アプリケーションデータ生成処理の詳細については、図１８のフローチャートを参照して後述する。
【０１９１】
アプリケーションデータを供給されたUDPパケット化部３５は、ステップＳ５において、アプリケーションデータをUDPパケット化し、それをバッファ３６に供給する。バッファ３６は、供給されたUDPパケットを一時保持し、出力制御部３７がステップＳ６において、そのバッファ３６に保持されているUDPパケットを任意の順序で取り出すことで、UDPパケットの送信順を変更する。出力制御部３７は、取り出したUDPパケットをIP処理部３８に供給する。ステップＳ７において、IP処理部３８は、供給されたUDPパケットをIPパケット化してイーサネット(R)処理部３９に供給し、イーサネット(R)処理部３９は、供給されたIPパケットをさらにパケット化するなどして、出力制御部３７が変更した順番で、そのパケット（それぞれUDPパケットを含む）を、ケーブル４０を介してネットワーク１２（受信装置１３）に送信する。
【０１９２】
そして、ブロック分割部３２は、ステップＳ８において、外部より送信装置１１に供給された送信データを構成する全ブロックに対して処理が終了したか否かを判定し、終了していないと判定した場合は、ステップＳ２に処理を戻し、それ以降の処理を繰り返す。また、全ブロックに対して送信処理が終了していないと判定した場合、ブロック分割部３２は、ステップＳ２に処理を戻し、次のブロックに対してそれ以降の処理を繰り返す。
【０１９３】
以上のようにしてデータ送信処理が実行される。これにより、送信装置１１は、ガロア体の演算など、負荷の大きい処理を行わずに、高速に冗長データを生成することができ、データを容易かつ正確に送信することができる。また、送信装置１１は、パケットデータの送信順をシャッフルし、パケット番号と独立した順序で送信するので、バースト的パケットロスへの耐性も上げることができる。さらに、このように送信装置１１が送信処理を行うことにより、送信装置１１が送信したパケットを受信する受信装置１３は、高速であり、かつ、復元性能の高い復元処理を、製造コストを増大せずに実現することができる。すなわち、通信システム１は、より容易に、より正確な通信を行うことができる。
【０１９４】
次に、図１６のフローチャートを参照して、図１５のステップＳ３において実行される冗長データ生成処理について説明する。
【０１９５】
ブロック分割部３２より元データを供給された冗長データ生成部３３の元データ保持部７１は、ステップＳ２１において、供給された元データを一時的に保持していき、１ブロック分保持する。
【０１９６】
元データ保持部７１が１ブロック分の元データを保持すると、行列式生成部７２は、ステップＳ２３において、係数行列供給部７３に対して係数行列を要求する。係数行列供給部７３は、その要求に基づいて、予め用意した係数行列を行列式生成部７２に供給する。係数行列の準備処理については、図１７のフローチャートを参照して後述する。
【０１９７】
係数行列を取得した行列式生成部７２は、ステップＳ２３において、元データ保持部７１に保持されている１ブロック分の元データを取得して、式（１）のような、任意の元データのEOR演算により冗長データを生成するための行列式を生成する。行列式を生成した行列式生成部７２は、それを行列式演算部７４に供給する。
【０１９８】
行列式を供給された行列式演算部７４は、ステップＳ２４において、EOR演算を行い、その行列式を演算して、その解を解出力部７５に供給する。
【０１９９】
解出力部７５は、ステップＳ２５において、供給された解を、ロスパケット復元処理用の冗長データとして、アプリケーションデータ生成部３４に出力し、処理を図１５のステップＳ４に戻してそれ以降の処理を実行させる。
【０２００】
以上のように、元データを用いてEOR演算を行い、冗長データを生成するので、冗長データ生成部３３は、容易、かつ、高速に冗長データを生成することができる。これにより送信装置１１は、ガロア体の演算など、負荷の大きい処理を行わずに、高速に冗長データを生成することができ、データを容易かつ正確に送信することができる。また、このように送信装置１１が送信処理を行うことにより、送信装置１１が送信したパケットを受信する受信装置１３は、高速であり、かつ、復元性能の高い復元処理を、製造コストを増大せずに実現することができる。すなわち、通信システム１は、より容易に、より正確な通信を行うことができる。
【０２０１】
次に、図１７のフローチャートを参照して、図７の係数行列供給部７３により実行される係数行列準備処理について説明する。係数行列供給部７３は、例えば、送信装置１１の電源投入時等に、この係数行列準備処理を実行する。
【０２０２】
係数行列準備処理を開始した係数行列供給部７３の係数判定部９４は、最初に、ステップＳ４１において、係数生成確率保持部９５より係数生成確率ｐを取得し、その係数生成確率ｐに基づいて、係数の値を決定する閾値を設定する。
【０２０３】
次に、擬似乱数生成部９２は、ステップＳ４２において、種データ保持部９１に保持されている種データを取得し、さらに、擬似乱数バッファ９３に保持されている前回の演算結果である擬似乱数を取得し、ステップＳ４３において、取得した種データに基づいて、上述した式（２）のような線形合同法により擬似乱数を生成する。擬似乱数を生成した擬似乱数生成部９２は、生成した擬似乱数を擬似乱数バッファ９２に供給して保持させるとともに、生成した擬似乱数を係数判定部９４にも供給する。
【０２０４】
係数判定部９４は、ステップＳ４４において、供給された擬似乱数の値が、ステップＳ４１において設定した閾値以上であるか否かを判定し、閾値以上であると判定した場合、ステップＳ４５に処理を進め、今回出力する係数行列の成分の値を「１」に設定し、その成分を係数行列保持部９６に出力し、ステップＳ４７に処理を進める。逆に、ステップＳ４４において、供給された擬似乱数の値が、閾値より小さいと判定した場合、係数判定部９４は、ステップＳ４６に処理を進め、今回出力する係数行列の成分の値を「０」に設定し、その成分を係数行列保持部９６に出力し、ステップＳ４７に処理を進める。
【０２０５】
係数行列の成分を供給された係数行列保持部９６は、ステップＳ４７において、その係数行列の成分を保持する。そして、係数行列保持部９６は、ステップＳ４８において、保持した成分により、係数行列が完成したか否かを判定し、完成していないと判定した場合、ステップＳ４２に処理を戻し、それ以降の処理を各部に実行させ、次の成分を供給させる。
【０２０６】
ステップＳ４８において、すべての成分が供給され、係数行列が完成したと判定した場合、係数行列保持部９６は、係数行列準備処理を終了する。
【０２０７】
以上のように生成され、係数行列保持部９６に保持されている係数行列は、行列式生成部７２により要求された係数行列出力部９７により、要求され、出力される。
【０２０８】
以上のように、擬似乱数を用いて係数行列の成分の値を決定することにより、冗長データ生成部３３は、１ブロック分の元データからランダムに選択した元データを用いて、冗長データを生成することができ、冗長データの生成に用いられる元データの分布の偏りを抑制することができる。従って、受信装置１３の復元処理において、元データ復元の可能性がロスした冗長データの内容に依存するのを抑制することができる。また、以上のように処理することにより、係数判定部９４は、係数生成確率ｐによって冗長データに含まれる元データの数を確率的に制御することができる。
【０２０９】
次に、図１５のステップＳ４において実行されるアプリケーションデータ生成処理の詳細を図１８のフローチャートを参照して説明する。
【０２１０】
例えば、電源投入時等、パケットデータが供給される前に、ステップＳ６１において、アプリケーションデータ生成部３４の元データ受付部１１１は、元データカウンタ１１２およびブロックカウンタ１１３のカウント値をそれぞれ初期化し、例えば値「０」に設定する。また、アプリケーションデータ生成部３４の冗長データ受付部１２１も、冗長データカウンタ１２３のカウント値を初期化し、オフセット供給部１２２より供給されるオフセット値に設定する。
【０２１１】
ステップＳ６２において、元データ受付部１１１は、元データを受け付けたか否かを判定し、ブロック分割部３２より供給された元データを受け付けたと判定した場合、ステップＳ６３に処理を進め、受け付けた元データがブロック内の最初のパケットデータであるか否かを判定する。ブロック内の最初のパケットデータであると判定した場合、元データ受付部１１１は、ステップＳ６４に処理を進め、ブロックカウンタ１１３をカウントアップさせてカウント値を「１」増加させ、処理をステップＳ６５に進める。なお、ステップＳ６３において、既に、そのブロックの元データを受け付けており、受け付けた元データがブロック内の最初のパケットデータでないと判定した場合、元データ受付部１１１は、ステップＳ６４の処理を省略し、ステップＳ６５に処理を進める。
【０２１２】
ステップＳ６５において、元データ受付部１１１は、元データカウンタ１１２をカウントアップさせてカウント値を「１」増加させるとともに、受け付けた元データをヘッダ付加部１１４に供給する。元データを供給されたヘッダ付加部１１４は、ステップＳ６６において、元データカウンタ１１２およびブロックカウンタ１１３よりそれぞれカウント値を取得し、元データにブロックカウンタ１１３のカウント値をブロック番号として、元データカウンタ１１２のカウント値を元データパケット番号として、それぞれ付加し、ステップＳ６７において、カウント値を付加した元データをアプリケーションデータとしてUDPパケット化部３５に供給する。
【０２１３】
ステップＳ６７の処理を終了したヘッダ付加部１１４は、ステップＳ６８に処理を進める。また、ステップＳ６２において、元データを受け付けていないと判定した場合、元データ受付部１１１は、ステップＳ６３乃至ステップＳ６７の処理を省略し、ステップＳ６８に処理を進める。
【０２１４】
ステップＳ６８において、冗長データ受付部１２１は、冗長データを受け付けたか否かを判定し、冗長データ生成部３３より供給された冗長データを受け付けたと判定した場合、ステップＳ６９に処理を進め、冗長データカウンタ１２３をカウントアップさせてカウント値を「１」増加させるとともに、受け付けた冗長データをヘッダ付加部１１４に供給する。冗長データを供給されたヘッダ付加部１１４は、ステップＳ７０において、ブロックカウンタ１１３および冗長データカウンタ１２３よりそれぞれカウント値を取得し、冗長データにブロックカウンタのカウント値をブロック番号として、冗長データカウンタのカウント値を冗長データパケット番号として、それぞれ付加し、ステップＳ７１において、カウント値を付加した冗長データをアプリケーションデータとしてUDPパケット化部３５に供給する。
【０２１５】
ステップＳ７１の処理を終了したヘッダ付加部１１４は、ステップＳ７２に処理を進める。また、ステップＳ６８において、冗長データを受け付けていないと判定した場合、冗長データ受付部１２１は、ステップＳ６９乃至ステップＳ７１の処理を省略し、ステップＳ７２に処理を進める。
【０２１６】
ステップＳ７２において、ヘッダ付加部１１４は、ブロックの元データおよび冗長データを全て処理したか否かを判定し、まだ未処理のパケットデータが存在すると判定した場合、ステップＳ６２に処理を戻し、それ以降の処理を繰り返す。ステップＳ７２において、全てのパケットデータを処理したと判定した場合、ヘッダ付加部１１４は、アプリケーションデータ生成処理を終了し、図１５のステップＳ５に処理を戻す。
【０２１７】
以上のように、アプリケーションデータ生成部３４のヘッダ付加部１１４がブロック番号を元データや冗長データに付加することにより、受信装置１３は、後述するように、受信したデータのブロックを識別することができ、ブロック単位で処理することができる。
【０２１８】
また、ヘッダ付加部１１４が元データパケット番号を元データに付加することにより、受信装置１３は、後述するように、そのパケット番号に基づいて、ロスした（受信できなかった）元データを特定することができる。
【０２１９】
さらに、ヘッダ付加部１１４が冗長データパケット番号を冗長データに付加することにより、受信装置１３は、後述するように、元データを復元する際に、冗長データを整列させることができるので、元データを復元するための行列式を容易かつ正確に生成することができる。
【０２２０】
さらに、ヘッダ付加部１１４が元データパケット番号を元データに付加し、冗長データパケット番号を冗長データに付加することにより、受信装置１３は、後述するように、元データを復元する際に、予め用意されたＭ行Ｎ列の係数行列より必要な部分を容易かつ正確に切り出すことができるので、元データを復元するための行列式を容易かつ正確に生成することができる。
【０２２１】
次に、受信装置１３が実行する処理の流れについて説明する。
【０２２２】
最初に、図１２の受信装置１３によるデータ受信処理を図１９のフローチャートを参照して説明する。
【０２２３】
受信装置１３に対して、送信装置１１よりパケットが送信され、そのパケットがケーブル２１０を介してイーサネット(R)処理部２２１に供給されると、イーサネット(R)処理部２２１は、ステップＳ９１において、そのパケットを受信する。パケットを受信したイーサネット(R)処理部２２１は、そのパケットからIPパケットを抽出し、それをIP処理部２２２に供給する。IP処理部２２２は、そのIPパケットからUDPパケットを抽出し、それをアプリケーションデータ抽出部２２３に供給する。
【０２２４】
UDPパケットを供給されたアプリケーションデータ抽出部２２３は、ステップＳ９２において、そのUDPパケットからアプリケーションデータを抽出し、それをバッファ２２４に供給する。バッファ２２４は、ステップＳ９３において、その供給されたアプリケーションデータを保持し、ステップＳ９４において、所定の時間が経過したか否かを判定することにより、１ブロック分のアプリケーションデータを保持したか否かを判定する。すなわち、バッファ２２４は、各ブロックのアプリケーションデータを、所定の時間蓄積していき、所定の時間が経過すると、それまでに蓄積した対象ブロックのアプリケーションデータをデータ分離部２２５に供給する。
【０２２５】
ステップＳ９４において、所定の時間が経過しておらず、まだ１ブロック分のアプリケーションデータを保持していないと判定した場合、バッファ２２４は、ステップＳ９１に処理を戻し、それ以降の処理を繰り返す。すなわち、受信装置１３は、ステップＳ９１乃至ステップＳ９４の処理を繰り返しながら、バッファ２２４に所定の時間が経過するまで待機する。
【０２２６】
ステップＳ９４において、所定の時間が経過したことにより、１ブロック分のアプリケーションデータを保持したと判定した場合、バッファ２２４は、保持しているアプリケーションデータ（所定の時間の間に保持した、対象ブロックのアプリケーションデータ）を、データ分離部２２５に供給し、処理をステップＳ９５に進める。ステップＳ９５において、データ分離部２２５は、供給されたアプリケーションデータを、そのパケット番号等に基づいて、元データと冗長データに分離し、元データのアプリケーションデータをパケットロス判定部２２６に供給するとともに、冗長データのアプリケーションデータをロスパケット復元部２２８に供給する。
【０２２７】
アプリケーションデータを供給されたパケットロス判定部２２６は、ステップＳ９６において、供給されたアプリケーションデータの元データパケット番号に基づいて、ロスしたパケットを確認し、ステップＳ９７において、元データをロスしたか否かを判定する。元データをロスしたと判定した場合、パケットロス判定部２２６は、元データのアプリケーションデータをブロックデータ復元部２２７に供給するとともに、その判定結果と、元データのアプリケーションデータをロスパケット復元部２２８に供給し、処理をステップＳ９８に進める。ロスパケット復元部２２８は、ステップＳ９８において、元データ復元処理を実行してロスした元データを復元し、復元した元データのアプリケーションデータをブロックデータ復元部２２７に供給する。なお、元データ復元処理の詳細については、図２０のフローチャートを参照して後述する。
【０２２８】
元データを復元したロスパケット復元部２２８は、処理をステップＳ９９に進める。また、ステップＳ９７において、全ての元データパケット番号が揃っており、元データをロスしていないと判定した場合、元データのアプリケーションデータをブロックデータ復元部２２７に供給し、ステップＳ９８の処理を省略して、ステップＳ９９に処理を進める。
【０２２９】
ステップＳ９９においてブロックデータ復元部２２７は、供給されたアプリケーションデータより元データを抽出し、それらを合体してブロックデータを復元し、復元したブロックデータをブロック合成部２２９に供給する。ブロック合成部２２９は、供給されたブロックデータを、一時的に保持し、所定のタイミングで出力することにより、ブロックデータ復元部２２７より順次供給されるブロックデータを連続して出力するようにしてブロックデータを合成し、送信前の送信データと同等の受信データとして受信装置１３の外部に出力する。
【０２３０】
ブロック合成部２２９は、ステップＳ１００において、データ受信処理を終了するか否かを判定し、１つの受信データとしての全てのブロックデータを処理しておらず、データ受信処理を終了しないと判定した場合、処理をステップＳ９１に戻し、それ以降の処理を各部に繰り返させる。
【０２３１】
また、ステップＳ１００において、データ受信処理を終了すると判定した場合、ブロック合成部２２９は、各部に終了処理を実行させ、データ受信処理を終了する。
【０２３２】
以上のようにしてデータ受信処理を実行することにより、受信装置１３は、高速であり、かつ、復元性能の高い復元処理を、製造コストを増大せずに実現し、より容易に、かつ、より正確にデータを受信することができる。
【０２３３】
次に、図１９のステップＳ９８において実行される元データ復元処理の詳細を、図２０のフローチャートを参照して説明する。
【０２３４】
ロスパケット復元部２２８の判定結果取得部２５１は、パケットロス判定部２２６より判定結果を取得すると、判定結果とともに供給される元データのアプリケーションデータを取得し、それを元データ保持部２５２に供給して保持させる。そして、判定結果取得部２５１は、行列式作成部２５３に行列式の作成を指示する。
【０２３５】
行列式作成部２５３は、その指示に基づいて、元データ復元処理を開始し、ステップＳ１２１において、元データ保持部２５２より元データのアプリケーションデータを取得し、ステップＳ１２２において、取得したアプリケーションデータの元データパケット番号を参照して、ロスした元データのパケット番号を特定する。
【０２３６】
また、行列式作成部２５３は、ステップＳ１２３において、冗長データ保持部２５４に保持されている、データ分離部２２５より供給された冗長データのアプリケーションデータを取得し、ステップＳ１２４において、取得したアプリケーションデータの冗長データパケット番号を参照し、その冗長データパケット番号に基づいて、行列式を作成するために、冗長データを整列させる。
【０２３７】
さらに、行列式作成部２５３は、ステップＳ１２５において、取得したアプリケーションデータの元データパケット番号および冗長データパケット番号を参照し、それらのパケット番号に基づいて、係数行列供給部２５５に保持されている係数行列（Ｍ行Ｎ列）より必要な部分（Ｍ−Ｌ行Ｎ−Ｋ列）を取得する。
【０２３８】
なお、この処理は、係数行列供給部２５５が、係数行列から、行列式作成部２５３に要求された部分を切り出して、それを行列式作成部２５３に供給するようにしてもよいし、行列式作成部２５３が、係数行列供給部２５５より供給されたＭ行Ｎ列の係数行列から、必要な部分（Ｍ−Ｌ行Ｎ−Ｋ列）を切り出すようにしてもよい。
【０２３９】
すなわち、行列式作成部２５３は、係数行列の、取得した冗長データに対応する行と、取得した元データに対応する列の、両方に対応する成分を抽出し、それらを成分とする新たな係数行列を取得する。
【０２４０】
そして、ステップＳ１２６において、行列式作成部２５３は、取得した係数行列および冗長データより、計算用冗長データを求める行列式（例えば、式（３））を作成し、作成した行列式を行列式演算部２５６に供給する。
【０２４１】
行列式演算部２５６は、ステップＳ１２７において、供給された行列式を演算し、計算用冗長データを算出し、算出した計算用冗長データを行列式作成部２５３に戻す。
【０２４２】
計算用冗長データを取得した行列式作成部２５３は、ステップＳ１２８において、ロスした元データのパケット番号と、取得した冗長データのパケット番号に基づいて、係数行列供給部２５５に保持されている係数行列（Ｍ行Ｎ列）より必要な部分（Ｍ−Ｌ行Ｋ列）を取得する。
【０２４３】
なお、この処理は、係数行列供給部２５５が、係数行列から、行列式作成部２５３に要求された部分を切り出して、それを行列式作成部２５３に供給するようにしてもよいし、行列式作成部２５３が、係数行列供給部２５５より供給されたＭ行Ｎ列の係数行列から、必要な部分（Ｍ−Ｌ行Ｋ列）を切り出すようにしてもよい。
【０２４４】
すなわち、行列式作成部２５３は、係数行列の、取得した冗長データに対応する行と、ロスした元データに対応する列の、両方に対応する成分を抽出し、それらを成分とする新たな係数行列を取得する。
【０２４５】
そして、ステップＳ１２９において、行列式作成部２５３は、取得した係数行列および算出した計算用冗長データを用いて、ロスした元データを求めるための行列式（例えば、式（４））を作成し、作成した行列式を行列式演算部２５６に供給する。
【０２４６】
行列式演算部２５６は、ステップＳ１３０において、求解処理を実行し、EOR演算によって供給された行列式の解を求め、その解を解出力部２５７に供給する。なお、求解処理の詳細については、図２１および図２２のフローチャートを参照して後述する。解出力部２５７は、ステップＳ１３１において、供給された解を元データとしてアプリケーションデータを生成し、それをブロックデータ復元部２２７に供給し、元データ復元処理を終了して、図１９のステップＳ９９に処理を戻す。
【０２４７】
以上のように復元処理を行うことにより、ロスパケット復元部２２８は、高速であり、かつ、復元性能の高い復元処理を、製造コストを増大せずに実現することができる。従って、受信装置１３は、より容易、かつ、より正確にデータを受信することができる。また、ロスパケット復元部２２８は、元データのアプリケーションデータに付加された元データパケット番号を参照して、ロスした元データのパケット番号を特定するので、より容易に復元処理を行うことができる。さらに、ロスパケット復元部２２８は、冗長データのアプリケーションデータに付加された冗長データパケット番号を参照するので、容易に、受信した冗長データをパケット番号順に整列させることができ、予め用意された係数行列と、容易に対応付け、行列式を作成することができる。
【０２４８】
次に、図２１および図２２のフローチャートを参照して、図２０のステップＳ１３０において実行される求解処理の詳細を説明する。
【０２４９】
ロスした元データを求めるための行列式を供給された行列式演算部２５６は、ステップＳ１５１において、行列式に含まれる係数行列（Ｍ−Ｌ行Ｋ列）を参照し、全ての列に値が「１」の成分が存在するか否かを判定する。係数行列の全列に、値が「１」の成分が少なくとも１つ存在しないと、その列に対応する、ロスした元データを算出することができないので、行列式演算部２５６は、ステップＳ１５１においてこの判定処理を行う。
【０２５０】
ステップＳ１５１において、全ての列に値が「１」の成分が少なくとも１つ存在すると判定した場合、行列式演算部２５６は、処理をステップＳ１５２に進め、変数ｉの値を「１」に設定し、ガウスの消去法の、前進消去を開始する。前進消去は、行列式の係数行列において、値が「１」の成分の数を減らすように、係数行列の行間でEOR演算を行い、行列式を変形していく処理である。この前進消去の処理の具体的な例については、後述する。
【０２５１】
前進消去処理を開始した行列式演算部２５６は、ステップＳ１５３に処理を進め、第ｉ列の成分の値が「１」の行を、対象行の第１行目から順に検出する。対象行とは、係数行列において、前進消去処理の対象となる行のことである。後述するように、前進消去処理が進むごとに、この対象行が変化する。なお、初期状態において、対象行は全行である。
【０２５２】
ステップＳ１５４において、行列式演算部２５６は、ステップＳ１５３の処理により、行が複数検出されたか否かを判定し、複数検出されたと判定した場合、ステップＳ１５５において、最初に検出された行と、２番目以降に検出された行とで各成分についてEOR演算を行う。このとき、行列式の他の項も、この係数行列のEOR演算に対応するようにEOR演算を行う。
【０２５３】
行同士のEOR演算を行った行列式演算部２５６は、ステップＳ１５６に処理を進める。また、ステップＳ１５４において、第ｉ列の成分の値が「１」である行を、１行しか検出できなかったと判定した場合（各列には、値が「１」の成分が少なくとも１つ存在するので、１行は検出される）、ステップＳ１５５の処理を省略し、ステップＳ１５６に処理を進める。
【０２５４】
ステップＳ１５６において、行列式演算部２５６は、検出された（EOR演算により残された）、第ｉ列の成分の値が「１」の行を、求解用に保持し、対象行から除外する。そして、行列式演算部２５６は、ステップＳ１５７に処理を進め、変数ｉの値に「１」を加算し、ステップＳ１５８において、変数ｉの値がＫより大きいか否かを判定する。変数ｉの値がＫ以下である（すなわち、未処理の列が存在する）と判定した場合、行列式演算部２５６は、処理をステップＳ１５３に戻し、次の列に対して、それ以降の処理を繰り返す。
【０２５５】
以上の処理を繰り返すことにより、行列式演算部２５６は、前進消去の処理を進め、全ての列に対して処理を行い、係数行列の値が「１」の成分の数を減らすようにする。
【０２５６】
そして、ステップＳ１５８において、変数ｉの値がＫより大きいと判定した場合、行列式演算部２５６は、処理を図２２のステップＳ１６１に進める。
【０２５７】
図２２のステップＳ１６１において、行列式演算部２５６は、変数ｉの値をＫに設定し、保持した行を用いて、後退代入を開始する。後退代入は、以上の前進消去により、値が「１」の成分が減らされた係数行列によって、元データの解を求め、求めた解を順次他の行の方程式に代入していく処理である。この後退代入の処理の具体的な例については、後述する。
【０２５８】
後退代入を開始した行列式演算部２５６は、ステップＳ１６２において、前進消去によりｉ番目に保持した行の方程式を解く。なお、後述するように、行列式演算部２５６は、それ以前に求められた解を方程式の変数（元データ）に代入して方程式を解く。
【０２５９】
ステップＳ１６２の処理を終了した、行列式演算部２５６は、ステップＳ１６３に処理を進め、変数ｉの値を「１」減算し、ステップＳ１６４において、全ての解（元データ）を求めたか否かを判定する。未知の変数（元データ）が存在し、全ての解を求めていないと判定した場合、行列式演算部２５６は、ステップＳ１６１に処理を戻し、全ての解が求まるまで、それ以降の処理を繰り返す。
【０２６０】
ステップＳ１６４において、全ての解を求めたと判定した場合、行列式演算部２５６は、求解処理を終了し、図２０のステップＳ１３１に処理を戻す。
【０２６１】
また、図２１のステップＳ１５１において、全ての列に値が「１」の成分が存在しないと判定した場合、上述したように、全ての解を求めることができないので、行列式演算部２５６は、図２２のステップＳ１６５に処理を進め、エラー処理を行い、ロスしたパケットを復元できない旨のメッセージを出力する等して、求解処理を終了し、処理を図２０のステップＳ１３１に戻す。
【０２６２】
以上のように行列式演算部２５６が、ガウスの消去法を用いて行列式を解くことにより、ロスパケット復元部２２８は、容易にロスした元データを復元することができる。これにより、受信装置１１は、高速な復元処理を、製造コストを増大せずに実現し、より容易、かつより正確にデータを受信することができる。
【０２６３】
次に、図２３乃至図２６を参照して、上述したガウスの消去法の具体的な例について説明する。なお、ここでは、説明の簡略化のため、５個の演算用冗長データＸ１乃至Ｘ５を用いて、ロスした４個の元データＤ１乃至Ｄ４を求める場合について説明する。このとき、行列式の係数行列を、図２３に示されるような成分の５行×４列の行列とし、行列式作成部２５３が図２３に示されるような行列式を作成したとする。
【０２６４】
図２３に示される行列式を取得すると、行列式演算部２５６は、最初に、図２１のステップＳ１５１の処理を実行し、係数行列（図２３において左辺第１項）の各列に値が「１」の成分が存在するか否かを判定する。図２３の係数行列においては、全ての列に、値が「１」の成分が存在するので、元データＤ１乃至Ｄ４を求めることができる。
【０２６５】
次に、行列式演算部２５６は、前進消去を開始し、１回目の処理として、１列目（ｉ＝１）を処理の対象とする。そして、行列式演算部２５６は、全ての行を対象行として、１列目に注目し、値が「１」の成分が存在する行を対象行の１行目から順次検出する。図２３の場合、点線枠２７１で示される１列目の成分の値が「１」である行が検出され、点線枠２８１乃至２８３で示される１行目、３行目、および５行目がその順番で検出される。
【０２６６】
１列目の成分の値が「１」である行を検出した行列式演算部２５６は、次に、１番目に検出した行と、２番目以降に検出した行の各成分同士をEOR演算する。図２３の場合、行列式演算部２５６は、点線枠２８１で示される１行目と、点線枠２８２で示される３行目とを成分ごとにEOR演算する。同様に、行列式演算部２５６は、点線枠２８１で示される１行目と、点線枠２８３で示される５行目とを成分ごとにEOR演算する。このEOR演算により、係数行列の各成分の値は、図２４に示される係数行列（左辺第１項）のようになる。
【０２６７】
また、このとき、行列式演算部２５６は、行列式が成立するように、右辺の行列においても係数行列に対応するようにEOR演算を行う。図２３の場合、行列式演算部２５６は、右辺の演算用冗長データの行列に対して、点線枠２９１で示される１行目（Ｘ１）と、点線枠２９２で示される３行目（Ｘ３）とをEOR演算し、さらに、点線枠２９１で示される１行目（Ｘ１）と、点線枠２９３で示される５行目（Ｘ５）とをEOR演算する。このEOR演算により、演算用冗長データの行列の各成分の値は、図２４に示される演算用冗長データの行列（右辺）のようになる。
【０２６８】
以上のようにして、対象行における第１列目の成分の値が「１」である行を第１行目のみにすると、行列式演算部２５６は、次に、２回目の処理に移行し、係数行列の第２列目を処理の対象とし（ｉ＝２）、第１行目は保持し、第２行目乃至第５行目を対象行とする。そして、行列式演算部２５６は、１回目の場合と同様に、係数行列の第２列目について、値が「１」の成分が存在する行を対象行の１行目（図２５の場合、係数行列の第２行目）から順次検出する。図２４の場合、点線枠３０１で示される第２列目の成分の値が「１」である行が検出され、点線枠３１１および３１２で示される、係数行列の第２行目および第５行目がその順番で検出される。
【０２６９】
第２列目の成分の値が「１」である行を検出した行列式演算部２５６は、１回目の場合と同様に、１番目に検出した行と、２番目以降に検出した行の各成分同士をEOR演算する。図２４の場合、行列式演算部２５６は、点線枠３１１で示される第１行目と、点線枠３１２で示される第５行目とを成分ごとにEOR演算する。このEOR演算により、係数行列の各成分の値は、図２５に示される係数行列（左辺第１項）のようになる。
【０２７０】
また、このとき、行列式演算部２５６は、１回目の場合と同様に、行列式が成立するように、右辺の行列においても係数行列に対応するようにEOR演算を行う。図２４の場合、行列式演算部２５６は、右辺の演算用冗長データの行列に対して、点線枠３２１で示される第２行目（Ｘ２）と、点線枠３２２で示される第５行目（Ｘ５＋Ｘ１）とをEOR演算する。このEOR演算により、演算用冗長データの行列の各成分の値は、図２５に示される演算用冗長データの行列（右辺）のようになる。
【０２７１】
以上のようにして、対象行における第２列目の成分の値が「１」である行を第２行目のみにすると、行列式演算部２５６は、次に、３回目の処理に移行し、係数行列の第３列目を処理の対象とし（ｉ＝３）、第２行目をさらに保持し、第３行目乃至第５行目を対象行とする。そして、行列式演算部２５６は、１回目の場合と同様に、係数行列の第３列目について、値が「１」の成分が存在する行を対象行の１行目（図２５の場合、係数行列の第３行目）から順次検出する。図２５の場合、点線枠３３１で示される第３列目の成分の値が「１」である行が検出され、点線枠３４１で示される、係数行列の第４行目のみが検出される。
【０２７２】
従って、この場合、行列式演算部２５６は、EOR演算を省略する。また、このとき、行列式演算部２５６は、EOR演算を省略したので、右辺の行列においてもEOR演算を省略する。図２５の場合、右辺の演算用冗長データの行列において、点線枠３５１で示される第４行目（Ｘ４）が係数行列の第４行目に対応するが、EOR演算は省略される。従って、この３回目の処理により行列式の各項の行列の各成分の値は、図２６に示されるように変化せず、図２５の場合と同様になる。
【０２７３】
行列式演算部２５６は、次に、４回目の処理に移行し、係数行列の第４列目を処理の対象とし（ｉ＝４）、前回検出した第４行目をさらに保持し、第３行目および第５行目を対象行とする。そして、行列式演算部２５６は、１回目の場合と同様に、係数行列の第４列目について、値が「１」の成分が存在する行を対象行の１行目（図２５の場合、係数行列の第３行目）から順次検出する。図２５の場合、点線枠３６１で示される第４列目の成分の値が「１」である行が検出され、点線枠３７１で示される、係数行列の第３行目のみが検出される（第５行目第４列目の成分の値は「０」である）。
【０２７４】
従って、この場合も、３回目の処理と同様に、行列式演算部２５６は、EOR演算を省略する。また、このとき、行列式演算部２５６は、EOR演算を省略したので、右辺の行列においてもEOR演算を省略する。図２６の場合、右辺の演算用冗長データの行列において、点線枠３８１で示される第３行目（Ｘ３＋Ｘ１）が係数行列の第３行目に対応するが、EOR演算は省略される。従って、この４回目の処理によっても行列式の各項の値は変化しない。行列式演算部２５６は、この４回目の処理において検出された第３行目をさらに保持する。
【０２７５】
以上のように、全列に対して前進消去を行うと行列式演算部２５６は、前進消去を終了し、次に後退代入を開始する。前進消去により、最後に保持した行には、値が「１」の成分が最後の列の１つしか存在しない。その他の列の成分の値は、それまでのEOR演算により「０」に変換されている。同様に、最後から２番目に保持した行の、値が「１」の成分は２個以下であり、その前に保持した行は３個以下である。このように、最後からＹ番目に保持した行には、値が「１」の成分がＹ個以下となる。
【０２７６】
従って、行列式演算部２５６は、後退代入により、最後に保持した行から解を１つ求め、保持した順番と逆順にその解を代入していき、全ての解を求める。
【０２７７】
このように、ガウスの消去法を用いることにより、行列式演算部２５６は、EOR演算等の単純な演算により行列式を解くことができるので、ロスパケット復元部２２８は、ロスした元データを容易にかつ高速に復元することができる。
【０２７８】
次に、係数生成確率ｐの値の決定方法について説明する。
【０２７９】
図２７および図２８は、受信装置１３におけるパケット復元能力を示すグラフであり、いずれの場合も、横軸がパケットのロス数を示し、縦軸が復元能力（復元回数/復元不能の発生回数）を示している。図２７は、係数生成確率ｐの値が１／２である場合の復元能力を示しており、図２８は、係数生成確率ｐの値が１／６である場合の復元能力を示している。
【０２８０】
図２７と図２８に示されるように、受信装置１３の、ロスしたパケットの復元能力は、パケットロス数の減少するとともに増加し、係数生成確率ｐが高いほど復元能力は高くなる。しかしながら、当然、係数生成確率ｐが高いほど、復元処理における演算量が増加するので、復元処理の負荷が大きくなる。後述するように、例えば、リードソロモン符号を用いた復元処理と比較すると、EOR演算処理による復元処理の負荷は非常に少ないが、係数生成確率ｐの値が小さいほど、より高速に復元処理を行うことができる。従って、処理の負荷の観点からすれば、係数生成確率ｐの値をなるべく小さく設定する方が望ましいが、上述したように、係数生成確率ｐの値を大きくする方が復元能力は高くなる。
【０２８１】
つまり、処理の負荷の大きさと復元能力の高さはトレードオフの関係にあり、係数生成確率ｐの値は、実際のシステムにおいて、ネットワーク１２におけるパケットロス率がどの程度であるかを考慮した上で、復元能力が実用的な値となる範囲において、なるべく小さく設定するのが望ましい。
【０２８２】
以上のように、通信システム１において、送信装置１１は、送信用データの他に、その送信用データよりEOR演算を行って生成した、パケットロスに対する誤り訂正用の冗長データを複数生成し、それらを送信用データとともに受信装置１３に送信する。受信装置１３は、その冗長データ（受信した冗長データ）に基づいて、受信できなかった元の送信用データの復元処理を行う。このようにすることにより、受信装置１３は、送信装置１１に再送要求を行うことなく、ロスしたデータを復元することができる。従って、通信システム１は、より容易に、より正確な通信を行うことができる。
【０２８３】
図２９は、上述したEOR演算による復元処理（EOR）の処理時間と、リードソロモン符号を用いた復元処理（リードソロモンFEC（Forward Error Correction））の処理時間との関係の例を示す図である。
【０２８４】
図２９においては、送信されるコンテンツのブロックサイズを５秒とし、コンテンツのビットレートを４Ｍbpsとし、パケットデータのデータサイズを１ＫByteとする。この場合、１ブロックは２５００パケットとなる。図２９の表３９１は、このような通信システム１において、パケットロスを１０％（２５０パケット）としたときの、EOR演算による復元処理の処理時間と、リードソロモン符号を用いた復元処理の処理時間との関係を示している。
【０２８５】
表３９１に示されるように、EOR演算による復元処理の方が、リードソロモン符号を用いた復元処理と比較して、前処理、ガウス的消去による演算処理、データ復元処理、および、それらの総計の、全てにおいて非常に短く、また、CPU（Central Processing Unit）占有率（総計欄のカッコ内数字）も圧倒的に少ない。
【０２８６】
従って、受信装置１３は、リードソロモン符号を用いた復元方法の場合と比較して、非常に高速に、または、処理の負荷をかけずに復元処理を行うことができる。
【０２８７】
図３０は、上述したEOR演算による復元処理（EOR）の復元能力と、リードソロモン符号を用いた復元処理の復元能力（RS-FEC）との関係の例を示す図である。
【０２８８】
図３０の表４０１においては、１ブロックのパケット数として実用的な値を設定しており、EOR演算による復元処理の場合、1000パケットおよび2000パケットの例を示し、リードソロモンFECの場合、100パケットの例を示す。
【０２８９】
表４０１において、エラー率（復元失敗率）が１０-8となるときのパケットロス率と、エラー率が１０-14となるパケットロス率が表示される。これらの値は、大きいほど、マージンがあることを示す。表４０１に示されるように、EOR演算を用いた復元処理の場合の方が、リードソロモン符号を用いた復元処理の場合と比較してマージンが大きい。なお、エラー率10-8は、リードソロモンFECの場合では連続視聴で約一年に一回の割合であり、EOR演算による復元処理の場合では10年に一回の割合である。従って、図１の通信システム１は、より容易かつより正確に処理を実行することができる。
【０２９０】
なお、以上においては、アプリケーションデータ生成部３４のヘッダ付加部１１４は、パケット番号を元データや冗長データに付加するように説明したが、アプリケーションデータのパケット番号の部分は、元データのパケット番号と、冗長データのパケットが識別可能な状態で供給されればよく、例えば、図３１に示されるように、オフセット値の代わりに識別子が用いられるようにしてもよい。
【０２９１】
図３１においては、アプリケーションデータ４１１は、データ（元データまたは冗長データ）４１４に、ブロック番号４１２およびパケット番号４１３が付加されたデータであるが、パケット番号４１３の左１ビットは、元データ／冗長データ識別フィールド４２１に設定され、残りのビット列がパケット番号フィールド４２２に設定される。
【０２９２】
すなわち、この場合、冗長データパケット番号は、オフセット値が付加されておらず、元データ／冗長データ識別フィールド４２１のデータ識別子により、元データパケット番号と識別される。例えば、データ識別子の値が「０」である場合、元データのアプリケーションデータであることを示し、そのパケット番号は元データパケット番号であることを示し、データ識別子の値が「１」である場合、冗長データのアプリケーションデータであることを示し、そのパケット番号は冗長データパケット番号であることを示している。
【０２９３】
なお、このデータ識別子の値と、その値の示すデータの関係が上述した場合と逆であっても良い。また、元データ／冗長データ識別フィールド４２１が複数ビットにより構成されていてももちろんよい。
【０２９４】
このようなアプリケーションデータを生成するアプリケーションデータ生成部３４の構成例を示すブロック図を図３２に示す。
【０２９５】
図３２において、図９を参照して説明したモジュールについては、図９の場合と同じ番号を付してある。図３２に示されるアプリケーションデータ生成部４３０の構成は、図９に示されるアプリケーションデータ生成部３４の構成と基本的に同一であるが、図３２に示されるアプリケーションデータ生成部４３０の場合、冗長データカウンタ１２３にオフセット値を供給するオフセット値供給部１２２が省略され、データ識別子を設定するデータ識別子設定部４３１が新たに設けられている。
【０２９６】
冗長データ受付部１２１は、冗長データカウンタ１２３を初期化する際、カウント値を「０」に設定する。すなわち、オフセット値供給部１２２が存在しないので、初期化された冗長データカウンタ１２３のカウント値は「０」である。
【０２９７】
データ識別子設定部４３１は、ヘッダ部１１４は、ヘッダ付加部に供給するための、データ識別子を設定し、設定したデータ識別子の設定値をヘッダ付加部１１４に供給する。ヘッダ付加部１１４は、アプリケーションデータの元データ／冗長データ識別フィールド４２１に、供給されたデータ識別子の設定値を付加する。
【０２９８】
図３２のアプリケーションデータ生成部４３０により実行されるアプリケーションデータ生成処理を図３３および図３４のフローチャートを参照して説明する。
【０２９９】
アプリケーションデータ生成部４３０の元データ受付部１１１および冗長データ受付部１２１は、ステップＳ１８１において、図１８のステップＳ６１の場合と同様に、各カウンタを初期化する。ただし、冗長データ受付部１２１は、冗長データカウンタ１２３のカウント値に、オフセット値を設定せず、他のカウンタと同様に、例えば「０」に設定する。
【０３００】
ステップＳ１８２において、元データ受付部１１１は、図１８のステップＳ６２の場合と同様に、元データを受け付けたか否かを判定し、受け付けたと判定した場合、図１８のステップＳ６３乃至Ｓ６５の場合と同様に、ステップＳ１８３において、受け付けた元データがブロック内の最初のパケットデータであるか否かを判定し、最初のパケットデータであると判定した場合、ステップＳ１８４に処理を進め、ブロックカウンタ１１３をカウントアップさせ、ステップＳ１８５において元データカウンタ１１２をカウントアップさせる。また、ステップＳ１８３において、受け付けた元データがブロック内の最初のパケットデータでないと判定した場合、ステップＳ１８４の処理を省略し、ステップＳ１８５において、元データカウンタ１１２のみをカウントアップさせる。カウンタをカウントアップさせた元データ受付部１１１は、取得した元データをヘッダ付加部１１４に供給する。
【０３０１】
ステップＳ１８６において、データ識別子設定部４３１は、ヘッダ付加部１１４が取得した元データに対して、データ識別子の値を「０」に設定し、ヘッダ付加部１１４に供給する。
【０３０２】
ヘッダ付加部１１４は、ステップＳ１８７において、図１８のステップＳ６６の場合と同様に、元データに元データカウンタ１１２のカウント値を付加する。また、ヘッダ付加部１１４は、ステップＳ１８８において、データ識別子設定部４３１より供給されたデータ識別子を元データに付加する。さらに、ヘッダ付加部１１４は、ステップＳ１８９において、図１８のステップＳ６６の場合と同様に、元データにブロックカウンタ１１３のカウント値を付加する。そして、元データに必要なヘッダを付加したヘッダ付加部１１４は、ステップＳ１９０において、図１８のステップＳ６７の場合と同様に、それをアプリケーションデータとして、UDPパケット化部３５に供給し、処理を図３４のステップＳ２０１に進める。
【０３０３】
なお、図３３のステップＳ１８２において、元データを受け付けていないと判定した場合、元データ受付部１１１は、ステップＳ１８３乃至ステップＳ１９０の処理を省略し、図３４のステップＳ２０１に処理を進める。
【０３０４】
図３４のステップＳ２０１において、冗長データ受付部１２１は、図１８のステップＳ６８の場合と同様に、冗長データを受け付けたか否かを判定し、冗長データを受け付けたと判定した場合、図１８のステップＳ６９の場合と同様に、ステップＳ２０２において冗長データカウンタ１２３をカウントアップさせる。冗長データカウンタ１２３をカウントアップさせた冗長データ受付部１１１は、取得した冗長データをヘッダ付加部１１４に供給する。
【０３０５】
ステップＳ２０３において、データ識別子設定部４３１は、ヘッダ付加部１１４が取得した冗長データに対して、データ識別子の値を「１」に設定し、ヘッダ付加部１１４に供給する。
【０３０６】
ヘッダ付加部１１４は、ステップＳ２０４において、図１８のステップＳ７０の場合と同様に、冗長データに冗長データカウンタ１２３のカウント値を付加する。また、ヘッダ付加部１１４は、ステップＳ２０５において、データ識別子設定部４３１より供給されたデータ識別子を冗長データに付加する。さらに、ヘッダ付加部１１４は、ステップＳ２０６において、図１８のステップＳ７０の場合と同様に、冗長データにブロックカウンタ１１３のカウント値を付加する。そして、冗長データに必要なヘッダを付加したヘッダ付加部１１４は、ステップＳ２０７において、図１８のステップＳ７１の場合と同様に、それをアプリケーションデータとして、UDPパケット化部３５に供給し、処理をステップＳ２０８に進める。
【０３０７】
ステップＳ２０８において、ヘッダ付加部１１４は、ブロックのデータを全て処理したか否かを判定し、未処理のパケットデータが存在すると判定した場合、図３３ステップＳ１８２に処理を戻し、それ以降の処理を繰り返す。また、図３４のステップＳ２０８において、全てのパケットデータを処理したと判定した場合、ヘッダ付加部１１４は、アプリケーションデータ生成処理を終了し、図１５のステップＳ５に処理を戻す。
【０３０８】
このように、識別子を用いて元データパケット番号と冗長データパケット番号を識別させることにより、受信装置１３は、オフセット値を用いた場合と同様にパケットデータを分離することができる。
【０３０９】
以上においては、送信装置１１と受信装置１３は、互いに等しい所定の値を種データとして生成した同じ係数行列を用いて冗長データの作成処理およびロスした元データの復元処理を実行するように説明した。具体的には、送信装置１１は、受信装置１３がロスしたパケットを特定するための情報として、元データパケット番号を元データに付加し、受信装置１３が取得したパケットを整列させるための情報として、冗長データパケット番号を冗長データパケット番号に付加して送信する。すなわち、送信装置１１は、ロスしたパケットを特定するための情報を元データに付加し、冗長データを整列させるための情報を冗長データに付加して送信する。
【０３１０】
例えば、図３５Ａに示されるように、送信装置１１は、所定の値を種データとして係数行列（行列番号１乃至３）を生成し、それを用いて冗長データ（冗長データパケット番号１乃至３）を算出し、それらを、それらのパケット番号順に、受信装置１３に供給する。
【０３１１】
しかしながら、送信装置１１がその係数行列を用いて生成し、送信した冗長データは、受信装置１３において、その一部がロスしたり、受信順が、送信順と一致しなかったりする場合がある。例えば、図３５Ａにおいて、受信装置１３は、冗長データパケット番号が「２」と「３」のパケットのみを受信する。このときの受信順も、送信順と異なり、冗長データは、冗長データパケット番号「３」、「２」の順番で受信される。
【０３１２】
受信装置１３においても、係数行列は、送信装置１１の場合と同様に所定の値を種データとして生成されるので、冗長データの受信順と係数行列の各行の並びは対応しない。従って、受信装置１３は、それらを対応させるために、予め用意された係数行列に、受信した冗長データの順番を合わせるように、冗長データを整列させる。具体的には、受信装置１３は、上述したように、冗長データパケット番号に基づいて、冗長データを整列させる。例えば、図３５Ａの場合、冗長データパケット番号が「３」、「２」の順番で受信した冗長データを、「２」、「３」の順に並べ替えて、冗長データの順番を係数行列に対応させる。このようにすることにより、受信装置１３は、ロスした元データ（図３５Ａの場合、元データパケット番号「５」の元データ）を復元することができる。
【０３１３】
しかしながら、それ以外の方法を用いてもよく、例えば、送信装置１１と受信装置１３とで種データを予め共有せずに、送信装置１１が、通信時にパケットとともに、その種データの情報（すなわち、係数行列を生成するための情報）を受信装置１３に送信するようにしてもよい（図３５Ｂ）。
【０３１４】
例えば、図３５Ｂにおいては、送信装置１１および受信装置１３は、それぞれ、冗長データパケット番号を用いて種データを生成している。このとき、送信装置１１および受信装置１３は、１つの冗長データパケット番号を種データとして１行の係数行列を生成し、各行を合成して係数行列を完成させる。このようにすることにより、受信装置１３は、受信した冗長データの受信順で冗長データパケット番号を種データとするので、必要な分だけ係数行列（受信した冗長データに対応する行のみの係数行列）を生成することができる。また、その生成された係数行列の行の順番は、受信した冗長データの受信順に対応することになる。
【０３１５】
すなわち、送信装置１１は、ロスしたパケットを特定するための情報（元データパケット番号）を元データに付加し、冗長データに対応した係数行列を生成させるための情報（冗長データパケット番号）を冗長データに付加して送信する。
【０３１６】
なお、その場合の送信装置１１の処理は、種データとして、所定の値の代わりに、これから生成する予定の冗長データパケット番号を用いるだけで、基本的には、上述した処理と同様の処理を実行するので、その説明を省略する。受信装置１３も、上述した場合と基本的に同様にデータ受信処理を行う。ただし、ロスパケット復元部２２８は、元データ復元処理を実行する際に、図２０の場合と異なる処理を実行する。
【０３１７】
図３６のフローチャートを参照して、ロスパケット復元部２２８による元データ復元処理を説明する。
【０３１８】
図１４のロスパケット復元部２２８の行列式作成部２５３は、判定結果取得部２５１からの指示に基づいて、元データ復元処理を開始し、ステップＳ２２１において、元データ保持部２５２より元データのアプリケーションデータを取得し、ステップＳ２２２において、取得したアプリケーションデータの元データパケット番号を参照して、ロスした元データのパケット番号を特定する。また、行列式作成部２５３は、ステップＳ２２３において、冗長データ保持部２５４より冗長データのアプリケーションデータを取得する。これらの処理は、図２０のステップＳ１２１乃至ステップＳ１２３にそれぞれ対応する。
【０３１９】
行列式作成部２５３は、取得したアプリケーションデータの冗長データパケット番号を参照し、その冗長データパケット番号を係数行列供給部２５５に供給する。係数行列供給部２５５は、ステップＳ２２４において、供給された冗長データパケット番号を種データとして係数行列を生成し、それを行列式作成部２５３に供給する。この係数行列は、受信装置１３が取得した冗長データに対応する行と、全ての元データに対応する列とで構成されるＭ−Ｌ行Ｎ列の係数行列である。
【０３２０】
次に、行列式作成部２５３は、ステップＳ２２５において、取得した元データのパケット番号に基づいて、ステップＳ２２４において生成された係数行列より必要な成分を取得する。すなわち、行列式作成部２５３は、Ｍ−Ｌ行Ｎ列の係数行列より、取得した元データに対応する列成分を抽出し、Ｍ−Ｌ行Ｋ列の係数行列とする。
【０３２１】
ステップＳ２２６において、行列式作成部２５３は、計算用冗長データを求める行列式を作成し、それを行列式演算部２５６に供給する。そして、ステップＳ２２７において、供給された行列式を演算し、計算用冗長データを算出し、算出した計算用冗長データを行列式作成部２５３に戻す。なおこれらの処理は図２０のステップＳ１２６の処理、およびステップＳ１２７の処理を終了する。
【０３２２】
計算用冗長データを取得した行列式作成部２５３は、ステップＳ２２８において、ロスした元データのパケット番号と、取得した冗長データのパケット番号に基づいて、ステップＳ２２４において生成された係数行列（Ｍ―Ｌ行Ｎ列）より必要な部分（Ｍ−Ｌ行Ｋ列）を取得し、ステップＳ２２９において、ロスした元データを求めるための行列式（例えば、式（４））を作成し、作成した行列式を行列式演算部２５６に供給する。なおこれらの処理は図２０のステップＳ１２８の処理、およびステップＳ１２９の処理を終了する。
【０３２３】
行列式演算部２５６は、ステップＳ２３０において、求解処理を実行し、EOR演算によって供給された行列式の解を求め、ステップＳ２３１においてその行列式の解を元データとして出力し、元データ復元処理を終了して、図１９のステップＳ９９に処理を戻す。
【０３２４】
行列式作成部２５３が、以上のように元データ復元処理を行うことにより、受信装置１３は、送信装置１１より供給される冗長データに付加された冗長データパケット番号を種データとして係数行列を生成し、その係数行列を用いてロスした元データを復元することができる。これにより、受信装置１３は、より容易、かつ、より正確にデータを受信することができる。
【０３２５】
以上において、送信装置１１は、受信装置１３がロスした元データを特定する情報として元データパケット番号を元データに付加して送信するように説明したが、受信装置１３がロスした元データを特定する情報として他の情報を元データに付加するようにしてももちろんよい。また、送信装置１１は、この受信装置１３がロスした元データを特定する情報を、元データに付加せず、アプリケーションデータとは異なるデータとして送信するようにしてもよい。さらに、送信装置１１は、この受信装置１３がロスした元データを特定する情報を、例えば、磁気ディスクや書き込み可能な光ディスク等のような記録媒体等を用いて受信装置１３に供給されるようにしてもよい。
【０３２６】
また、以上において、送信装置１１は、受信装置１３が取得した冗長データを整列させる情報として冗長データパケット番号を冗長データに付加して送信するように説明したが、受信装置１３が取得した冗長データを整列させる情報として他の情報を冗長データに付加するようにしてももちろんよい。また、送信装置１１は、この受信装置１３が取得した冗長データを整列させる情報を冗長データに付加せず、アプリケーションデータとは異なるデータとして送信するようにしてもよい。さらに、送信装置１１は、この受信装置１３が取得した冗長データを整列させる情報を、例えば、磁気ディスクや書き込み可能な光ディスク等のような記録媒体等を用いて受信装置１３に供給されるようにしてもよい。
【０３２７】
さらに、以上において、送信装置１１は、受信装置１３が係数行列を生成する情報として冗長データパケット番号を冗長データに付加して送信するように説明したが、受信装置１３が係数行列を生成する情報として他の情報を冗長データに付加するようにしてももちろんよい。また、送信装置１１は、この受信装置１３が係数行列を生成する情報を冗長データに付加せず、アプリケーションデータとは異なるデータとして送信するようにしてもよい。さらに、送信装置１１は、この受信装置１３が係数行列を生成する情報を、例えば、磁気ディスクや書き込み可能な光ディスク等のような記録媒体等を用いて受信装置１３に供給されるようにしてもよい。
【０３２８】
なお、送信装置１１は、受信装置１３が取得したパケットデータがどのブロックに属するデータであるかを特定するための情報、受信装置１３がロスした元データを特定するための情報、受信装置１３が取得した冗長データを整列させるための情報、および、受信装置１３が係数行列を生成するための情報等の復元処理に関する情報である復元関連情報の内、２つ以上を１つのパケットデータに付加して送信するようにしてもよい。また、同じ元データであっても、これらの情報を付加するパケットデータと、付加しないパケットデータを混在させるようにしてもよい。冗長データについても同様である。
【０３２９】
また、復元性能は上述した方法より低いものの、係数行列をブロック毎に変更するようにしてもよい。その場合、予め複数の係数行列を、送信装置１１および受信装置１３の両方に用意するようにしてもよいし、種データをブロック毎に変更するようにしてもよい。種データを用いて係数行列を生成する場合、その種データとして、冗長データパケット番号を用いるように説明したが、種データをブロック毎に変更する場合、例えば、冗長データパケット番号の他にブロック番号も種データとして利用すれば、生成する行列を容易に変更することができる。
【０３３０】
また、ブロックデータのデータサイズは、ブロック間で共通であっても良いし、互いに異なるようにしてもよい。ブロックデータのデータサイズが互いに異なるようにする場合、各ブロックのデータサイズ（または、各ブロックに対応するパケットデータ数）が受信装置１３において把握することができるように、何らかの情報を送信装置１１より受信装置１３に供給する。
【０３３１】
以上においては、通信システム１が、データを送信する送信装置１１およびデータを受信する受信装置１３により構成されるように説明したが、通信システムの構成は、これに限らず、通信システムは、例えば、図３７に示されるように、図１の送信装置１１および受信装置１３を、それぞれモジュールとし、送信部および受信部とし、それらの両方を含む２台の送受信装置により構成されるようにしてもよい。
【０３３２】
図３７において、通信システム５０１は、図１のネットワーク１２と同様の、ネットワーク５１２に接続された送受信装置５１１および送受信装置５１３により構成される。送受信装置５１１は、送信部５２１および受信部５２２を含み、送受信装置５１３は、送信部５３１および受信部５３２を含む。送信部５２１および送信部５３１は、図１の送信装置１１と基本的に同様の構成であり、同様に動作するのでその詳細な説明は省略する。
【０３３３】
また、図３７において、受信部５２２および受信部５３２は、図１の受信装置１３と基本的に同様の構成であり、同様に動作するのでその詳細な説明は省略する。
【０３３４】
すなわち、図３７の通信システム５０１は、内蔵する送信部および受信部をそれぞれ有する送受信装置５１１および送受信装置５１３により構成され、それらが互いに上述したようなEOR演算を用いた冗長データを利用して、再送制御なしに、通信処理を行う。
【０３３５】
このようにすることにより、双方向の通信においても、受信部は、高速であり、かつ、復元性能の高い復元処理を、製造コストを増大せずに実現することができる。従って、送受信装置５１１および送受信装置５１３は、より容易、かつ、より正確にデータを受信することができる。
【０３３６】
なお、図１においては、通信システム１は、１台の送信装置１１および１台の受信装置１３により構成されるように説明したが、これに限らず、複数台の送信装置または複数台の受信装置を含むようにしてもよい。
【０３３７】
図３８は、本発明を適用したコンテンツ配信システムの構成例を示す図である。コンテンツ配信システム６０１のサーバ６１１は、図１のネットワークと同等のネットワーク６１２に接続され、同様にネットワーク６１２に接続された複数の端末装置６１３および６１４により構成される。
【０３３８】
図３８において、サーバ６１１は、送信装置１１と同様の機能を有しており、ネットワーク６１２を介して、端末装置６１３および端末装置６１４のそれぞれに対して、画像データや音声データ等のコンテンツデータをパケット化し、上述したようにEOR演算による冗長パケットを付加し、そのパケットをマルチキャストに送信する。
【０３３９】
端末装置６１３および端末装置６１４は、それぞれ、受信装置１３と同様の機能を有しており、サーバ６１１より供給されるパケットをそれぞれ受信し、上述したようにロスしたパケットを、冗長データを用いて復元する等して、コンテンツデータを復元し、再生する。
【０３４０】
なお、サーバ６１１は、コンテンツデータをストリーミング配信するようにしてもよいし、ダウンロードしてから再生させるように配信するようにしてもよい。
【０３４１】
以上のように、サーバ６１１が複数台の端末装置６１３および６１４に対してパケットを配信する場合、端末装置６１３および端末装置６１４がパケットをロスしたときに、そのパケットの再送要求をサーバ６１１にするようにすると、サーバ６１１に再生要求が集中し、サーバ６１１の負荷が大きくなり、ダウンしてしまう恐れがある。従って、サーバ６１１が、上述したように、負荷の軽いEOR演算による冗長データを生成し、それをコンテンツデータとともに配信することにより、端末装置６１３および端末装置６１４は、パケットをロスしても、再生要求をせずに、コンテンツデータを復元することができる。従って、サーバ６１１における負荷の増大を抑制することができ、安定したコンテンツデータの配信サービスを提供することができる。
【０３４２】
なお、上述したEOR演算による冗長データを送信データに付加する方法と、再送要求を用いる方法とを組み合わせて利用するようにしてももちろんよい。その場合、受信側の装置は、パケットロスが発生した場合、まず、受信した冗長データにより元データの復元を試み、復元不能であった場合に、送信元に対してロスしたパケットの再送要求を行うようにする。このようにすることにより、再送要求の回数を削減することができるので、送信側と受信側の両方の装置において、再送要求による処理の負荷を軽減させることができる。すなわち、システム全体の負荷を削減することができる。
【０３４３】
また、図１の通信システム１において、送信装置１１と受信装置１３が接続されるネットワーク１２は、その一部または全部が有線により構成されるようにしてもよいし，無線により構成されるようにしてもよい。またネットワーク１２が複数のネットワークにより構成されるようにしてもよい。すなわち、送信装置１１と受信装置１３とが複数のルータ等を介して接続されるようにしても良い。
【０３４４】
さらに、送信装置１１および受信装置１３は、上述した構成以外の構成を含むようにしてもよい。例えば、モニタ等の表示部を設けるようにしても良いし、キーボードやボタン等の入力部を設けるようにしてもよい。
【０３４５】
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。この場合、例えば、図１の送信装置１１や受信装置１３には、図３９に示されるようなパーソナルコンピュータが含まれる。
【０３４６】
図３９において、パーソナルコンピュータ７０１のCPU７１１は、ROM（Read Only Memory）７１２に記憶されているプログラム、または記憶部７２３からRAM７１３にロードされたプログラムに従って各種の処理を実行する。RAM７１３にはまた、CPU７１１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【０３４７】
CPU７１１、ROM７１２、およびRAM７１３は、バス７１４を介して相互に接続されている。このバス７１４にはまた、入出力インタフェース７２０も接続されている。
【０３４８】
入出力インタフェース７２０には、キーボード、マウスなどよりなる入力部７２１、CRT、LCDなどよりなるディスプレイ、並びにスピーカなどよりなる出力部７２２、ハードディスクなどより構成される記憶部７２３、モデムなどより構成される通信部７２４が接続されている。通信部７２４は、インターネットを含むネットワークを介しての通信処理を行う。
【０３４９】
入出力インタフェース７２０にはまた、必要に応じてドライブ７２５が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア７２６が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部７２３にインストールされる。
【０３５０】
上述した一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、ネットワークや記録媒体からインストールされる。
【０３５１】
この記録媒体は、例えば、図３９に示されるように、装置本体とは別に、ユーザにプログラムを配信するために配布される、プログラムが記録されている磁気ディスク（フレキシブルディスクを含む）、光ディスク（CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む）、光磁気ディスク（ＭＤ（Mini-Disk）（登録商標）を含む）、もしくは半導体メモリなどよりなるリムーバブルメディア７２６により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに配信される、プログラムが記録されているROM７１２や、記憶部７２３に含まれるハードディスクなどで構成される。
【０３５２】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０３５３】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【図面の簡単な説明】
【０３５４】
【図１】本発明を適用した通信システムの構成例を示す図である。
【図２】図１の送信装置の構成例を示すブロック図である。
【図３】図１の通信システムにおけるデータの処理の流れを示す図である。
【図４】UDPパケットの構成例を示す模式図である。
【図５】図２の冗長データ生成部の詳細な構成例を示すブロック図である。
【図６】パケットデータの構成例を示す模式図である。
【図７】図５の係数行列供給部の詳細な構成例を示すブロック図である。
【図８】係数行列の生成方法と復元能力の関係の例を示す図である。
【図９】図２のアプリケーションデータ生成部の詳細な構成例を示すブロック図である。
【図１０】アプリケーションデータの構成例を示す模式図である。
【図１１】パケット番号の例を示す図である。
【図１２】図１の受信装置の構成例を示すブロック図である。
【図１３】パケットをロスする様子の例を示す図である。
【図１４】図１２のロスパケット復元部の詳細な構成例を示すブロック図である。
【図１５】データ送信処理の例を説明するフローチャートである。
【図１６】冗長データ生成処理の例を説明するフローチャートである。
【図１７】係数行列準備処理の例を説明するフローチャートである。
【図１８】アプリケーションデータ生成処理の例を説明するフローチャートである。
【図１９】データ受信処理の例を説明するフローチャートである。
【図２０】元データ復元処理の例を説明するフローチャートである。
【図２１】求解処理の例を説明するフローチャートである。
【図２２】求解処理の例を説明する、図２１に続くフローチャートである。
【図２３】ガウス消去法の手順の例を説明する図である。
【図２４】ガウス消去法の手順の例を説明する図である。
【図２５】ガウス消去法の手順の例を説明する図である。
【図２６】ガウス消去法の手順の例を説明する図である。
【図２７】係数生成確率と復元能力の関係を説明する図である。
【図２８】係数生成確率と復元能力の関係を説明する図である。
【図２９】EOR演算による復元処理と、リードソロモン符号を用いた復元処理との、処理速度の比較結果の例を示す図である。
【図３０】EOR演算による復元処理と、リードソロモン符号を用いた復元処理との、エラー率の比較結果の例を示す図である。
【図３１】アプリケーションデータの、他の構成例を示す模式図である。
【図３２】図２のアプリケーションデータ生成部の、他の構成例を示すブロック図である。
【図３３】アプリケーションデータ生成処理の、他の例を説明するフローチャートである。
【図３４】アプリケーションデータ生成処理の、他の例を説明する、図３２に続くフローチャートである。
【図３５】係数行列の生成方法の、他の例を説明する模式図である。
【図３６】元データ復元処理の、他の例を説明するフローチャートである。
【図３７】本発明を適用した通信システムの、他の構成例を示す図である。
【図３８】本発明を適用したコンテンツ配信システムの構成例を示す図である。
【図３９】パーソナルコンピュータの構成例を示すブロック図である。
【符号の説明】
【０３５５】
１  通信システム，  １１  送信装置  １２  ネットワーク，  １３  受信装置，  ３１  データ分割部，  ３２  ブロック分割部，  ３３  冗長データ生成部，  ３４  アプリケーションデータ生成部，  ３５  UDPパケット化部，  ３６  バッファ，  ３７  出力制御部，  ３８  IP処理部，  ３９  イーサネット(R)処理部，  ４０  ケーブル，  ５１  送信データ，  ５２  ブロック，  ５３  元データ，  ５４  冗長データ，  ５５  送信パケット，  ７１  元データ保持部，  ７２  行列式生成部，  ７３  係数行列供給部，  ７４  行列式演算部，  ７５  解出力部，  ８１  元データ，  ８２  冗長データ，  ９１  種データ保持部，  ９２  擬似乱数生成部，  ９３  擬似乱数バッファ，  ９４  係数判定部，  ９５  係数生成確率保持部，  ９６  係数行列保持部，  ９７  係数行列出力部，  １１１  元データ受付部，  １１２  元データカウンタ，  １１３  ブロックカウンタ，  １１４  ヘッダ付加部，  １２１  冗長データ受付部，  １２２  オフセット値供給部，  １２３  冗長データカウンタ，  １３１  アプリケーションデータ，  １３２  ブロック番号，  １３３  元データパケット番号，  １３４  元データ，  １４１  アプリケーションデータ，  １４２ブロック番号，  １４３  冗長データパケット番号，  １４４  冗長データ，  ２１０  ケーブル，  ２２１  イーサネット(R)処理部，  ２２２  IP処理部，  ２２３  アプリケーションデータ抽出部，  ２２４  バッファ，  ２２５  データ分離部，  ２２６  パケットロス判定部，  ２２７  ブロックデータ復元部，  ２２８  ロスパケット復元部，  ２２９  ブロック合成部，  ２４１  元データ，２４２  冗長データ，  ２５１  判定結果取得部，  ２５２  元データ保持部，  ２５３  行列式作成部，  ２５４  冗長データ保持部，  ２５５  係数行列供給部，  ２５６  行列式演算部，  ２５７  解出力部，  ４３０  アプリケーションデータ生成部，  ４３１  データ識別子設定部，  ５０１  通信システム，  ５１１  送受信装置，  ５１２  ネットワーク，  ５１３  送受信装置，  ５２１  送信部，  ５２２  受信部，  ５３１  送信部，  ５３２  受信部，  ６０１  コンテンツ配信システム，  ６１１  サーバ，  ６１２  ネットワーク，  ６１３  端末装置，  ６１４  端末装置，  ７０１  パーソナルコンピュータ，  ７１１  CPU，  ７１２  ROM，  ７１３  RAM，  ７１４  バス，  ７２０  入出力インタフェース，  ７２１  入力部，  ７２２  出力部，  ７２３  記憶部，  ７２４  通信部，  ７２５  ドライブ，  ７２６  リムーバブルメディア
【図１】
2005223684.tif 000007
【図２】
2005223684.tif 000008
【図３】
2005223684.tif 000009
【図４】
2005223684.tif 000010
【図５】
2005223684.tif 000011
【図６】
2005223684.tif 000012
【図７】
2005223684.tif 000013
【図８】
2005223684.tif 000014
【図９】
2005223684.tif 000015
【図１０】
2005223684.tif 000016
【図１１】
2005223684.tif 000017
【図１２】
2005223684.tif 000018
【図１３】
2005223684.tif 000019
【図１４】
2005223684.tif 000020
【図１５】
2005223684.tif 000021
【図１６】
2005223684.tif 000022
【図１７】
2005223684.tif 000023
【図１８】
2005223684.tif 000024
【図１９】
2005223684.tif 000025
【図２０】
2005223684.tif 000026
【図２１】
2005223684.tif 000027
【図２２】
2005223684.tif 000028
【図２３】
2005223684.tif 000029
【図２４】
2005223684.tif 000030
【図２５】
2005223684.tif 000031
【図２６】
2005223684.tif 000032
【図２７】
2005223684.tif 000033
【図２８】
2005223684.tif 000034
【図２９】
2005223684.tif 000035
【図３０】
2005223684.tif 000036
【図３１】
2005223684.tif 000037
【図３２】
2005223684.tif 000038
【図３３】
2005223684.tif 000039
【図３４】
2005223684.tif 000040
【図３５】
2005223684.tif 000041
【図３６】
2005223684.tif 000042
【図３７】
2005223684.tif 000043
【図３８】
2005223684.tif 000044
【図３９】
2005223684.tif 000045