(57)【特許請求の範囲】
【請求項１】
ネットワークに接続された、第１周波数で動作する装置と、データ通信する、第２周波数で動作する伝送装置であって、
時刻を管理する時刻管理手段と、
前記装置へ、測定パケットを、順次、送信する送信手段とを備え、
前記装置は、前記測定パケットの受信毎に、前記測定パケットを受信した第１時刻の情報と、前記測定パケットを返信パケットとして返信する第２時刻の情報とを含んだ前記返信パケットを、順次、返信し、
前記返信パケットに含まれる第１および第２時刻の情報と、受信した前記返信パケットに対応する前記測定パケットを送信した第３時刻の情報および前記返信パケットを受信した第４時刻の情報とから構成される時刻情報に基づいて、前記装置との時刻オフセットを、順次、算出する算出手段と、
前記第１周波数と、前記第２周波数との比を示す周波数比と、前記時刻オフセットと、前記時刻管理手段が管理する任意の基準となる時刻とに基づいて、前記時刻管理手段の管理する時刻を補正する補正手段とをさらに備える、伝送装置。
【請求項２】
前記周波数比をα、補正前の時刻をＣ、前記任意の基準となる時刻をＣ０、および前記時刻オフセットをβとした場合、前記補正手段は、前記算出手段がＦ（Ｃ）＝α×（Ｃ−Ｃ０）＋βにより算出した時刻Ｆ（Ｃ）に基づいて、管理する時刻を補正する、請求項１に記載の伝送装置。
【請求項３】
前記周波数比をα、および前記時刻オフセットをβとした場合、前記算出手段は、複数の前記時刻情報に基づいてαのとり得る値の最小値αｍｉｎおよび最大値αｍａｘを算出し、複数の前記時刻情報に基づいてβのとり得る値の最小値βｍｉｎおよび最大値βｍａｘを算出し、
前記算出手段は、αのとり得る値の範囲のうちの１つの値を前記周波数比としてのαとし、βのとり得る値の範囲のうちの１つの値を前記時刻オフセットとしてのβとする、請求項１または請求項２に記載の伝送装置。
【請求項４】
前記周波数比をα、前記任意の基準となる時刻をＣ０、前記装置へデータを伝送する際に生じる遅延時間の最小値となる第１最小伝送遅延時間および前記装置から前記伝送装置へデータを伝送する際に生じる遅延時間の最小値となる第２最小伝送遅延時間をε、前記送信手段がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、前記装置がｎ番目の測定パケットを受信した時刻をＳ１、前記装置がｎ番目の前記返信パケットを返信した時刻をＳ２、および前記伝送装置が前記ｎ番目の返信パケットを受信した時刻をＣ２とした場合、前記算出手段は、ｎ番目の前記時刻情報に基づいてαのとり得る値の最小値αｍｉｎを、（Ｓ２−β＋ε）／（Ｃ２−Ｃ０）により算出し、ｎ番目の前記時刻情報に基づいてαのとり得る値の最大値αｍａｘを、（Ｓ１−β−ε）／（Ｃ１−Ｃ０）により算出し、
前記算出手段は、複数の前記時刻情報に基づいて、αｍｉｎのとり得る値の最大値を算出し、αｍａｘのとり得る値の最小値を算出する、請求項１〜請求項３のいずれかに記載の伝送装置。
【請求項５】
前記周波数比をα、前記時刻オフセットをβ、前記送信手段がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、前記装置がｎ番目の測定パケットを受信した時刻をＳ１、前記装置がｎ番目の前記返信パケットを返信した時刻をＳ２、および前記伝送装置が前記ｎ番目の返信パケットを受信した時刻をＣ２、前記伝送装置と前記装置との間でデータを往復させる際に生じる遅延時間を示す時間をＲＴＴとした場合、前記算出手段は、ｎ番目の前記時刻情報に基づいてＲＴＴを算出し、
前記算出手段は、複数の前記時刻情報に基づいて、ＲＴＴのとり得る値の最小値ｍｉｎＲＴＴを算出し、
前記算出手段は、βを変化させる値の最小値および最大値を、それぞれ、所定値Ｓ００およびｍｉｎＲＴＴとし、βを変化させる範囲の中で、βを変化させながら、αｍｉｎのとり得る値の最大値およびαｍａｘのとり得る値の最小値を算出し、αが存在可能であるβの範囲に基づいて、βのとり得る値の最小値βｍｉｎおよび最大値βｍａｘを算出する、請求項１〜請求項４のいずれかに記載の伝送装置。
【請求項６】
前記時刻オフセットをβとした場合、
前記算出手段は、βのとり得る値の最小値βｍｉｎおよび最大値βｍａｘの算術平均により算出した値を、前記時刻オフセットとしてのβとする、請求項１〜請求項５のいずれかに記載の伝送装置。
【請求項７】
前記周波数比をαとした場合、
前記算出手段は、αのとり得る値の最小値αｍｉｎおよび最大値αｍａｘの算術平均により算出した値を、前記周波数比としてのαとする、請求項１〜請求項６のいずれかに記載の伝送装置。
【請求項８】
前記装置はコンテンツを再生する機能を備え、
同一のコンテンツを前記装置と前記伝送装置との間で同時に再生する、請求項１〜請求項７のいずれかに記載の伝送装置。
【請求項９】
前記算出手段は、前記装置へデータを伝送する際に生じる第１伝送遅延時間および前記装置から前記伝送装置へデータを伝送する際に生じる第２伝送遅延時間の少なくとも一方を算出する、請求項１〜請求項８のいずれかに記載の伝送装置。
【請求項１０】
前記周波数比をα、前記時刻オフセットをβ、前記任意の基準となる時刻をＣ０、前記送信手段がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、前記装置がｎ番目の測定パケットを受信した時刻をＳ１、前記装置がｎ番目の前記返信パケットを返信した時刻をＳ２、および前記伝送装置が前記ｎ番目の返信パケットを受信した時刻をＣ２とした場合、前記算出手段は、ｎ番目の前記時刻情報に基づいて、前記第１伝送遅延時間を、Ｓ１−｛α×（Ｃ１−Ｃ０）＋β｝により算出し、前記第２伝送遅延時間を、｛α×（Ｃ２−Ｃ０）＋β｝−Ｓ２により算出する、請求項１〜請求項９のいずれかに記載の伝送装置。
【請求項１１】
ネットワークに接続された、第１周波数で動作する装置と、データ通信する、第２周波数で動作する伝送装置との間で同期を行なう時刻同期方法であって、
時刻を管理する工程と、
前記装置へ、測定パケットを、順次、送信する工程とを含み、
前記装置は、前記測定パケットの受信毎に、前記測定パケットを受信した第１時刻の情報と、前記測定パケットを返信パケットとして返信する第２時刻の情報とを含んだ前記返信パケットを、順次、返信し、
前記返信パケットに含まれる第１および第２時刻の情報と、受信した前記返信パケットに対応する前記測定パケットを送信した第３時刻の情報および前記返信パケットを受信した第４時刻の情報とから構成される時刻情報に基づいて、前記装置との時刻オフセットを、順次、算出する工程と、
前記第１周波数と、前記第２周波数との比を示す周波数比と、前記時刻オフセットと、前記時刻を管理する工程が管理する任意の基準となる時刻とに基づいて、前記時刻を管理する工程の管理する時刻を補正する工程とをさらに含む、時刻同期方法。
【請求項１２】
前記周波数比をα、補正前の時刻をＣ、前記任意の基準となる時刻をＣ０、および前記時刻オフセットをβとした場合、前記補正する工程は、前記算出する工程がＦ（Ｃ）＝α×（Ｃ−Ｃ０）＋βにより算出した時刻Ｆ（Ｃ）に基づいて、管理する時刻を補正する、請求項１１に記載の時刻同期方法。
【請求項１３】
前記周波数比をα、および前記時刻オフセットをβとした場合、前記算出する工程は、複数の前記時刻情報に基づいてαのとり得る値の最小値αｍｉｎおよび最大値αｍａｘを算出し、複数の前記時刻情報に基づいてβのとり得る値の最小値βｍｉｎおよび最大値βｍａｘを算出し、
前記算出する工程は、αのとり得る値の範囲のうちの１つの値を前記周波数比としてのαとし、βのとり得る値の範囲のうちの１つの値を前記時刻オフセットとしてのβとする、請求項１１または請求項１２に記載の時刻同期方法。
【請求項１４】
前記周波数比をα、前記任意の基準となる時刻をＣ０、前記装置へデータを伝送する際に生じる遅延時間の最小値となる第１最小伝送遅延時間および前記装置から前記伝送装置へデータを伝送する際に生じる遅延時間の最小値となる第２最小伝送遅延時間をε、前記送信する工程がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、前記装置がｎ番目の測定パケットを受信した時刻をＳ１、前記装置がｎ番目の前記返信パケットを返信した時刻をＳ２、および前記伝送装置が前記ｎ番目の返信パケットを受信した時刻をＣ２とした場合、前記算出する工程は、ｎ番目の前記時刻情報に基づいてαのとり得る値の最小値αｍｉｎを、（Ｓ２−β＋ε）／（Ｃ２−Ｃ０）により算出し、ｎ番目の前記時刻情報に基づいてαのとり得る値の最大値αｍａｘを、（Ｓ１−β−ε）／（Ｃ１−Ｃ０）により算出し、
前記算出する工程は、複数の前記時刻情報に基づいて、αｍｉｎのとり得る値の最大値を算出し、αｍａｘのとり得る値の最小値を算出する、請求項１１〜請求項１３のいずれかに記載の時刻同期方法。
【請求項１５】
前記周波数比をα、前記時刻オフセットをβ、前記送信する工程がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、前記装置がｎ番目の測定パケットを受信した時刻をＳ１、前記装置がｎ番目の前記返信パケットを返信した時刻をＳ２、および前記伝送装置が前記ｎ番目の返信パケットを受信した時刻をＣ２、前記伝送装置と前記装置との間でデータを往復させる際に生じる遅延時間を示す時間をＲＴＴとした場合、前記算出する工程は、ｎ番目の前記時刻情報に基づいてＲＴＴを算出し、
前記算出する工程は、複数の前記時刻情報に基づいて、ＲＴＴのとり得る値の最小値ｍｉｎＲＴＴを算出し、
前記算出する工程は、βを変化させる値の最小値および最大値を、それぞれ、所定値Ｓ００およびｍｉｎＲＴＴとし、βを変化させる範囲の中で、βを変化させながら、αｍｉｎのとり得る値の最大値およびαｍａｘのとり得る値の最小値を算出し、αが存在可能であるβの範囲に基づいて、βのとり得る値の最小値βｍｉｎおよび最大値βｍａｘを算出する、請求項１１〜請求項１４のいずれかに記載の時刻同期方法。
【請求項１６】
前記時刻オフセットをβとした場合、
前記算出する工程は、βのとり得る値の最小値βｍｉｎおよび最大値βｍａｘの算術平均により算出した値を、前記時刻オフセットとしてのβとする、請求項１１〜請求項１５のいずれかに記載の時刻同期方法。
【請求項１７】
前記周波数比をαとした場合、
前記算出する工程は、αのとり得る値の最小値αｍｉｎおよび最大値αｍａｘの算術平均により算出した値を、前記周波数比としてのαとする、請求項１１〜請求項１６のいずれかに記載の時刻同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、伝送装置および時刻同期方法に関し、特に、時刻の同期を行なう伝送装置および時刻同期方法に関する。
【背景技術】
【０００２】
ネットワークに接続された複数の端末間で時刻を合わせることは、従来からなされていることであるが、ネットワークの性質により３つの場合に分けることができる。
【０００３】
１つ目は、時刻情報を専用に伝送する媒体が存在する場合である。たとえば、電波時計の利用、ＧＰＳの利用、ＩＳＤＮ回線を用いた共通クロックの供給、商用電源による同期などの方法がある。
【０００４】
２つ目は、時刻情報を専用に伝送する媒体は存在せず、時刻情報を確定的な遅延時間で受信できる場合である。たとえば、ＩＥＥＥ８０２．１１規格無線ＬＡＮには、ＴＳＦ（Timing Synchronization Function）という時刻同期を取るための機能がある。
【０００５】
この方法においては、無線ＬＡＮ上のＡＰ（アクセスポイント）がタイミング・マスタとなり、周期的に送信するビーコン信号に時刻情報を含めてブロードキャスト送信する。各ＳＴＡ（端末）は、ビーコン信号を受信し、それに含まれる時刻情報に基づいて自局のタイマを合わせる。ＡＰがビーコン信号を送信してから、ＳＴＡがビーコン信号を受信するまでの遅延時間は確定的である。
【０００６】
３つ目は、時刻情報を専用に伝送する媒体は存在せず、時刻情報を受信するまでの遅延時間が確定的でない場合である。このような場合に時刻を合わせる技術は、David L. Mills, “Network Time Protocol (Version 3) Specification, Implementation and Analysis”,［online］, IETF RFC-1305, Mar. 1992,［平成１７年６月２９日検索］,インターネット＜URL http://www.faqs.org/rfcs/rfc1305.html＞（非特許文献１）、David L. Mills, “Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI”, ［online］, IETF RFC-2030, Oct. 1996, ［平成１７年６月２９日検索］,インターネット＜URL http://www.faqs.org/rfcs/rfc2030.html＞（非特許文献２）、David L. Mills, “Internet time synchronization: the Network Time Protocol”, IEEE Trans. Communications COM-39, 10 (October 1991), 1482-1493. ［平成１７年６月２９日検索］,インターネット＜URL http://www.eecis.udel.edu/~mills/database/papers/trans.pdf＞（非特許文献３）および特開平１０―３０３９８７号公報（特許文献１）に開示されている。
【０００７】
David L. Mills, “Network Time Protocol (Version 3) Specification, Implementation and Analysis”,［online］, IETF RFC-1305, Mar. 1992,［平成１７年６月２９日検索］,インターネット＜URL http://www.faqs.org/rfcs/rfc1305.html＞（非特許文献１）、および、David L. Mills, “Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI”, ［online］, IETF RFC-2030, Oct. 1996, ［平成１７年６月２９日検索］,インターネット＜URL http://www.faqs.org/rfcs/rfc2030.html＞（非特許文献２）は、それぞれ、ＮＴＰ（Network Time Protocol）およびＳＮＴＰ（Simple NTP）の仕様書である。
【０００８】
ＮＴＰは、ＩＰネットワーク上で時刻を合わせるための一般的なプロトコルである。ＮＴＰは、ＲＦＣ（Request For Comment）−１３０５、または、その簡易版のＳＮＴＰ（Simple NTP）ＲＦＣ−２０３０のことを指す。
【０００９】
ＮＴＰはインターネット上で時刻を合わせるために広く普及している。
図１８は、ＮＴＰを用いる時刻合わせの手法を説明するための図である。図１８を参照して、ＮＴＰを用いる時刻合わせの手法では、以下の（１）、（２）、（３）の順に処理が行われる。なお、Ｃ１，Ｃ２はクライアント側のタイムスタンプを示す。Ｓ１，Ｓ２はサーバー側のタイムスタンプを示す。
（１）クライアントはサーバーにパケットを送信する(時刻Ｃ１)。
（２）サーバーはクライアントからパケットを受信し(時刻Ｓ１)、送信元アドレスをあて先にして送り返す（時刻Ｓ２）。
（３）クライアントはサーバーからパケットを受信する（時刻Ｃ２）。
（１）、（２）、（３）の処理における各パケットにはＣ１，Ｓ１，Ｓ２のタイムスタンプが含まれる。
【００１０】
ラウンドトリップ時間（往復の伝送遅延時間）δｉは、以下の式（１０１）〜式（１０３）により求められる。
ａ＝Ｓ１−Ｃ１          ・・・（１０１）
ｂ＝Ｓ２−Ｃ２          ・・・（１０２）
δｉ＝ａ−ｂ              ・・・（１０３）
クライアントのサーバーに対するクロックオフセット（時刻のずれ）θｉは、以下の式（１０４）により求められる。
θｉ＝（ａ＋ｂ）／２      ・・・（１０４）
また、真のクロックオフセットをθとすると、真のクロックオフセットθは、以下の式（１０５）により評価できる（非特許文献３参照）。そのため、クロックオフセットθｉの誤差が、ラウンドトリップ時間δｉより大きくなることはない。
θｉ−δｉ／２≦θ≦θｉ＋δｉ／２                        ・・・（１０５）
これは、ラウンドトリップ時間が大きいデータを使うと、クロックオフセットθｉの誤差が大きくなる可能性があることを意味している。
【００１１】
このため、ＮＴＰでは、一回の補正において、パケットを複数回送受信して、ラウンドトリップ時間δｉが最小の時のデータを使って、クロックオフセットθｉとして採用することが行なわれることがある。これをデータフィルタと呼ぶ。
【００１２】
さらに、ＮＴＰでは、クロックオフセットθをループフィルタにかけて、その結果を元にＰＬＬ（Phase Locked Loop）を動作させて、自律的なローカル時刻を生成することもある。
【００１３】
１回のクロックオフセット情報だけでは誤差が生じるので、ループフィルタを使用して誤差を平滑化する。
【００１４】
また、クロックオフセットθが得られるたびに、ローカル時刻の値を修正すると、ローカル時刻が前後にスキップすることがあるが、ＰＬＬを組むことで、ローカル時刻を連続的に調整することができる。データフィルタや、ＰＬＬを組み合わせたＮＴＰを図１９に示す。ここで、ループフィルタの中身は一例である。
【００１５】
特開平１０―３０３９８７号公報（特許文献１）に開示されている技術も、ＮＴＰと同様に、２つのノード間でタイムスタンプを含んだパケットの送受信を繰り返す。具体的には、クロックオフセットθの計算を複数回行ない、その結果が正規分布をしているか否かを判定する。当該判定により、正規分布に近くないときには変数変換によって正規分布に近い分布に変換して統計処理を行なう。これにより、クロックオフセットθの統計的な性質を把握できるので、時刻同期の精度が、どの程度正確かかがわかる。
【非特許文献１】David L. Mills, “Network Time Protocol (Version 3) Specification, Implementation and Analysis”,［online］, IETF RFC-1305, Mar. 1992,［平成１７年６月２９日検索］,インターネット＜URL http://www.faqs.org/rfcs/rfc1305.html＞
【非特許文献２】David L. Mills, “Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI”, ［online］, IETF RFC-2030, Oct. 1996, ［平成１７年６月２９日検索］,インターネット＜URL http://www.faqs.org/rfcs/rfc2030.html＞
【非特許文献３】David L. Mills, “Internet time synchronization: the Network Time Protocol”, IEEE Trans. Communications COM-39, 10 (October 1991), 1482-1493. ［平成１７年６月２９日検索］,インターネット＜URL http://www.eecis.udel.edu/~mills/database/papers/trans.pdf＞
【特許文献１】特開平１０―３０３９８７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
本発明が解決しようとする課題は以下のようなものである。本発明では時刻情報を専用に伝送する媒体は存在せず、時刻情報を受信するまでの遅延時間が確定的でない場合を対象とする。
【００１７】
また、本発明では、一般的なＩＰネットワークを想定している。ＩＰネットワークを構成するのは、有線ＬＡＮ、無線ＬＡＮ、モデム、ルータ、スイッチングハブ、光ファイバーなどがある。特定の媒体に依存せず、複数の媒体をまたがる場合もある。また、データ通信網以外の通信網の存在を想定しない。
【００１８】
このような構成の場合、ネットワーク状態の変化または端末内部の状態変化により、伝送遅延時間にばらつきが生じる。
【００１９】
ネットワーク状態の変化とは、ネットワーク上を流れるトラフィック（パケット量）が刻一刻と変化するということである。トラフィックは、他の端末や実行中のアプリケーションに影響される。また、トラフィックは、ルータなどの中継装置にも影響される。トラフィックが輻輳すると、パケットが中継装置を通過するのに長い時間かかったり、パケットが失われたりすることがある。また、トラフィックは、端末自身のネットワークＩ／Ｆのバッファ量にも影響される。また、トラフィックは、無線ＬＡＮなどの場合、媒体の通信状況にも影響される。
【００２０】
端末内部の状態変化とは、ＣＰＵ使用率の状況、割込み応答時間、オペレーティングシステムのタスク切り替えにかかる時間などの変化のことである。端末内部の状態変化により、パケットの送受信の処理時間にばらつきが生じる。
【００２１】
また、伝送遅延時間にばらつきが生じるだけでなく、クライアントとサーバーとの間で、行きと帰りで伝送路の性質が非対称になる場合もある。
【００２２】
たとえば、片方向に映像伝送をしている時は、行きと帰りでトラフィックの発生量に偏りが生じる。行きと帰りが、同じネットワーク経路であって、同じ伝送速度であっても、トラフィックの発生量の偏りによって、伝送路の性質が非対称になる。この場合、行きと帰りの伝送遅延時間の平均値が異なる。
【００２３】
ＮＴＰがクロックオフセットθを求めるときは、基本的にパケットの送受信１回の情報を使う。ＮＴＰはクロックオフセットθを求めるとき、行きと帰りで伝送遅延時間が同じであると仮定しているが、実際には、伝送遅延時間にばらつきが生じる。その上、行きと帰りで伝送路の性質が非対称になる場合があるなどの理由で、行きと帰りで伝送遅延時間が同じになることはあまり期待できない。
【００２４】
したがって、パケットの送受信１回だけの情報で計算したクロックオフセットθｉは、真のクロックオフセットθと比べて、かなりの誤差がある。
【００２５】
そこで、ＮＴＰではデータフィルタをしたり、ループフィルタによって誤差を平滑化したりすることで、パケット送受信１回あたりクロックオフセットθｉの誤差の影響がなるべく少なくなるようにしている。
【００２６】
しかしながら、ＮＴＰには以下の２つの問題があると考えられる。
（１）片方向に映像伝送をすると精度が悪くなる。
（２）ＰＬＬが安定動作するまでに時間がかかる。
これらの問題を詳細に検討すると以下のようになる。
（１）片方向だけに映像伝送をすると、行きと帰りでトラフィックの発生量に偏りが生じる。トラフィック量が多いと、平均的な伝送遅延時間が大きくなることが知られている。トラフィック量が多い方向の平均伝送遅延時間が、逆方向の平均伝送遅延時間と比べて大きくなる。
【００２７】
ＮＴＰは、データフィルタをしたとしても、基本的にパケットの送受信１回の情報を使って、クロックオフセットを推定するので、映像伝送中はクロックオフセットの誤差が大きくなる傾向がある。この場合、ループフィルタによって誤差を平滑化しても、誤差の影響を小さくすることは困難である。
（２）ＮＴＰで高精度に時刻合わせをするには、ＰＬＬが必要となるが、誤差を小さく抑え込むには、ＰＬＬパラメータ（図１９におけるＫＰ、ＫＩ）を小さくしなければならない。しかし、ＰＬＬパラメータを小さくすると、ＰＬＬが安定動作するまでに時間がかかるようになる。誤差を小さく抑え込むのと、ＰＬＬが安定動作するまでの時間はトレードオフの関係にある。
【００２８】
図２０は、クライアントからサーバーへ映像伝送をした時の構成を示す図である。図２０を参照して、クライアントからサーバーへの方向を「行き」とする。サーバーからクライアントへの方向を「帰り」とする。クライアントとサーバー間で測定パケットを往復させて、ラウンドトリップ時間を行きの伝送遅延時間と帰りの伝送遅延時間とに分離する。図２０の構成により、クライアントからサーバーへ映像伝送をした場合の行きと帰りの伝送遅延時間を測定した結果を以下に示す。
【００２９】
図２１は、時間経過とともに、行きの伝送遅延時間の変化を示す図である。
図２２は、時間経過とともに、帰りの伝送遅延時間の変化を示す図である。
【００３０】
図２３は、行きおよび帰り、それぞれの平均伝送遅延時間を示す図である。
図２１、図２２および図２３の結果から、映像伝送中は、行き方向の平均伝送遅延時間が大きくなり、帰り方向の平均伝送遅延時間はそれほど変わらないことがわかる。映像伝送中は行きの方向だけ平均伝送遅延時間が大きくなり、行きと帰りで伝送路の対称性が失われることになる。このような場合、ＮＴＰでは精度が悪くなる。
【００３１】
また、特開平１０―３０３９８７号公報に開示されている技術では、クロックオフセットθの統計的性質を見て、ローカル時刻の調整を行なう。しかし、（１）で述べたように、片方向だけに映像伝送を行なう場合、行きと帰りで伝送路の対称性が失われるので、クロックオフセットθｉの誤差が大きくなる。その間はクロックオフセットの統計的性質が変わる（平均値がずれる）ことになるので、この方法ではうまく対応できないと考えられる。
【００３２】
本発明は、上述の問題点を解決するためになされたものであって、その目的は、片方向の映像伝送を行っているような場合でも精度良く時刻合わせを行なうことができる伝送装置を提供することである。
【００３３】
本発明の他の目的は、誤差を小さく抑えるまでの時間を少なくし、精度良く時刻合わせを行なうことができる時刻同期方法を提供することである。
【課題を解決するための手段】
【００３４】
上述の課題を解決するために、この発明のある局面に従うと、ネットワークに接続された、第１周波数で動作する装置と、データ通信する、第２周波数で動作する伝送装置は、時刻を管理する時刻管理手段と、装置へ、測定パケットを、順次、送信する送信手段とを備え、装置は、測定パケットの受信毎に、測定パケットを受信した第１時刻の情報と、測定パケットを返信パケットとして返信する第２時刻の情報とを含んだ返信パケットを、順次、返信し、返信パケットに含まれる第１および第２時刻の情報と、受信した返信パケットに対応する測定パケットを送信した第３時刻の情報および返信パケットを受信した第４時刻の情報とから構成される時刻情報に基づいて、装置との時刻オフセットを、順次、算出する算出手段と、第１周波数と、第２周波数との比を示す周波数比と、時刻オフセットと、時刻管理手段が管理する任意の基準となる時刻とに基づいて、時刻管理手段の管理する時刻を補正する補正手段とをさらに備える。
【００３５】
好ましくは、周波数比をα、補正前の時刻をＣ、任意の基準となる時刻をＣ０、および時刻オフセットをβとした場合、補正手段は、算出手段がＦ（Ｃ）＝α×（Ｃ−Ｃ０）＋βにより算出した時刻Ｆ（Ｃ）に基づいて、管理する時刻を補正する。
【００３６】
好ましくは、周波数比をα、および時刻オフセットをβとした場合、算出手段は、複数の時刻情報に基づいてαのとり得る値の最小値αｍｉｎおよび最大値αｍａｘを算出し、複数の時刻情報に基づいてβのとり得る値の最小値βｍｉｎおよび最大値βｍａｘを算出し、
算出手段は、αのとり得る値の範囲のうちの１つの値を周波数比としてのαとし、βのとり得る値の範囲のうちの１つの値を時刻オフセットとしてのβとする。
【００３７】
好ましくは、周波数比をα、任意の基準となる時刻をＣ０、装置へデータを伝送する際に生じる遅延時間の最小値となる第１最小伝送遅延時間および装置から伝送装置へデータを伝送する際に生じる遅延時間の最小値となる第２最小伝送遅延時間をε、送信手段がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、装置がｎ番目の測定パケットを受信した時刻をＳ１、装置がｎ番目の返信パケットを返信した時刻をＳ２、および伝送装置がｎ番目の返信パケットを受信した時刻をＣ２とした場合、算出手段は、ｎ番目の時刻情報に基づいてαのとり得る値の最小値αｍｉｎを、（Ｓ２−β＋ε）／（Ｃ２−Ｃ０）により算出し、ｎ番目の時刻情報に基づいてαのとり得る値の最大値αｍａｘを、（Ｓ１−β−ε）／（Ｃ１−Ｃ０）により算出し、算出手段は、複数の時刻情報に基づいて、αｍｉｎのとり得る値の最大値を算出し、αｍａｘのとり得る値の最小値を算出する。
【００３８】
好ましくは、周波数比をα、時刻オフセットをβ、送信手段がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、装置がｎ番目の測定パケットを受信した時刻をＳ１、装置がｎ番目の返信パケットを返信した時刻をＳ２、および伝送装置がｎ番目の返信パケットを受信した時刻をＣ２、伝送装置と装置との間でデータを往復させる際に生じる遅延時間を示す時間をＲＴＴとした場合、算出手段は、ｎ番目の時刻情報に基づいてＲＴＴを算出し、算出手段は、複数の時刻情報に基づいて、ＲＴＴのとり得る値の最小値ｍｉｎＲＴＴを算出し、算出手段は、βを変化させる値の最小値および最大値を、それぞれ、所定値Ｓ００およびｍｉｎＲＴＴとし、βを変化させる範囲の中で、βを変化させながら、αｍｉｎのとり得る値の最大値およびαｍａｘのとり得る値の最小値を算出し、αが存在可能であるβの範囲に基づいて、βのとり得る値の最小値βｍｉｎおよび最大値βｍａｘを算出する。
【００３９】
好ましくは、時刻オフセットをβとした場合、算出手段は、βのとり得る値の最小値βｍｉｎおよび最大値βｍａｘの算術平均により算出した値を、時刻オフセットとしてのβとする。
【００４０】
好ましくは、周波数比をαとした場合、算出手段は、αのとり得る値の最小値αｍｉｎおよび最大値αｍａｘの算術平均により算出した値を、周波数比としてのαとする。
【００４１】
好ましくは、装置はコンテンツを再生する機能を備え、同一のコンテンツを装置と伝送装置との間で同時に再生する。
【００４２】
好ましくは、算出手段は、装置へデータを伝送する際に生じる第１伝送遅延時間および装置から伝送装置へデータを伝送する際に生じる第２伝送遅延時間の少なくとも一方を算出する。
【００４３】
好ましくは、周波数比をα、時刻オフセットをβ、任意の基準となる時刻をＣ０、送信手段がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、装置がｎ番目の測定パケットを受信した時刻をＳ１、装置がｎ番目の返信パケットを返信した時刻をＳ２、および伝送装置がｎ番目の返信パケットを受信した時刻をＣ２とした場合、算出手段は、ｎ番目の時刻情報に基づいて、第１伝送遅延時間を、Ｓ１−｛α×（Ｃ１−Ｃ０）＋β｝により算出し、第２伝送遅延時間を、｛α×（Ｃ２−Ｃ０）＋β｝−Ｓ２により算出する。
【００４４】
この発明の他の局面に従うと、ネットワークに接続された、第１周波数で動作する装置と、データ通信する、第２周波数で動作する伝送装置との間で同期を行なう時刻同期方法は、と、装置へ、測定パケットを、順次、送信する工程とを含み、装置は、測定パケットの受信毎に、測定パケットを受信した第１時刻の情報と、測定パケットを返信パケットとして返信する第２時刻の情報とを含んだ返信パケットを、順次、返信し、返信パケットに含まれる第１および第２時刻の情報と、受信した返信パケットに対応する測定パケットを送信した第３時刻の情報および返信パケットを受信した第４時刻の情報とから構成される時刻情報に基づいて、装置との時刻オフセットを、順次、算出する工程と、第１周波数と、第２周波数との比を示す周波数比と、時刻オフセットと、時刻を管理する工程が管理する任意の基準となる時刻とに基づいて、時刻を管理する工程の管理する時刻を補正する工程とをさらに含む。
【００４５】
好ましくは、周波数比をα、補正前の時刻をＣ、任意の基準となる時刻をＣ０、および時刻オフセットをβとした場合、補正する工程は、算出する工程がＦ（Ｃ）＝α×（Ｃ−Ｃ０）＋βにより算出した時刻Ｆ（Ｃ）に基づいて、管理する時刻を補正する。
【００４６】
好ましくは、周波数比をα、および時刻オフセットをβとした場合、算出する工程は、複数の時刻情報に基づいてαのとり得る値の最小値αｍｉｎおよび最大値αｍａｘを算出し、複数の時刻情報に基づいてβのとり得る値の最小値βｍｉｎおよび最大値βｍａｘを算出し、算出する工程は、αのとり得る値の範囲のうちの１つの値を周波数比としてのαとし、βのとり得る値の範囲のうちの１つの値を時刻オフセットとしてのβとする。
【００４７】
好ましくは、周波数比をα、任意の基準となる時刻をＣ０、装置へデータを伝送する際に生じる遅延時間の最小値となる第１最小伝送遅延時間および装置から伝送装置へデータを伝送する際に生じる遅延時間の最小値となる第２最小伝送遅延時間をε、送信する工程がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、装置がｎ番目の測定パケットを受信した時刻をＳ１、装置がｎ番目の返信パケットを返信した時刻をＳ２、および伝送装置がｎ番目の返信パケットを受信した時刻をＣ２とした場合、算出する工程は、ｎ番目の時刻情報に基づいてαのとり得る値の最小値αｍｉｎを、（Ｓ２−β＋ε）／（Ｃ２−Ｃ０）により算出し、ｎ番目の時刻情報に基づいてαのとり得る値の最大値αｍａｘを、（Ｓ１−β−ε）／（Ｃ１−Ｃ０）により算出し、算出する工程は、複数の時刻情報に基づいて、αｍｉｎのとり得る値の最大値を算出し、αｍａｘのとり得る値の最小値を算出する。
【００４８】
好ましくは、周波数比をα、時刻オフセットをβ、送信する工程がｎ（自然数）番目の測定パケットを送信した時刻をＣ１、装置がｎ番目の測定パケットを受信した時刻をＳ１、装置がｎ番目の返信パケットを返信した時刻をＳ２、および伝送装置がｎ番目の返信パケットを受信した時刻をＣ２、伝送装置と装置との間でデータを往復させる際に生じる遅延時間を示す時間をＲＴＴとした場合、算出する工程は、ｎ番目の時刻情報に基づいてＲＴＴを算出し、算出する工程は、複数の時刻情報に基づいて、ＲＴＴのとり得る値の最小値ｍｉｎＲＴＴを算出し、算出する工程は、βを変化させる値の最小値および最大値を、それぞれ、所定値Ｓ００およびｍｉｎＲＴＴとし、βを変化させる範囲の中で、βを変化させながら、αｍｉｎのとり得る値の最大値およびαｍａｘのとり得る値の最小値を算出し、αが存在可能であるβの範囲に基づいて、βのとり得る値の最小値βｍｉｎおよび最大値βｍａｘを算出する。
【００４９】
好ましくは、時刻オフセットをβとした場合、算出する工程は、βのとり得る値の最小値βｍｉｎおよび最大値βｍａｘの算術平均により算出した値を、時刻オフセットとしてのβとする。
【００５０】
好ましくは、周波数比をαとした場合、算出する工程は、αのとり得る値の最小値αｍｉｎおよび最大値αｍａｘの算術平均により算出した値を、周波数比としてのαとする。
【発明の効果】
【００５１】
本発明に係る伝送装置は、装置が、測定パケットを受信した第１時刻の情報、測定パケットを返信パケットとして返信する第２時刻の情報、測定パケットを送信した第３時刻の情報および返信パケットを受信した第４時刻の情報とから構成される時刻情報に基づいて、装置および伝送装置の各々が動作する周波数比と、時刻オフセットと、時刻管理手段が管理する任意の時刻とに基づいて、時刻管理手段の管理する時刻を補正する。
【００５２】
したがって、誤差を小さく抑えるまでの時間を少なくし、精度良く時刻合わせを行なうことができるという効果を奏する。
【００５３】
本発明に係る時刻同期方法は、装置が、測定パケットを受信した第１時刻の情報、測定パケットを返信パケットとして返信する第２時刻の情報、測定パケットを送信した第３時刻の情報および返信パケットを受信した第４時刻の情報とから構成される時刻情報に基づいて、装置および伝送装置の各々が動作する周波数比と、時刻オフセットと、時刻を管理する工程が管理する任意の時刻とに基づいて、時刻を管理する工程の管理する時刻を補正する。
【００５４】
したがって、誤差を小さく抑えるまでの時間を少なくし、精度良く時刻合わせを行なうことができるという効果を奏する。
【発明を実施するための最良の形態】
【００５５】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【００５６】
図１は、本実施の形態を構成する、一例としてのシステム１０００を示す図である。図１を参照して、システム１０００は、クライアント１００と、ネットワーク１１０と、サーバー１２０とから構成される。ネットワーク１１０は、たとえば、インターネットなどのネットワークである。クライアント１００と、サーバー１２０とは、ネットワーク１１０を介して、相互に接続される。
【００５７】
本実施の形態では、クライアント１００の時刻（ローカルカウンタの値）をサーバー１２０の時刻に合わせるものとする。以下においては、ローカルカウンタの値をローカルカウンタ値ともいう。
【００５８】
クライアント１００は、ＣＰＵ（Central Processing Unit）１０１、メモリ１０２、通信インタフェース１０３、発振器１０４、ローカルカウンタ１０５、バス１０９とを備える。ＣＰＵ１０１、メモリ１０２、通信インタフェース１０３およびローカルカウンタ１０５は、バス１０９に接続される。ローカルカウンタ１０５はＣＰＵ１０１に組み込まれていてもよい。
【００５９】
ＣＰＵ１０１は、クライアント１００を通信装置として動作させるためのプログラムを実行する。
【００６０】
メモリ１０２は、ＣＰＵ１０１が実行するプログラムやその際に必要な値などを記憶する。通信インタフェース１０３は、ネットワーク１１０に接続された他の端末と通信するための送信部と受信部とを含む。ローカルカウンタ１０５は、発振器１０４の発振周波数に基づき、ローカルカウンタ値がインクリメントされる。ＣＰＵ１０１は、ローカルカウンタ１０５のローカルカウンタ値の読み出しを行なう。
【００６１】
サーバー１２０は、ＣＰＵ１２１、メモリ１２２、通信インタフェース１２３、発振器１２４、ローカルカウンタ１２５、バス１２９とを備える。ＣＰＵ１２１、メモリ１２２、通信インタフェース１２３およびローカルカウンタ１２５は、バス１２９に接続される。ローカルカウンタ１２５はＣＰＵ１２１に組み込まれていてもよい。
【００６２】
ＣＰＵ１２１は、サーバー１２０を通信装置として動作させるためのプログラムを実行する。
【００６３】
メモリ１２２は、ＣＰＵ１２１が実行するプログラムやその際に必要な値などを記憶する。通信インタフェース１２３は、ネットワーク１１０に接続された他の端末と通信するための送信部と受信部とを含む。ローカルカウンタ１２５は、発振器１２４の発振周波数に基づき、ローカルカウンタ値がインクリメントされる。なお、ローカルカウンタ１２５は、図１に図示されていない構成によって、協定世界時であるＵＴＣ（Coordinated Universal Time）に同期していてもよい。
【００６４】
ＣＰＵ１２１は、ローカルカウンタ１２５のローカルカウンタ値の読み出しを行なう。
なお、図１のシステム１０００における、クライアント１００およびサーバー１２０の内部構成は、必要最小限の構成のみ図示しており、その他の構成要素は、図示されていない。
【００６５】
クライアント１００およびサーバー１２０は、たとえば、一般的なＰＣ（Personal Computer）である。ＰＣの場合、ローカルカウンタはＯＳ（Operating System）が提供するＡＰＩ（Application Program Interface）を使う。例えば、ＯＳが、Microsoft Windows(登録商標)の場合、カウンタとして、QueryPerformanceCounterが使用できる。
【００６６】
また、ＯＳが、Ｌｉｎｕｘ（登録商標）の場合、カウンタとして、gettimeofdayが使用できる。これらの精度はいずれも１μ秒以下であるので、目標とする時刻合わせの精度を考えると十分利用可能である。なお、QueryPerformanceCounterは、ハードウェアによって周波数が異なる。周波数はQueryPerformanceFrequencyで取得できる。
【００６７】
本実施の形態は、一般的なＰＣの構成でも可能である。しかしながら、クライアント１００およびサーバー１２０の各々が、専用のハードウェア（回路）を備えていてもよい。
【００６８】
専用のハードウェア（回路）は、たとえば、ＰＣＩ（Peripheral Component Interconnect）規格のハードウエアボードである。当該ハードウエアボードは、ＰＣとしてのクライアント１００およびサーバー１２０の各々に、ＰＣＩ（Peripheral Component Interconnect）バスなどの拡張バスを通じて接続される。
【００６９】
専用のハードウェア（回路）は、高精度（少なくとも１μ秒以下の解像度を持つ）で、安定した発振器を積んでいることが望ましい。専用のハードウェア（回路）は、この発振器に基づいたローカルカウンタを提供し、さらに、ローカルカウンタ値の進み方を補正する回路があってもよい。
【００７０】
図２は、専用のハードウェア１０８を搭載した、一例としてのクライアント１００Ａの構成を示す図である。図２を参照して、専用のハードウェア１０８はバス１０９を通じてＣＰＵ１０１からアクセスされる。専用のハードウェア１０８には、発振器１０４と、ローカルカウンタ１０５と、補正回路１０６と、レジスタ１０７とが少なくとも搭載される。
【００７１】
ローカルカウンタ１０５は、発振器１０４の発振周波数に基づき、ローカルカウンタ値がインクリメントされる。補正回路１０６は、ローカルカウンタ１０５とレジスタ１０７に設定されたパラメータにより、ローカルカウンタ値を補正する。補正回路１０６は、ＣＰＵ１０１などに対して補正後のローカルカウンタ値を提供する。
【００７２】
レジスタ１０７には、補正に必要なパラメータが記憶されている。具体的には、任意の基準となる時刻Ｃ０、クロック周波数比α（推定値）、Ｃ＝Ｃ０における時刻オフセットβ（推定値）が記憶されている。これらのパラメータは、以下に説明する処理によってＣＰＵ１０１が計算して設定される。本発明がとっている手法は、クロック周波数のドリフト（ずれ）に弱いため、発振器１０４と発振器１２４は、発振周波数が安定していることが望ましい。発振器には、温度補償型の水晶発振器か、さらにはルビジウムやセシウムの発振器を使うことが望ましい。
【００７３】
図３は、クライアント１００側のローカルカウンタとサーバー１２０側のローカルカウンタの関係を示したものである。図３を参照して、クライアント１００は、サーバー１２０に対して時刻合わせのための測定パケットＰＫを送信する。この測定パケットＰＫには、クライアント１００が送信する時点のクライアント１００側のローカルカウンタ値（Ｃ１）が付加されている。
【００７４】
サーバー１２０は、測定パケットＰＫを受信すると、測定パケットＰＫの送信元アドレスをあて先アドレスとした返信パケットＰＫＲを作成する。そして、サーバー１２０は、返信パケットＰＫＲを、対応する宛先へ送り返す。
【００７５】
返信パケットＰＫＲには、Ｃ１の他に、サーバー１２０が受信した時点のサーバー１２０側のローカルカウンタ値（Ｓ１）と、サーバー１２０が送信する時点のサーバー１２０側のローカルカウンタ値（Ｓ２）が付加されている。
【００７６】
クライアント１００は、サーバー１２０から返信パケットＰＫＲを受信する。クライアント１００が返信パケットＰＫＲを受信した時点のクライアント１００側のローカルカウンタ値をＣ２とする。
【００７７】
本発明は、上記のプロトコルを、適当な時間間隔で繰り返すことによってクライアント１００とサーバー１２０間のパケット伝送に関する時刻情報（Ｃ１，Ｓ１，Ｓ２，Ｃ２）を得る。そして、それらを使って両者の間の時刻合わせを行なうことができる、特徴的な技術を開示するものである。以下にその具体的方法を述べることにする。
【００７８】
まず、クライアント１００は、サーバー１２０に対して、Ｎ個の測定パケットＰＫを送信することで、Ｎ個の時刻情報（Ｃ１ｋ，Ｓ１ｋ，Ｓ２ｋ，Ｃ２ｋ）を得る（ｋ＝０，１，・・・，Ｎ−１）。（Ｃ１ｋ，Ｃ２ｋ）は、クライアント１００側のローカルカウンタ値を示す。（Ｓ１ｋ，Ｓ２ｋ）は、サーバー１２０側のローカルカウンタ値を示す。
【００７９】
ここで、以下の式（１）により、クライアント１００のローカルカウンタ値を、サーバー１２０のローカルカウンタ値に補正できるとする。
Ｆ（Ｃ）＝α×（Ｃ−Ｃ０）＋β                                ・・・（１）
式（１）において、Ｆ（Ｃ）は補正後のクライアント１００のローカルカウンタ値を示す。Ｃは補正する前のクライアント１００のローカルカウンタ値を示す。αはサーバー１２０の発振器１２４の発振周波数と、クライアント１００の発振器１０４の発振周波数とのクロック周波数比を示す。βはＣ＝Ｃ０におけるサーバー１２０のローカルカウンタ値を示す。Ｃ０はクライアント１００における任意の基準となるローカルカウンタ値を示す。
【００８０】
式（１）が成立する条件は、クライアント１００およびサーバー１２０の有する発振器の発振周波数が十分に安定していることである。なお、実際には、温度変化、湿度変化、その他の影響により、発信器の発振周波数が変化することがありうる。また、発振器自体の性能などの理由により、発振周波数が変化することもありうる。
【００８１】
発信器の発振周波数は、ずっと安定であるとは言えないが、測定期間中（たとえば、数１０分程度）は安定であるものとする。数１０分程度ならば、発振周波数が安定であると仮定しても問題はない。
【００８２】
クライアント１００のローカルカウンタ値が、式（１）によってサーバー１２０のローカルカウンタ値に補正できるとすれば、以下の式（２）、式（３）が成立する。
Ｓ１−Ｆ（Ｃ１）＞ε                                          ・・・（２）
Ｆ（Ｃ２）−Ｓ２＞ε                                          ・・・（３）
式（２）の左辺は、クライアント１００からサーバー１２０へ（この方向を「行き」とする）のパケット伝送遅延時間を表している。式（３）の左辺は、サーバー１２０からクライアント１００へ（この方向を「帰り」とする）のパケット伝送遅延時間を表している。
【００８３】
εは、行きと帰りの伝送遅延時間の最小値（以下、最小伝送遅延時間ともいう）とする。伝送遅延時間は、物理的に０より小さくなることはないので、ε≧０である。
【００８４】
まず、式（１）の変数ＣにＣ１を代入してＦ（Ｃ１）を算出する。式（１）の変数ＣにＣ２を代入してＦ（Ｃ２）を算出する。そして、式（２）に、算出したＦ（Ｃ１）を代入し、式（３）にＦ（Ｃ２）を代入する。そして、αについて解くと、以下の式（４）が得られる。
（Ｓ２−β＋ε）／（Ｃ２−Ｃ０）＜α＜（Ｓ１−β−ε）／（Ｃ１−Ｃ０）・・・（４）
式（４）は、αが存在可能な範囲を示している。式（１）の右辺において、Ｃ０は任意に決定してよいが、α、βは未知数である。したがって、βを固定値とすれば、式（４）よりαの存在範囲を絞ることができる。
αの下限値をαｍｉｎ、αの上限値をαｍａｘとすると、αｍｉｎ、αｍａｘは、式（４）より、以下の式（５Ａ）、式（５Ｂ）となる。
αｍｉｎ←（Ｓ２−β＋ε）／（Ｃ２−Ｃ０）                  ・・・（５Ａ）
αｍａｘ←（Ｓ１−β−ε）／（Ｃ１−Ｃ０）                  ・・・（５Ｂ）
ここで、「←」は変数に代入することを表す。
【００８５】
式（４）は、ある特定のデータ｛Ｃ１，Ｓ１，Ｓ２，Ｃ２｝における、αの満たすべき範囲を示しているが、一連のデータすべてにおいて式（４）が満たされるべきである。
【００８６】
図４は、実際のデータを使用して、αｍｉｎとαｍａｘをプロットした図を示す。なお、βの値は、仮に決定しておく。図４を参照して、αの上限値αｍａｘと、αの下限値αｍｉｎの範囲が、時間の経過とともに狭まっていく様子がわかる。また、一連のデータすべてにおいてαｍｉｎ＜α＜αｍａｘとなるαが存在することがわかる。
【００８７】
図４をさらに詳細に見ると、αｍａｘが前後の点と比べて上方向に大きくぶれてプロットされた点と、αｍｉｎが前後の点と比べて下方向に大きくぶれてプロットされた点があることがわかる。このαｍａｘが上方向にぶれてプロットされた点は、行きの伝送時間が前後の点と比べてはるかに大きいことによるものである。また、αｍｉｎが下方向にぶれてプロットされた点は、帰りの伝送時間が前後の点と比べてはるかに大きいことによるものである。
【００８８】
一連のデータすべてにおいて、αｍｉｎ＜α＜αｍａｘが成立するαが存在するかどうかを判定するために、αの下限値αｍｉｎについてはその最大値を、αの上限値αｍａｘについてはその最小値を取っていく。
【００８９】
測定パケットの送信と受信によって、クライアント１００が、ｋ番目のデータの組｛Ｃ１ｋ，Ｓ１ｋ，Ｓ２ｋ，Ｃ２ｋ｝を得る毎に、式（５Ａ）、式（５Ｂ）および、以下の式（６Ａ）、式（６Ｂ）の計算を行なう（以下、計算処理Ａともいう）。
ＭＡＸ＿αｍｉｎ←ＭＡＸ（αｍｉｎ，ＭＡＸ＿αｍｉｎ）      ・・・（６Ａ）
ＭＩＮ＿αｍａｘ←ＭＩＮ（αｍａｘ，ＭＩＮ＿αｍａｘ）      ・・・（６Ｂ）
式（６Ａ）の左辺のＭＡＸ＿αｍｉｎは、現時点における、αｍｉｎの最大値を示す。式（６Ｂ）の左辺のＭＩＮ＿αｍａｘは、現時点における、αｍａｘの最小値を示す。式（６Ａ）のＭＡＸ（ａ，ｂ） は、{ａ，ｂ}のうち大きい方の値を返す関数である。式（６Ｂ）のＭＩＮ（ａ，ｂ） は、{ａ，ｂ}のうち小さい方の値を返す関数である。
【００９０】
計算処理Ａを繰り返すことで、αは１前後の数値となる。そのため、ＭＡＸ＿αｍｉｎの初期値は０に、ＭＩＮ＿αｍａｘの初期値は、たとえば、２に設定するとよい。この場合、αの存在可能範囲は、以下の式（７）のようになる。
ＭＡＸ＿αｍｉｎ＜α＜ＭＩＮ＿αｍａｘ                        ・・・（７）
βを仮に決定すると、一連のデータから式（５Ａ）、式（５Ｂ）、式（６Ａ）、式（６Ｂ）より｛ＭＡＸ＿αｍｉｎ，ＭＩＮ＿αｍａｘ｝が得られる。
【００９１】
ここで、ＭＡＸ＿αｍｉｎ＞ＭＩＮ＿αｍａｘが成立する場合、仮決定したβでは、一連のデータすべてにおいてαｍｉｎ＜α＜αｍａｘとなるαが存在しないことになる。αが存在しないということは、式（１）によって、クライアント１００のローカルカウンタ値をサーバー１２０のローカルカウンタ値に補正できないことを意味する。これは、式（１）のβの設定がおかしいことが考えられる。
【００９２】
次に、βを可能な範囲で変化させながら、それぞれのβにおいて｛ＭＡＸ＿αｍｉｎ，  ＭＩＮ＿αｍａｘ｝を計算する。
【００９３】
βの初期存在可能範囲は、ある１回の測定データ｛Ｃ１ｎ，Ｓ１ｎ，Ｓ２ｎ，Ｃ２ｎ｝を用いて、以下の式（８）のように決定するとよい。
Ｃ０＝Ｃ１ｎ，β＝［Ｓ１ｎ−ＲＴＴ，Ｓ１ｎ］                  ・・・（８）
式（８）において、［Ａ，Ｂ］は、βが、ＡからＢまでの範囲にあることを示す。式（８）のＲＴＴはラウンドトリップ時間を示す。ＲＴＴは、以下の式（８Ａ）により算出される。
ＲＴＴ＝（Ｃ２ｎ−Ｃ１ｎ）−（Ｓ２ｎ−Ｓ１ｎ）              ・・・（８Ａ）
測定データは、なるべくラウンドトリップ時間ＲＴＴが小さいものを選ぶとよい。その方がβの初期存在可能範囲が狭くなるためである。具体的には、測定パケットの往復を、１００回程度繰り返し、その中からラウンドトリップ時間ＲＴＴが最小のものを選ぶといった方法をとる。
【００９４】
βを変化させる方法としては、たとえば、βの初期存在可能範囲の中で、一定間隔毎にβを変化させる。この間隔は、目標とする時刻合わせの精度によって決定する。
【００９５】
一定間隔でβを変える具体的方法としては例えば、βの初期存在可能範囲を［βｓ，βｅ］、目標精度をＲとして、以下の式（９Ａ）、式（９Ｂ）より得られるβｉを使用する。
Ｎ＝ＩＮＴ（（βｅ−βｓ）／Ｒ）                            ・・・（９Ａ）
βｉ＝βｓ＋（βｅ−βｓ）／Ｎ×ｉ，（ｉ＝０〜Ｎ）          ・・・（９Ｂ）
式（９Ａ）のＩＮＴ（Ｘ）は整数に丸める関数である。
式（９Ａ）、式（９Ｂ）により得られる複数個のβの各々に対し、式（５Ａ）、式（５Ｂ）、式（６Ａ）および式（６Ｂ）から、ＭＡＸ＿αｍｉｎ、ＭＩＮ＿αｍａｘを算出する。
【００９６】
ここで、ＭＡＸ＿αｍｉｎ＜ＭＩＮ＿αｍａｘであれば、算出されたＭＡＸ＿αｍｉｎ、ＭＩＮ＿αｍａｘのデータをプロットする。ＭＡＸ＿αｍｉｎ＞ＭＩＮ＿αｍａｘであれば、算出されたＭＡＸ＿αｍｉｎ、ＭＩＮ＿αｍａｘのデータをプロットしない。一度、矛盾が生じた（ＭＡＸ＿αｍｉｎ＞ＭＩＮ＿αｍａｘとなった）時のβは、これ以上計算しても無意味なので、計算の対象から外してもよい。矛盾が生じた時のβを対象外とすることで、βの存在可能範囲を狭めていく。以下、上記のβの存在可能範囲を狭めていく処理を、β存在範囲狭め処理ともいう。
【００９７】
上記の処理により、βを横軸に、αを縦軸にとってβ-αプロット図を作成すると図５のようになる。図５を参照して、図５（ａ）、図５（ｂ）で上の曲線がＭＩＮ＿αｍａｘ、下の曲線がＭＡＸ＿αｍｉｎである。ＭＡＸ＿αｍｉｎ、ＭＩＮ＿αｍａｘのデータを取り始めた時（データが少ない時）のプロット図は図５（ａ）のようになる。ＭＡＸ＿αｍｉｎ、ＭＩＮ＿αｍａｘのデータが増えていくと次第に図５（ｂ）のようになる。上の曲線と下の曲線に囲まれた範囲が、｛α、β｝の存在可能範囲を示す。測定時間を長くして、ＭＡＸ＿αｍｉｎ、ＭＩＮ＿αｍａｘのデータを増やしていくと、αの範囲はかなり狭まっていくが、βはある程度までしか狭まらない。
αの範囲が狭まるのは、次の理由による。（αｍａｘ−αｍｉｎ）に、式（５Ａ）、式（５Ｂ）を代入し、Ｓ２＝Ｓ１＋δとすると、以下の式（９）のようになる。
αｍａｘ−αｍｉｎ＝（Ｃ２−Ｃ１）×（Ｓ１−β）／（Ｃ１−Ｃ０）／（Ｃ２−Ｃ０）−δ／（Ｃ２−Ｃ０）−ε／（Ｃ１−Ｃ０）−ε／（Ｃ２−Ｃ０）・・・（９）
δは、サーバー１２０が、測定パケットを受信して、クライアント１００へ送信するまでの時間である。すなわち、サーバー１２０における通信処理のための時間であってサーバー１２０のみに依存するのでδは一定の範囲に収まる。「一定の範囲に収まる」とは、常にδ＜Ｍが成り立つ、すなわち、δには上限値が存在するということである。また、最小伝送遅延時間εも一定の範囲におさまる。一方、（Ｃ１−Ｃ０）や（Ｃ２−Ｃ０）は測定時間を長くするといくらでも大きくなる。
【００９８】
よって、式（９）の右辺の第２項以降は、測定時間を長くすると、
δ／（Ｃ２−Ｃ０）→０
ε／（Ｃ１−Ｃ０）→０
ε／（Ｃ２−Ｃ０）→０
としてよい。ここでは、「→」は（測定時間を長くすると）限りなく“０”に近づくことを表す。ここで、Ｃ０は、前述したように、クライアント１００における任意の基準となるローカルカウンタ値である。βは、前述したように、Ｃ＝Ｃ０におけるサーバー１２０のローカルカウンタ値である。
【００９９】
ここで、Ｃ０は基準時刻（測定を開始した時刻（すなわち、１番目の測定パケットを送信した時刻）と見なす）におけるクライアントの時刻を表し、βは基準時刻におけるサーバーの時刻を表す。また、Ｃ１やＣ２は現在時刻におけるクライアントの時刻を表す。Ｓ１やＳ２は現在時刻におけるサーバーの時刻を表す。そのため、測定を続けると（Ｓ１−β）と（Ｃ２−Ｃ０）は、基準時刻から現在時刻までの時間と同じように増えていく。したがって、（Ｓ１−β）および（Ｃ２−Ｃ０）の各々は、測定時間と見なしてもよいので、
（Ｓ１−β）／（Ｃ２−Ｃ０）→１
としてよい。（実際にはサーバーとクライアントのクロック周波数比で１付近となる。）
【０１００】
よって、（αｍａｘ−αｍｉｎ）〜（Ｃ２−Ｃ１）／（Ｃ１−Ｃ０）と見積もることができる。（「〜」は、だいたい同じ値であることを表す。）（Ｃ２−Ｃ１）は、サーバー１２０の処理時間を含めたラウンドトリップ時間で、一定の範囲に収まる。また、（Ｃ１−Ｃ０）は、（Ｓ１−β）および（Ｃ２−Ｃ０）と同様、基準時刻から現在時刻までの時間と同じように増えていく。したがって、（Ｃ１−Ｃ０）は測定時間と見なしてよい。よって、測定時間を長くすると
（Ｃ２−Ｃ１）／（Ｃ１−Ｃ０）→０
としてよい。以上より、測定時間を長くすれば、（αｍａｘ−αｍｉｎ）は０に近づく。
【０１０１】
βの範囲が狭まらないのは、次の理由による。まず、式（１）の変数ＣにＣ１を代入してＦ（Ｃ１）を算出する。式（１）の変数ＣにＣ２を代入してＦ（Ｃ２）を算出する。そして、式（２）に、算出したＦ（Ｃ１）を代入し、式（３）にＦ（Ｃ２）を代入する。そして、βについて解くと、以下の式（１０）が得られる。
Ｓ２−α×（Ｃ２−Ｃ０）＋ε＜β＜Ｓ１−α×（Ｃ１−Ｃ０）−ε・・・（１０）
ここで、αは未知数であるが、仮に決定しておく。βの下限値をβｍｉｎ、βの上限値をβｍａｘとすると、βｍｉｎ、βｍａｘは、式（１０）より、以下の式（１１Ａ）、式（１１Ｂ）となる。
βｍｉｎ←Ｓ２−α×（Ｃ２−Ｃ０）＋ε                    ・・・（１１Ａ）
βｍａｘ←Ｓ１−α×（Ｃ１−Ｃ０）−ε                    ・・・（１１Ｂ）
式（１１Ａ）、式（１１Ｂ）の｛βｍｉｎ，βｍａｘ｝は特定のαにおける値を示している。αが異なれば、｛βｍｉｎ，βｍａｘ｝も異なってくる。
（βｍａｘ−βｍｉｎ）に、式（１１Ａ）、式（１１Ｂ）を代入すると、式（１２）となる。
βｍａｘ−βｍｉｎ＝α×（Ｃ２−Ｃ１）−（Ｓ２−Ｓ１）−２×ε
・・・（１２）
式（１２）のα×（Ｃ２−Ｃ１）−（Ｓ２−Ｓ１）は、サーバー１２０側のクロックで見たラウンドトリップ時間を示している。ラウンドトリップ時間は、パケット伝送に要する時間なので一定以上の時間を要するものであり、測定時間を長くしていくらでも小さくなるという性質はない。
【０１０２】
最小伝送遅延時間εは、固定値である。よって、（βｍａｘ−βｍｉｎ）は測定時間を長くしていくらでも小さくなるという性質はなく、ある程度の値までしか小さくならない。
【０１０３】
図６は、実際のデータを使用して、βｍｉｎとβｍａｘをプロットした図を示す。なお、αの値は、仮に決定しておく。図６を参照して、βの上限値βｍａｘと、βの下限値βｍｉｎの範囲が狭まらない様子がわかる。
【０１０４】
なお、参考までに、測定時間を長くしてもβの存在可能範囲は狭まらないが、式（１２）から明らかなように、最小伝送遅延時間εを大きくすればするほど、βの存在可能範囲は狭めることができる。
【０１０５】
最小伝送遅延時間εは、以下のように設定することができる。伝送遅延時間は、ネットワークを流れる時間の他に、端末で処理する時間も含まれる。端末で処理する時間は、ＯＳのコンテキスト切替、割込み応答時間などが含まれる。端末の処理時間が、例えば４０μ秒は少なくともかかることがあらかじめわかっていればε＝４０μ秒と設定してよい。端末の処理時間は、同一マシン上で時刻合わせのための測定パケットを送受信することによって求めることができる。
【０１０６】
また、ネットワークの経路上に特定の媒体が存在することがわかっていて、その媒体の最小の伝送遅延時間があらかじめわかっていれば、その時間を、端末の処理時間に含めることができる。特に、最小伝送遅延時間εを設定できなければ、ε＝０のままでよい。
【０１０７】
以上の説明により、｛α、β｝の存在可能範囲が得られたが、実際の｛α、β｝は、図５のβ−αプロット図の中にあるはずである。これ以上は、何らかの仮定を置かなければ｛α、β｝を決定することはできない。
【０１０８】
本実施例では、｛α、β｝を推定する一例を示す。先ず、βを推定する。図５のβ−αプロット図において、βの存在可能範囲をβ＝［β１，β２］とすると、βの推定値βｅｓｔを、以下の式（１３）で求めるものとする。なお、図５においてプロット点が存在するβの最下限値をβ１、βの最上限値をβ２とする。
βｅｓｔ＝（β１＋β２）／２                                ・・・（１３）
式（１３）は、βの存在可能範囲の中で最下限と最上限の算術平均をとっているが、これに限らず、たとえば、式（１３Ａ）のような加重平均のようなものであってもよい。
βｅｓｔ＝β１×ω＋β２×（１−ω），０＜ω＜１          ・・・（１３Ａ）
次に、αを推定する。αの推定値αｅｓｔは、以下の式（１４）で求めるものとする。
αｅｓｔ＝（ＭＡＸ＿αｍｉｎ［βｅｓｔ］＋ＭＩＮ＿αｍａｘ［βｅｓｔ］）／２・・・（１４）
ここで、｛ＭＡＸ＿αｍｉｎ［βｅｓｔ］，ＭＩＮ＿αｍａｘ［βｅｓｔ］｝は、前述の式により、β＝βｅｓｔで計算した｛ＭＡＸ＿αｍｉｎ，ＭＩＮ＿αｍａｘ｝をそれぞれ表している。
【０１０９】
式（１４）は、αｅｓｔをＭＩＮ＿αｍａｘとＭＡＸ＿αｍｉｎの算術平均で求めているが、これに限らず、たとえば、式（１４Ａ）のような加重平均のようなものであってもよい。
αｅｓｔ＝ＭＡＸ＿αｍｉｎ［βｅｓｔ］×ω＋ＭＩＮ＿αｍａｘ［βｅｓｔ］×（１−ω），０＜ω＜１                                  ・・・（１４Ａ）
式（１３）は、行きと帰りの最小の伝送遅延時間が同じであると仮定したものである。この仮定は、物理的には行きの伝送路と帰りの伝送路で対称性を保っていることが前提となっているが、常に伝送路の対称性が保っている必要はない。
【０１１０】
本実施の形態では、測定パケットを送受信している一連の測定期間の間に、行きの伝送遅延時間が最小値に近くなるパケットと、帰りの伝送遅延時間が最小値に近くなるパケットの両方が観測されればよい。
【０１１１】
本実施の形態では、片方向の映像伝送を行っている間でも、最小値に近い伝送遅延時間を持つパケットが観測されるものである。前述の図２１は、本実施の形態における、時間経過における行きの伝送遅延時間の変化を示す図でもある。例えば、図２１において、行きと帰りで伝送路の対称性が失われる映像伝送中であっても最小伝送遅延時間（約１００μ秒）に十分近いデータが得られている。
【０１１２】
こうして得られた｛α，β｝の推定値｛αｅｓｔ，βｅｓｔ｝を式（１）に代入すると、クライアント側の任意の時点のローカルカウンタ値を、以下の式（１Ａ）に基づいた計算により、サーバー側に合わせることができる。
Ｆ（Ｃ）＝αｅｓｔ×（Ｃ−Ｃ０）＋βｅｓｔ                  ・・・（１Ａ）
また、行きの伝送遅延時間および帰りの伝送遅延時間は、それぞれ、以下の式（２Ａ）および式（３Ａ）で求めることができる。
行きの伝送遅延時間＝Ｓ１−｛αｅｓｔ×（Ｃ１−Ｃ０）＋βｅｓｔ｝・・・（２Ａ）
帰りの伝送遅延時間＝｛αｅｓｔ×（Ｃ２−Ｃ０）＋βｅｓｔ｝−Ｓ２・・・（３Ａ）
以上の計算により、片方向の伝送遅延時間を測定することができる。
【０１１３】
以下、本発明の特徴を分かり易くするために単純な例で説明する。
図７は、測定パケットを往復させて得られたデータの一例を示す図である。ここでは、説明を簡単にするため、サーバー１２０およびクライアント１００における、時刻の進み方は同じものとする。すなわち、サーバー１２０とクライアント１００とのクロック周波数比を示すαは、“１”であるとする。式（１）にα＝１を代入すると、以下の式（１Ｂ）を得る。
Ｆ（Ｃ）＝（Ｃ−Ｃ０）＋β                                  ・・・（１Ｂ）
図７を参照して、クライアント１００の時刻はサーバー１２０の時刻より、ちょうど１時間進んでいるものとする。クライアント１００は、クライアント１００の時刻１１：００：００に測定パケットＰＫ１を送信する。サーバー１２０は、サーバー１２０の時刻１０：０４：００に測定パケットＰＫ１を受信する。サーバー１２０は、サーバー１２０の時刻１０：０５：００に測定パケットＰＫＲ１を送信する。
【０１１４】
クライアント１００は、クライアント１００の時刻１１：１０：００に測定パケットＰＫＲ１を受信する。以上のように、クライアント１００と、サーバー１２０との間で、測定パケットが往復する。
【０１１５】
クライアント１００は、１番目（最初）の測定パケット（ＰＫ１，ＰＫＲ１）の往復により、｛Ｃ１，Ｓ１，Ｓ２，Ｃ２｝＝｛１１：００：００，１０：０４：００，１０：０５：００，１１：１０：００｝のデータを得る。クライアント１００は、２，３，・・・，ｎ番目の測定パケットの往復により、同様のデータを得る。
【０１１６】
式（１Ｂ）において、Ｃ０は、任意の時刻でもよいが、Ｃ０＝１１：００：００とする。βはＣ＝Ｃ０の時点でのサーバー１２０の時刻であるが、クライアント１００にはわからない。βは未知数である。
【０１１７】
以下に、データが得られるごとにβの存在可能範囲がどのようになるかを示す。まず、１番目のデータにおけるラウンドトリップ時間は、行きが４分で帰りは５分の計９分である。
【０１１８】
注意すべき点は、クライアント１００にとって、行きと帰りの合計の時間が９分であることしかわからないことである。行きと帰りがそれぞれどれだけ時間がかかったかはわからない。しかしながら、｛行きの時間＝９分，帰りの時間＝０分｝〜｛行きの時間＝０分，帰りの時間＝９分｝の範囲にあることは確かである。
【０１１９】
クライアント１００側の時刻１１：００：００に送信された測定パケットが、サーバー側の時刻１０：０４：００で受信されているので、Ｃ＝１１：００：００の時点でのサーバーの時刻βは、１０：０４：００−００：０９：００＝９：５５：００より、９：５５：００＜β＜１０：０４：００（以下、式Ａともいう）の範囲に存在するはずである。
【０１２０】
次に、２番目のデータにおけるラウンドトリップ時間は、行きが３分で帰りは６分の計９分である。したがって、１０：２３：００−００：０９：００＝１０：１４：００より、１０：１４：００＜β＋（１１：２０：００−１１：００：００）＜１０：２３：００となり、９：５４：００＜β＜１０：０３：００（以下、式Ｂともいう）が得られる。
【０１２１】
式Ａおよび式Ｂより、９：５５：００＜β＜１０：０３：００（以下、式Ｃともいう）を得る。したがって、２番目のデータを加味することでβの存在可能範囲が狭まったことが分かる。
【０１２２】
次に３番目のデータにおけるラウンドトリップ時間は、行きが５分で帰りは２分の計７分である。したがって、したがって、１０：４５：００−００：０７：００＝１０：３８：００より、１０：３８：００＜β＋（１１：４０：００−１１：００：００）＜１０：４５：００となり、９：５８：００＜β＜１０：０５：００が得られる。式Ａ、式Ｂおよび式Ｃより、９：５８：００＜β＜１０：０３：００（以下、式Ｄともいう）を得る。したがって、３番目のデータを加味することでβの存在可能範囲がさらに狭まったことが分かる。
【０１２３】
個々のデータ例で示すように「行き」の伝送遅延時間が、今までの最小値を更新すれば、βの上限値が更新される（２番目のデータにより得られる式Ｂ参照）。また、「帰り」の伝送遅延時間が、今までの最小値を更新すれば、βの下限値が更新される（３番目のデータにより得られる式Ｄ参照）。このように測定パケットの往復を繰り返すことで、βの存在可能範囲がある程度まで狭めることができる。
【０１２４】
どこまで狭めることができるかを考察すると、「行きの最小伝送遅延時間」＋「帰りの最小伝送遅延時間」まで狭めることができる。
【０１２５】
これは１つの測定パケットを往復させて得られるものではない。複数の測定パケットを往復させた中で、行きが最小伝送遅延時間となる測定パケットと、帰りが最小伝送遅延時間となる測定パケットは必ずしも一致していない。むしろ、一致していないことの方が多い。
【０１２６】
複数の測定パケットを往復させて、一連のデータをすべて考慮することでβの存在可能範囲を狭めることができる。そして、βの存在可能範囲を狭めてから、βの値を推定する。βの値の推定方法は、式（１３）で述べたようにβの上限値とβの下限値の算術平均とする。
【０１２７】
この例では、βの上限値＝１０：０３：００、βの下限値＝９：５８：００であるので、式（１３）より、βｅｓｔ＝（１０：０３：００＋９：５８：００）／２＝１０：００：３０が得られる。つまり、クライアント１００はサーバー１２０と比べて１１：００：００−１０：００：３０＝０：５９：３０進んでいると推定された。
【０１２８】
物理的に伝送路が対称であれば、測定パケットの往復をある程度繰り返すと、「行きの最小伝送遅延時間」と「帰りの最小伝送遅延時間」は、ほとんど同じ値になると考えられるので、式（１３）で述べた推定方法は合理性がある。
【０１２９】
以上のようにすることで、クライアント１００の時刻をサーバー１２０の時刻に合わせることができる。
【０１３０】
実際には、サーバー１２０とクライアント１００で時刻の進み方は合っていないので、αも未知数である。本発明では、｛α，β｝がともに未知数であるとして、｛α，β｝の存在可能範囲を狭めていく手法をとる。
【０１３１】
以下、プログラムを実行するクライアント１００側のＣＰＵ１０１とサーバー１２０側のＣＰＵ１２１の動作について、詳しく説明する。
【０１３２】
図８は、サーバー１２０で実行されるプログラムのフローチャートを示す図である。図８を参照して、ステップＳ１０１では，ネットワークの初期化が行なわれる。具体的には、ＣＰＵ１２１が、パケットを送受信するためのポートを開いて、パケットを送受信可能な状態にする。その後、ステップＳ１０２に進む。
【０１３３】
ステップＳ１０２では、ＣＰＵ１２１が、スレッドＡ１およびスレッドＡ２を生成する。スレッドＡ１およびスレッドＡ２の各々は、独立して処理される。なお、スレッドＡ１では、初期値が０に設定されたカウンタｒｄ＿ｃｎｔが使用される。スレッドＡ２では、初期値が０に設定されたカウンタｗｒ＿ｃｎｔが使用される。
【０１３４】
スレッドＡ１では、ＣＰＵ１２１が、ステップＳ１０５、Ｓ１０６、Ｓ１０７、Ｓ１０８を実行する。スレッドＡ２では、ＣＰＵ１２１が、Ｓ１０３、Ｓ１０４を実行する。
【０１３５】
ステップＳ１０３では、ＣＰＵ１２１が、測定パケットを受信したか否かを判定する。ステップＳ１０３において、ＹＥＳならば、ステップＳ１０４に進む。一方、ステップＳ１０３において、ＮＯならば、再度、ステップＳ１０３の処理が行なわれる。
【０１３６】
ステップＳ１０４では、ＣＰＵ１２１が、サーバー側のローカルカウンタ値（時刻）を取得し、変数Ｓ１に代入する。ローカルカウンタ（時刻）の取得はハードウェアの構成に依存するので、それに合わせた方法を取る。測定パケットのペイロード領域１には変数Ｃ１が含まれている。そして、ＣＰＵ１２１が、カウンタｗｒ＿ｃｎｔを１インクリメントする。その後、再度、ステップＳ１０３の処理が行なわれる。
【０１３７】
スレッドＡ１では、まず、ステップＳ１０５の処理が行なわれる。
ステップＳ１０５では、ＣＰＵ１２１が、ステップＳ１０３により、受信された測定パケットがあるか否かを判定する。当該判定は、カウンタｒｄ＿ｃｎｔと、ステップＳ１０４において１インクリメントされたカウンタｗｒ＿ｃｎｔとが異なるか否かにより判定される。
【０１３８】
ステップＳ１０５において、ＹＥＳならば，ステップＳ１０６に進む。一方、ステップＳ１０６において、ＮＯならば、後述するステップＳ１０８に進む。
【０１３９】
図９は、測定パケットおよび返信パケットの構成の一例を示す図である。
図９（Ａ）は、測定パケットの構成の一例を示す図である。測定パケットは、送信元アドレス、宛先アドレスおよびペイロード領域１から構成される。
【０１４０】
図９（Ｂ）は、返信パケットの構成の一例を示す図である。返信パケットは、送信元アドレス、宛先アドレス、ペイロード領域１、ペイロード領域２、ペイロード領域３から構成される。
【０１４１】
なお、図９に示したパケット構成は、説明に必要な最小限のものであって、それ以外にヘッダーや、ペイロード領域が含まれていてもよい。また、測定パケットと返信パケットのペイロード領域は十分小さいので、単体で送受信しなくても、その他のサーバーとクライアント間でやりとりされる任意のパケットに含めて送受信してもよい。
【０１４２】
再び、図８を参照して、ステップＳ１０６では、返信パケット作成処理が行なわれる。返信パケット作成処理では、ＣＰＵ１２１が、サーバー１２０のローカルカウンタ値（時刻）を取得し、変数Ｓ２に代入する。
【０１４３】
次に、ＣＰＵ１２１が、返信パケットのペイロード領域１、ペイロード領域２およびペイロード領域３に、Ｃ１、Ｓ１、Ｓ２をそれぞれ設定する。そして、受信した測定パケットの送信元アドレスを、返信パケットの宛先アドレスに設定する。以上により、返信パケットが作成される。そして、ＣＰＵ１０１が、カウンタｒｄ＿ｃｎｔを１インクリメントする。その後、ステップＳ１０７に進む。
【０１４４】
ステップＳ１０７では、ＣＰＵ１２１が、生成した返信パケットを、クライアント１００へ送信する。その後、ステップＳ１０８に進む。
【０１４５】
ステップＳ１０８では、ＣＰＵ１２１が、５０ｍｓウエイトする。なお、ウエイトする時間は、５０ｍｓに限定されることなく、適宜変更されてもよい。その後、再度、ステップＳ１０５の処理が行なわれる。
【０１４６】
なお、測定パケットを受信する処理（Ｓ１０３）と、返信パケットを送信する処理（Ｓ１０７）は、同じスレッドで行なわれてもよい。
【０１４７】
図１０は、クライアント１００で実行されるプログラムのフローチャートを示す図である。図１０を参照して、ステップＳ２０１では、ネットワークの初期化が行なわれる。具体的には、ＣＰＵ１０１が、パケットを送受信するためのポートを開いて、パケットを送受信可能な状態にする。その後、ステップＳ２０２に進む。
【０１４８】
ステップＳ２０２では、ＣＰＵ１０１が、スレッドＢ１およびスレッドＢ２を生成する。スレッドＢ１およびスレッドＢ２の各々は、独立して処理される。スレッドＢ１では、ＣＰＵ１０１が、ステップＳ２０３，Ｓ２０４，Ｓ２０５を実行する。スレッドＢ２では、ＣＰＵ１０１が、Ｓ２０６、Ｓ２０７、Ｓ２０８を実行する。
【０１４９】
ステップＳ２０３では、測定パケット作成処理が行なわれる。測定パケット作成処理では、ＣＰＵ１０１が、クライアント１００のローカルカウンタ値（時刻）を取得し、Ｃ１に代入する。次に、ＣＰＵ１０１が、測定パケットのペイロード領域１にＣ１を設定する。そして、ＣＰＵ１０１が、測定パケットの宛先アドレスに、サーバー１２０のアドレスを設定する。以上により、測定パケットが作成される。その後、ステップＳ２０４に進む。
【０１５０】
ステップＳ２０４では、ＣＰＵ１０１が、生成した測定パケットを、サーバー１２０へ送信する。その後、ステップＳ２０５に進む。
【０１５１】
ステップＳ２０５では、ＣＰＵ１０１が、１００ｍｓウエイトする。なお、ウエイトする時間は、１００ｍｓに限定されることなく、適宜変更されてもよい。その後、再度、ステップＳ２０３の処理が行なわれる。
【０１５２】
ステップＳ２０６では、ＣＰＵ１０１が、返信パケットを受信したか否かを判定する。ステップＳ２０６において、ＹＥＳならば、ステップＳ２０７に進む。一方、ステップＳ２０６において、ＮＯならば、再度、ステップＳ２０６の処理が行なわれる。
【０１５３】
ステップＳ２０７では、ＣＰＵ１０１が、クライアント１００のローカルカウンタ値（時刻）を取得し、Ｃ２に代入する。次に、ＣＰＵ１０１が、返信パケットのペイロード領域１、ペイロード領域２およびペイロード領域３に、それぞれ含まれるＣ１、Ｓ１、Ｓ２を取得する。その後、ステップＳ２０８に進む。
【０１５４】
ステップＳ２０８では、ステップＳ２０７により得た｛Ｃ１，Ｓ１，Ｓ２，Ｃ２｝を引数として、処理Ａが行なわれる。処理Ａが終了すると、再度、ステップＳ２０６の処理が行なわれる。
【０１５５】
以上の処理により、測定パケットを、クライアント１００と、サーバー１２０との間で往復させることにより、データ｛Ｃ１，Ｓ１，Ｓ２，Ｃ２｝を得ることができる。
【０１５６】
図１１は、処理Ａのフローチャートである。処理Ａには、本発明の要となるアルゴリズムが含まれている。処理Ａは｛Ｃ１，Ｓ１，Ｓ２，Ｃ２｝を引数として受け取る。図１１を参照して、ステップＳ３０１では、処理Ａの呼び出し回数が１００回以内であるか否かが、ＣＰＵ１０１により判定される。ステップＳ３０１において、ＹＥＳならば、ステップＳ３０２に進む。一方、ステップＳ３０１において、ＮＯならば、後述するステップＳ３０３に進む。なお、ステップＳ３０２には、内容の正確性を期すため、Ｃ言語で記述されたプログラムの一部が記載されている。
【０１５７】
ステップＳ３０２の処理が繰り返されることで、ＣＰＵ１０１が、Ｃ０を決定するために、最初の１００個のデータの中からラウンドトリップ時間が最小となるデータを選び、その時のＣ１をＣ０にする。
【０１５８】
ステップＳ３０２では、ＣＰＵ１０１が、前述の式（８Ａ）を用いて、ラウンドトリップ時間（ＲＴＴ）を計算する。ＣＰＵ１０１は、ステップＳ３０２の処理が繰り返される毎に、前回算出したＲＴＴと、今回算出したＲＴＴを比較し、値の小さい方を、メモリ１０２に記憶させる。
【０１５９】
ＣＰＵ１０１は、ステップＳ３０２の処理の実行回数が、１００回となると、それまでのラウンドトリップＲＴＴの最小のデータを使って、配列を確保し、初期値を設定する。Ｓ３０２内のプログラムのｉｍｉｎおよびｉｍａｘは、それぞれ、βｍｉｎおよびβｍａｘに対応する。当該初期値の設定では、βの下限値βｍｉｎおよび上限値βｍａｘの初期値の設定が行なわれる。また、１００回というのは目安であって、適宜変更してもよい。その後、ステップＳ３０２の処理が終了すると、この処理Ａは終了し、図１０の処理に戻り、再度、ステップＳ２０６の処理が行なわれる。
【０１６０】
ステップＳ３０３では、処理Ｂが行なわれる。
図１２は、処理ＢをＣ言語で記述したプログラムを示す図である。図１２を参照して、プログラムの最初のｆｏｒ文の処理は、前述のステップＳ３０２で設定されたβの範囲内で、β（プログラム内ではｉ）を変化させながら、αの上限値ＭＩＮ＿αｍａｘおよび下限値ＭＡＸ＿αｍｉｎが算出される。具体的には、処理Ｂでは、ＣＰＵ１０１が、前述の式（５Ａ）、式（５Ｂ）、式（６Ａ）、式（６Ｂ）に基づいて、ＭＡＸ＿αｍｉｎおよびＭＩＮ＿αｍａｘを算出する。次に、ＣＰＵ１０１は、前述のβ存在範囲狭め処理を行なうことで、βの存在可能範囲を狭める。
【０１６１】
次に、ＣＰＵ１０１は、前述の式（１３）に基づいて、βｅｓｔを算出する。また、ＣＰＵ１０１は、前述の式（１４）に基づいて、αｅｓｔを算出する。
【０１６２】
次に、ＣＰＵ１０１は、前述の式（２Ａ）および式（３Ａ）にそれぞれ基づいて、行きおよび帰りの伝送遅延時間を算出する。行きおよび帰りの伝送遅延時間を算出するのは任意である。その後、ステップＳ３０４に進む。
ステップＳ３０４では、ＣＰＵ１０１が、処理Ａにより取得したＣ０、処理Ｂにより取得したαｅｓｔ、βｅｓｔのデータを、他のプログラムでも使用できる形式でメモリ１０２に記憶させる。その後、この処理Ａは終了し、前述の図１０の処理に戻り、ステップＳ２０６の処理が行なわれる。Ｃ０、αｅｓｔ、βｅｓｔのデータは、クライアントが、図２の専用ハードウェア１０８を備えている場合、レジスタ１０７に記憶させてもよい。
【０１６３】
なお、処理Ａが長時間行なわれると、クライアント１００の発振器１０４またはサーバー１２０の発振器１２４の発振周波数が変化することにより、βの存在可能範囲がなくなる場合が生じ得る。測定期間中に上記のような発振周波数の変化が起こると、式（１Ａ）によるローカルカウント値の補正ができなくなることがある。
【０１６４】
上記のように、βの存在可能範囲がなくなった場合、図１１において定義されている静的変数を初期値に戻し、ステップＳ３０１、Ｓ３０２、Ｓ３０３、Ｓ３０４の処理を、再度行なえばよい。あるいは、βの存在可能範囲がなくなる、なくならないに関わらず、一定時間ごとにクライアントの基準時刻であるＣ０を変更して、前述の計算を行なってもよい。
【０１６５】
次に、クライアント１００で行なわれるローカルカウンタ値を補正する処理（以下、カウンタ補正処理ともいう）について説明する。カウンタ補正処理は、図１０のクライアント１００で実行されるプログラムの処理とは、独立して同時に行なわれる。カウンタ補正処理は、たとえば、サーバー１２０と、クライアント１００との間で、時刻同期が必要な、コンテンツを再生するアプリケーションプログラム（以下、コンテンツ再生プログラムともいう）で行なわれる処理である。この場合、サーバー１２０およびクライアント１００の各々では、同一のコンテンツが、コンテンツ再生プログラムにより同時に再生される。
【０１６６】
図１３は、カウンタ補正処理のフローチャートを示す図である。図１３を参照して、ステップＳ４０５では、ＣＰＵ１０１が、任意の時刻を示すローカルカウンタ値Ｃを取得する。その後、ステップＳ４１０に進む。
【０１６７】
ステップＳ４１０では、ＣＰＵ１０１が、メモリ１０２に記憶されたαｅｓｔ、βｅｓｔ、Ｃ０のデータを読み出す。その後、ステップＳ４２０に進む。
【０１６８】
ステップＳ４２０では、ＣＰＵ１０１が、ローカルカウンタ値Ｃ、αｅｓｔ、βｅｓｔ、Ｃ０を、前述の式（１Ａ）に代入することで、補正後のクライアント１００のローカルカウンタ値であるＦ（Ｃ）を算出する。
【０１６９】
補正後のローカルカウンタ値Ｆ（Ｃ）は、サーバー１２０と時刻同期がとれている。
そして、このカウンタ補正処理は終了する。以上のカウンタ補正処理により、クライアント１００のローカルカウンタ値をサーバー１２０のローカルカウンタ値に合わせることができる。
【０１７０】
なお、カウンタ補正処理は、アプリケーションプログラム内で繰返し行なわれる。また、図２の専用のハードウェア１０８があれば、補正後のローカルカウンタを自律的に走らせることもできる。ローカルカウンタ１０５から現在の時刻であるローカルカウンタ値Ｃが得られる。レジスタ１０７から、Ｃ０，αｅｓｔ、βｅｓｔが得られる。レジスタ１０７に設定される処理は、前述した処理Ａによって定期的に行われる。補正回路１０６は、これらの値を前述の式（１Ａ）に代入することで、ローカルカウンタ値を補正する。補正後のローカルカウンタ値はＣＰＵ１０１から読み出し可能となる。
【０１７１】
本発明が、従来技術のＮＴＰと異なる点は、以下の３点である。
１）式（１Ａ）（式（１））によってクライアント１００のローカルカウンタ値をサーバー１２０のローカルカウンタ値に補正する点。
２）複数回の測定パケットの往復によって得られる一連のデータすべてを使って｛α，β｝の存在可能範囲を狭めていく点。
３）複数回の測定パケットの往復の後、行きと帰りの最小伝送遅延時間が、ほぼ同じ値に近づくことに着目して｛α，β｝を推定している点。
【０１７２】
なお、βの推定値に、式（１３）を使うことが望ましいと考えられるが、βの推定値が大きく外れるのは、行きの最小伝送遅延時間と帰りの最小伝送遅延時間が大きく異なる場合である。
【０１７３】
たとえば、図７において、サーバー１２０から、クライアント１００へ送信される最後の返信パケットＰＫＲ３が、２分ではなく、０分で、サーバー１２０に到着した（１１：４６：００）とする。この場合、ラウンドトリップ時間は５分となる。
【０１７４】
１０：４５：００−００：０５：００＝１０：４０：００＜β＋（１１：４０：００−１１：００：００）＜１０：４５：００より、１０：００：００＜β＜１０：０５：００が得られる。そして、図７における変更後の全てのデータに基づいて、１０：００：００＜β＜１０：０３：００を得る。
【０１７５】
図７において、行きの最小伝送遅延時間は３分であるのに対し、帰りの最小伝送遅延時間は０分である。この場合、式（１３）より、βｅｓｔ＝（１０：０３：００＋１０：００：００）／２＝１０：０１：３０と推定されるが、正解の１０：００：００と比べて誤差が大きくなる。
【０１７６】
一方、行きの最小伝送遅延時間と、帰りの最小伝送遅延時間とが等しくなる時、βの推定値は極めて真に近くなる。
【０１７７】
たとえば、図７において、サーバー１２０から、クライアント１００へ送信される最後の返信パケットＰＫＲ３が、２分ではなく、３分で、サーバー１２０に到着した（１１：４９：００）とする。この場合、ラウンドトリップ時間は８分となる。
【０１７８】
１０：４５：００−００：０８：００＝１０：３７：００＜β＋（１１：４０：００−１１：００：００）＜１０：４５：００より、０９：５７：００＜β＜１０：０５：００が得られる。図７における変更後の全てのデータに基づいて、０９：５７：００＜β＜１０：０３：００を得る。
【０１７９】
この場合、行きの最小伝送遅延時間と、帰りの最小伝送遅延時間はともに３分である。また、式（１３）より、βｅｓｔ＝（１０：０３：００＋０９：５７：００）／２＝１０：００：００と推定されるが、この推定値は、正解である。
【０１８０】
しばらく測定を続けると、行きと帰りの最小伝送遅延時間は（通信路が物理的に対称ならば）、ほぼ同じとなるはずので、本発明におけるβの推定方法は合理性がある。
【０１８１】
次に、ＮＴＰ（データフィルタ、ＰＬＬを含む）の技術（以下、従来技術Ａともいう）の時刻合わせのシミュレーション結果を示す図と、本発明の時刻合わせのシミュレーション結果を示す図を比較する。以下のシミュレーション結果は、クライアント１００から、サーバー１２０へ、映像伝送した時の結果である。
【０１８２】
図１４は、従来技術Ａにより時刻合わせを行なったシミュレーション結果を示す図である。
【０１８３】
図１５は、本発明により時刻合わせを行なったシミュレーション結果を示す図である。
図１４を参照して、従来技術Ａより時刻合わせを行なったシミュレーション結果では誤差が大きいことがわかる。一方、図１５を参照して、本発明により時刻合わせを行なったシミュレーション結果では誤差が小さく抑えられていることがわかる。すなわち、本発明によれば、片方向だけに映像伝送を行った場合のように行きと帰りで伝送路の対称性が失われる時でも、精度良く時刻合わせを行うことができる。
【０１８４】
次に、クライアント１００からサーバー１２０へ映像伝送しない場合における、従来技術Ａの時刻合わせのシミュレーション結果を示す図と、本発明の時刻合わせのシミュレーション結果を示す図を比較する。
【０１８５】
図１６は、従来技術Ａにより時刻合わせを行なったシミュレーション結果を示す図である。
【０１８６】
図１７は、本発明により時刻合わせを行なったシミュレーション結果を示す図である。
図１６を参照して、従来技術Ａにより時刻合わせを行なったシミュレーション結果では、誤差が小さく抑えられているが、誤差が小さく抑えられるまでに、ある程度の時間を要することがわかる。一方、図１７を参照して、本発明により時刻合わせを行なったシミュレーション結果では誤差が小さく抑えられており、かつ、誤差が小さく抑えられるまで時間が短いことがわかる。
【０１８７】
本発明を適用できる具体的なシステムの例を以下に記す。システムの一例としては、ネットワークに接続された複数の表示デバイスから構成されるシステムである。また、システムの他の例としては、各々が、スピーカーを有する複数の装置から構成されるシステムである。この場合、複数の装置の各々が有するスピーカーから同時に音を出力する。
【０１８８】
また、本発明は、遠隔地の二地点で片方向の遅延時間を測定する装置、その他時刻同期が重要な意味を持つすべてのアプリケーションプログラムに適用できる。
【０１８９】
時刻同期が重要な意味を持つアプリケーションで行なわれる処理は、トランザクション処理、分散コンピューティング、ネットワーク処理など多岐に渡る。
【０１９０】
本発明を構成する要素としては、一般的なＰＣであってよい。しかしながら、専用のハードウェア（回路）によって、高精度で安定した発振器に基づいたローカルカウンタが提供され、ローカルカウンタの値と進み方を補正する回路がある場合、｛αｅｓｔ，βｅｓｔ，Ｃ０｝に基づいて、クライアント側のローカルカウンタをハードウェアで補正してもよい。
【０１９１】
本発明では、サーバー−クライアント間で測定パケットと返信パケットの送受信を行っているが、｛Ｃ１，Ｓ１，Ｓ２，Ｃ２｝を取得するステップでは、一般的なＮＴＰの枠組みを使ってもよい。
【０１９２】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１９３】
【図１】本実施の形態を構成する、一例としてのシステムを示す図である。
【図２】専用のハードウェアを搭載した、一例としてのクライアントの構成を示す図である。
【図３】クライアント側のローカルカウンタとサーバー側のローカルカウンタの関係を示したものである。
【図４】実際のデータを使用して、αｍｉｎとαｍａｘをプロットした図を示す。
【図５】本発明におけるβ-αプロット図を示す図である。
【図６】実際のデータを使用して、βｍｉｎとβｍａｘをプロットした図を示す。
【図７】測定パケットを往復させて得られたデータの一例を示す図である。
【図８】サーバーで実行されるプログラムのフローチャートを示す図である。
【図９】測定パケットおよび返信パケットの構成の一例を示す図である。
【図１０】クライアントで実行されるプログラムのフローチャートを示す図である。
【図１１】処理Ａのフローチャートである。
【図１２】処理ＢをＣ言語で記述したプログラムを示す図である。
【図１３】カウンタ補正処理のフローチャートを示す図である。
【図１４】従来技術Ａにより時刻合わせを行なったシミュレーション結果を示す図である。
【図１５】本発明により時刻合わせを行なったシミュレーション結果を示す図である。
【図１６】従来技術Ａにより時刻合わせを行なったシミュレーション結果を示す図である。
【図１７】本発明により時刻合わせを行なったシミュレーション結果を示す図である。
【図１８】ＮＴＰを用いる時刻合わせの手法を説明するための図である。
【図１９】ＮＴＰにおけるデータフィルタやＰＬＬを組み合わせた構成を示す図である。
【図２０】クライアントからサーバーへ映像伝送をした時の構成を示す図である。
【図２１】時間経過とともに、行きの伝送遅延時間の変化を示す図である。
【図２２】時間経過とともに、帰りの伝送遅延時間の変化を示す図である。
【図２３】行きおよび帰り、それぞれの平均伝送遅延時間を示す図である。
【符号の説明】
【０１９４】
１００  クライアント、１０１，１２１  ＣＰＵ、１０２，１２２  メモリ、１０３，１２３  通信Ｉ／Ｆ、１０４，１２４  発振器、１０５，１２５  ローカルカウンタ、１０６  補正回路、１０７  レジスタ、１０８  専用のハードウェア、１１０  通信網、１２０  サーバー。
【図１】
0004467478.tif 000002
【図２】
0004467478.tif 000003
【図３】
0004467478.tif 000004
【図４】
0004467478.tif 000005
【図５】
0004467478.tif 000006
【図６】
0004467478.tif 000007
【図７】
0004467478.tif 000008
【図８】
0004467478.tif 000009
【図９】
0004467478.tif 000010
【図１０】
0004467478.tif 000011
【図１１】
0004467478.tif 000012
【図１２】
0004467478.tif 000013
【図１３】
0004467478.tif 000014
【図１４】
0004467478.tif 000015
【図１５】
0004467478.tif 000016
【図１６】
0004467478.tif 000017
【図１７】
0004467478.tif 000018
【図１８】
0004467478.tif 000019
【図１９】
0004467478.tif 000020
【図２０】
0004467478.tif 000021
【図２１】
0004467478.tif 000022
【図２２】
0004467478.tif 000023
【図２３】
0004467478.tif 000024