(57)【要約】  符号化時の演算負荷を低減すること。  送信データ（３１）を分割した複数の分割データ（３１−Ａ、…）と、分割データの組み合わせを表す複数の符号化パターン（３２−１、…）を含む符号化情報（３２）とが格納されたメモリ（１１）を有するコンピュータ（１０）に、符号化パターンに対応する複数の分割データを対象に、設定した演算（３３）を実行して符号化データ（３４−１、…）を生成し、符号化データ（３４−１、…）をメモリ（１１）に格納し、演算（３３）の対象に対応する符号化パターンである第２パターンが表す分割データの組み合わせの一部（３５）に、メモリ（１１）に格納した符号化データ（３４−２）に対応する符号化パターンである第１パターンが表す分割データの組み合わせが含まれる場合には、当該第１パターンに対応する符号化データ（３４−２）を利用して演算（３３）を実行する、処理を実行させるプログラムが提供される。
2015049756.tif 000002
【特許請求の範囲】
【請求項１】
送信データを分割した複数の分割データと、前記分割データの組み合わせを表す複数の符号化パターンを含む符号化情報とが格納されたメモリを有するコンピュータが、
前記符号化情報に含まれる前記符号化パターンのそれぞれについて、前記符号化パターンに対応する複数の前記分割データを対象に、設定した演算を実行して符号化データを生成し、前記符号化データを前記メモリに格納し、
前記メモリに格納した前記符号化データに対応する前記符号化パターンである第１パターンと、前記演算の対象に対応する前記符号化パターンである第２パターンとを比較し、前記第２パターンが表す前記分割データの組み合わせの一部に、前記第１パターンが表す前記分割データの組み合わせが含まれる場合には、前記符号化データを生成する処理の中で、当該第１パターンに対応する前記符号化データを利用して前記演算を実行する
符号化方法。
【請求項２】
前記生成する処理では、前記第２パターンが表す前記分割データの組み合わせの一部に前記分割データの組み合わせが含まれる前記第１パターンのうち、前記分割データの数が最大となる前記第１パターンが選択され、当該第１パターンに対応する前記符号化データが前記演算に利用される
請求項１に記載の符号化方法。
【請求項３】
前記メモリには、前記符号化情報に含まれる前記符号化パターンから選択可能な２つの前記符号化パターンの組毎に、一の前記符号化パターンと他の前記符号化パターンとの間の相違度を表す距離情報が格納され、
前記生成する処理では、前記距離情報に基づいて前記分割データの数が最大となる前記第１パターンが選択される
請求項２に記載の符号化方法。
【請求項４】
前記生成する処理では、前記符号化情報に含まれる前記符号化パターンから選択可能な２つの前記符号化パターンの組毎に、一の前記符号化パターンと他の前記符号化パターンとの間の相違度を計算する論理演算が第１の二分決定グラフで表現され、前記第１の二分決定グラフを用いて、前記分割データの数が最大となる前記第１パターンを選択する論理演算が第２の二分決定グラフで表現され、前記第２の二分決定グラフを用いて選択された前記第１パターンに対応する前記符号化データが前記演算に利用される
請求項２に記載の符号化方法。
【請求項５】
送信データを分割した複数の分割データと、前記分割データの組み合わせを表す複数の符号化パターンを含む符号化情報とが格納された記憶部と、
前記符号化情報に含まれる前記符号化パターンのそれぞれについて、前記符号化パターンに対応する複数の前記分割データを対象に、設定した演算を実行して符号化データを生成し、前記符号化データを前記記憶部に格納する演算部と、
を有し、
前記演算部は、前記記憶部に格納した前記符号化データに対応する前記符号化パターンである第１パターンと、前記演算の対象に対応する前記符号化パターンである第２パターンとを比較し、前記第２パターンが表す前記分割データの組み合わせの一部に、前記第１パターンが表す前記分割データの組み合わせが含まれる場合に、前記第１パターンに対応する前記符号化データを利用して前記演算を実行する
符号化装置。
【請求項６】
送信データを分割した複数の分割データと、前記分割データの組み合わせを表す複数の符号化パターンを含む符号化情報とが格納されたメモリを有するコンピュータに、
前記符号化情報に含まれる前記符号化パターンのそれぞれについて、前記符号化パターンに対応する複数の前記分割データを対象に、設定した演算を実行して符号化データを生成し、前記符号化データを前記メモリに格納し、
前記メモリに格納した前記符号化データに対応する前記符号化パターンである第１パターンと、前記演算の対象に対応する前記符号化パターンである第２パターンとを比較し、前記第２パターンが表す前記分割データの組み合わせの一部に、前記第１パターンが表す前記分割データの組み合わせが含まれる場合には、前記符号化データを生成する処理の中で、当該第１パターンに対応する前記符号化データを利用して前記演算を実行する
処理を実行させる、プログラム。
【請求項７】
前記演算部は、前記第２パターンが表す前記分割データの組み合わせの一部に前記分割データの組み合わせが含まれる前記第１パターンのうち、前記分割データの数が最大となる前記第１パターンを選択し、当該第１パターンに対応する前記符号化データを前記演算に利用する
請求項５に記載の符号化装置。
【請求項８】
前記記憶部には、前記符号化情報に含まれる前記符号化パターンから選択可能な２つの前記符号化パターンの組毎に、一の前記符号化パターンと他の前記符号化パターンとの間の相違度を表す距離情報が格納され、
前記演算部は、前記距離情報に基づいて前記分割データの数が最大となる前記第１パターンを選択する
請求項７に記載の符号化装置。
【請求項９】
前記演算部は、前記符号化情報に含まれる前記符号化パターンから選択可能な２つの前記符号化パターンの組毎に、一の前記符号化パターンと他の前記符号化パターンとの間の相違度を計算する論理演算を第１の二分決定グラフで表現し、前記第１の二分決定グラフを用いて、前記分割データの数が最大となる前記第１パターンを選択する論理演算を第２の二分決定グラフで表現し、前記第２の二分決定グラフを用いて選択した前記第１パターンに対応する前記符号化データを前記演算に利用する
請求項７に記載の符号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、符号化装置、及び符号化方法に関する。
【背景技術】
【０００２】
データ通信には、例えば、インターネット、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）、携帯電話網などの様々なネットワークが利用されている。こうしたネットワークを利用したデータ通信の多くでは、送信装置と受信装置との間でエンドツーエンドの通信を制御してアプリケーション層へと適切にデータを渡すため、トランスポート層のプロトコルが利用される。トランスポート層のプロトコルとしては、例えば、コネクション型のＴＣＰ（Transmission Control Protocol）やコネクションレス型のＵＤＰ（User Datagram Protocol）などがある。【０００３】
ＴＣＰでは、データパケットが受信装置に到達したことを保証するため、データパケットを受信装置が正常に受信した場合にＡＣＫ（ACKnowledgement）を送信装置へ返信する仕組みについて規定されている。また、ＴＣＰでは、送信装置がデータパケットを送信してから一定時間内に期待されるＡＣＫを受信できない場合にデータパケットを再送する仕組みについて規定されている。このような仕組みを有するＴＣＰは、信頼性の高いトランスポート層のプロトコルである。【０００４】
一方、ＵＤＰではＡＣＫによる到達確認が行われないため、データ伝送の高速性に優れ、通信のスループットやリアルタイム性を重視するデータ通信に用いられることが多い。また、ＵＤＰは上位層のプロトコルにおいて信頼性を高めるための機能を独自に実装することが可能である。例えば、ＵＤＰに、前方誤り訂正（ＦＥＣ：Forward Error Correction）符号化や再送制御などの機能を組み合わせることができる。このような組み合わせを実装することで、データ伝送の高速性と信頼性とを両立させることが可能になる。【０００５】
誤り訂正符号には、例えば、リードソロモン符号や低密度パリティ検査符号（ＬＤＰＣ：Low-Density Parity-check Code）などがある。また、最近では、排他的論理和を用いて生成される高性能な誤り訂正符号であるＲＰＳ（Random Parity Stream）符号が提案されている。さらに、ＵＤＰにＲＰＳ符号化を組み合わせて高速なデータ伝送を実現するデータ伝送方法が提案されている。このデータ伝送方法では、送信側で、送信データを分割した分割データから排他的論理和演算により符号化データを生成し、受信側で、排他的論理和演算を用いて符号化データから送信データを復元する処理が行われる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４３１８３１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のデータ伝送方式では、送信データの分割数を大きくするほど、受信側で送信データを復元できる確率が高まる。つまり、分割データの個数が増加するほど信頼性が高まる。一方で、分割データの個数が増えると、符号化データを生成する際に実行する排他的論理和演算の回数も増加する。この例のように、分割データの組み合わせに論理演算を施して符号化データを生成する符号化方法においては、より少ない回数の論理演算で同じ符号化データが生成できれば、信頼性を損なうことなく符号化時の演算負荷を低減することが可能になる。【０００８】
そこで、１つの側面によれば、本発明の目的は、符号化時の演算負荷を低減することが可能な、プログラム、符号化装置、及び符号化方法を提供することにある。
【課題を解決するための手段】
【０００９】
本開示の１つの側面によれば、送信データを分割した複数の分割データと、分割データの組み合わせを表す複数の符号化パターンを含む符号化情報とが格納されたメモリを有するコンピュータに、符号化情報に含まれる符号化パターンのそれぞれについて、符号化パターンに対応する複数の分割データを対象に、設定した演算を実行して符号化データを生成し、符号化データをメモリに格納する処理を実行させるプログラムが提供される。さらに、当該プログラムは、メモリに格納した符号化データに対応する符号化パターンである第１パターンと、演算の対象に対応する符号化パターンである第２パターンとを比較し、第２パターンが表す分割データの組み合わせの一部に、第１パターンが表す分割データの組み合わせが含まれる場合には、上記符号化データを生成する処理の中で、当該第１パターンに対応する符号化データを利用して演算を実行する処理をコンピュータに実行させる。【００１０】
また、本開示の他の１つの側面によれば、送信データを分割した複数の分割データと、分割データの組み合わせを表す複数の符号化パターンを含む符号化情報とが格納された記憶部と、符号化情報に含まれる符号化パターンのそれぞれについて、符号化パターンに対応する複数の分割データを対象に、設定した演算を実行して符号化データを生成し、符号化データを記憶部に格納する演算部と、を有し、演算部は、記憶部に格納した符号化データに対応する符号化パターンである第１パターンと、演算の対象に対応する符号化パターンである第２パターンとを比較し、第２パターンが表す分割データの組み合わせの一部に、第１パターンが表す分割データの組み合わせが含まれる場合に、第１パターンに対応する符号化データを利用して演算を実行する符号化装置が提供される。【００１１】
また、本開示の他の１つの側面によれば、送信データを分割した複数の分割データと、分割データの組み合わせを表す複数の符号化パターンを含む符号化情報とが格納されたメモリを有するコンピュータが、符号化情報に含まれる符号化パターンのそれぞれについて、符号化パターンに対応する複数の分割データを対象に、設定した演算を実行して符号化データを生成し、符号化データをメモリに格納し、メモリに格納した符号化データに対応する符号化パターンである第１パターンと、演算の対象に対応する符号化パターンである第２パターンとを比較し、第２パターンが表す分割データの組み合わせの一部に、第１パターンが表す分割データの組み合わせが含まれる場合には、上記符号化データを生成する処理の中で、当該第１パターンに対応する符号化データを利用して演算を実行する符号化方法が提供される。
【発明の効果】
【００１２】
以上説明したように本発明によれば、符号化時の演算負荷を低減することが可能になる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】第１実施形態に係る通信システムの一例を示した図である。
【図２】第２実施形態に係るシステムの一例を示した図である。
【図３】ＲＰＳ符号化方式について説明するための第１の図である。
【図４】ＲＰＳ符号化方式について説明するための第２の図である。
【図５】ＲＰＳ符号化方式について説明するための第３の図である。
【図６】第２実施形態に係る符号化装置の機能を実現することが可能なハードウェアの一例を示した図である。
【図７】第２実施形態に係る符号化装置が有する機能の一例を示したブロック図である。
【図８】第２実施形態に係るハミング距離テーブルの一例を示した図である。
【図９】第２実施形態に係る符号化処理について説明するための図である。
【図１０】第２実施形態に係る復号装置が有する機能の一例を示したブロック図である。
【図１１】第２実施形態に係る符号化装置が実行する処理の流れを示した第１のフロー図である。
【図１２】第２実施形態に係る符号化装置が実行する処理の流れを示した第２のフロー図である。
【図１３】第２実施形態に係る符号化装置が実行する処理の流れを示した第３のフロー図である。
【図１４】第２実施形態に係る復号装置が実行する処理の流れを示したフロー図である。
【図１５】第２実施形態の一変形例に係る二分決定グラフの表現について説明するための第１の図である。
【図１６】第２実施形態の一変形例に係る二分決定グラフの表現について説明するための第２の図である。
【図１７】第２実施形態の一変形例に係る二分決定グラフの表現について説明するための第３の図である。
【図１８】第２実施形態の一変形例に係るハミング距離の計算方法について説明するための第１の図である。
【図１９】第２実施形態の一変形例に係るハミング距離の計算方法について説明するための第２の図である。
【図２０】第２実施形態の一変形例に係るハミング距離の計算方法について説明するための第３の図である。
【図２１】第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第１の図である。
【図２２】第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第２の図である。
【図２３】第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第３の図である。
【図２４】第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第４の図である。
【図２５】第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第５の図である。
【図２６】第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第６の図である。
【図２７】第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第７の図である。
【図２８】第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第８の図である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照しながら、本発明の実施形態について説明する。なお、本明細書及び図面において実質的に同一の機能を有する要素については、同一の符号を付することにより重複説明を省略する場合がある。
【００１５】
＜１．第１実施形態＞
図１を参照しながら、第１実施形態について説明する。図１は、第１実施形態に係る通信システムの一例を示した図である。なお、図１に示した通信システムは一例であり、第１実施形態に係る技術の適用範囲はこれに限定されない。
【００１６】
図１に示すように、第１実施形態に係る通信システムは、コンピュータ１０、２０を含む。コンピュータ１０は、ネットワークＮＷを介してコンピュータ２０に接続されている。コンピュータ１０は、メモリ１１、及びプロセッサ１２を有する。
【００１７】
メモリ１１は、例えば、ＲＡＭ（Random Access Memory）などの揮発性記憶装置、或いは、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置である。プロセッサ１２は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。但し、プロセッサ１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの電子回路であってもよい。プロセッサ１２は、例えば、メモリ１１又は他の記憶装置に格納されたプログラムに従って処理を実行する。
【００１８】
メモリ１１は、送信データ３１を分割した複数の分割データ３１−Ａ、…、３１−Ｄと、分割データの組み合わせを表す複数の符号化パターン３２−１、…、３２−６を含む符号化情報３２とが格納されている。なお、図１の例では、分割データ３１−Ａ、…、３１−Ｄをそれぞれ「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」と記したブロックで表現している。送信データ３１は、ネットワークＮＷを介してコンピュータ１０からコンピュータ２０へと送信されるデータの一例である。分割データ３１−Ａ、…、３１−Ｄは、予め設定されたデータサイズで送信データ３１を分割した分割データの一例である。
【００１９】
符号化情報３２は、符号化パターン３２−１、…、３２−６を含む。符号化パターン３２−１、…、３２−６のそれぞれは、分割データ３１−Ａ、…、３１−Ｄの組み合わせを表す。また、符号化パターン３２−１、…、３２−６は、例えば、それぞれビット列で表現される。この場合、符号化情報３２は、図１に示すように、符号化パターン３２−１のビット列を１行目、…、符号化パターン３２−６のビット列を６行目とするビット値の行列で表現される。また、符号化パターン３２−１、…、３２−６は、それぞれ符号化データ３４−１、…、３４−６に対応し、対応する符号化データの演算に用いられる。なお、図１の例では、符号化データ３４−１、…、３４−６をそれぞれ「Ｘ１」、…、「Ｘ６」と記したブロックで表現している。
【００２０】
プロセッサ１２は、符号化情報３２に含まれる符号化パターン３２−１、…、３２−６のそれぞれについて、符号化パターンに対応する複数の分割データを対象に、設定した演算３３を実行して符号化データ３４−１、…、３４−６を生成する。また、プロセッサ１２は、符号化データ３４−１、…、３４−６をメモリ１１に格納する。
【００２１】
一例として、符号化パターン３２−２、３２−５から符号化データ３４−２、３４−５を生成する方法について説明する。
図１の例では、符号化パターン３２−２のビット列が０１１０に設定されている。プロセッサ１２は、ビット値が１の位置に対応する分割データ（この場合、分割データ３１−Ｂ、３１−Ｃ）を選択する。そして、プロセッサ１２は、分割データ３１−Ｂ、３１−Ｃに対し、予め設定された演算３３を施して符号化データ３４−２を生成する。演算３３は、例えば、排他的論理和（以下、ＸＯＲと表記する場合がある。）演算などの論理演算である。プロセッサ１２は、符号化データ３４−２をメモリ１１に格納する。
【００２２】
また、図１の例では、符号化パターン３２−５のビット列が０１１１に設定されている。プロセッサ１２は、ビット値が１の位置に対応する分割データ（この場合、分割データ３１−Ｂ、３１−Ｃ、３１−Ｄ）を選択する。そして、プロセッサ１２は、分割データ３１−Ｂ、３１−Ｃ、３１−Ｄに対し、予め設定された演算３３を施して符号化データ３４−５を生成する。このとき、プロセッサ１２は、メモリ１１に格納された符号化データ３４−２を符号化データ３４−５の生成に利用する。利用方法は次の通りである。
【００２３】
プロセッサ１２は、メモリ１１に格納した符号化データ３４−２に対応する符号化パターン３２−２である第１パターンと、演算３３の対象に対応する符号化パターン３２−５である第２パターンとを比較する。そして、プロセッサ１２は、第２パターンが表す分割データの組み合わせの一部３５に、第１パターンが表す分割データの組み合わせが含まれるか否かを判断する。この判断は、例えば、符号化情報３２に含まれる符号化パターン３２−２、３２−５の比較により実現可能である。
【００２４】
図１の例では、第１パターンに対応する分割データの組み合わせが分割データ３１−Ｂ、３１−Ｃである。また、第２パターンに対応する分割データの組み合わせは分割データ３１−Ｂ、３１−Ｃ、３１−Ｄである。図１の例では、第２パターンが表す分割データの組み合わせの一部３５が、第１パターンに対応する分割データの組み合わせ（分割データ３１−Ｂ、３１−Ｃ）に一致している。そのため、プロセッサ１２は、第１パターンに対応する符号化データ３４−２を利用して演算３３を実行する。図１の例では、プロセッサ１２が、符号化データ３４−２及び分割データ３１−Ｄを対象に演算３３を実行して符号化データ３４−５を生成する。
【００２５】
上記のように、既に保持している符号化データを利用して演算３３を実行することで、演算３３を実行する際の演算負荷を低減することが可能になる。
符号化データ３４−１、…、３４−６は、ネットワークＮＷを介してコンピュータ２０へと送信される。コンピュータ２０は、受信した符号化データ３４−１、…、３４−６を用いて送信データ３１を復元する。上記のように、符号化データ３４−１、…、３４−６は、それぞれ分割データ３１−Ａ、…、３１−Ｄの組み合わせを用いて生成されたものである。また、符号化データ３４−１、…、３４−６は冗長性を有する。そのため、符号化データ３４−１、…、３４−６の一部が欠損しても、コンピュータ２０は、符号化情報３２に基づいて分割データ３１−Ａ、…、３１−Ｄを高い確率で復元することができる。
【００２６】
以上、第１実施形態について説明した。
＜２．第２実施形態＞
次に、第２実施形態について説明する。第２実施形態ではＲＰＳ符号化方式に基づく対象データの送受信を想定し、当該対象データの符号化時における演算処理の負荷を低減する技術を提案する。
【００２７】
［２−１．システム］
まず、図２を参照しながら、第２実施形態に係るシステムについて説明する。図２は、第２実施形態に係るシステムの一例を示した図である。
【００２８】
なお、第２実施形態に係る技術の適用範囲はこれに限定されず、図２に例示したシステムとは異なる種類の装置を組み合わせたシステムに適用することも可能である。例えば、図２の例ではサーバ装置を模した装置が記載されているが、携帯電話やスマートフォンなどの端末装置、或いは、中継局などの通信装置を含むシステムに適用することも可能である。但し、説明の都合上、以下では図２に例示したシステムを想定して説明を進める。
【００２９】
図２に示すように、第２実施形態に係るシステムは、符号化装置１００、及び復号装置２００を含む。符号化装置１００は、ネットワークＮＷを介して復号装置２００に接続されている。適用可能なネットワークＮＷとしては、例えば、ＬＡＮ、ＷＡＮ、携帯電話網、衛星通信網、光ファイバネットワークなどの様々なネットワーク及びその組み合わせがある。
【００３０】
符号化装置１００は、ネットワークＮＷを介して復号装置２００へとデータ（以下、対象データ）を送信する。このとき、符号化装置１００は、対象データを分割して複数の分割データを生成する。さらに、符号化装置１００は、複数の分割データに基づく符号化処理を実行して複数の符号化データを生成する。そして、符号化装置１００は、生成した複数の符号化データを復号装置２００に送信する。復号装置２００は、受信した複数の符号化データに基づく復号処理を実行して複数の分割データを復元する。そして、復号装置２００は、復元した複数の分割データを結合して対象データを復元する。
【００３１】
［２−２．ＲＰＳ符号化方式について］
第２実施形態に係るシステムでは、符号化装置１００によりＲＰＳ符号化方式に基づく符号化処理が実行され、復号装置２００によりＲＰＳ符号化方式に基づく復号処理が実行される。そこで、図３〜図５を参照しながら、ＲＰＳ符号化方式について説明する。なお、図３は、ＲＰＳ符号化方式について説明するための第１の図である。図４は、ＲＰＳ符号化方式について説明するための第２の図である。図５は、ＲＰＳ符号化方式について説明するための第３の図である。
【００３２】
図３に示すように、ＲＰＳ符号化方式では、送信側において対象データが複数の分割データに分割される。例えば、各分割データのデータサイズが同じになるように対象データが分割される。ここでは説明の都合上、対象データが分割データＡ、Ｂ、Ｃ、Ｄに分割されたものとする。次いで、分割データＡ、Ｂ、Ｃ、Ｄを利用して符号化処理が行われる。この符号化処理には符号化行列が利用される。この符号化行列の各行は、分割データＡ、Ｂ、Ｃ、Ｄの組み合わせを表している。
【００３３】
例えば、図３に例示した符号化行列の１行目はビット列１０１０である。この例では、符号化行列の１列目が分割データＡ、２列目が分割データＢ、３列目が分割データＣ、４列目が分割データＤに対応付けられている。そして、ビット値１のビットに対応する分割データが組み合わせ対象の分割データとされる。従って、ビット列１０１０は、分割データＡ、Ｃの組み合わせを表現している。
【００３４】
同様に、２行目に記載されたビット列０１１０は、分割データＢ、Ｃの組み合わせを表現している。３〜６行目についても同様である。なお、符号化行列の行数や組み合わせのパターンは予め設定することが可能であり、図３に示した例に限定されない。
【００３５】
図３に例示した符号化処理においては、分割データＡ、Ｂ、Ｃ、Ｄから６つの符号化データＸ１、Ｘ２、…、Ｘ６が生成される。符号化データＸ１は、符号化行列の１行目に対応する。符号化データＸ２は、符号化行列の２行目に対応する。
【００３６】
同様に、符号化データＸ３、…、Ｘ６は、それぞれ符号化行列の３行目、…、６行目に対応する。符号化データＸ１、Ｘ２、…、Ｘ６は、送信側から受信側へと送信される。このとき、伝送路損失などにより符号化データＸ１、Ｘ２、…、Ｘ６の一部が正常に受信されないことがある。図３には、符号化データＸ３、Ｘ６が正常に受信されなかった場合が例示されている。
【００３７】
上記の通り、符号化データＸ１、Ｘ２、…、Ｘ６は、それぞれ分割データＡ、Ｂ、Ｃ、Ｄの組み合わせに基づいて生成されている。また、符号化データＸ１、Ｘ２、…、Ｘ６は、それぞれ冗長性を有する。そのため、符号化データＸ１、Ｘ２、…、Ｘ６の一部が正常に受信されなくても、分割データＡ、Ｂ、Ｃ、Ｄを高い確率で復元することができる。
【００３８】
復号処理には、送信側で符号化時に利用した符号化行列と同じ情報が利用される。図３の例では、復号処理により分割データＡ、Ｂ、Ｃ、Ｄが復元され、分割データＡ、Ｂ、Ｃ、Ｄが結合されて対象データが復元されている。このように、ＲＰＳ符号化方式では、対象データの分割、符号化処理、復号処理、分割データの結合などの処理が行われる。
【００３９】
ここで、図４を参照しながら、ＲＰＳ符号化方式に基づく符号化処理について、さらに説明する。なお、図４に例示した符号化処理の内容は図３の例に対応する。
図４に示すように、ＲＰＳ符号化方式では、分割データに対する排他的論理和（ＸＯＲ）演算を利用して符号化データが生成される。例えば、符号化データＸ１は、分割データＡ、Ｃに対する排他的論理和演算の結果である。
【００４０】
排他的論理和演算の対象となる分割データの組み合わせは符号化行列により設定される。符号化データＸ１は符号化行列の１行目に対応する。従って、符号化データＸ１は、符号化行列の１行目に記載のビット列１０１０が示す分割データＡ、Ｃに対する排他的論理和演算により得られる。同様に、符号化データＸ２、…、Ｘ６は、それぞれ符号化行列の２行目、…、６行目に記載のビット列が示す分割データの組み合わせに対する排他的論理和演算により得られる。
【００４１】
一方、分割データＡ、Ｂ、Ｃ、Ｄを復元するための復号処理は、図５に示すような方法で行われる。なお、符号化データと、その符号化データの生成時に利用された符号化行列の行との関係を示す情報は送信側から受信側へと伝送されているものとする。また、送信側から受信側へと伝送する過程で符号化データＸ３、Ｘ６が失われたものとする。この場合、受信側では、図５に示すように、正常に受信された符号化データＸ１、Ｘ２、Ｘ４、Ｘ５を組み合わせて分割データＡ、Ｂ、Ｃ、Ｄが復元される。
【００４２】
例えば、符号化データＸ２は、分割データＢ、Ｃに対する排他的論理和演算の結果である。また、符号化データＸ５は、分割データＢ、Ｃ、Ｄに対する排他的論理和演算の結果である。従って、符号化データＸ２、Ｘ５に対する排他的論理和演算の演算結果Ｙ１は、分割データＤを復元したデータとなる。
【００４３】
同様に、符号化データＸ４及び演算結果Ｙ１に対する排他的論理和演算の演算結果Ｙ２は、分割データＢを復元したデータとなる。また、符号化データＸ２及び演算結果Ｙ２に対する排他的論理和演算の演算結果Ｙ３は、分割データＣを復元したデータとなる。そして、符号化データＸ１及び演算結果Ｙ３に対する排他的論理和演算の演算結果Ｙ４は、分割データＡを復元したデータとなる。このように、正常に受信された符号化データＸ１、Ｘ２、Ｘ４、Ｘ５を組み合わせることで分割データＡ、Ｂ、Ｃ、Ｄが復元される。
【００４４】
なお、排他的論理和演算の対象とする符号化データの組み合わせ方や、排他的論理和演算の実行順序などは図５の例に限定されない。また、符号化行列の情報を参照することで、正常に受信された符号化データから分割データＡ、Ｂ、Ｃ、Ｄが全て復元可能であるかを判断したり、全てを復元するために送信側へ再送要求する符号化データを決定することができる。
【００４５】
図３〜図５には説明の都合上、分割数及び符号化行列の列数が少なく、冗長性が低い例を挙げたが、より冗長性を高めることで符号化データの消失に対する耐性が高まる。但し、冗長性を高めると符号化処理の際に実行される排他的論理和演算の回数が増加する。第２実施形態では、排他的論理和演算の回数を低減することが可能な仕組みを提案する。
【００４６】
［２−３．ハードウェア］
次に、図６を参照しながら、符号化装置１００のハードウェアについて説明する。図６は、第２実施形態に係る符号化装置の機能を実現することが可能なハードウェアの一例を示した図である。符号化装置１００が有する機能は、例えば、図６に示す情報処理装置のハードウェア資源を用いて実現することが可能である。つまり、符号化装置１００が有する機能は、コンピュータプログラムを用いて図６に示すハードウェアを制御することにより実現される。
【００４７】
図６に示すように、このハードウェアは、主に、ＣＰＵ９０２と、ＲＯＭ（Read Only Memory）９０４と、ＲＡＭ９０６と、ホストバス９０８と、ブリッジ９１０とを有する。さらに、このハードウェアは、外部バス９１２と、インターフェース９１４と、入力部９１６と、出力部９１８と、記憶部９２０と、ドライブ９２２と、接続ポート９２４と、通信部９２６とを有する。
【００４８】
ＣＰＵ９０２は、例えば、演算処理装置又は制御装置として機能し、ＲＯＭ９０４、ＲＡＭ９０６、記憶部９２０、又はリムーバブル記録媒体９２８に記録された各種プログラムに基づいて各構成要素の動作全般又はその一部を制御する。ＲＯＭ９０４は、ＣＰＵ９０２に読み込まれるプログラムや演算に用いるデータなどを格納する記憶装置の一例である。ＲＡＭ９０６には、例えば、ＣＰＵ９０２に読み込まれるプログラムや、そのプログラムを実行する際に変化する各種パラメータなどが一時的又は永続的に格納される。
【００４９】
これらの要素は、例えば、高速なデータ伝送が可能なホストバス９０８を介して相互に接続される。一方、ホストバス９０８は、例えば、ブリッジ９１０を介して比較的データ伝送速度が低速な外部バス９１２に接続される。また、入力部９１６としては、例えば、マウス、キーボード、タッチパネル、タッチパッド、ボタン、スイッチ、及びレバーなどが用いられる。さらに、入力部９１６としては、赤外線やその他の電波を利用して制御信号を送信することが可能なリモートコントローラが用いられることもある。
【００５０】
出力部９１８としては、例えば、ＣＲＴ（Cathode Ray Tube）、ＬＣＤ（Liquid Crystal Display）、ＰＤＰ（Plasma Display Panel）、又はＥＬＤ（Electro-Luminescence Display）などのディスプレイ装置が用いられる。また、出力部９１８として、スピーカやヘッドホンなどのオーディオ出力装置、又はプリンタなどが用いられることもある。つまり、出力部９１８は、情報を視覚的又は聴覚的に出力することが可能な装置である。
【００５１】
記憶部９２０は、各種のデータを格納するための装置である。記憶部９２０としては、例えば、ＨＤＤなどの磁気記憶デバイスが用いられる。また、記憶部９２０として、ＳＳＤ（Solid State Drive）やＲＡＭディスクなどの半導体記憶デバイス、光記憶デバイス、又は光磁気記憶デバイスなどが用いられてもよい。
【００５２】
ドライブ９２２は、着脱可能な記録媒体であるリムーバブル記録媒体９２８に記録された情報を読み出し、又はリムーバブル記録媒体９２８に情報を書き込む装置である。リムーバブル記録媒体９２８としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどが用いられる。
【００５３】
接続ポート９２４は、例えば、ＵＳＢ（Universal Serial Bus）ポート、ＩＥＥＥ１３９４ポート、ＳＣＳＩ（Small Computer System Interface）、ＲＳ−２３２Ｃポート、又は光オーディオ端子など、外部接続機器９３０を接続するためのポートである。外部接続機器９３０としては、例えば、プリンタなどが用いられる。
【００５４】
通信部９２６は、ネットワーク９３２に接続するための通信デバイスである。通信部９２６としては、例えば、有線又は無線ＬＡＮ（Local Area Network）用の通信回路、ＷＵＳＢ（Wireless USB）用の通信回路、光通信用の通信回路やルータ、ＡＤＳＬ（Asymmetric Digital Subscriber Line）用の通信回路やルータ、携帯電話ネットワーク用の通信回路などが用いられる。通信部９２６に接続されるネットワーク９３２は、有線又は無線により接続されたネットワークであり、例えば、インターネット、ＬＡＮ、放送網、衛星通信回線などを含む。
【００５５】
以上、符号化装置１００の機能を実現することが可能なハードウェアについて説明した。なお、復号装置２００の機能も図６に示したハードウェアを用いて実現可能である。
［２−４．符号化装置の機能］
次に、図７を参照しながら、符号化装置１００の機能について説明する。図７は、第２実施形態に係る符号化装置が有する機能の一例を示したブロック図である。なお、説明の中で、適宜、図８及び図９を参照する。図８は、第２実施形態に係るハミング距離テーブルの一例を示した図である。図９は、第２実施形態に係る符号化処理について説明するための図である。
【００５６】
図７に示すように、符号化装置１００は、記憶部１０１、符号化部１０２、及び通信制御部１０３を有する。記憶部１０１の機能は、上述したＲＡＭ９０６や記憶部９２０などを用いて実現できる。符号化部１０２の機能は、上述したＣＰＵ９０２などを用いて実現できる。通信制御部１０３は、上述した接続ポート９２４や通信部９２６などを制御して符号化装置１００の通信機能を実現する。
【００５７】
（記憶部１０１）
記憶部１０１は、対象データ１１１、符号化行列１１２、及びハミング距離１１３を記憶する。対象データ１１１は、復号装置２００へと送信される送信データの一例である。符号化行列１１２は、分割データの組み合わせを示す複数のビット列で表現された符号化情報の一例である。ハミング距離１１３は、符号化行列１１２に含まれるビット列間のハミング距離（対応する位置にある異なったビットの個数）である。例えば、記憶部１０１には、図８に示すようなテーブル形式で表現されたハミング距離１１３の情報（以下、ハミング距離テーブル）が格納される。
【００５８】
ここで、図８を参照しながら、ハミング距離テーブルについて説明する。以下、符号化行列の１行目、２行目、…、６行目に記載のビット列をそれぞれｒ１、ｒ２、…、ｒ６と表現する。ハミング距離テーブルの行及び列にはそれぞれビット列ｒ１、ｒ２、…、ｒ６が割り当てられ、各枡にはビット列間のハミング距離を示す値が記載されている。例えば、ビット列ｒ１、ｒ６のハミング距離に対応する枡Ｈ６１には値１が記載されている。同様に、ビット列ｒ２、ｒ５のハミング距離に対応する枡Ｈ５２には値１が記載されている。なお、図８にはハミング距離テーブルの下三角部分だけを表記している。
【００５９】
（符号化部１０２）
符号化部１０２は、記憶部１０１が記憶する符号化行列１１２及びハミング距離１１３を利用して、記憶部１０１が記憶する対象データ１１１を符号化する。符号化部１０２は、分割部１２１、選択部１２２、及び論理演算部１２３を有する。分割部１２１は、記憶部１０１から対象データ１１１を読み出す。そして、分割部１２１は、読み出した対象データ１１１を複数の分割データに分割する。例えば、分割部１２１は、分割データのデータサイズが予め設定したデータサイズになるように対象データ１１１を分割する。
【００６０】
選択部１２２は、記憶部１０１に格納されたハミング距離テーブルを参照し、ハミング距離テーブルの行毎にハミング距離１１３の最小値（但し、対角成分を除く。）に対応するビット列を選択する。
【００６１】
例えば、選択部１２２は、ビット列ｒ５の行を参照し、ハミング距離１１３の最小値１が記載された枡Ｈ５２に対応するビット列ｒ２を選択する。なお、図８の例ではビット列ｒ４、ｒ５間のハミング距離１１３も１となるため、選択部１２２は、ビット列ｒ４を選択してもよい。同様に、選択部１２２は、ビット列ｒ６の行を参照し、ハミング距離１１３の最小値１が記載された枡Ｈ６１に対応するビット列ｒ１を選択する。なお、図８の例ではビット列ｒ２、ｒ６間のハミング距離１１３も１となるため、選択部１２２は、ビット列ｒ１を選択してもよい。
【００６２】
但し、選択部１２２は、参照するビット列の中でビット値が１のビットの数を計算し、ハミング距離１１３の最小値が、計算したビットの数以上となる行についてはビット列を選択しない。例えば、ビット列ｒ２は０１１０であるから、ビット値１のビット数は２である。一方、ビット列ｒ２の行におけるハミング距離１１３の最小値は２である。従って、ビット列ｒ２の行については、ハミング距離１１３の最小値に対応するビット列の選択が行われない。ビット列ｒ１、ｒ３、ｒ４の行についても同様である。
【００６３】
選択部１２２により選択されたビット列の情報は、論理演算部１２３に入力され、符号化処理に利用される。例えば、ビット列ｒ５の行についてハミング距離１１３の最小値に対応するビット列として選択されたビット列ｒ２の情報は、ビット列ｒ５に基づく符号化処理に利用される。また、ビット列ｒ６の行についてハミング距離１１３の最小値に対応するビット列として選択されたビット列ｒ１の情報は、ビット列ｒ６に基づく符号化処理に利用される。
【００６４】
論理演算部１２３は、記憶部１０１が記憶する符号化行列１１２、選択部１２２が選択したビット列の情報、分割部１２１により生成された複数の分割データを利用して符号化データを生成する。例えば、論理演算部１２３は、図９に示すような方法で、分割データＡ、Ｂ、Ｃ、Ｄから符号化データＸ１、Ｘ２、…、Ｘ６を生成する。
【００６５】
論理演算部１２３は、符号化行列１１２の１行目に記載のビット列ｒ１（１０１０）を参照し、ビット列ｒ１に対応する分割データＡ、Ｃを排他的論理和演算の対象に決める。次いで、論理演算部１２３は、分割データＡ、Ｃに対する排他的論理和演算を実行して符号化データＸ１を生成する。次いで、論理演算部１２３は、符号化データＸ１を記憶部１０１に格納する。
【００６６】
次に、論理演算部１２３は、符号化行列１１２の２行目に記載のビット列ｒ２（０１１０）を参照し、ビット列ｒ２に対応する分割データＢ、Ｃを排他的論理和演算の対象に決める。次いで、論理演算部１２３は、分割データＢ、Ｃに対する排他的論理和演算を実行して符号化データＸ２を生成する。次いで、論理演算部１２３は、符号化データＸ２を記憶部１０１に格納する。
【００６７】
次に、論理演算部１２３は、符号化行列１１２の３行目に記載のビット列ｒ３（１００１）を参照し、ビット列ｒ３に対応する分割データＡ、Ｄを排他的論理和演算の対象に決める。次いで、論理演算部１２３は、分割データＡ、Ｄに対する排他的論理和演算を実行して符号化データＸ３を生成する。次いで、論理演算部１２３は、符号化データＸ３を記憶部１０１に格納する。
【００６８】
次に、論理演算部１２３は、符号化行列１１２の４行目に記載のビット列ｒ４（０１０１）を参照し、ビット列ｒ４に対応する分割データＢ、Ｄを排他的論理和演算の対象に決める。次いで、論理演算部１２３は、分割データＢ、Ｄに対する排他的論理和演算を実行して符号化データＸ４を生成する。次いで、論理演算部１２３は、符号化データＸ４を記憶部１０１に格納する。この時点で、符号化データＸ１、Ｘ２、Ｘ３、Ｘ４が記憶部１０１に格納されている。
【００６９】
次に、論理演算部１２３は、符号化行列１１２の５行目に記載のビット列ｒ５（０１１１）を参照する。ビット列ｒ５については、ハミング距離１１３の最小値に対応するビット列ｒ２の情報が入力されている。そのため、論理演算部１２３は、ビット列ｒ２に対応する符号化データＸ２が記憶部１０１に格納されているか否かを確認する。図９の例では、既に符号化データＸ２が計算され、記憶部１０１に格納されている。そのため、論理演算部１２３は、記憶部１０１から符号化データＸ２を読み出す。
【００７０】
符号化データＸ２を読み出した論理演算部１２３は、ビット列ｒ５の中でビット列ｒ２と異なるビットを抽出する。図９の例では、ビット列ｒ５の４ビット目（分割データＤに対応）が抽出される。次いで、論理演算部１２３は、符号化データＸ２及び分割データＤに対する排他的論理和演算を実行して符号化データＸ５を生成する。次いで、論理演算部１２３は、符号化データＸ５を記憶部１０１に格納する。
【００７１】
次に、論理演算部１２３は、符号化行列１１２の６行目に記載のビット列ｒ６（１１１０）を参照する。ビット列ｒ６については、ハミング距離１１３の最小値に対応するビット列ｒ１の情報が入力されている。そのため、論理演算部１２３は、ビット列ｒ１に対応する符号化データＸ１が記憶部１０１に格納されているか否かを確認する。図９の例では、既に符号化データＸ１が計算され、記憶部１０１に格納されている。そのため、論理演算部１２３は、記憶部１０１から符号化データＸ１を読み出す。
【００７２】
符号化データＸ１を読み出した論理演算部１２３は、ビット列ｒ６の中でビット列ｒ１と異なるビットを抽出する。図９の例では、ビット列ｒ６の２ビット目（分割データＢに対応）が抽出される。次いで、論理演算部１２３は、符号化データＸ１及び分割データＢに対する排他的論理和演算を実行して符号化データＸ６を生成する。次いで、論理演算部１２３は、符号化データＸ６を記憶部１０１に格納する。
【００７３】
図９に示した符号化処理により、図４に示した符号化処理で得られる符号化データＸ１、Ｘ２、…、Ｘ６と同じ演算結果が得られる。但し、図４に示した符号化処理と図９に示した符号化処理とを比較すると、図９に示した符号化処理の方が排他的論理和演算の回数が少ない。この違いは、符号化データＸ５、Ｘ６の生成方法に起因する。上記のように、論理演算部１２３は、既に計算済みの符号化データＸ２を符号化データＸ５の生成に利用し、符号化データＸ１を符号化データＸ６の生成に利用している。そのため、一連の計算に含まれる重複した処理が省略され、排他的論理和演算の回数低減が実現される。
【００７４】
（通信制御部１０３）
通信制御部１０３は、論理演算部１２３により生成された符号化データを復号装置２００に送信する。このとき、通信制御部１０３は、ＵＤＰに従って復号装置２００と通信する。また、通信制御部１０３は、復号装置２００から再送要求を受けた場合に、再送要求で指定された符号化データを復号装置２００に再送する。
【００７５】
以上、符号化装置１００の機能について説明した。
［２−５．復号装置の機能］
次に、図１０を参照しながら、復号装置２００の機能について説明する。図１０は、第２実施形態に係る復号装置が有する機能の一例を示したブロック図である。
【００７６】
図１０に示すように、復号装置２００は、記憶部２０１、通信制御部２０２、及び復号部２０３を有する。記憶部２０１の機能は、上述したＲＡＭ９０６や記憶部９２０などを用いて実現できる。通信制御部２０２は、上述した接続ポート９２４や通信部９２６などを制御して符号化装置１００の通信機能を実現する。復号部２０３の機能は、上述したＣＰＵ９０２などを用いて実現できる。
【００７７】
（記憶部２０１）
記憶部２０１は、符号化行列２１１を記憶する。符号化行列２１１は、符号化装置１００の記憶部１０１が記憶している符号化行列１１２と同じである。また、符号化行列２１１は、後述する復号処理に利用される。
【００７８】
（通信制御部２０２）
通信制御部２０２は、符号化装置１００が送信した符号化データを受信する。このとき、通信制御部２０２は、ＵＤＰに従って符号化装置１００と通信する。また、通信制御部２０２は、後述する復号処理により全ての分割データが復元できなかった場合に、復元できなかった分割データの復号処理に用いる符号化データの再送を符号化装置１００に要求する。
【００７９】
（復号部２０３）
復号部２０３は、正常に受信した符号化データを利用して分割データを復元する。次いで、復号部２０３は、復元した分割データを結合して対象データ１１１を復元する。復号部２０３は、論理演算部２３１、及び結合部２３２を有する。論理演算部２３１は、例えば、図５に示した復号処理を実行して符号化データから分割データを復元する。
【００８０】
図５の例では、符号化装置１００から復号装置２００への伝送過程で符号化データＸ３、Ｘ６が失われている。この場合、論理演算部２３１は、図５に示すように、正常に受信された符号化データＸ１、Ｘ２、Ｘ４、Ｘ５を組み合わせて分割データＡ、Ｂ、Ｃ、Ｄを生成する。例えば、論理演算部２３１は、符号化データＸ２、Ｘ５に対する排他的論理和演算を実行して分割データＤ（演算結果Ｙ１）を復元する。
【００８１】
同様に、論理演算部２３１は、符号化データＸ４及び演算結果Ｙ１に対する排他的論理和演算を実行して分割データＢ（演算結果Ｙ２）を復元する。また、論理演算部２３１は、符号化データＸ２及び演算結果Ｙ２に対する排他的論理和演算を実行して分割データＣ（演算結果Ｙ３）を復元する。また、論理演算部２３１は、符号化データＸ１及び演算結果Ｙ３に対する排他的論理和演算を実行して分割データＡ（演算結果Ｙ４）を復元する。このように、論理演算部２３１は、正常に受信された符号化データＸ１、Ｘ２、Ｘ４、Ｘ５を組み合わせて分割データＡ、Ｂ、Ｃ、Ｄを復元する。
【００８２】
結合部２３２は、論理演算部２３１が復元した分割データを結合して対象データ１１１を復元する。例えば、結合部２３２は、分割データＡ、Ｂ、Ｃ、Ｄを結合して対象データ１１１を復元する。
【００８３】
以上、復号装置２００の機能について説明した。
［２−６．符号化処理の流れ］
次に、図１１〜図１３を参照しながら、符号化装置１００が実行する符号化処理の流れについて説明する。図１１は、第２実施形態に係る符号化装置が実行する処理の流れを示した第１のフロー図である。図１２は、第２実施形態に係る符号化装置が実行する処理の流れを示した第２のフロー図である。図１３は、第２実施形態に係る符号化装置が実行する処理の流れを示した第３のフロー図である。
【００８４】
まず、図１１を参照しながら、符号化処理の全体的な流れについて説明する。
（Ｓ１０１）符号化部１０２は、記憶部１０１から対象データ１１１を読み出す。そして、符号化部１０２は、読み出した対象データ１１１を複数の分割データに分割する。例えば、符号化部１０２は、分割データのデータサイズが予め設定したデータサイズになるように対象データ１１１を分割する。
【００８５】
（Ｓ１０２）符号化部１０２は、記憶部１０１が記憶する符号化行列１１２、及び複数の分割データを利用して符号化データを生成する。そして、符号化部１０２は、生成した符号化データを記憶部１０１に格納（保存）する。なお、符号化データを生成する処理の流れについては後段において詳述する。
【００８６】
（Ｓ１０３）通信制御部１０３は、符号化部１０２により生成された符号化データを復号装置２００に送信する。このとき、通信制御部１０３は、ＵＤＰに従って復号装置２００と通信する。また、通信制御部１０３は、復号装置２００から再送要求を受けた場合に、再送要求で指定された符号化データを復号装置２００に再送する。
【００８７】
以上、符号化処理の全体的な流れについて説明した。
次に、図１２及び図１３を参照しながら、符号化データの生成及び保存（Ｓ１０２）に係る処理の流れについて、さらに説明する。
【００８８】
（Ｓ１１１）符号化部１０２は、記憶部１０１が記憶する符号化行列１１２を参照し、符号化行列１１２からｊ行目のビット列ｒｊを選択する。なお、インデックスｊは、Ｓ１０２の処理が開始した時点で１に初期化される。
【００８９】
（Ｓ１１２）符号化部１０２は、記憶部１０１が記憶するハミング距離テーブルを参照する。そして、符号化部１０２は、ビット列ｒｊとの間のハミング距離１１３が最小となるビット列ｒｍを選択する。
【００９０】
（Ｓ１１３）符号化部１０２は、ビット列ｒｍに対応する符号化データＸｍが記憶部１０１に格納（保存）されているか否かを判定する。ビット列ｒｍに対応する符号化データＸｍが記憶部１０１に格納されている場合、処理はＳ１１４に進む。一方、ビット列ｒｍに対応する符号化データＸｍが記憶部１０１に格納されていない場合、処理はＳ１１６に進む。
【００９１】
（Ｓ１１４、Ｓ１１５）符号化部１０２は、ビット列ｒｊ、ｒｍに対する排他的論理和演算（ＸＯＲ演算）を実行し、ビット列Ｖを生成する。そして、符号化部１０２は、ビット列Ｖの中でビット値が１のビットに対応する分割データの組を取得する。Ｓ１１４及びＳ１１５の処理が完了すると、処理は図１３のＳ１１８に進む。
【００９２】
（Ｓ１１６、Ｓ１１７）符号化部１０２は、ビット列ｒｍの中でビット値が１のビットに対応する分割データの組を取得する。そして、符号化部１０２は、取得した分割データの組に対する排他的論理和演算を実行して符号化データＸｊを生成する。Ｓ１１６及びＳ１１７の処理が完了すると、処理は図１３のＳ１２０に進む。
【００９３】
（Ｓ１１８、Ｓ１１９）符号化部１０２は、取得した分割データの組に対応する符号化データＸｍを記憶部１０１から取得する。そして、符号化部１０２は、取得した分割データの組と符号化データＸｍとに対する排他的論理和演算を実行し、符号化データＸｊを生成する。
【００９４】
（Ｓ１２０、Ｓ１２１）符号化部１０２は、符号化データＸｊを記憶部１０１に格納（保存）する。そして、符号化部１０２は、インデックスｊを１インクリメントする（つまり、１加えた値に更新する。）。
【００９５】
（Ｓ１２２）符号化部１０２は、インデックスｊと、符号化行列１１２の全行数Ｍとを比較する。インデックスｊが符号化行列１１２の全行数Ｍよりも小さい場合（ｊ＜Ｍ）、処理は図１２のＳ１１１に進む。一方、インデックスｊが符号化行列１１２の全行数Ｍよりも大きい場合（ｊ≧Ｍ）、図１１及び図１２に示した一連の処理が終了する。
【００９６】
以上、符号化装置１００が実行する符号化処理の流れについて説明した。
［２−７．復号処理の流れ］
次に、図１４を参照しながら、復号装置２００が実行する復号処理の流れについて説明する。図１４は、第２実施形態に係る復号装置が実行する処理の流れを示したフロー図である。
【００９７】
（Ｓ２０１）通信制御部２０２は、符号化装置１００が送信した符号化データを受信する。このとき、通信制御部２０２は、ＵＤＰに従って符号化装置１００と通信する。また、通信制御部２０２は、後述する復号処理により全ての分割データが復元できなかった場合に、復元できなかった分割データの復号処理に用いる符号化データの再送を符号化装置１００に要求する。
【００９８】
（Ｓ２０２、Ｓ２０３）復号部２０３は、正常に受信した符号化データを利用して分割データを復元する。そして、復号部２０３は、復元した分割データを結合して対象データ１１１を復元する。Ｓ２０２及びＳ２０３の処理が完了すると、図１４に示した一連の処理が終了する。
【００９９】
以上、復号装置２００が実行する復号処理の流れについて説明した。
上記のように、既に生成した符号化データを保存しておき、他の符号化データを生成する際に、保存しておいた符号化データを利用することで排他的論理和演算の回数を減らすことができる。その結果、符号化時の演算負荷を抑制することが可能になる。
【０１００】
以上、第２実施形態について説明した。
＜３．変形例（ＢＤＤの適用）＞
次に、第２実施形態の一変形例について説明する。本変形例では、ハミング距離１１３を計算する処理、及びハミング距離１１３の最小値に対応するビット列を選択する処理を二分決定グラフ（ＢＤＤ：Binary Decision Diagram）で表現し、処理負荷をさらに低減する仕組みを提案する。
【０１０１】
［３−１．ＢＤＤについて］
まず、図１５〜図１７を参照しながら、二分決定グラフの表現について説明する。図１５は、第２実施形態の一変形例に係る二分決定グラフの表現について説明するための第１の図である。図１６は、第２実施形態の一変形例に係る二分決定グラフの表現について説明するための第２の図である。図１７は、第２実施形態の一変形例に係る二分決定グラフの表現について説明するための第３の図である。
【０１０２】
ここでは、簡単のために図１５に例示した関数ｆを二分決定グラフで表現する方法について説明する。図１５に例示した関数ｆは、３つのビット値ｚ１、ｚ２、ｚ３（以下、ビット列ｚと表記する場合がある。）の入力に応じて１ビットのビット値を出力する関数である。例えば、ビット列０００が入力されると、関数ｆはビット値０を出力する。同様に、ビット列００１が入力されると、関数ｆはビット値０を出力する。その他の入力ビット列に対しても、図１５に示すようなビット値が出力される。
【０１０３】
図１５に例示した関数ｆを二分木で表現すると、図１６のようになる。図１６に示すように、二分決定グラフは、ルートノードＮｒｔ、ブランチノードＮｂ１１、…、Ｎｂ２４、及びリーフノードＮｒｆ１、…、Ｎｒｆ８を有する。また、ルートノードＮｒｔ、及びブランチノードＮｂ１１、…、Ｎｂ２４には、それぞれビット値ｚ１、ｚ２、ｚ３のいずれかが割り当てられている。さらに、リーフノードＮｒｆ１、…、Ｎｒｆ８には、それぞれ０又は１の値が割り当てられている。また、ノード間を接続する直線は、ブランチと呼ばれる。
【０１０４】
ルートノードＮｒｔ、及びブランチノードＮｂ１１、…、Ｎｂ２４は、それぞれ条件分岐を表している。そして、条件分岐の結果に応じて下位のノードへと伸びるブランチが選択される。例えば、ビット列ｚが１０１の場合（ｚ１＝１、ｚ２＝０、ｚ３＝１の場合）について考える。この場合、ｚ１が１であるから、ルートノードＮｒｔの条件分岐では、１と記載されたブランチが選択される。
【０１０５】
また、ｚ２が０であるから、選択されたブランチの先にあるブランチノードＮｂ１２の条件分岐では、０と記載されたブランチが選択される。さらに、ｚ３が１であるから、選択されたブランチの先にあるブランチノードＮｂ２３の条件分岐では、１と記載されたブランチが選択される。そして、選択されたブランチの先にあるリーフノードＮｒｆ６が出力値を表している。図１６の例ではリーフノードＮｒｆ６は１である。
【０１０６】
図１６に例示した二分木は、入力値、条件分岐、出力値の組み合わせが図１５に示した関数ｆと整合するように構築されている。そのため、上記と同様にノード及びブランチを辿ることで、入力値に応じた関数ｆの出力値が得られる。つまり、図１５に示した関数ｆのテーブル表現と、図１６に示した二分木の表現とは等価である。但し、二分木は、図１７に示すように圧縮した表現である二分決定グラフに変形することができる。
【０１０７】
ここで、図１６及び図１７を参照しながら、二分木の圧縮方法について説明する。まず、図１６に示した二分木の中で、ブランチノードＮｂ２４に注目する。ブランチノードＮｂ２４は、ビット値ｚ３に関する条件分岐を表している。但し、ブランチノードＮｂ２４から伸びたブランチの先にあるリーフノードＮｒｆ７、Ｎｒｆ８を参照すると、いずれもビット値１が割り当てられている。つまり、ブランチノードＮｂ２４の条件分岐が存在しても、存在しなくても、出力値は同じ１となる。
【０１０８】
従って、ブランチノードＮｂ２４を省略し、ブランチノードＮｂ１２の条件分岐でビット値ｚ２が１の場合には出力値が１になるように、二分木を変形することができる。つまり、二分木を圧縮することができる。同様に、ブランチノードＮｂ１１から伸びる２本のブランチの先に注目する。一方のブランチはブランチノードＮｂ２１に接続され、他方のブランチはブランチノードＮｂ２２に接続されている。ブランチノードＮｂ２１、Ｎｂ２２は、いずれもビット値ｚ３に関する条件分岐である。
【０１０９】
また、ブランチノードＮｂ２１及びリーフノードＮｒｆ１、Ｎｒｆ２の組み合わせと、ブランチノードＮｂ２２及びリーフノードＮｒｆ３、Ｎｒｆ４の組み合わせとを比較すると、いずれも同じ条件及び同じ出力結果を表現していることが分かる。従って、ブランチノードＮｂ１１の条件分岐が存在しても、存在しなくても、同じ論理が下位で展開される。従って、ブランチノードＮｂ１１、Ｎｂ２２、リーフノードＮｒｆ３、Ｎｒｆ４を省略し、ルートノードＮｒｔから伸びる値０が割り当てられたブランチの先をブランチノードＮｂ２１に接続する形に二分木を変形することができる。
【０１１０】
さらに、ブランチノードＮｂ２３及びリーフノードＮｒｆ５、Ｎｒｆ６の構造と、ブランチノードＮｂ２１及びリーフノードＮｒｆ１、Ｎｒｆ２の構造とが同じであるため、ブランチノードＮｂ２３及びリーフノードＮｒｆ５、Ｎｒｆ６も省略可能である。このようにしてノードを省略し、ブランチの接続関係を整理すると、図１７に示すような二分決定グラフが得られる。もちろん、図１６に示した二分木及び図１７に示した二分決定グラフは同じ内容を表現している。図１７に示した二分決定グラフは、図１６に示した二分木に比べてノードの数が少ない。そのため、圧縮後の二分決定グラフを利用すれば条件分岐の処理回数が少なくて済み、処理負荷を低減することができる。
【０１１１】
上記のように、二分決定グラフは、圧縮表現を利用することで処理負荷の低減を図ることができる。また、複数の論理関数を論理演算で接続する場合に、圧縮表現のまま二分決定グラフを変形して論理演算後の二分決定グラフを生成することなどもできる。こうした二分決定グラフの性質を利用することで、第２実施形態に係る符号化処理をさらに効率化することができる。以下、二分決定グラフの適用方法などについて説明する。
【０１１２】
［３−２．ハミング距離の計算］
まず、図１８〜図２０を参照しながら、ハミング距離１１３の計算に二分決定グラフの表現を適用する方法について説明する。図１８は、第２実施形態の一変形例に係るハミング距離の計算方法について説明するための第１の図である。図１９は、第２実施形態の一変形例に係るハミング距離の計算方法について説明するための第２の図である。図２０は、第２実施形態の一変形例に係るハミング距離の計算方法について説明するための第３の図である。
【０１１３】
まず、符号化行列１１２のｉ行目（ｉ＝１〜Ｍ）に対応するビット列ｒｉと、符号化行列１１２のｊ行目（ｊ＝１〜Ｍ）に対応するビット列ｒｊとの間のハミング距離を計算する論理演算について考える。ハミング距離の計算を論理演算で表現できれば、二分決定グラフによる表現を適用することができる。
【０１１４】
なお、ビット列ｒｉのｋビット目（ｋ＝１〜４）に位置するビット値をＲｉｋと表現し、ビット列ｒｊのｋビット目に位置するビット値をＲｊｋと表現する。また、図１８に示すように、ビット値Ｒｉ１、…、Ｒｉ４、Ｒｊ１、…、Ｒｊ４を入力とし、ハミング距離を表す３つのビット値ｆ１、ｆ２、ｆ３を出力とする論理演算について考える。なお、ハミング距離を表すビット列の１ビット目をｆ１、２ビット目をｆ２、３ビット目をｆ３とする。また、ビット値Ｒｉ１、…、Ｒｉ４を順にビット列ｒｉの１ビット目、…、４ビット目のビット値とする。また、ビット値Ｒｊ１、…、Ｒｊ４を順にビット列ｒｊの１ビット目、…、４ビット目のビット値とする。
【０１１５】
また、（１）ハミング距離テーブルの下三角部分に相当する出力値だけを考慮する論理演算（後述する論理演算ｇに対応）を組み込む。また、（２）ハミング距離テーブルの対角成分に相当する出力値をハミング重みで置き換える論理演算を組み込む。ハミング重みは、対象とするビット列の中でビット値が１のビット数である。また、（３）出力値を３ビットの二進数で表現し、３つのビット値ｆ１、ｆ２、ｆ３のそれぞれを出力する論理演算を考える。
【０１１６】
ハミング距離１１３を表すビット値ｆ１、ｆ２、ｆ３を計算する論理演算は、例えば、図１９に示すように、基本的な論理演算Ｌ１、…、Ｌ１２を組み合わせて表現することができる。なお、論理演算Ｌ１、Ｌ２、Ｌ３、Ｌ４、Ｌ６、Ｌ８、Ｌ１０、Ｌ１２、Ｌ１３はＸＯＲ演算を表す。また、論理演算Ｌ５、Ｌ７、Ｌ９、Ｌ１１はＡＮＤ演算を表す。
【０１１７】
例えば、ＸＯＲ演算を表す論理演算Ｌ１は、図１９に例示した二分決定グラフで表現することができる。同様に、論理演算Ｌ１、…、Ｌ１２を二分決定グラフで表現し、全ての二分決定グラフを統合した上で圧縮すれば、ビット値ｆ１、ｆ２、ｆ３をそれぞれ計算する二分決定グラフを生成することができる。
【０１１８】
また、ハミング距離テーブルの対角成分に相当する出力値をハミング重みで置き換える処理は、例えば、図２０のようになる。ここで、図２０に示した処理の流れについて説明する。なお、図２０に示した処理は、例えば、符号化装置１００が有する符号化部１０２により実行される。
【０１１９】
（Ｓ３０１）符号化部１０２は、インデックスｉを初期化する。この処理によりインデックスｉは１に設定される。
（Ｓ３０２）符号化部１０２は、インデックスｉが符号化行列１１２の全行数Ｍ以下であるか否かを判定する。インデックスｉが全行数Ｍ以下である場合、処理はＳ３０３に進む。一方、インデックスｉが全行数Ｍ以下でない場合、図２０に示した一連の処理は終了する。
【０１２０】
（Ｓ３０３）符号化部１０２は、ハミング距離テーブルの対角成分（ｉ＝ｊ）に対応する積項関数ｈを作成する。例えば、ｒｉ＝ｒｊ＝１０１０に対応する積項関数ｈは、Ｒｉ４・Ｒｒｉ３・Ｒｉ２・Ｒｒｉ１・Ｒｊ４・Ｒｒｊ３・Ｒｊ２・Ｒｒｊ１となる。但し、Ｒｒｊｋ（ｋ＝１〜４）は、変数Ｒｊｋに対し否定演算を施したものである。また、「・」はＡＮＤ演算を表す。つまり、積項関数ｈは、ビット列ｒｉの中でビット値０のビットに対応する論理変数を反転させ、各入力ビットの論理変数のＡＮＤ演算を行う論理関数である。
【０１２１】
（Ｓ３０４）符号化部１０２は、ビット列ｒｉのハミング重みを二進数で表現したビット列のうち、ビット値が１のビットに対応するビット値ｆｑ（ｑ＝１〜３）を選択する。例えば、ハミング重みの二進数表現が０１１の場合、ビット値ｆ１、ｆ２が選択される。そして、符号化部１０２は、ビット値ｆｑを（ｆｑ＋ｈ）に更新する。但し、論理関数に関する「＋」はＯＲ演算を表す。
【０１２２】
（Ｓ３０５）符号化部１０２は、インデックスｉを１インクリメントする（つまり、１加えた値に更新する。）。Ｓ３０５の処理が完了すると、処理はＳ３０２に進む。
以上、ハミング距離１１３の計算に二分決定グラフの表現を適用する方法について説明した。上記のように、ハミング距離の計算は論理演算で表現することができるため、この論理演算を二分決定グラフで表現することで、二分決定グラフを利用してハミング距離の計算が可能になる。そして、二分決定グラフの圧縮による負荷の低減が実現される。
【０１２３】
［３−３．最小ハミング距離の選択］
次に、図２１〜図２８を参照しながら、ハミング距離１１３の最小値に対応するビット列の選択処理に二分決定グラフを適用する方法について説明する。なお、ハミング距離１１３を表す３つのビット値ｆ１、ｆ２、ｆ３を計算する二分決定グラフは得られているものとする。また、ハミング距離テーブルの対角成分に対応するビット値の処理（図２０を参照）は実行済みであるとする。
【０１２４】
なお、図２１は、第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第１の図である。図２２は、第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第２の図である。図２３は、第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第３の図である。図２４は、第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第４の図である。
【０１２５】
図２５は、第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第５の図である。図２６は、第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第６の図である。図２７は、第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第７の図である。図２８は、第２実施形態の一変形例に係る最小ハミング距離の選択方法について説明するための第８の図である。
【０１２６】
ハミング距離１１３の最小値に対応するビット列の選択処理は、図２１に示したＳ３１１及びＳ３１２の処理を含む。これらの処理は、主に符号化装置１００が有する符号化部１０２により実行される。
【０１２７】
（Ｓ３１１）符号化部１０２は、ハミング距離１１３を表すビット列（ｆ１、ｆ２、ｆ３）のビット値を反転させる。具体的には、ハミング距離１１３を表す各ビット値ｆ１、ｆ２、ｆ３のそれぞれを計算する二分決定グラフを、それぞれの否定演算をとった二分決定グラフに変換する。このビット反転により、ハミング距離１１３を表すビット列の最小値を選択する処理が、ハミング距離１１３を表すビット列の反転値の最大値を選択する処理に変換される。なお、ビット値ｆ１、ｆ２、ｆ３の反転値を計算する二分決定グラフは、予め用意されていてもよい。以下、ビット値ｆｌ（ｌ＝１、２、３）を反転したビット値をｆｒｌと表現する。
【０１２８】
（Ｓ３１２）符号化部１０２は、ハミング距離１１３が最小（反転したビット列が示す値が最大）となるビット列を選択する。Ｓ３１２の処理については、後段において詳述する。Ｓ３１２の処理を完了すると、図２１に示した一連の処理は終了する。
【０１２９】
ここで、図２２を参照しながら、Ｓ３１２の処理について、さらに説明する。
（Ｓ３３１）符号化部１０２は、インデックスｉを初期化する。この処理によりインデックスｉは１に設定される。
【０１３０】
（Ｓ３３２）符号化部１０２は、インデックスｉが符号化行列１１２の全行数Ｍ以下であるか否かを判定する。インデックスｉが全行数Ｍ以下である場合、処理はＳ３３３に進む。一方、インデックスｉが全行数Ｍ以下でない場合、図２２に示した一連の処理は終了する。
【０１３１】
（Ｓ３３３、Ｓ３３４）符号化部１０２は、論理関数ｇを作成する。そして、符号化部１０２は、論理関数ｇを論理関数Ｆに設定する。論理関数ｇは、処理の中で設定されたインデックスｉのビット列ｒｉに対応し、ビット列ｒｊ（つまり、Ｒｊ１、…、Ｒｊ４）を入力とする論理関数である。論理関数ｇは、選択処理の対象となるハミング距離テーブルの下三角部分を抽出する論理演算を表現した論理関数である。また、論理関数ｇは、二分決定グラフで表現される。なお、論理関数ｇの作成方法については、図２４を参照しながら後述する。
【０１３２】
（Ｓ３３５）符号化部１０２は、ｌｏｇ2Ｍを下回らない最小の整数ｐを選択する。例えば、Ｍ＝６の場合にはｐ＝３が選択される。そして、符号化部１０２は、インデックスｌに整数ｐを設定する。つまり、ハミング距離を表すビット列の端に位置するビットを示すインデックスの値がｌに設定される。
【０１３３】
（Ｓ３３６）符号化部１０２は、インデックスｌが０を超過（ｌ＞０）しているか否かを判定する。インデックスｌが０を超過している場合、処理はＳ３３７に進む。一方、インデックスｌが０を超過していない場合（つまり、インデックスｌが０になった場合）、処理は図２３のＳ３４１に進む。
【０１３４】
（Ｓ３３７）符号化部１０２は、論理関数Ｔを作成する。但し、論理関数Ｔは（ｆｒｌ｜ｒｉ）・Ｆで定義される。また、論理関数Ｔは二分決定グラフで表現される。
ビット列ｒｉ、ｒｊ間のハミング距離を表すビット値ｆｌ（ｌ＝１，２，３）は、Ｒｉ１、…、Ｒｉ４、Ｒｊ１、…、Ｒｊ４を入力とする二分決定グラフで表現される（例えば、図１６を参照）。また、ビット値ｆｒｌは、ビット値ｆｌを反転したものである。
【０１３５】
（ｆｒｌ｜ｒｉ）は、処理の中で設定されたインデックスｉに対応するビット列ｒｉ（つまり、Ｒｉ１、…、Ｒｉ４）の値をビット値ｆｒｌの二分決定グラフに入力した場合に得られるＲｊ１、…、Ｒｊ４に関する二分決定グラフを表す。また、（ｆｒｌ｜ｒｉ）・Ｆは、（ｆｒｌ｜ｒｉ）と論理関数ＦとをＡＮＤ演算した結果を表す。従って、（ｆｒｌ｜ｒｉ）の二分決定グラフと論理関数Ｆの二分決定グラフとをＡＮＤ演算で接続した二分決定グラフを作成すれば、論理関数Ｔの二分決定グラフが得られる。
【０１３６】
論理関数Ｔを表現した二分決定グラフは、ハミング距離テーブルのビット値ｒｉに対応する行（但し、下三角部分に限る。）に記載されたビット列について、ビット値ｆｒｌが１となるビットがあるか否かを判定する処理に用いる。
【０１３７】
例えば、ｉ＝３、ｌ＝３の場合（最上位ビット）の場合、論理関数Ｆにはハミング距離テーブルの下三角部分を表現する論理関数ｇが設定されている。そのため、論理関数Ｔは、ハミング距離テーブルのビット列ｒ３に対応する行（但し、下三角部分に限る。）に記載されたビット列について、ビット値ｆｒ３を出力する二分決定グラフで表現される。
【０１３８】
もし、ビット列ｒ３に対応する行にビット値ｆｒ３が１となるビット列が存在しない場合、論理関数Ｔは恒偽（リーフノードが全て０）となる。一方、ビット列ｒ３に対応する行にビット値ｆｒ３が１となるビット列が存在する場合、論理関数Ｔは値１が割り当てられたリーフノードを有する二分決定グラフで表現される（Ｔが恒偽でない。）。
【０１３９】
また、後述するように、論理関数Ｔが恒偽でない場合、論理関数Ｆが更新される。例えば、ビット列ｒ３に対応する行にビット値ｆｒ３が１となるビット列が存在する場合、論理関数Ｆは、ハミング距離テーブルの下三角部分であり、かつ、ビット列ｒ３に対応する行にビット値ｆｒ３が１となるビット列を表現する論理関数に更新される。
【０１４０】
この場合、論理関数Ｔは、ハミング距離テーブルのビット列ｒ３に対応する行（但し、下三角部分に限る。）に記載されたビット列のうち、ビット値ｆｒ３が１となるビット列について、ビット値ｆｒ２を出力する二分決定グラフで表現される。このように、論理関数Ｔを表現した二分決定グラフは、より上位に位置するビット値ｆｒｌが１となるビット列を抽出する処理に利用される。
【０１４１】
なお、二分決定グラフに基づく論理関数Ｔの作成方法については、図２５〜図２８を参照しながら後述する。Ｓ３３７の処理が完了すると、処理はＳ３３８に進む。
（Ｓ３３８）符号化部１０２は、論理関数Ｔが恒偽でない（Ｔ≠０）か否かを判定する。論理関数Ｔが恒偽でない（Ｔ≠０）場合、処理はＳ３３９に進む。一方、論理関数Ｔが恒偽である（Ｔ＝０）場合、処理はＳ３４０に進む。つまり、論理関数Ｔが恒偽である（Ｔ＝０）場合には論理関数Ｆを更新するＳ３３９の処理はスキップされる。
【０１４２】
（Ｓ３３９）符号化部１０２は、論理関数Ｆに論理関数Ｔを設定する。論理関数Ｆに論理関数Ｔを設定することで、現在の論理関数Ｔで表現される条件が、次回Ｓ３３７の処理で論理関数Ｔを作成する際に付加される。
【０１４３】
（Ｓ３４０）符号化部１０２は、インデックスｌを１減じた値に更新する。Ｓ３４０の処理が完了すると、処理は図２２のＳ３３６に進む。
（Ｓ３４１）符号化部１０２は、論理関数Ｆが１となるビット列ｒｊを出力する。論理関数Ｆは、ビット値ｆｒｌ（ｌ＝１，２，３）のうち、より上位ビットのビット値が１となるビット値の組み合わせを抽出する条件を表す。つまり、論理関数Ｆは、ハミング距離テーブルのビット列ｒｉに対応する行について、ビット値ｆｒｌ（ｌ＝１，２，３）で表現される値の最大値を抽出する論理演算である。従って、この論理関数Ｆが真（１）であるビット値ｆｒｌ（ｌ＝１，２，３）に対応するビット列ｒｊは、ビット列ｒｉに対するハミング距離が最小のビット列である。
【０１４４】
なお、論理関数Ｆは、ビット列ｒｊ（つまり、Ｒｊ１、…、Ｒｊ４）を入力とする二分決定グラフで表現される。この二分決定グラフのリーフノードが１となるＲｊ１、…、Ｒｊ４を探索することで論理関数Ｆが１となるビット列ｒｊが得られる。
【０１４５】
（Ｓ３４２）符号化部１０２は、インデックスｉを１加えた値に更新する。Ｓ３４２の処理が完了すると、処理は図２２のＳ３３２に進む。
以上の処理により、ビット列ｒｉ、ｒｊ間のハミング距離が最小となるビット列ｒｊがビット列ｒｉ毎に得られる。
【０１４６】
（論理関数ｇの生成方法）
ここで、図２４を参照しながら、論理関数ｇの作成方法について説明する。論理関数ｇは、演算対象をハミング距離テーブルの下三角部分に制限する条件を表した論理演算（つまり、上三角部分をマスクする論理演算）である。
【０１４７】
（Ｓ３５１）符号化部１０２は、恒偽の論理関数ｇを作成する。
（Ｓ３５２）符号化部１０２は、インデックスｊを１に初期化する。
（Ｓ３５３）符号化部１０２は、インデックスｊがｉ未満（ｊ＜ｉ）であるか否かを判定する。インデックスｊがｉ未満である場合、処理はＳ３５４に進む。一方、インデックスｊがｉ未満でない場合、図２４に示した一連の処理は終了する。
【０１４８】
（Ｓ３５４）符号化部１０２は、ビット列ｒｊに対応する積項関数ｇｊを作成する。例えば、ｒｊが１０１０の場合、Ｒｊ１、Ｒｊ２、Ｒｊ３、Ｒｊ４を入力とする関数ｇｊは、Ｒｊ４、Ｒｒｊ３、Ｒｊ２、Ｒｒｊ１を順にＡＮＤ演算する関数（ｇｊ＝Ｒｊ４・Ｒｒｊ３・Ｒｊ２・Ｒｒｊ１）となる。但し、Ｒｒｊｋ（ｋ＝１〜４）は、ビット値Ｒｊｋを反転したものである。つまり、関数ｇｊは、ビット列ｒｊのビット値が０の位置にあるビットを反転させた入力ビット値の組をＡＮＤ演算する関数である。
【０１４９】
（Ｓ３５５、Ｓ３５６）符号化部１０２は、論理関数ｇを（ｇ＋ｇｊ）に更新する。そして、符号化部１０２は、インデックスｊを１加えた値に更新する。Ｓ３５５及びＳ３５６の処理が完了すると、処理はＳ３５３に進む。
【０１５０】
（論理関数Ｔの生成方法）
ここで、図２５〜図２８を参照しながら、二分決定グラフに基づく論理関数Ｔの生成方法について説明する。ここでは、インデックスｉが３の場合を例に挙げて説明する。なお、図２５に示したハミング距離テーブルに記載の値は、ビット値の反転処理及び対角成分の置き換え処理（後処理）を行った後の値である。
【０１５１】
インデックスｉ（ｉ行目）が３の場合、図２５に示すように、ｒｉは１００１（ｒ３）である。従って、Ｒｉ１＝１、Ｒｉ２＝０、Ｒｉ３＝０、Ｒｉ４＝１となる。また、インデックスｊ（ｊ列目）が１の場合、ビット値ｆｒ１、ｆｒ２、ｆｒ３は、それぞれｆｒ１＝１、ｆｒ２＝０、ｆｒ３＝１となる。同様に、インデックスｊ（ｊ列目）が２の場合、ビット値ｆｒ１、ｆｒ２、ｆｒ３は、それぞれｆｒ１＝０、ｆｒ２＝１、ｆｒ３＝１となる。また、インデックスｊ（ｊ列目）が３の場合、ビット値ｆｒ１、ｆｒ２、ｆｒ３は、それぞれｆｒ１＝１、ｆｒ２＝０、ｆｒ３＝１となる。
【０１５２】
図２４に示した処理フローによれば、ビット列ｒ３に対応する論理関数ｇは、下記の式（１）のように表現される。但し、「・」はＡＮＤ演算を表し、「＋」はＯＲ演算を表す。また、ｆｒ３は、下記の式（２）のように表現される。従って、（ｆｒ３｜ｒ３）は、下記の式（３）のようになる。下記の式（１）及び式（３）により、論理関数Ｔ（Ｔ＝（ｆｒ３｜ｒ３）・Ｆ）は、下記の式（４）のようになる。
【０１５３】
ｇ（Ｒｊ１，Ｒｊ２，Ｒｊ３，Ｒｊ４）
＝  （Ｒｊ４・Ｒｒｊ３＋Ｒｒｊ４・Ｒｊ３）・Ｒｊ２・Ｒｒｊ１
＋  Ｒｊ４・Ｒｒｊ３・Ｒｒｊ２・Ｒｊ１
…（１）
ｆｒ３（Ｒｉ１，Ｒｉ２，Ｒｉ３，Ｒｉ４，Ｒｊ１，Ｒｊ２，Ｒｊ３，Ｒｊ４）
＝  Ｒｉ２＋Ｒｊ４＋Ｒｒｊ３＋Ｒｒｉ４・Ｒｊ２
＋  Ｒｉ４・Ｒｊ１＋Ｒｒｉ４・Ｒｒｊ１
…（２）
（ｆｒ３｜ｒ３）  ＝  Ｒｊ４＋Ｒｒｊ３＋Ｒｒｊ２＋Ｒｊ１
…（３）
Ｔ  ＝  Ｒｊ４・Ｒｒｊ３・Ｒｊ２・Ｒｒｊ１＋Ｒｊ４・Ｒｒｊ３・Ｒｒｊ２・Ｒｊ１
…（４）
上記の式（３）に記した（ｆｒ３｜ｒ３）は、図２６に示した二分決定グラフＧｆで表現される。また、上記の式（１）に記した論理関数ｇは、図２６に示した二分決定グラフＧｇで表現される。上述したＳ３３７の処理で、符号化部１０２は、図２６に示すように、二分決定グラフＧｆ、ＧｇをＡＮＤ演算して論理関数Ｔを表す二分決定グラフＧｆｇを作成する。二分決定グラフＧｆｇの作成は、図２７に示すような手順で行われる。なお、表記の複雑化を避けるため、二分決定グラフの圧縮を一部省略して表記している。
【０１５４】
図２７に示した二分決定グラフは、二分決定グラフＧｆｇを表している。まず、Ｒｊ４に関する条件分岐について考える。Ｒｊ４が１の場合、（ｆｒ３｜ｒ３）は常に１になる（図２６の二分決定グラフＧｆを参照）。そのため、二分決定グラフＧｆｇの中でＲｊ４が１の場合に対応するブランチの先（Ｎ２）は、二分決定グラフＧｇの中でＲｊ４が１の場合に対応するブランチの先にある二分決定グラフと同じ構造になる。
【０１５５】
一方、二分決定グラフＧｆｇの中でＲｊ４が０の場合に対応するブランチの先（Ｎ１）については、Ｒｊ３に関する条件分岐の検討が行われる。Ｒｊ４が０、かつ、Ｒｊ３が０の場合、ｇは常に０になる（図２６の二分決定グラフＧｇを参照）。そのため、二分決定グラフＧｆｇの中でＲｊ４が０、かつ、Ｒｊ３が０の場合に対応するブランチの先は、ビット値０を表すリーフノードとなる。一方、二分決定グラフＧｆｇの中でＲｊ４が０、かつ、Ｒｊ３が１の場合に対応するブランチの先（Ｎ３）については、Ｒｊ２に関する条件分岐の検討が行われる。
【０１５６】
上記のように、リーフノードが現れるまで順次条件分岐の内容を検討し、二分決定グラフＧｆｇの構造を確定させる。上記の処理を繰り返すことで、最終的に図２８に示すような二分決定グラフＧｆｇが得られる。ここでは説明の都合上、二分決定グラフの圧縮を一部省略しているが、実際には共有ノードや冗長ノードができないように二分決定グラフＧｆｇの構造を確定させていくことが望ましい。
【０１５７】
以上説明したように、二分決定グラフの表現を適用することで、より効率的な演算処理を実現することができる。例えば、ハミング距離を表すビット値ｆｌ（ｌ＝１，２，…）を表現した二分決定グラフは、最小のハミング距離を探索する演算の実行前に１度作成するだけでよい。また、ハミング距離テーブルの列数にかかわらず、二分決定グラフで表現される論理関数（主にｇ、Ｔ）の演算回数は変わらない。この点は、ハミング距離をハミング距離テーブルの行数×列数分だけ（又は、それらのうちテーブルの下三角行列の領域の分だけ）計算する場合と比較して、有利な点となる。従って、二分決定グラフによる表現を利用することで、ハミング距離を最小にするビット列を効率的に探索することが可能になる。そして、圧縮表現された二分決定グラフを用いることで、探索処理の負荷をさらに軽減することができる。
【０１５８】
以上、第２実施形態に係る一変形例について説明した。
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１５９】
１０、２０  コンピュータ
１１  メモリ
１２  プロセッサ
３１  送信データ
３１−Ａ、３１−Ｂ、３１−Ｃ、３１−Ｄ  分割データ
３２  符号化情報
３２−１、３２−２、３２−３、３２−４、３２−５、３２−６  符号化パターン
３３  演算
３４−１、３４−２、３４−３、３４−４、３４−５、３４−６  符号化データ
３５  組み合わせの一部
【図１】
2015049756.tif 000003
【図２】
2015049756.tif 000004
【図３】
2015049756.tif 000005
【図４】
2015049756.tif 000006
【図５】
2015049756.tif 000007
【図６】
2015049756.tif 000008
【図７】
2015049756.tif 000009
【図８】
2015049756.tif 000010
【図９】
2015049756.tif 000011
【図１０】
2015049756.tif 000012
【図１１】
2015049756.tif 000013
【図１２】
2015049756.tif 000014
【図１３】
2015049756.tif 000015
【図１４】
2015049756.tif 000016
【図１５】
2015049756.tif 000017
【図１６】
2015049756.tif 000018
【図１７】
2015049756.tif 000019
【図１８】
2015049756.tif 000020
【図１９】
2015049756.tif 000021
【図２０】
2015049756.tif 000022
【図２１】
2015049756.tif 000023
【図２２】
2015049756.tif 000024
【図２３】
2015049756.tif 000025
【図２４】
2015049756.tif 000026
【図２５】
2015049756.tif 000027
【図２６】
2015049756.tif 000028
【図２７】
2015049756.tif 000029
【図２８】
2015049756.tif 000030
【手続補正書】
【提出日】平成28年3月23日(2016.3.23)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００６１
【補正方法】変更
【補正の内容】
【００６１】
例えば、選択部１２２は、ビット列ｒ５の行を参照し、ハミング距離１１３の最小値１が記載された枡Ｈ５２に対応するビット列ｒ２を選択する。なお、図８の例ではビット列ｒ４、ｒ５間のハミング距離１１３も１となるため、選択部１２２は、ビット列ｒ４を選択してもよい。同様に、選択部１２２は、ビット列ｒ６の行を参照し、ハミング距離１１３の最小値１が記載された枡Ｈ６１に対応するビット列ｒ１を選択する。なお、図８の例ではビット列ｒ２、ｒ６間のハミング距離１１３も１となるため、選択部１２２は、ビット列ｒ２を選択してもよい。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００７６
【補正方法】変更
【補正の内容】
【００７６】
図１０に示すように、復号装置２００は、記憶部２０１、通信制御部２０２、及び復号部２０３を有する。記憶部２０１の機能は、上述したＲＡＭ９０６や記憶部９２０などを用いて実現できる。通信制御部２０２は、上述した接続ポート９２４や通信部９２６などを制御して復号装置２００の通信機能を実現する。復号部２０３の機能は、上述したＣＰＵ９０２などを用いて実現できる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００９５
【補正方法】変更
【補正の内容】
【００９５】
（Ｓ１２２）符号化部１０２は、インデックスｊと、符号化行列１１２の全行数Ｍとを比較する。インデックスｊが符号化行列１１２の全行数Ｍよりも小さい場合（ｊ＜Ｍ）、処理は図１２のＳ１１１に進む。一方、インデックスｊが符号化行列１１２の全行数Ｍ以上の場合（ｊ≧Ｍ）、図１１及び図１２に示した一連の処理が終了する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１０２
【補正方法】変更
【補正の内容】
【０１０２】
ここでは、簡単のために図１５に例示した関数ｆを二分決定グラフで表現する方法について説明する。図１５に例示した関数ｆは、３つのビット値ｚ１、ｚ２、ｚ３（以下、ビット列ｚと表記する場合がある。）の入力に応じて１ビットのビット値を出力する関数である。例えば、ビット列０００が入力されると、関数ｆはビット値０を出力する。同様に、ビット列００１が入力されると、関数ｆはビット値１を出力する。その他の入力ビット列に対しても、図１５に示すようなビット値が出力される。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１１６
【補正方法】変更
【補正の内容】
【０１１６】
ハミング距離１１３を表すビット値ｆ１、ｆ２、ｆ３を計算する論理演算は、例えば、図１９に示すように、基本的な論理演算Ｌ１、…、Ｌ１３を組み合わせて表現することができる。なお、論理演算Ｌ１、Ｌ２、Ｌ３、Ｌ４、Ｌ６、Ｌ８、Ｌ１０、Ｌ１２、Ｌ１３はＸＯＲ演算を表す。また、論理演算Ｌ５、Ｌ７、Ｌ９、Ｌ１１はＡＮＤ演算を表す。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１１７
【補正方法】変更
【補正の内容】
【０１１７】
例えば、ＸＯＲ演算を表す論理演算Ｌ１は、図１９に例示した二分決定グラフで表現することができる。同様に、論理演算Ｌ１、…、Ｌ１３を二分決定グラフで表現し、全ての二分決定グラフを統合した上で圧縮すれば、ビット値ｆ１、ｆ２、ｆ３をそれぞれ計算する二分決定グラフを生成することができる。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１３６
【補正方法】変更
【補正の内容】
【０１３６】
論理関数Ｔを表現した二分決定グラフは、ハミング距離テーブルのビット値ｒｉに対応する行（但し、下三角部分に限る。）に記載されたビット列について、ビット値ｆｒｌが１となるビット列があるか否かを判定する処理に用いる。
【手続補正８】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
送信データを分割した複数の分割データと、前記分割データの組み合わせを表す複数の符号化パターンを含む符号化情報とが格納されたメモリを有するコンピュータが、
前記符号化情報に含まれる前記符号化パターンのそれぞれについて、前記符号化パターンに対応する複数の前記分割データを対象に、設定した演算を実行して符号化データを生成し、前記符号化データを前記メモリに格納し、
前記メモリに格納した前記符号化データに対応する前記符号化パターンである第１パターンと、前記演算の対象に対応する前記符号化パターンである第２パターンとを比較し、前記第２パターンが表す前記分割データの組み合わせの一部に、前記第１パターンが表す前記分割データの組み合わせが含まれる場合には、前記符号化データを生成する処理の中で、当該第１パターンに対応する前記符号化データを利用して前記演算を実行する
符号化方法。
【請求項２】
前記生成する処理では、前記第２パターンが表す前記分割データの組み合わせの一部に前記分割データの組み合わせが含まれる前記第１パターンのうち、前記分割データの数が最大となる前記第１パターンが選択され、当該第１パターンに対応する前記符号化データが前記演算に利用される
請求項１に記載の符号化方法。
【請求項３】
前記メモリには、前記符号化情報に含まれる前記符号化パターンから選択可能な２つの前記符号化パターンの組毎に、一の前記符号化パターンと他の前記符号化パターンとの間の相違度を表す距離情報が格納され、
前記生成する処理では、前記距離情報に基づいて前記分割データの数が最大となる前記第１パターンが選択される
請求項２に記載の符号化方法。
【請求項４】
前記生成する処理では、前記符号化情報に含まれる前記符号化パターンから選択可能な２つの前記符号化パターンの組毎に、一の前記符号化パターンと他の前記符号化パターンとの間の相違度を計算する論理演算が第１の二分決定グラフで表現され、前記第１の二分決定グラフを用いて、前記分割データの数が最大となる前記第１パターンを選択する論理演算が第２の二分決定グラフで表現され、前記第２の二分決定グラフを用いて選択された前記第１パターンに対応する前記符号化データが前記演算に利用される
請求項２に記載の符号化方法。
【請求項５】
送信データを分割した複数の分割データと、前記分割データの組み合わせを表す複数の符号化パターンを含む符号化情報とが格納された記憶部と、
前記符号化情報に含まれる前記符号化パターンのそれぞれについて、前記符号化パターンに対応する複数の前記分割データを対象に、設定した演算を実行して符号化データを生成し、前記符号化データを前記記憶部に格納する演算部と、
を有し、
前記演算部は、前記記憶部に格納した前記符号化データに対応する前記符号化パターンである第１パターンと、前記演算の対象に対応する前記符号化パターンである第２パターンとを比較し、前記第２パターンが表す前記分割データの組み合わせの一部に、前記第１パターンが表す前記分割データの組み合わせが含まれる場合に、前記第１パターンに対応する前記符号化データを利用して前記演算を実行する
符号化装置。
【請求項６】
送信データを分割した複数の分割データと、前記分割データの組み合わせを表す複数の符号化パターンを含む符号化情報とが格納されたメモリを有するコンピュータに、
前記符号化情報に含まれる前記符号化パターンのそれぞれについて、前記符号化パターンに対応する複数の前記分割データを対象に、設定した演算を実行して符号化データを生成し、前記符号化データを前記メモリに格納し、
前記メモリに格納した前記符号化データに対応する前記符号化パターンである第１パターンと、前記演算の対象に対応する前記符号化パターンである第２パターンとを比較し、前記第２パターンが表す前記分割データの組み合わせの一部に、前記第１パターンが表す前記分割データの組み合わせが含まれる場合には、前記符号化データを生成する処理の中で、当該第１パターンに対応する前記符号化データを利用して前記演算を実行する
処理を実行させる、プログラム。
【手続補正９】
【補正対象書類名】図面
【補正対象項目名】図２２
【補正方法】変更
【補正の内容】
【図２２】
2015049756.tif 000031
【国際調査報告】
2015049756.tif 000032
2015049756.tif 000033
2015049756.tif 000034
2015049756.tif 000035