(57)【要約】【課題】  伝送遅延ゆらぎに上限を仮定する必要がなく、極端に大きな伝送遅延時間を持つパケットが発生するようなネットワーク環境においてもそのパケットに影響されない。【解決手段】  クライアント１００は、測定パケットをサーバー１３０へ送信し、測定パケットに対応する返信パケットを受信する通信Ｉ／Ｆ１０３と、サーバー１３０に測定パケットを送信したタイミング、返信パケットを通信Ｉ／Ｆ１０３が受信したタイミング、およびサーバー１３０における測定パケットの受信タイミングに基いて、自装置のクロックパルスおよびサーバー１３０のクロックパルスの周波数比を算出するＣＰＵ１０１と、ＣＰＵ１０１が算出した周波数比に基づいて、発振器１０５およびタイミングカウンタ部１０６が検出したタイミングを補正する時刻補正部１０７とを含む。【選択図】        図１
2006197399.tif 000002
【特許請求の範囲】
【請求項１】
タイミングを検出するための検出手段と、
第１のパケットを、他の装置へ送信するための送信手段と、
前記他の装置が返信しかつ前記第１のパケットに対応する第２のパケットを受信するための受信手段と、
前記他の装置に第１のパケットを送信したタイミング、該第１のパケットに対応しかつ前記他の装置における前記第１のパケットの受信タイミングを表わす第２のパケットを前記受信手段が受信したタイミング、および前記他の装置における第１のパケットの受信タイミングに基いて、自装置のクロックパルスおよび前記他の装置のクロックパルスの周波数比を算出する算出手段と、
前記算出手段が算出した周波数比に基づいて、前記検出手段が検出したタイミングを補正するための補正手段とを含むタイミングの検出装置。
【請求項２】
前記算出手段は、
少なくとも前記第１のパケットの他の装置における受信タイミング、および前記送信手段が該第１のパケットを送信したタイミングに基いて第１の値を算出するための手段と、
少なくとも前記第２のパケットが表わす受信タイミング、および自装置における前記第２のパケットの受信タイミングに基いて第２の値を算出するための手段と、
前記第１の値および第２の値から、前記クロックパルスの周波数比を算出するための手段とを含む、請求項１に記載のタイミングの検出装置。
【請求項３】
前記第１の値を算出するための手段は、複数の前記第１のパケットそれぞれの受信タイミングおよび前記複数の第１のパケットを送信したそれぞれのタイミングに基づいて複数の第１の値を算出するための手段を含み、
前記第２の値を算出するための手段は、複数の前記第２のパケットそれぞれが表わす受信タイミング、および前記複数の第２のパケットそれぞれの受信タイミングに基いて複数の第２の値を算出するための手段を含み、
前記クロックパルスの周波数比を算出するための手段は、前記複数の第１の値の内の最小値と、前記複数の第２の値の内の最大値との間の値であるクロックパルスの周波数比を算出するための手段を含む、請求項２に記載のタイミングの検出装置。
【請求項４】
前記複数の第１の値の内の最小値と、前記複数の第２の値の内の最大値との間の値は、前記第１の値の内の最小値および前記第２の値の内の最大値の加重平均の値である、請求項３に記載のタイミングの検出装置。
【請求項５】
前記第１の値は、基準となるタイミングに前記他の装置が検出したタイミングの推定値から前記第２のパケットが表わす受信タイミングまでの時間を、前記基準となるタイミングから前記送信手段が該第１のパケットを送信したタイミングまでの時間で除算した値であり、
前記第２の値は、前記基準となるタイミングに前記他の装置が検出したタイミングの推定値から前記第１のパケットの他の装置における受信タイミングまでの時間を、前記基準となるタイミングから前記第２のパケットの受信タイミングまでの時間で除算した値である、請求項２に記載のタイミングの検出装置。
【請求項６】
前記タイミングの検出装置は、前記算出手段が算出したクロックパルスの周波数比を有理化するための有理化手段をさらに含み、
前記補正手段は、前記有理化手段が有理化したクロックパルスの周波数比の分母および分子に一意に対応するタイミングに、前記タイミングを補正するための手段を含む、請求項１に記載のタイミングの検出装置。
【請求項７】
前記検出手段は、
クロックパルスを発生する発振器と、
前記発振器が発生するクロックパルスをカウントすることにより、タイミングを生成するための生成手段とを含み、
前記補正手段は、前記算出手段が算出したクロックパルスの周波数比に基づいて、前記生成手段がカウントしたクロックパルスの数を変えることにより、前記タイミングを補正するための手段を含む、請求項１に記載のタイミングの検出装置。
【請求項８】
前記タイミングを補正するための手段は、
前記クロックパルスの周波数比が１より大きいか否かを判断するための判断手段と、
前記クロックパルスの周波数比が１より大きければ、前記生成手段がカウントしたクロックパルスの数を減らすことにより、前記タイミングを補正するための手段と、
前記クロックパルスの周波数比が１より小さければ、前記生成手段がカウントしたクロックパルスの数を増やすことにより、前記タイミングを補正するための手段とを含む、請求項７に記載のタイミングの検出装置。
【請求項９】
前記タイミングの検出装置は、前記クロックパルスの周波数比を記憶する不揮発性メモリをさらに含み、
前記補正手段は、前記不揮発性メモリが記憶したクロック周波数比に基づいて、前記検出手段が検出したタイミングを補正するための手段を含む、請求項１から請求項８のいずれかに記載のタイミングの検出装置。
【請求項１０】
請求項１に記載のタイミングの検出装置を含む表示装置。
【請求項１１】
タイミングを検出する検出ステップと、
第１のパケットを、他の装置へ送信する送信ステップと、
前記他の装置が返信しかつ前記第１のパケットに対応する第２のパケットを受信する受信ステップと、
前記他の装置に第１のパケットを送信したタイミング、該第１のパケットに対応しかつ前記他の装置における前記第１のパケットの受信タイミングを表わす第２のパケットを前記受信ステップにおいて受信したタイミング、および前記他の装置における第１のパケットの受信タイミングに基いて、自装置のクロックパルスおよび前記他の装置のクロックパルスの周波数比を算出する算出ステップと、
前記算出ステップにおいて算出した周波数比に基づいて、前記検出ステップにおいて検出したタイミングを補正する補正ステップとを含む各ステップを、コンピュータに実行させるためのタイミングの検出プログラム。
【請求項１２】
タイミングを検出する検出ステップと、
第１のパケットを、他の装置へ送信する送信ステップと、
前記他の装置が返信しかつ前記第１のパケットに対応する第２のパケットを受信する受信ステップと、
前記他の装置に第１のパケットを送信したタイミング、該第１のパケットに対応しかつ前記他の装置における前記第１のパケットの受信タイミングを表わす第２のパケットを前記受信ステップにおいて受信したタイミング、および前記他の装置における第１のパケットの受信タイミングに基いて、自装置のクロックパルスおよび前記他の装置のクロックパルスの周波数比を算出する算出ステップと、
前記算出ステップにおいて算出した周波数比に基づいて、前記検出ステップにおいて検出したタイミングを補正する補正ステップとを含む各ステップを、コンピュータに実行させるためのタイミングの検出プログラムを記録した、コンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タイミングの検出装置、表示装置、タイミングの検出プログラム、タイミングの検出プログラムを記録したコンピュータ読取可能な記録媒体に関し、特にデータ通信装置において端末と端末との間でクロック同期を実現できるタイミングの検出装置、表示装置、タイミングの検出プログラム、タイミングの検出プログラムを記録したコンピュータ読取可能な記録媒体に関する。
【背景技術】
【０００２】
近年、ビデオやオーディオといったストリーミングデータをネットワーク経由で再配信する技術がさかんに開発されている。
【０００３】
たとえば、２００４年５月には、ハイビジョン映像の無線伝送を実現する５ＧＨｚ帯無線画像伝送用チップセットが発表されている。無線コントローラ部は無線ＬＡＮ標準規格ＩＥＥＥ８０２．１１ｅ(ドラフト)に準拠し、インタフェースにＭＰＥＧ２（Motion Picture Experts Group２）−ＴＳ（ＭＰＥＧトランスポートストリーム）を採用している。
【０００４】
ＭＰＥＧ２−ＴＳパケットを伝送するには、受信側で送信側のクロックと同期をとらなければならないことが知られている。
【０００５】
ＭＰＥＧ２−ＴＳによる映像伝送は、１）送信局が自局の持つ時計のペースで映像を送りつける、２）受信局側からのフィードバックなし、３）送信側は今撮ったばかりの映像を伝送可能、４）送信局が複数の受信局宛てに送信可能、といった性質を持つ。
【０００６】
このため、伝送制御の手法として、１）送信局側はクロックの情報を送信、２）受信局側はＰＬＬを組み送信局側と同期したクロックを再生する、ことが必要である。
【０００７】
受信局は送信局からの映像データを一時的に内部バッファに蓄えて再生する。そのため、受信局は送信局と同じ速度で処理しないと、内部バッファのオーバーランやアンダーランを引き起こす。
【０００８】
ＭＰＥＧ２システムを採用するシステムは、基準となる時刻情報ＰＣＲ（Program Clock Reference）を多重ストリーム中に符号化することにより、デコーダ側で高精度な同期再生を行えるようにしている。
【０００９】
送信局から、時刻情報（ＰＣＲ）が少なくとも１００ｍｓに１回の割合でＭＰＥＧ２−ＴＳパケットの中に埋め込まれる。
【００１０】
ＭＰＥＧ２デコーダは、ＰＣＲを含むＭＰＥＧ２−ＴＳパケットが到来した時刻とＰＣＲ値とを比較し、その後内部ＰＬＬを制御することで、デコーダの時刻をエンコーダに合わせる。
【００１１】
ＭＰＥＧ２デコーダの内部ＰＬＬの動作を安定させるために、各ＭＰＥＧ２−ＴＳパケットは、揺らぎ（ジッタ）が極力出ないように（エンコーダから出力されたときの相互間隔が保たれるように）ＭＰＥＧ２デコーダまで配送されなければならない。
【００１２】
ＰＬＬの目的は、送信局の時計を作り出している発振周波数の正確な値を推定することにより、同一の発振周波数を再現することである。
【００１３】
ジッタが少ない時刻情報を元に送信局の時計の発振周波数を推定することは比較的容易であるが、ジッタが大きい時刻情報を元に送信局の時計の発振周波数を推定することは非常に困難である。
【００１４】
ＰＬＬを正しく機能させるためには、ＰＣＲを含むＭＰＥＧ２−ＴＳパケットの到着間隔のジッタが少ないことが肝要である。
【００１５】
ＭＰＥＧ２−ＴＳパケットをネットワーク経由で再配信するときにはネットワークジッタの影響が問題となる。
【００１６】
許容されるＰＣＲジッタの量はデコーダシステムに依存すると考えられる。
【００１７】
たとえば、あるデコーダシステムにおいて実験すると、±数１０ｕｓ程度のＰＣＲジッタを与えると映像に乱れが生じた。他のデコーダシステムにおいて実験すると、±１ｍｓのＰＣＲジッタでも映像に乱れは生じなかった。このように、デコーダシステムによって許容されるＰＣＲジッタの量は異なると考えられる。
【００１８】
一方、ネットワークジッタは数１００ｕｓから数１００ｍｓの単位で発生し得る。
【００１９】
これだけのネットワークジッタが発生する状況では、デコーダシステムのＰＬＬを正しく機能させることはできない。
【００２０】
一般的に、数ｍｓを超えるような伝送遅延では、ＰＬＬは利用できない、と言われている。
【００２１】
そこで、ジッタを吸収するための仕組みが必要であるが、その方法として、大別してバッファ方式とタイムスタンプ方式の２つの方法がある。
【００２２】
バッファ方式の場合、受信局がバッファにたまるデータを監視する。バッファの中のある位置以上にデータが溜った場合には、受信局の読みだしクロックのスピードを上げる。逆にバッファの中のある位置以下にデータが減った場合には、受信局の読みだしクロックのスピードを下げる。受信局は、このように常にデータ量を制御することによって、クロックの同期をとる。
【００２３】
タイムスタンプ方式の場合、送信局がパケットごとに送信局の時刻情報に基づくタイムスタンプを付与する。受信局はパケットに付与されたタイムスタンプと受信局の時刻情報に基づく時刻とを比較して、送信局の間におけるパケット間の到着間隔を再現する。
【００２４】
タイムスタンプ方式の場合、送受信局において共通の時計を利用できなければならない。または、少なくとも時計の進み方が一致していなければならない。（受信局が再生のタイミングを決定する仕様であれば、必ずしも共通の時計を利用できなくともよい。この場合、時計の進み方が一致していればよい。）
それを実現する方法として、（1）ＮＴＰ(Network Time Protocol)、（2）共通イベント観測方式、（3）送受信局のクロック周波数のズレを調整、の３つの方法が考えられる。
【００２５】
ＮＴＰは、ＩＰネットワーク上で時刻を合わせるための一般的なプロトコルである。ＮＴＰは、ＲＦＣ（Request For Comment）−１３０５、あるいは、その簡易版のＳＮＴＰ（Simple NTP）ＲＦＣ−２０３０のことを指す。
【００２６】
ＮＴＰはインターネット上で時計を合わせるために一般的に使用されている。
【００２７】
ＮＴＰによる時刻合わせの手法は次の通り。
【００２８】
（１）ホストはピアにパケットを送信する。(Ｔ１)
（２）ピアはパケットを受信し(Ｔ２)、送信元アドレスをあて先にして送り返す（Ｔ３）。
【００２９】
（３）ホストはピアからパケットを受信する。（Ｔ４）
Ｔ１，Ｔ４はホスト側のタイムスタンプを、Ｔ２，Ｔ３はピア側のタイムスタンプを示す。各パケットにはＴ１，Ｔ２，Ｔ３のタイムスタンプが含まれる。
【００３０】
ラウンドトリップ時間δは以下のように求められる。
【００３１】
δ＝（Ｔ２−Ｔ１）−（Ｔ３−Ｔ４）
ホストとピアのクロックオフセットθは以下のように求める。
【００３２】
θ＝（（Ｔ２−Ｔ１）＋（Ｔ３−Ｔ４））／２
また、真のクロックオフセットをθ０とすると、θ０は
θ−δ／２≦θ０≦θ＋δ／２
で評価されるため、ラウンドトリップ時間が少ない方がクロックオフセットθの誤差が少なくなくなる傾向がある。
【００３３】
ＮＴＰでは、数回パケットを送受信して、ラウンドトリップ時間が最小のものについてクロックオフセットを採用することが行われる。
【００３４】
共通イベント観測方式は、すでに多数提案されており、時刻情報のジッタレス中継、電波時計の利用、ＧＰＳの利用、ＩＳＤＮ回線を用いた共通クロックの供給、商用電源による同期、などがある。
【００３５】
前述した５ＧＨｚ帯無線画像伝送用チップセットは、時刻情報のジッタレス中継を利用している。
【００３６】
ＩＥＥＥ８０２．１１規格無線ＬＡＮには、ＴＳＦ（Timing Synchronization Function）という時刻同期を取るための機能がある。
【００３７】
ＡＰ（アクセスポイント）がタイミング・マスタとなり、周期的に送信するビーコン信号（制御信号）の中で、タイマの値をブロードキャスト送信する。ＳＴＡ（端末）は、ＡＰからビーコン信号を受信し、その中に設定されているＴＳＦタイマの値に自局のタイマを合わせる。（以上、非特許文献１参照）
ＩＥＥＥ８０２．１１規格無線ＬＡＮのＴＳＦは、送受信間の共通の時計になりうるので、前述した５ＧＨｚ帯無線画像伝送用チップセットは、このＴＳＦを利用してジッタレス伝送を実現している。
【００３８】
また、送受信局のクロック周波数のズレを調整する方式もすでに提案されている。
【００３９】
たとえば、特許文献１には、伝送遅延ゆらぎが発生するネットワーク環境において、相対的ゆらぎ時間を平滑化し、時間経過に対する単調増加あるいは単調減少の様子を監視することにより、送受信間のクロックのずれを解消する方向に制御する手法が提案されている。
【００４０】
また、特許文献２では、通信開始後に最初に受信された同期タイミングパケットの受信時におけるクロックの値とその後に受信された同期タイミングパケットの受信時におけるクロックの値との差分を基に送信側のクロックとクロック生成手段の発生しているクロックの周波数差を推定する手法が提案されている。
【特許文献１】特開２００３―２５８８９４号公報
【特許文献２】特開２００１―１８６１８０号公報
【非特許文献１】「８０２．１１高速無線ＬＡＮ教科書」、ＩＤＧジャパン出版、２００３年３月２９日、Ｐ．６６−１２２、松江英明、守倉正博  監修、初版
【発明の開示】
【発明が解決しようとする課題】
【００４１】
本発明が解決しようとする課題は以下のようなものである。
【００４２】
まず、ジッタを吸収するためのバッファ方式であるが、この方式は基本的に固定ビットレートしか適用できない、という問題がある。実際には、映像データには可変ビットレートもありうるので汎用性に欠ける。また、バッファ方式ではバッファの残量に基づいてクロック速度を調整するため、タイムスタンプ方式と比べると、高精度にジッタ吸収することはできない。汎用性や高精度を考えると、バッファ方式よりもタイムスタンプ方式が望ましい。
【００４３】
次に、ＩＥＥＥ８０２．１１規格無線ＬＡＮのＴＳＦを利用して送受信間の共通の時計を得る方法であるが、ＴＳＦはＩＥＥＥ８０２．１１規格無線ＬＡＮの中だけでしか利用できない、という問題がある。他の媒体、たとえば有線ＬＡＮのイーサーネット（登録商標）などをまたがった場合には利用できない。特定の系に依存しない、より汎用的な解決方法が望ましい。
【００４４】
また、ＮＴＰによる時刻合わせでは、「伝搬時間が行きと帰りで同じ」という暗黙的な前提がある。実際には、行きと帰りでネットワークの経路が異なる、また、伝送速度が異なる、などの理由により、行きと帰りの伝播時間が同じであることはほとんどない。また、プロトコルのやりとりは通常１回しか行われず、ＮＴＰを実行した時点でのネットワーク状況によって、伝播時間が大きく影響される。このため、高精度に時刻合わせができないという問題がある。一般的に、ＮＴＰの仕組みでは数ｍｓの誤差が発生してしまうようである。
【００４５】
また、共通イベント観測方式である、電波時計の利用、ＧＰＳの利用、ＩＳＤＮ回線を用いた共通クロックの供給、商用電源による同期、などについては、ＩＰネットワークの通信装置以外に他のシステム（たとえば、電波を受信するためのアンテナ、同期検波回路など）が必要となり、余計なコストがつく、という問題がある。その上、電波の受信状況によっては必ずしも利用可能であるとは言えない。ＩＰネットワークの通信装置だけで解決できるならば、その方が望ましいと考える。
【００４６】
ところで、ＭＰＥＧ伝送システムを考えると、必ずしも共通の時計は必要ではなく、時計の進み方が一致していればよい。送信側では各パケットに送信側の時刻情報に基づくタイムスタンプを付与し、受信側ではパケットに付与されたタイムスタンプと受信側の時刻情報に基づくタイムスタンプとを比較し再生タイミングを決定する。このとき、１パケット目を再生するタイミングさえ決まれば、２パケット目以降の再生タイミングは、パケットに付与されたタイムスタンプの間隔を見て決定することができる。送信側は受信側の再生タイミングに関与せず、もっぱら受信側のみの判断で再生タイミングが決定される。このような仕組みであれば、必ずしも共通の時計は必要ではなく、時計の進み方が一致していればよい。
【００４７】
そこで、送受信局のクロック周波数のズレを調整する方法であるが、特許文献１に開示された発明の場合、送受信するすべてのパケットを遅延ゆらぎの平滑化の対象としているため、あるパケットが極端に大きな伝送遅延時間を持つと、送受信局のクロック周波数の比が高精度に求められない、または、誤った値に収束するという問題がある。すなわち、極端に大きな伝送遅延時間を持つパケットが発生した直後に、クロック周波数比の値が大きく変化してしまい、その後長い時間にわたって影響が出る。
【００４８】
パケットの遅延ゆらぎが、平均遅延時間を中心にして正規分布のような形をしていれば、特許文献１に開示されている平滑化はうまく機能すると考えられる。しかし、待ち行列の理論から明らかなように、伝送遅延時間のばらつきは、無限大の方向に長く伸びる。つまり、極端に大きな伝送遅延時間を持つパケットは発生し得る、ということである。このようなパケットも含めて平滑化すると、誤差が大きくなり、正しい値に収束しなくなる。
【００４９】
また、パケット伝送時間の上限と下限の評価がなされていないため、クロック周波数比がどれくらいの精度の誤差をもっているか判断がつかない、という問題がある。誤差の推定ができないと、どれだけの精度を守ってジッタを吸収しているか、ということが言えない。
【００５０】
次に、特許文献２に開示された発明の場合、クロック周波数比の上限と下限の評価がなされており、誤差の推定が可能である。また、目標誤差に到達するまでの収束時間を推定する手法も紹介されている。
【００５１】
しかし、実施例において、ＩＰネットワーク上におけるゆらぎの上限値を設けている。先ほど述べたように、伝送遅延時間に有意な上限を持たせることは危険である。ネットワークの状況においては、極端に大きな伝送遅延時間を持つパケットが発生しうる。
【００５２】
ゆらぎの上限値を設定して、仮にそれ以上の伝送遅延を持つパケットが発生した場合、特許文献２に開示された実施例では成り立たない。特許文献２の図７において、線分ＬＦの傾きＫ２が線分ＬＢの傾きより大きくなる、または、線分ＬＧの傾きＫ１が線分ＬＣの傾きより小さくなる、ということが起こりえる。すると、その後の展開でＫ１＜Ｋ２となり（すなわち、特許文献２の図７において、線分ＬＦの傾きＫ２が線分ＬＧの傾きＫ１より大きくなり）、妥当と考えられる推定値が存在しないことになる。
【００５３】
ゆらぎの上限値を極端に大きな値にすれば、この実施例でも可能であるかもしれないが、おそらく現実的な解決方法にはなり得ない。現実的な時間内に収束しないためである。たとえば、ゆらぎの上限をＹ＝１００ｍｓ、クロックの周波数差の目標誤差をＷ＝１０−６（１ｐｐｍ）とするとき、収束に必要な所要時間は２Ｙ／Ｗ＝５５時間以上となる。
【００５４】
そもそも伝送遅延ゆらぎに上限を設ける、という仮定に問題があると考えられる。
【００５５】
本発明はこのような問題に着目してなされたものであり、その目的は、伝送遅延ゆらぎに上限を仮定する必要がなく、極端に大きな伝送遅延時間を持つパケットが発生するようなネットワーク環境においてもそのパケットに影響されない、タイミングの検出装置、表示装置、タイミングの検出プログラム、タイミングの検出プログラムを記録したコンピュータ読取可能な記録媒体を提供することである。
【課題を解決するための手段】
【００５６】
上記目的を達成するために、本発明のある局面にしたがうと、タイミングの検出装置は、タイミングを検出するための検出手段と、第１のパケットを、他の装置へ送信するための送信手段と、他の装置が返信しかつ第１のパケットに対応する第２のパケットを受信するための受信手段と、他の装置に第１のパケットを送信したタイミング、第１のパケットに対応しかつ他の装置における第１のパケットの受信タイミングを表わす第２のパケットを受信手段が受信したタイミング、および他の装置における第１のパケットの受信タイミングに基いて、自装置のクロックパルスおよび他の装置のクロックパルスの周波数比を算出する算出手段と、算出手段が算出した周波数比に基づいて、検出手段が検出したタイミングを補正するための補正手段とを含む。
【００５７】
すなわち、算出手段は、他の装置に第１のパケットを送信したタイミング、第１のパケットに対応しかつ他の装置における第１のパケットの受信タイミングを表わす第２のパケットを受信手段が受信したタイミング、および他の装置における第１のパケットの受信タイミングに基いて、自装置のクロックパルスおよび他の装置のクロックパルスの周波数比を算出する。補正手段は、算出手段が算出した周波数比に基づいて、検出手段が検出したタイミングを補正する。これにより、クロックパルスの周波数比は、他の装置に第１のパケットを送信したタイミング、第１のパケットに対応しかつ他の装置における第１のパケットの受信タイミングを表わす第２のパケットを受信手段が受信したタイミング、および他の装置における第１のパケットの受信タイミングの影響を受けることとなる。クロックパルスの周波数比がこれらの値の影響を受けると、クロックパルスの周波数比が、伝送遅延ゆらぎおよびパケットの伝送遅延時間の影響を受けることは少なくなる。その結果、伝送遅延ゆらぎに上限を仮定する必要がなく、極端に大きな伝送遅延時間を持つパケットが発生するようなネットワーク環境においてもそのパケットに影響されない、タイミングの検出装置を提供することができる。
【００５８】
また、上述の算出手段は、少なくとも第１のパケットの他の装置における受信タイミング、および送信手段が第１のパケットを送信したタイミングに基いて第１の値を算出するための手段と、少なくとも第２のパケットが表わす受信タイミング、および自装置における第２のパケットの受信タイミングに基いて第２の値を算出するための手段と、第１の値および第２の値から、クロックパルスの周波数比を算出するための手段とを含むことが望ましい。
【００５９】
すなわち、算出手段は、第１の値および第２の値から、クロックパルスの周波数比を算出する。これにより、クロックパルスの周波数比が、伝送遅延ゆらぎおよびパケットの伝送遅延時間の影響を受けることはより少なくなる。その結果、より伝送遅延ゆらぎに上限を仮定する必要がなく、より極端に大きな伝送遅延時間を持つパケットが発生するようなネットワーク環境においてもそのパケットに影響されない、タイミングの検出装置を提供することができる。
【００６０】
また、上述の第１の値を算出するための手段は、複数の第１のパケットそれぞれの受信タイミングおよび複数の第１のパケットを送信したそれぞれのタイミングに基づいて複数の第１の値を算出するための手段を含むことが望ましい。第２の値を算出するための手段は、複数の第２のパケットそれぞれが表わす受信タイミング、および複数の第２のパケットそれぞれの受信タイミングに基いて複数の第２の値を算出するための手段を含むことが望ましい。クロックパルスの周波数比を算出するための手段は、複数の第１の値の内の最小値と、複数の第２の値の内の最大値との間の値であるクロックパルスの周波数比を算出するための手段を含むことが望ましい。
【００６１】
すなわち、算出手段は、複数の第１の値の内の最小値と、複数の第２の値の内の最大値との間の値であるクロックパルスの周波数比を算出する。これにより、クロックパルスの周波数比が、伝送遅延ゆらぎおよびパケットの伝送遅延時間の影響を受けることはさらに少なくなる。その結果、さらに伝送遅延ゆらぎに上限を仮定する必要がなく、さらに極端に大きな伝送遅延時間を持つパケットが発生するようなネットワーク環境においてもそのパケットに影響されない、タイミングの検出装置を提供することができる。
【００６２】
また、上述の複数の第１の値の内の最小値と、複数の第２の値の内の最大値との間の値は、第１の値の内の最小値および第２の値の内の最大値の加重平均の値であることが望ましい。
【００６３】
また、上述の第１の値は、基準となるタイミングに他の装置が検出したタイミングの推定値から第２のパケットが表わす受信タイミングまでの時間を、基準となるタイミングから送信手段が第１のパケットを送信したタイミングまでの時間で除算した値であることが望ましい。第２の値は、基準となるタイミングに他の装置が検出したタイミングの推定値から第１のパケットの他の装置における受信タイミングまでの時間を、基準となるタイミングから第２のパケットの受信タイミングまでの時間で除算した値であることが望ましい。
【００６４】
すなわち、算出手段は、第１の値および第２の値から、クロックパルスの周波数比を算出する。第１の値は、基準となるタイミングに他の装置が検出したタイミングの推定値から第２のパケットが表わす受信タイミングまでの時間を、基準となるタイミングから送信手段が第１のパケットを送信したタイミングまでの時間で除算した値である。第２の値は、基準となるタイミングに他の装置が検出したタイミングの推定値から第１のパケットの他の装置における受信タイミングまでの時間を、基準となるタイミングから自装置における第２のパケットの受信タイミングまでの時間で除算した値である。これにより、クロックパルスの周波数比が、伝送遅延ゆらぎおよびパケットの伝送遅延時間の影響を受けることは極めて少なくなる。その結果、伝送遅延ゆらぎに上限を仮定する必要がなく、より極端に大きな伝送遅延時間を持つパケットが発生するようなネットワーク環境においてもそのパケットにほとんど影響されない、タイミングの検出装置を提供することができる。
【００６５】
また、上述のタイミングの検出装置は、算出手段が算出したクロックパルスの周波数比を有理化するための有理化手段をさらに含むことが望ましい。補正手段は、有理化手段が有理化したクロックパルスの周波数比の分母および分子に一意に対応するタイミングに、タイミングを補正するための手段を含むことが望ましい。
【００６６】
また、上述の検出手段は、クロックパルスを発生する発振器と、発振器が発生するクロックパルスをカウントすることにより、タイミングを生成するための生成手段とを含むことが望ましい。補正手段は、算出手段が算出したクロックパルスの周波数比に基づいて、生成手段がカウントしたクロックパルスの数を変えることにより、タイミングを補正するための手段を含むことが望ましい。
【００６７】
また、上述のタイミングを補正するための手段は、クロックパルスの周波数比が１より大きいか否かを判断するための判断手段と、クロックパルスの周波数比が１より大きければ、生成手段がカウントしたクロックパルスの数を減らすことにより、タイミングを補正するための手段と、クロックパルスの周波数比が１より小さければ、生成手段がカウントしたクロックパルスの数を増やすことにより、タイミングを補正するための手段を含むことが望ましい。
【００６８】
また、上述のタイミングの検出装置は、クロックパルスの周波数比を記憶する不揮発性メモリをさらに含むことが望ましい。補正手段は、不揮発性メモリが記憶したクロック周波数比に基づいて、検出手段が検出したタイミングを補正するための手段を含むことが望ましい。
【００６９】
本発明の他の局面にしたがうと、表示装置は、上述のタイミングの検出装置を含むことが望ましい。
【００７０】
すなわち、伝送遅延ゆらぎに上限を仮定する必要がなく、極端に大きな伝送遅延時間を持つパケットが発生するようなネットワーク環境においてもそのパケットに影響されない、表示装置を提供することができる。
【００７１】
本発明の他の局面にしたがうと、タイミングの検出プログラムは、タイミングを検出する検出ステップと、第１のパケットを、他の装置へ送信する送信ステップと、他の装置が返信しかつ第１のパケットに対応する第２のパケットを受信する受信ステップと、他の装置に第１のパケットを送信したタイミング、第１のパケットに対応しかつ他の装置における第１のパケットの受信タイミングを表わす第２のパケットを受信ステップにおいて受信したタイミング、および他の装置における第１のパケットの受信タイミングに基いて、自装置のクロックパルスおよび他の装置のクロックパルスの周波数比を算出する算出ステップと、算出ステップにおいて算出した周波数比に基づいて、検出ステップにおいて検出したタイミングを補正する補正ステップとを含む各ステップをコンピュータに実行させる。
【００７２】
すなわち、伝送遅延ゆらぎに上限を仮定する必要がなく、極端に大きな伝送遅延時間を持つパケットが発生するようなネットワーク環境においてもそのパケットに影響されない、タイミングの検出プログラムを提供することができる。
【００７３】
本発明の他の局面にしたがうと、記録媒体は、タイミングの検出プログラムを記録した、コンピュータ読取り可能な記録媒体である。記録媒体は、タイミングを検出する検出ステップと、第１のパケットを、他の装置へ送信する送信ステップと、他の装置が返信しかつ第１のパケットに対応する第２のパケットを受信する受信ステップと、他の装置に第１のパケットを送信したタイミング、第１のパケットに対応しかつ他の装置における第１のパケットの受信タイミングを表わす第２のパケットを受信ステップにおいて受信したタイミング、および他の装置における第１のパケットの受信タイミングに基いて、自装置のクロックパルスおよび他の装置のクロックパルスの周波数比を算出する算出ステップと、算出ステップにおいて算出した周波数比に基づいて、検出ステップにおいて検出したタイミングを補正する補正ステップとを含む各ステップをコンピュータに実行させるためのタイミングの検出プログラムを記録した、コンピュータ読取り可能な記録媒体である。
【００７４】
すなわち、伝送遅延ゆらぎに上限を仮定する必要がなく、極端に大きな伝送遅延時間を持つパケットが発生するようなネットワーク環境においてもそのパケットに影響されない、タイミングの検出プログラムを記録したコンピュータ読取り可能な記録媒体を提供することができる。
【発明の効果】
【００７５】
本発明に係るタイミングの検出装置、表示装置、タイミングの検出プログラム、タイミングの検出プログラムを記録したコンピュータ読取可能な記録媒体は、伝送遅延ゆらぎに上限を仮定する必要がなく、極端に大きな伝送遅延時間を持つパケットが発生しても、そのパケットに影響されない。
【００７６】
クロックの周波数比を短時間に高精度で収束させることができる。
【００７７】
クロックの周波数比の上限と下限が評価できるので、誤差を推定できる。
【００７８】
許容するジッタの量が与えられた時に、それを満足した伝送が可能であるどうかを表示装置等において明示することができる。
【発明を実施するための最良の形態】
【００７９】
本発明における最良の形態を図に従って説明する。
【００８０】
図１は、本発明を組み込んだ映像伝送システムの一例である。
【００８１】
この例では、映像の送信側をサーバー、受信側をクライアントとして、サーバーからクライアントに映像データを伝送する場合を想定しているので、図１の例においてはサーバーに映像データが入力され、クライアントで映像データが出力されるという構成になっている。しかし伝送するデータは映像に限らず、いかなるデータを伝送するシステムであっても本発明を適用できることは言うまでもない。本発明の核心は実際に映像データ伝送をする前に、クライアントがサーバーの時刻の進み方に合わせるための技術を提供するものである。
【００８２】
図１において、サーバー１３０とクライアント１００が、ネットワーク１２０を介して接続されている。
【００８３】
サーバー１３０やクライアント１００は、特定目的に特化した組み込み機器でもよいし、汎用的なＰＣ（Personal Computer）であってもよい。
【００８４】
ネットワーク１２０は、単一の特定の媒体に限るということはなく、任意の媒体で、複数の媒体をまたがってもよい。途中にブリッジやルータ、スイッチングハブなどの中継器があってもよい。
【００８５】
サーバー１３０は、ＣＰＵ（Central Processing Unit）１３１、メモリ１３２、通信Ｉ／Ｆ（interface）１３３、時刻制御部１３４を少なくとも備える。ＣＰＵ１３１は、ソフトウェアを実行することにより、サーバー１３０がクライアント１００と通信する装置として動作するように、サーバー１３０の各部を制御する。メモリ１３２は、ＣＰＵ１３１がプログラムを実行する際に必要な値などを記憶する。通信Ｉ／Ｆ１３３は、パケットを、クライアント１００へ送信する送信部と、クライアント１００からパケットを受信するための受信部とを含む。
【００８６】
同様に、クライアント１００は、ＣＰＵ１０１、メモリ１０２、通信Ｉ／Ｆ１０３、時刻制御部１０４を少なくとも備える。ＣＰＵ１０１は、ソフトウェアを実行することにより、クライアント１００が時刻の検出装置を含む伝送装置として動作するように、クライアント１００の各部を制御する。メモリ１０２は、ＣＰＵ１０１がプログラムを実行する際に必要な値などを記憶する。通信Ｉ／Ｆ１０３は、パケットを、他の装置（本実施の形態の場合サーバー１３０）へ送信する送信部と、サーバー１３０からパケットを受信するための受信部とを含む。送信部が送信するパケットには、第１のパケット（本実施の形態においては、後述する測定パケットがこれにあたる）が含まれる。受信部が受信するパケットには、サーバー１３０が返信しかつ測定パケットに対応する第２のパケット（本実施の形態においては、後述する返信パケットがこれにあたる）が含まれる。時刻制御部１０４は、タイミングを検出する。
【００８７】
これらは、本発明の説明に必要な最小限の構成であって、他に必要と思われるコンポーネントは省略されている。たとえば、プログラムを格納する不揮発性メモリや、メモリ−メモリ間を高速に転送するＤＭＡ（Direct Memory Access）などがあってもよい。
【００８８】
サーバー１３０やクライアント１００がＰＣの場合は、時刻制御部１３４や時刻制御部１０４はＰＣＩ(Peripheral Component Interconnect)バスなどで接続された外部のボードであってもよい。
【００８９】
時刻制御部１３４は、発振器１３５、時刻カウンタ部１３６、バッファ１３７、映像入力Ｉ／Ｆ１３８を少なくとも備える。発振器１３５は、クロックパルスを発生する。時刻カウンタ部１３６は、発振器１３５が発生するクロックパルスをカウントすることにより、タイミングを表わす値を生成する。これにより、時刻制御部１３４によって（より厳密に言うと発振器１３５および時刻カウンタ部１３６によって）タイミングが検出されることとなる。バッファ１３７は、情報を一時的に記憶する。映像入力Ｉ／Ｆ１３８は、映像のデータを受付ける。
【００９０】
同様に、時刻制御部１０４は、発振器１０５、時刻カウンタ部１０６、時刻補正部１０７、出力タイミング決定部１０８、バッファ１０９、映像出力Ｉ／Ｆ１１０を少なくとも備える。発振器１０５は、クロックパルスを発生する。時刻カウンタ部１０６は、発振器１０５が発生するクロックパルスをカウントすることにより、タイミングを表わす値を生成する。これにより、時刻制御部１０４によって（より厳密に言うと発振器１０５および時刻カウンタ部１０６によって）タイミングが検出されることとなる。時刻補正部１０７は、ＣＰＵ１０１が算出したクロックパルスの周波数比に基づいて、時刻カウンタ部１０６がカウントしたクロックパルスの数を変えることにより、タイミングを補正する。
【００９１】
これらは、本発明の説明に必要な最小限の構成であって、他に必要と思われるコンポーネントは省略されている。たとえば、ホストＣＰＵとのインタフェース部や映像データを暗号化する回路などがあってもよい。
【００９２】
発振器１０５や発振器１３５は、周波数偏差が±３０ＰＰＭ程度の安価なものでよい。ただし、周波数の不安定さ（すなわち、出力される波形の周波数のバラツキ）は少ない方が望ましい。
【００９３】
時刻制御部１３４は発振器１３５を基に時刻カウンタ部１３６にてタイミングを表わす値であるタイミングカウンタを生成する。これにより、発振器１３５および時刻カウンタ部１３６は、タイミングを検出する。
【００９４】
同様に、時刻制御部１０４は発振器１０５を基に時刻カウンタ部１０６にてタイミングカウンタを生成する。これにより、発振器１０５および時刻カウンタ部１０６は、タイミングを検出することとなる。時刻制御部１３４と時刻制御部１０４で、それぞれ独立してタイミングカウンタを生成する。
【００９５】
また時刻制御部１０４は、時刻カウンタ部１０６、時刻補正部１０７を制御してタイミングの検出と補正をするための各種の関連情報の制御、たとえば、時刻カウンタ部１０６におけるクロックパルスのカウント数を変える、レジスタ群１１１へ情報をセットするまたそこから情報を読み出して時刻補正部１０７へ転送する、自らが生成したタイミングカウンタを他の装置へ送信する、また他の装置のタイミングカウンタを取得する、あるいは、それら情報を基に各種必要な演算をするといったような制御を、ＣＰＵ１０１の管理の下で、あるいは時刻制御部１０４独自で行なう。
【００９６】
上記の時刻制御部は、時刻制御部１３４と時刻制御部１０４で公称値が同じクロック周波数でカウントアップするものとする。
もし公称のクロック周波数が異なっている場合は、同一のクロック周波数に合わせるためにクライアント１００側の周波数を公称値に合わせる調整をしておくものとする（具体的な調整の例を後述する）。
【００９７】
時刻カウンタ部は精度とビット長を注意して設計する必要がある。
【００９８】
本発明では、クロック周波数が２７ＭＨｚの発振器を用いて、３クロックサイクルごと（１１１．１１１ｎｓ）に１カウントアップするものとする。
【００９９】
またタイミングカウンタは４０ビットの数値の列により表わされることとする。しかしこれらの値は一例でありこれらに限るものでないことは言うまでも無い。
【０１００】
クロック進み合わせプロトコルでやり取りされるタイミングカウンタは、時刻カウンタ部１３６、時刻カウンタ部１０６で生成されるタイミングカウンタを用いる。
【０１０１】
時刻制御部１３４には、デジタル放送受信機などから映像入力Ｉ／Ｆ１３８を介して映像データのパケットが入力され、時刻制御部１３４は１つ１つのパケットに入力された時点のタイミングカウンタを付与し、バッファ１３７に一時保存する。
【０１０２】
サーバー１３０のＣＰＵ１３１は、バッファ１３７から適当なタイミングでパケットを取り出し、メモリ１３２へ格納する。メモリ１３２に格納されたパケットは通信Ｉ／Ｆ１３３によってネットワーク１２０へ送出される。
【０１０３】
クライアント１００のＣＰＵ１０１は、通信Ｉ／Ｆ１０３によって受信されたパケットをメモリ１０２へ格納する。メモリ１０２に格納されたパケットは、適当なタイミングで時刻制御部１０４に送られる。
【０１０４】
時刻制御部１０４は、ＣＰＵ１０１から受け取ったパケットをバッファ１０９に一時保存する。出力タイミング決定部１０８にて、補正後のタイミングカウンタとパケットに含まれるタイミングカウンタとを比較して、出力タイミングを決定する。パケットは、タイミングカウンタが除かれて、映像出力Ｉ／Ｆ１１０を介して、デコーダ装置などへ出力される。
【０１０５】
図２に、ジッタを説明した図を示す。
【０１０６】
理想的な伝送（すなわち一定量の遅延時間を伴う伝送）と、実際の伝送との間には、パケットの出力タイミングにおいて伝送ゆらぎが生じる。この伝送ゆらぎのことをジッタと呼んでいる。
【０１０７】
図３に、ジッタを吸収する方法を説明した一般的な説明図を示す。
【０１０８】
送信機はパケットが入力されると１パケットずつそのパケットが入力された時点の送信機側のタイミングを付与する。送信機は数パケットをまとめてひとつのペイロードデータとし、受信機へ送信する。
【０１０９】
受信機はペイロードデータを受信すると、パケット単位に分解する。一律に固定された遅延時間をＤとすると、受信機側のタイミングが、パケットに付与されているタイミング＋Ｄと等しくなる時点でそのパケットを出力する。受信機からパケットが出力される時間の間隔は、送信機から送信された時間の間隔を再現したものとなる。
【０１１０】
ところでこの方法が有効であるには、送信機と受信機の時間の進み方が一致している必要がある。
【０１１１】
実際には、送信機と受信機との間のクロック周波数には少しではあってもズレがあり、この周波数のズレに起因するタイミングのズレがある。そのため映像データを送受信する前に、受信機側のクロックの進みを送信機側に合わせておかないと上で述べたジッタを吸収する方法は有効に働かない。
【０１１２】
図４は、上記の問題を解決する本発明におけるクロック進み合わせプロトコルの概念を示したものである。
【０１１３】
クライアント１００はサーバー１３０に対してクロック進み合わせのための測定パケットを送信する。この測定パケットには、クライアント１００が送信した時点のクライアント１００側のタイミング（Ｃ１）が付加されている。
【０１１４】
サーバー１３０は、当該測定パケットを受信すると、受信した時点のサーバー１３０側のタイミング（Ｓ１）をさらに付加して、当該測定パケットの送信元アドレスをあて先アドレスとした返信パケットとして送り返す。
【０１１５】
クライアント１００は、サーバー１３０から上記の返信パケットを受信する。
【０１１６】
上記のクロック進み合わせプロトコルを、適当な時間間隔で繰り返す。
【０１１７】
本発明の実施例では、１００ｍｓの時間間隔で繰り返す。
【０１１８】
図５は、クライアント１００側のタイミングとサーバー１３０側のタイミングの関係を示したものである。
【０１１９】
クライアント１００からクロック進み合わせのための測定パケットを送信した時点でのクライアント１００側のタイミングをＣ１、サーバー１３０がその測定パケットを受信した時点でのサーバー１３０側のタイミングをＳ１、クライアント１００がサーバー１３０から返信された返信パケットを受信した時点でのクライアント１００側のタイミングをＣ２とする。
【０１２０】
図４で示した上記記号を基に、以下で本発明のクロック進み合わせの方法を詳細に説明する。
【０１２１】
クライアント１００は、クロック進み合わせのための測定パケットを繰り返し送信して（Ｃ１，Ｓ１，Ｃ２）のデータを測定する。
【０１２２】
クライアント１００とサーバー１３０の間でクロック周波数比は本来異なるものであるため、｛Ｃ１，Ｃ２｝とＳ１をそのままで比較することに意味をなさない。
【０１２３】
クライアント１００のタイミングを式（１）に基づき補正することを考える。
【０１２４】
Ｆ（Ｃ）＝α×（Ｃ−Ｃ０）＋β  ・・・（１）
ここで、Ｆ（Ｃ）は補正されたクライアント１００側のタイミング、Ｃは補正する前のクライアント１００側のタイミング、αはサーバー１３０とクライアント１００のクロック周波数比、βはＣ＝Ｃ０におけるサーバー１３０側のタイミング、Ｃ０はクライアント１００側の任意の基準となるタイミングをそれぞれ表している。
【０１２５】
補正されたクライアント１００側のタイミングが、サーバー１３０側のタイミングと常に同じ時刻計時を実現していれば（つまり、任意のどの時点においてもクライアント１００において検出されるタイミングとサーバー１３０において検出されるタイミングとが同じであれば）、式（２）が成り立つはずである。
【０１２６】
Ｆ（Ｃ１）＜Ｓ１＜Ｆ（Ｃ２）・・・（２）
式（１）は、サーバー１３０とクライアント１００のクロック周波数比が十分安定していることが前提となるが、急激な温度変化などがない限り、式（１）の補正式でクライアント１００のタイミングを補正することができる、と考えてよい。
【０１２７】
式（２）を少し変形すると式（３）または式（４）が得られる。
【０１２８】
０＜Ｓ１−Ｆ（Ｃ１）＜Ｆ（Ｃ２）−Ｆ（Ｃ１）・・・（３）
０＜Ｆ（Ｃ２）−Ｓ１＜Ｆ（Ｃ２）−Ｆ（Ｃ１）・・・（４）
Ｆ（Ｃ２）−Ｆ（Ｃ１）は往復にかかった伝送時間（ラウンドトリップ時間）に相当する。
【０１２９】
Ｓ１−Ｆ（Ｃ１）は行きの伝送時間、Ｆ（Ｃ２）−Ｓ１は帰りの伝送時間に相当する。
【０１３０】
式（３）または式（４）は、片方向の伝送時間は、「０」より大きく、ラウンドトリップ時間より小さいことを意味している。
【０１３１】
式（３）を展開すると、式（５）が得られる。
【０１３２】
０＜Ｓ１−（α×ＮＣ１＋β）＜α×（ＮＣ２−ＮＣ１）・・・（５）
ただし、ＮＣ１＝Ｃ１−Ｃ０、ＮＣ２＝Ｃ２−Ｃ０とする。
【０１３３】
式（５）をαについて解くと、式（６）が得られる。
【０１３４】
（Ｓ１−β）／ＮＣ２＜α＜（Ｓ１−β）／ＮＣ１・・・（６）
クライアント１００は、クロック進み合わせのための測定パケットを繰り返し送受信して、｛Ｃ１，Ｓ１，Ｃ２｝のデータを測定する。
【０１３５】
クライアント１００は、測定された結果から式（６）を満足するようなα、β、Ｃ０が存在するかどうか調べる。
【０１３６】
まず、Ｃ０とβをどのように設定するかが問題となる。Ｃ０とβは唯一に決まるものではなく、妥当な数値に設定すればよい。
【０１３７】
Ｃ０は、クライアント１００側の任意の基準であるため、どこに設定してもかまわない。
【０１３８】
クロック進み合わせプロトコルを走らせて、はじめの１００個程度のデータから、ラウンドトリップ時間（Ｃ２−Ｃ１）が最小となるデータを取り出す。このデータを｛Ｃ１ｋ、Ｓ１ｋ、Ｃ２ｋ｝とする。
【０１３９】
Ｃ０は式（７）のように設定する。
【０１４０】
Ｃ０＝Ｃ１ｋ・・・（７）
βは、クライアント１００のタイミングＣがＣ０の時のサーバー１３０のタイミングであり、片方向の伝送時間がわからない限り、クライアント１００が正確に求めることはできない。そのため、誤差がなるべく小さくなるように推定することになるが、誤差を極力小さくするためには、ラウンドトリップ時間がなるべく小さいものを選んだ方がよい。ラウンドトリップ時間が大きいと、βの推定誤差が大きくなるので、ラウンドトリップ時間が局所的に最小のものを選ぶようにする。
【０１４１】
ここでは、βを式（８）のように設定する。
【０１４２】
β＝Ｓ１ｋ−（Ｃ２ｋ−Ｃ１ｋ）／２・・・（８）
可能性を言えば、β＝Ｓ１ｋ−（Ｃ２ｋ−Ｃ１ｋ）からβ＝Ｓ１ｋまでの範囲で、誤差は存在しうる。行きと帰りの伝送時間の合計がＣ２ｋ−Ｃ１ｋであるため、行きと帰りとの伝送時間をどのように分配するかによってβの値が変わる。
【０１４３】
式（８）は、行きと帰りの伝送時間が同じである、かつ、サーバー１３０とクライアント１００の公称クロック周波数が同じであると仮定して、Ｃ＝Ｃ０におけるサーバー１３０側のタイミングを推定したものである。
【０１４４】
ここで、式（８）で設定したβの値は一例であって、確定されるべきではない。αの上限と下限の範囲を計算するために仮に決定したものである。
【０１４５】
上記のデータ｛Ｃ１ｋ、Ｓ１ｋ、Ｃ２ｋ｝より以前のデータは無視して、その次以降のデータについて、式（６）を適用する。
【０１４６】
式（８）によって設定されたβを使って、式（６）よりαの上限と下限を評価する。
【０１４７】
図６に、ある有線ＬＡＮ上で２台のＰＣ間で測定したデータ（Ｃ１、Ｓ１、Ｃ２）の例を示す。これらのデータは、１００ｍｓに１回パケットを送信するという条件にしたがって測定されたデータである。図６のＣ１、Ｓ１、およびＣ２の値は、タイミングカウンタである。これらは１タイミングカウンタあたり２７９．３６５ｎｓに相当する。測定時間は、約２０分間である。なお、図６における「時刻」および「ミリ秒」は、経過した時間の目安を表わすものである。
【０１４８】
αの下限をαmin、αの上限をαmaxとすると、αmin、αmaxは式（６）より式（９）のようになる。αminは式（６）の左辺、αmaxは式（６）の右辺である。
【０１４９】
αmin＝（Ｓ１−β）／ＮＣ２、αmax＝（Ｓ１−β）／ＮＣ１・・・（９）
これにより、ＣＰＵ１０１は、クロックパルスの周波数比αの下限値を算出することとなる。式（９）から、本実施例におけるクロックパルスの周波数比αの下限値αminは、基準となるタイミングＣ０にサーバー１３０が検出したタイミングの推定値βから測定パケットのサーバー１３０における受信タイミングまでの時間を、基準となるタイミングＣ０からクライアント１００における返信パケットの受信タイミング（通信Ｉ／Ｆ１０３の受信部が返信パケットを受信した時点で発振器１０５および時刻カウンタ部１０６が検出したタイミング）までの時間で除算した値となる。
【０１５０】
また、ＣＰＵ１０１は、クロックパルスの周波数比αの上限値を算出することとなる。式（９）から、本実施例におけるクロックパルスの周波数比αの上限値αmaxは、基準となるタイミングＣ０にサーバー１３０が検出したタイミングの推定値βから返信パケットが表わす受信タイミングまでの時間を、基準となるタイミングから通信Ｉ／Ｆ１０３の送信部が測定パケットを送信したタイミングまでの時間で除算した値となる。
【０１５１】
本実施例の場合、上述した基準となるタイミングＣ０にサーバー１３０が検出したタイミングの推定値βは、式（８）に示す通り、測定パケットのサーバー１３０における受信タイミング（すなわち返信パケットが表わす受信タイミング）と、通信Ｉ／Ｆ１０３の送信部が測定パケットを送信した時点で発振器１０５および時刻カウンタ部１０６が検出したタイミングから通信Ｉ／Ｆ１０３の受信部が返信パケットを受信した時点で発振器１０５および時刻カウンタ部１０６が検出したタイミングまでの時間の半分との、差である。
【０１５２】
式（６）は、ある特定のデータ｛Ｃ１，Ｓ１，Ｃ２｝における、αの満たすべき値を示しているが、すべてのデータにおいてαmin＜α＜αmaxとなるはずである。
【０１５３】
図７に、図６で得られたデータからαmin、αmaxを計算した例を示す。
【０１５４】
図８に、αminとαmaxをプロットした図を示す。
【０１５５】
図８を見ると、αの上限と下限の範囲が狭まっていく様子がわかる。
【０１５６】
図８のプロットでは、αmin＜αmaxとなっている。これにより、式（６）の不等式が成り立つことがわかる。
【０１５７】
しかし、測定環境によってはαmin＜αmaxとならないことがある。
【０１５８】
そのような場合は、βの設定（あるいはデータ｛Ｃ１ｋ，Ｓ１ｋ，Ｃ２ｋ｝の選択）に問題があるか、そもそもクライアント１００側のタイミングが式（１）によって補正できない可能性が考えられる。
【０１５９】
βの設定に問題があるとすれば、その問題は式（８）によって行きと帰りの伝送時間が同じであると仮定している点にあると考えられる。その場合は、行きと帰りの伝送時間の分配を変えて計算すると良い。たとえば、式（８）を式（８’）のようにして、βを複数個設定して計算していくと良い。Ｎはラウンドトリップ時間に比例して決定すると良い。
【０１６０】
βｉ＝Ｓ１ｋ−（Ｃ２ｋ−Ｃ１ｋ）×ｉ／Ｎ，ｉ＝０〜Ｎ・・・（８’）
式（８’）において、すべてのβｉにおいてαmin＞αmaxとなってしまった場合、最初のいくつかのデータを捨てて、再度Ｃ０とβを設定し直すと良い。特に、最初に見つけたデータのラウンドトリップ時間が十分に最小になっていなければ、このような事態が発生しうる。後続のデータの中から、ラウンドトリップ時間がより最小となるデータを見つけて、再度Ｃ０とβを設定し直す。
【０１６１】
クライアント１００側のタイミングが式（１）によって補正できない可能性はある。温度変化、湿度変化、気圧変化、磁場変化、供給電圧の変化、その他の影響により、また発振器自体の性能などの理由により、発振周波数が計測中に変化することがありうるためである。発振周波数の変動が大きい場合には、発振周波数が十分に安定するまで待たなければならない。実際には、常にクロック進み合わせプロトコルをやり取りして、αmin＞αmaxとなる間先に受信したデータから順にいくつかのデータを捨てて、再度Ｃ０とβを設定し直すと良い。
【０１６２】
ところで、図８をもう少し詳しく見てみると、αmaxが前後の点と比べて上方向に大きくぶれてプロットされた点と、αminが前後の点と比べて下方向に大きくぶれてプロットされた点があることがわかる。
【０１６３】
このαmaxが上方向にぶれてプロットされた点は、行きの伝送時間が前後の点と比べて異常に大きいことによるものである。
【０１６４】
また、αminが下方向にぶれてプロットされた点は、帰りの伝送時間が前後の点と比べて異常に大きいことによるものである。
【０１６５】
一般的に、ネットワーク１２０の伝送時間はある範囲内に収まると考えがちであるが、待ち行列の理論によると、伝送時間の上限について仮定を設けることは現実的ではない。つまり、異常に大きな伝送時間を持つパケットは存在する、ということである。
【０１６６】
この点が、従来技術では考慮されていなかったが、本発明では、何かの事情で異常に大きな伝送時間を持つパケットが存在しても、αminとαmaxの範囲が狭まらないだけで、αの推定には影響されないようになっている。
【０１６７】
さて、図８のように、αmin＜αmaxを保ちながらαminとαmaxが推移したならば、式（１０）のようにαを推定すると良い。
【０１６８】
αest＝（ＭＡＸ_αmin＋ＭＩＮ_αmax）／２・・・（１０）
ここで、αestは推定したクロック周波数比、ＭＩＮ_αmaxはαmaxの現在までの最小値、ＭＡＸ_αminはαminの現在までの最大値とする。
【０１６９】
本実施例では、αestをＭＩＮ_αmaxとＭＡＸ_αminの算術平均で求めているが、これに限らず、たとえば式（１０’）のような加重平均のようなものであってもよい。
【０１７０】
αest＝ＭＡＸ_αmin×ω＋ＭＩＮ_αmax×（１−ω），０＜ω＜１・・・（１０’）
特に、行きの伝送時間が帰りの伝送時間と比べて大きくなる傾向がある場合、ωを０．５より大きくすると良い。
【０１７１】
αestは、ＭＡＸ_αmin＜α＜ＭＩＮ_αmaxの範囲に存在する値であればよい。
【０１７２】
正確に言えば、式（８’）におけるβｉによってＭＡＸ_αminとＭＩＮ_αmaxの値は異なる。先に述べたようにβは正確に求められないため、すべてのβｉについてＭＡＸ_αminとＭＩＮ_αmaxを計算し、その全体の中からαの上限と下限を推定すべきである。ただし、本実施の形態の場合、すべてのβｉについてのＭＡＸ_αminとＭＩＮ_αmaxとの計算は、実施しない。αの推定値の精度を高くすることよりも、計算に費やす時間を短縮することの方が重要であるためである。
【０１７３】
図９に、これらの点をプロットした様子を示す。下から順にＭＡＸ_αmin、αest、ＭＩＮ_αmaxである。αestが急速に収束していることがわかる。
【０１７４】
αestの誤差は、式（１１）で見積もることができる。
【０１７５】
｜αest−α｜＜（ＭＩＮ_αmax−ＭＡＸ_αmin）／２・・・（１１）
さて、式（１１）の右辺がどのように減少していくか解析を試みる。
【０１７６】
αmaxの最小値が更新されるのは、行きの伝送時間が前後のデータと比較して相対的に小さい時であり、αminの最大値が更新されるのは、帰りの伝送時間が前後のデータと比較して相対的に大きい時である。
【０１７７】
ここで、行きの伝送時間も帰りの伝送時間も常に一定であると仮定する。この時、式（１１）の右辺はもっとも早いペースで減少していくであろう。
【０１７８】
この時の式（１１）の右辺は、式（６）より、式（１２）のように見積もれる。
【０１７９】
ＲＴＴｍｉｎ／ＮＣ１／２・・・（１２）
ここで、ラウンドトリップ時間（Ｃ２−Ｃ１）の現在までの最小をＲＴＴｍｉｎとする。ＲＴＴｍｉｎは固定値とする。
【０１８０】
なお、式（１２）は、下記の過程を経て導かれる。
【０１８１】
αmin＝（Ｓ１−β）／（Ｃ２−Ｃ０）
αmax＝（Ｓ１−β）／（Ｃ１−Ｃ０）
αmax−αmin＝（Ｓ１−β）×（Ｃ２−Ｃ１）／（Ｃ２−Ｃ０）／（Ｃ１−Ｃ０）
すなわち、αmaxは、少なくとも測定パケットのサーバー１３０における受信タイミング、および通信Ｉ／Ｆ１０３の送信部が測定パケットを送信したタイミングに基いて、ＣＰＵ１０１により算出される値である。αminは、少なくとも返信パケットが表わす受信タイミング、およびクライアント１００における返信パケットの受信タイミングに基いて、ＣＰＵ１０１により算出される値である。
【０１８２】
ここで、（Ｓ１−β）〜（Ｃ２−Ｃ０）（「〜」は、だいたい同じ値であることを表わす）として、（αmax−αmin）〜（Ｃ２−Ｃ１）／（Ｃ１−Ｃ０）としている。（正確ではないが、見積もりとして使える。）
式（１２）から、ネットワーク１２０の最小ラウンドトリップ時間が２倍になれば、αestの誤差は２倍になる、と言える。（ＲＴＴｍｉｎに比例するため）
また、αestの誤差を１０進で１桁精度を上げるためには、１０倍の測定時間が必要である、と言える。（ＮＣ１に反比例するため）
なお、１０進で１桁精度を上げるためには、αestを１／１０にしなければならない。ラウンドトリップ時間（Ｃ２−Ｃ１）が十分安定であると仮定すれば、αestはＣ１−Ｃ０に反比例する。よって、測定時間（Ｃ１−Ｃ０）が１０倍にならなければならない。
【０１８３】
図１０に、理想的なネットワーク環境（行きの伝送時間と、帰りの伝送時間が常に一定）におけるシミュレーションを実施した結果を示す。
【０１８４】
ネットワーク１２０の最小ラウンドトリップ時間が２２２μ秒の時、αestの誤差が１０−６未満（１秒間に１μｓのずれ）となるまで、１．８分かかることがわかる。
【０１８５】
実際には、伝送時間にはばらつきがあるので、このようなシミュレーション通りにはならないかもしれない。
【０１８６】
しかし、最小ラウンドトリップ時間に十分近いラウンドトリップ時間を持つパケットが、ある程度の頻度で発生すれば、αestの誤差は上記のシミュレーションの結果と同様のペースで減少していくはずである。
【０１８７】
実際のネットワーク環境では、最小に十分近いラウンドトリップ時間を持つパケットが、ある程度の頻度で発生するので、αestの誤差はほぼ上記のペースで減少していくと考えてよい。
【０１８８】
αestの目標誤差をＷ、最小ラウンドトリップ時間をＲＴＴｍｉｎとすると、目標誤差に到達するまでの所要時間Ｔは式（１３）で見積もることができる。
【０１８９】
Ｔ＝ＲＴＴｍｉｎ／（２×Ｗ）・・・（１３）
ただし、
Ｗは、αestの目標誤差、すなわち、Ｗ＝｜αest−α｜である。
【０１９０】
この式は、次の過程を経て導かれる。
【０１９１】
すなわち、式（１１）と式（１２）より、
Ｗ＜ＲＴＴｍｉｎ／（Ｃ１−Ｃ０）／２
Ｃ１−Ｃ０は、測定時間（Ｔ）であるので、式（１３）のように見積もることができる。
【０１９２】
次に、与えられた許容ジッタ量を満足して伝送するためには、どのようにクライアント１００側のタイミングを補正していけばよいかを述べる。
【０１９３】
たとえば、与えられた許容ジッタ量を３０μｓとすると、αestの誤差が１０−６未満となるまで待ち、３０秒未満に１回の割合でタイミングの補正値を更新する、というようにすればよい。
【０１９４】
αestの誤差を１０−６とすると、タイミングの補正値は１秒間に１μｓの割合でずれが生じる可能性がある。従って、次の３０秒後までには補正値を更新しなければならない。
【０１９５】
αestの誤差が１０−７未満となるまで待てば、次の３００秒後までに補正値を更新すれば良い。
【０１９６】
つまり、１）αestの目標誤差をどこに設定するか、２）その後どれだけの間隔でタイミングの補正値を更新し続ける必要があるか、の２点を考える必要がある。
【０１９７】
本発明の実施例では、補正する間隔が平均して１０秒程度になるようにαestの目標誤差を調整する。
【０１９８】
たとえば、与えられた許容ジッタ量を３０μｓとすると、（１秒間に３μｓのずれが発生する）３×１０−６未満となるようにαestの目標誤差を設定する。
【０１９９】
図１１にタイミングの補正方法の概念図を示す。図１１において、一点鎖線はサーバー１３０側のタイミングを表わす。粗い破線は、クライアント１００側のタイミングを表わす。細かい破線は、クライアント１００側の補正前のタイミングを表わす。
【０２００】
まず、クロック進み合わせプロトコルにしたがい通信した後、サーバー１３０側とクライアント１００側とのクロック周波数比αが目標とする誤差以下になるまでの、初期の待ち時間が必要である。
【０２０１】
この初期の待ち時間は、式（１３）で示したように、最小ラウンドトリップ時間と、αestの目標誤差とによって変化する。
【０２０２】
時刻カウンタ部１０６および時刻補正部１０７は、初期の待ち時間が経過して、クロック周波数比が目標とする誤差以下になった時の、クライアント１００側のタイミング候補を基点とし、クロック周波数比の推定値αestに基づいた調整をして、自律的にタイミングを刻む。
【０２０３】
図１１の黒丸印で示した点が、クライアント１００側のタイミング候補である。
【０２０４】
タイミング候補とは、ある時点におけるサーバー１３０側のタイミングの推定値である。クライアント１００は、黒丸印で示した点において、クライアント１００側のタイミングをサーバー１３０側のタイミングの推定値に合わせる。
【０２０５】
タイミング候補をどのように推定するかは難しい問題となる。片方向の伝送時間がわからない限り、βを正確に求めることはできない。しかし、アプリケーションによってはβを正確に求める必要もないことに注意されたい。
【０２０６】
本発明の目的はクロックの進み方を合わせることであって、２点間でタイミングを正確に一致させることではない。ネットワークの行きと帰りで異なる伝送時間を持つ場合においては、βは正しい値ではない可能性があるが、本発明の目的のためには、それでもかまわない。
【０２０７】
αestとβ、Ｃ０が求まれば、式（１）において、任意の時点でのクライアント１００側のタイミング候補が得られる。
【０２０８】
現在のタイミングより少しだけ未来のタイミングをＣ＝Ｃｍとすると、
Ｆ（Ｃｍ）＝αest×（Ｃｍ−Ｃ０）＋β  ・・・（１７）
式（１７）のＦ（Ｃｍ）がＣ＝Ｃｍ時点でのクライアント１００側のタイミング候補である。
【０２０９】
クライアント１００側のタイミングがＣｍとなった時点で、Ｆ（Ｃｍ）に補正し、その後はクライアント１００側のタイミングの進み方をサーバー１３０とクライアント１００のクロック周波数比αestによって補正しながらクライアント１００側のタイミングを生成する。
【０２１０】
クロック進み合わせプロトコルの結果を基にβ、Ｃ０、αestを求めて補正回路に書き込みする一連の処理を、必要な時間間隔で繰り返す。
【０２１１】
図１２にタイミングの補正回路を説明したブロック図を示す。
【０２１２】
これは、図１の時刻カウンタ部１０６と時刻補正部１０７と出力タイミング決定部１０８と、レジスタ群１１１とで構成される。
【０２１３】
また、図１３に補正回路のレジスタ群１１１を示す。図１３において、「ＴＣ」は補正前のタイミングカウンタ（ビット数は４０ビットとする）を表わす。「ＧＯＡＬ＿ＴＣ」は目標とするタイミングのカウンタ（ビット数は４０ビットとする）を表わす。「ＣＡＮＤＩＤＡＴＥ＿ＴＣ」は、タイミングカウンタ候補（ビット数は４０ビットとする）を表わす。なお、本実施例の場合、補正前のタイミングカウンタ「ＴＣ」の値が「ＧＯＡＬ＿ＴＣ」の値に等しくなった時、「ＣＡＮＤＩＤＡＴＥ＿ＴＣ」と後述する｛Ｐ，ＮＵＭ，ＤＥＮ｝をロードする。「Ｐ」は「ＰＡＣＥ」の略である。「Ｐ」はカウンタの補正ペースを表わす。本実施例において、「Ｐ」の値が「０」の場合、カウンタは早くカウントするように補正される。「Ｐ」の値が「１」の場合、カウンタは遅くカウントするように補正される。「ＮＵＭ」は「ＮＵＭＥＲＡＴＯＲ」の略である。「ＮＵＭ」は、クロック周波数比から「１」を減算した値をさらに有理化した値の、分子を表わす。「ＤＥＮ」は「ＤＥＮＯＭＩＮＡＴＯＲ」の略である。「ＤＥＮ」は、クロック周波数比から「１」を減算した値をさらに有理化した値の、分母を表わす。「ＡＤＪＵＳＴＥＤ＿ＴＣ」は補正後のタイミングカウンタ（ビット数は４０ビットとする）を表わす。「Ｅ」は「ＥＮＡＢＬＥ」の略である。「Ｅ」は補正回路を有効にするか否かのフラグの値を表わす。本実施例において、「Ｅ」の値が「０」の場合、補正回路は無効とされる。「Ｅ」の値が「１」の場合、補正回路は有効とされる。「Ｌ」は「ＬＯＡＤ  ＲＥＱＵＥＳＴ」の略である。「Ｌ」はソフトウェアの処理の一部として、「Ｐ」、「ＮＵＭ」、および「ＤＥＮ」、または「ＣＡＮＤＩＤＡＴＥ＿ＴＣ」をロードすることを表わす。
【０２１４】
ＣＰＵ１０１は、レジスタ群１１１からレジスタの値をリードまたはライトできる。補正前のタイミング（TC）と補正後のタイミング (ADJUSTED_TC)は、リードだけ可能である。
【０２１５】
補正回路が有効であるか無効であるかを決定するビット（ENABLE）がある。ENABLE=1の時の補正回路が有効となる。補正回路が無効となっている間は、補正後のタイミング(ADJUSTED_TC)は常に補正前のタイミング（TC）と同じ値になるものとする。
【０２１６】
タイミングの検出とその補正はハードウェアで行い、補正回路の制御（レジスタに設定）はクライアント１００のＣＰＵ１０１がソフトウェアを実行することにより行なう。
【０２１７】
図１２において、時刻カウンタ部１０６は、２７ＭＨｚクロックを基に、３クロックサイクルごとに１カウントアップして、補正前のタイミング（TC）を生成する。
【０２１８】
時刻補正部１０７は、補正前のタイミング（TC）とレジスタ群１１１に設定されている種々の値とを基に、補正後のタイミング（ADJUSTED_TC）を検出する。
【０２１９】
ソフトウェアは、補正前のタイミング（TC）をレジスタ群１１１からリードして、その補正前のタイミング（TC）から少しだけ未来のタイミングを目標タイミング（GOAL_TC）として設定する。少しだけ未来のタイミングというのは、ソフトウェアによる計算とレジスタに書き込むまでの時間を考慮して決める。例としては、目標タイミング（GOAL_TC）は補正前のタイミング（TC）から１秒程度後のタイミングでよい。
【０２２０】
ソフトウェアを実行するＣＰＵ１０１は、補正前のタイミング（TC）が進んでいって、先に設定された目標タイミング（GOAL_TC）と等しくなった時の、タイミング候補（CANDIDATE_TC）を式（１７）から計算する。
【０２２１】
また、ソフトウェアを実行するＣＰＵ１０１は、クロック周波数比の推定値αestより、ペース（PACE）と、クロックパルスの周波数比αestから１を引いた値を有理数化したときの分子（NUMERATOR）と分母（DENOMINATOR）を計算する。ペース（PACE）は、クライアント１００のクロックの進み方を早くするか、遅くするかを決定する１ビットのレジスタである。このために、まずＣＰＵ１０１は、クロックパルスの周波数比が１より大きいか否かを判断する。
【０２２２】
本実施例の場合、αest＞１ならばPACE＝0とする。αest＜１ならばPACE＝1とする。
【０２２３】
αestが１を超えれば、クライアント１００側のタイミングの進みがサーバー１３０側のタイミングの進みと比べて遅い、ということである。従って、クライアント１００側のタイミングのペースを早める必要がある。クロックの進み方を早くする場合、PACE=0とする。
【０２２４】
αestが１未満ならば、クライアント１００側のタイミングの進みがサーバー１３０側のタイミングの進みと比べて早い、ということである。従って、クライアント１００側のタイミングのペースを遅くする必要がある。クロックの進み方を遅くする場合、PACE=1とする。
【０２２５】
補正のタイミングは、以下の方法でクロック周波数比αから算出される有理数（NUMERATOR / DENOMINATOR）によって決定される。
【０２２６】
この有理数は、クロック周波数比から１を引いて有理化した値である。ＣＰＵ１０１は、ソフトウェアの制御により、クロック周波数比を浮動小数点で求めているが、ＣＰＵ１０１は、これをハードウェアで処理しやすいように有理化する。
【０２２７】
たとえば、α=1.00000749255とすると、式（１８）のようにする。
【０２２８】
RATIO=α-1=0.00000749255=718/95828523・・・（１８）
すなわち、
α-1＝0.00000749255を連分数展開すると、｛133465, 1, 10, 21, 1, 2, ...｝となる。
【０２２９】
連分数展開を有理数に変換して、1/(133465+1/(1+1/(10+1/(21+1/(1+1/2)))))=718/95828523を得る。
【０２３０】
本実施例では、後述するハードウェアの仕様により、
PACE=0
NUMERATOR=718
DENOMINATOR=(95828523+718)/3=31943080
と設定する。
【０２３１】
また、α=0.9999528011とすると、式（１９）のようにする。
【０２３２】
RATIO=α-1=-0.0000471989=-8725/184856003・・・（１９）
すなわち、
α＝0.9999528011を連分数展開すると、{21186, 1, 14, 3, 1, 17, 8,...}となる。
【０２３３】
連分数展開を有理数に変換して、1/(21186+1/(1+1/(14+1/(3+1/(1+1/(17+1/8))))))=8725/184856003を得る。
【０２３４】
本実施例では、後述するハードウェアの仕様により、
PACE=1
NUMERATOR=8725
DENOMINATOR=(184856003-8725)/3=61615759
と設定する。
【０２３５】
浮動小数点を有理数に変換する方法は、3.14=314/100のように分母を10のべき乗にして単純に処理しても良いが、より精度良く行なうために連分数展開を使うのが良い。
【０２３６】
連分数展開した最初の数項を取り出して有理数に変換する。所望の精度以下となるまで、かつ、ハードウェアのビット数を超えないように、最初の数項を取り出して有理数に変換する。
【０２３７】
たとえば、円周率は{3, 7, 15, 1, 292, 1,...}のように連分数展開されるので、最初の数項を取り出して有理数にすると式（２０）のようになる。
【０２３８】
3+1/7=22/7
3+1/(7+1/15)=333/106
3+1/(7+1/(15+1/1))=355/113
3+1/(7+1/(15+1/(1+1/292)))=103993/33102
・・・式（２０）
ハードウェアに設定する分母と分子は、その設計によってあらかじめ上限が決まっている。本実施例では、分母を３２ビット、分子を３１ビットとしている。つまり、分母の上限は２３２−１、分子の上限は２３１−１となる。ハードウェアのビット数を超えない範囲で、かつ、元の浮動小数点に最も近い有理数とするために、連分数展開を用いるのが良い。
【０２３９】
時刻補正部１０７は、ＰＷＭ（Ｐｕｌｓｅ  Ｗｉｄｔｈ  Ｍｏｄｕｌａｔｉｏｎ）の考え方を使う。
【０２４０】
補正回路にPWM_COUNTという内部カウンタを用意し、リセットしようとするときは、この内部カウンタの値が「０」にクリアされる。その上で、３クロックサイクル（このサイクルは、発振器１０５で刻まれるクロックにより表わされるサイクルである）ごとにNUMERATORの値が加算され、PWM_COUNTの値がDENOMINATORの値を超えれば、PWM_COUNTの値からDENOMINATORの値が引かれる、という処理が行われる。これにより、時刻補正部１０７は、ＣＰＵ１０１が有理化したクロックパルスの周波数比の分母および分子に一意に対応するタイミングに、タイミングを補正することとなる。
【０２４１】
PWM_COUNTの値 がDENOMINATORの値を超えたタイミングで、補正後のタイミング（ADJUSTED_TC）のカウントアップ期間を調整する。
【０２４２】
図１４に、タイミングを早める場合の補正回路の動作を示す。この図では、図を説明しやすくするために簡単化してNUMERATOR=2、DENOMINATOR=9としているが実際のシステムではこの値になるとは限らない。補正前のタイミング（TC）がGOAL_TCに等しくなった時、補正後のタイミング（ADJUSTED_TC）にタイミング候補（CANDIDATE_TC）がロードされる。PACE=0, NUMERATOR=2, DENOMINATOR=9の場合、３クロックサイクルごとにPWM_COUNTの値にNUMERATORの値が加算されていく。これにより、PWM_COUNTの値は、「０」、「２」、「４」、「６」、「８」... と変化する。PWM_COUNTの値がDENOMINATORの値を超えれば、タイミングのカウンタアップ期間を補正する。PACE=0の場合は、２クロックサイクルごとにPWM_COUNTの値にNUMERATORの値が加算されていくようにする。
【０２４３】
図１５に、タイミングを遅くする場合の補正回路の動作を示す。PACE=1の場合は、４クロックサイクルごとにPWM_COUNTの値にNUMERATORの値が加算されていくようにする。
【０２４４】
すなわち、
図１４と図１５との違いは、CNTの値が0と1との間で変化する（PACE=0の場合）か、CNTの値が「0」、「1」、「2」、「3」の順に変化する（PACE=1の場合）か、の違いである。
【０２４５】
図１４から、２７クロックサイクルの間に補正前のタイミング（TC）が９だけ増加しているのに対し、２５クロックサイクルの間に補正後のタイミング（ADJUSTED_TC）が９だけ増加している、ことがわかる。同じ期間で見ると、補正前のタイミング（TC）の値が「２５」増加する間に、補正後のタイミング（ADJUSTED_TC）の値は「２７」増加する。つまり、α＝２７／２５＝１．０８で補正されていることになる。
【０２４６】
αが１以上で、α−１を有理数化した値がN/Dとするとき、NUMERATOR=N, DENOMINATOR=(D+N)/3 と設定することとする。
【０２４７】
図１５から、２７クロックサイクルでの間に補正前のタイミング（TC）が９だけ増加しているのに対し、２９クロックサイクルの間に補正後のタイミング（ADJUSTED_TC）が９だけ増加している、ことがわかる。同じ期間で見ると、補正前のタイミング（TC）の値が「２９」増加する間に、補正後のタイミング（ADJUSTED_TC）の値は「２７」増加する。つまり、α＝２７／２９＝０．９３１・・・で補正されていることになる。
【０２４８】
αが１未満で、α−１の絶対値を有理数化した値がN/Dとするとき、NUMERATOR=N, DENOMINATOR=(D-N)/3と設定することとする。
【０２４９】
ソフトウェアを実行するＣＰＵ１０１は、目標タイミング（GOAL_TC）、タイミング候補（CANDIDATE_TC）、クロック周波数比を有理数化した値（PACE, NUMERATOR, DENOMINATOR）をセットする。
【０２５０】
ソフトウェアを実行するＣＰＵ１０１は、これらの値をセットすると、LOAD REQUESTビットを１にセットする。
【０２５１】
ハードウェアは、LOAD REQUESTビットが「１」にセットされていれば、レジスタに有効なデータがあることがわかる。ハードウェアは、TC=GOAL_TCとなった時に、レジスタからデータを取り込み、LOAD REQUESTビットをクリアする（LOAD REQUESTビットの値を「０」にする）。
【０２５２】
以上の動作により、クライアント１００側のタイミングをサーバー１３０側のタイミングに合わせることができる。
【０２５３】
ソフトウェアを実行するＣＰＵ１０１は、クロック進み合わせプロトコルを通信させて、補正回路のレジスタ群１１１に適切な値を書き込む必要がある。さらに、必要な間隔でこれらを更新し続けなければならない。
【０２５４】
以下、ソフトウェアを実行するＣＰＵ１０１の動作について、詳しく説明する。
【０２５５】
図１６に、サーバー１３０側のプログラムの手順を示す。
【０２５６】
Ｓ１０１にてネットワーク１２０を初期化する。すなわち、クロック進み合わせプロトコルで用いるポートを送受信可能な状態にする。Ｓ１０２にてパケット受信待ちをする。クロック進み合わせのための測定パケットを受信するとＳ１０３にて、そのときのサーバー１３０側のタイミングＳ１を取得する。Ｓ１０４にて、Ｓ１をペイロードに付与して、クロック進み合わせのための測定パケットの送信元アドレスをあて先にして送り返す。Ｓ１０２に戻り、上記の手順を繰り返す。
【０２５７】
図１７に、クライアント１００側のプログラムのリレー概念図を示す。クライアント１００側は｛αest、β、Ｃ０｝を繰り返し計算するために、図１７で示したように時間差のリレー方式で計算する。クライアント１００側のプログラムを実行するＣＰＵ１０１は、一定時間ごとにリレー構造体を生成する。すなわち、ＣＰＵ１０１は、リレー構造体を記憶するために、メモリ１０２の任意の領域を割当てる。ＣＰＵ１０１は、リレー構造体ごとに、それぞれ独立して｛αest、β、Ｃ０｝を計算する。先頭のリレー構造体が算出した誤差が目標誤差に到達すれば、その結果を用いて補正回路のレジスタ群１１１に書き込む。
【０２５８】
各リレー構造体は矛盾が生じる（式（８）におけるすべてのβｉについてMAX_αmin > MIN_αmax となる）か、または、生存時間をあらかじめ設けておきその生存時間が経過するまで（ここでは１時間とする）存続し続ける。リレー構造体が消滅すれば、次のリレー構造体の結果を用いて補正する。
【０２５９】
リレー構造体を設けている理由は、サーバー１３０とクライアント１００のクロック周波数比が徐々に変化していき、式（１）で補正できなくなる可能性があるためである。正確には、いったん決定した｛β，Ｃ０｝をいつまでも使い続けることはできないということである。｛β，Ｃ０｝を適切な時間間隔で更新すると式（１）で補正し続けることができる。本発明では、一定時間ごとにリレー構造体を生成して、それぞれのリレー構造体で｛β，Ｃ０｝を計算する。｛β，Ｃ０｝を更新するタイミングは、以前の｛β，Ｃ０｝ではαが存在しなくなった時点（すべてのβｉについてMAX_αmin > MIN_αmaxとなる）か、または、生存時間を経過した時点である。
【０２６０】
本実施例における、クライアント１００側のプログラムのリレー構造体は、Ｃ０と、βの初期値と、現在までのαminの最大値と、現在までのαmaxの最小値と、ラウンドトリップ時間が最小となるデータの値と、次のリレー構造体のアドレスとを含む。
【０２６１】
βの初期値は、ラウンドトリップ時間がなるべく最小となるデータ｛Ｃ１ｋ，Ｓ１ｋ，Ｃ２ｋ｝を用いて、式（８）または式（８’）で計算する。βを１つだけ持たせる時は式（８）を、βを複数個持たせる時は式（８’）で計算する。
【０２６２】
図１８に、クライアント１００側のプログラムのリレー構造体のリンクリストの概念を示す。本実施例において、リンクリストは、リレー構造体が記憶されたアドレスを列記したデータである。リンクリストの末尾には「ＮＵＬＬ」を表わすデータが含まれる。リレー構造体は、同時に複数存在し、また、個数も可変であるため、リンクリストで管理するとよい。
【０２６３】
図１９に、ＣＰＵ１０１が実行する、クライアント１００側のプログラムの手順（１）を示す。
【０２６４】
Ｓ２０１にてネットワーク１２０を初期化する。すなわち、クロック進み合わせプロトコルで用いるポートを送受信可能な状態にする。Ｓ２０２にてスレッドを生成する。スレッドでは、クロック進み合わせプロトコルの送信だけを担当する。
【０２６５】
Ｓ２０３にて、クライアント１００側のタイミングＣ１を取得する。Ｓ２０４にて、Ｃ１をペイロードに付与して、サーバー１３０に対してクロック進み合わせのための測定パケットを送信する。これにより、タイミングＣ１は、サーバー１３０に測定パケットを送信したタイミングとなる。
【０２６６】
Ｓ２０５にて、１００ｍｓ待って、Ｓ２０３に戻る。ここでは、１００ｍｓの間隔で送信を繰り返しているが、時間間隔を短くしてもαestの収束が早くなるわけではない。送信をスレッドにしているのは、送信した後、必ずしも受信するとは限らないからである。ネットワーク１２０の状況によっては、パケットロストが発生することはありうる。送信した後、受信待ちで止まるような作り方では、パケットロストが発生した時にいつまでも受信せずに止まってしまう。
【０２６７】
Ｓ２０６にてクロック進み合わせのための返信パケットの受信待ちをする。この返信パケットは、Ｓ２０４にて送信した送信パケットに対する返信として送信されたパケットである。この返信パケットは、サーバー１３０における測定パケットの受信タイミングを表わす。通信Ｉ／Ｆ１０３の受信部が当該測定パケットを受信するとＳ２０７にて、そのときのクライアント１００側のタイミングＣ２を取得する。これにより、タイミングＣ２は、返信パケットを通信Ｉ／Ｆ１０３の受信部が受信したタイミングとなる。
【０２６８】
もし、サーバー１３０側とクライアント１００側の公称の基準クロック周波数が異なっていれば、Ｓ２０８にて、タイミングの基準クロック周波数を合わせる。たとえば、サーバー１３０側の基準クロック周波数が８０ＭＨｚ、クライアント１００側の基準クロック周波数が２０ＭＨｚとすると、サーバー１３０側のタイミングの進み方はクライアント１００側と比べて４倍早い、ということになる。従って、サーバー１３０側のタイミングの値を１／４倍にする、という処理を行なう。公称の基準クロック周波数が同じであれば、Ｓ２０８は省略可能である。
【０２６９】
Ｓ２０９にて、処理（１）を行なう。処理（１）では、クロック進み合わせプロトコルで得られたデータ｛Ｃ１、Ｓ１、Ｃ２｝から、｛α、β、Ｃ０｝を計算して、結果をレジスタ群１１１に書き込みする。
【０２７０】
図２０、図２１、および図２２に、ＣＰＵ１０１が実行する、クライアント１００側のプログラムの手順（２）、手順（３）を示す。プログラムの手順（２）、手順（３）は、プログラムの手順（１）における処理（１）の詳細である。
【０２７１】
Ｓ３０１にて、リレー構造体を定期的に生成して（メモリ１０２の中にリレー構造体を記憶する領域を確保して）、そのアドレスをリンクリストの最後尾に追加する。生成したリンク構造体を構成する値を定義する方法は、Ｓ３０２、Ｓ３０３、Ｓ３０４にて詳しく説明する。
【０２７２】
最初の１０秒間は、最初の１０秒間の中でラウンドトリップ時間が最小となるデータを選び、そのデータを基に式（７）、式（８）によってリレー構造体を生成して初期化する。（Ｓ３０２）
それ以降は、３０秒経過するごとに、その間の中でラウンドトリップ時間が最小となるデータを選び、そのデータを基に式（７）、式（８）によってリレー構造体を生成して初期化する。（Ｓ３０３）
リンクリストに含まれるリレー構造体の個数が、ある数以上となれば、先頭のリレー構造体を削除する。ここでは、約１時間でリレー構造体が削除されるよう１２０個とする。（Ｓ３０４）
Ｓ３０５にて、リンクリストに連鎖されている（リンクリストにアドレス（リレー構造体が記憶されたアドレスのこと）の値が含まれている）各リレー構造体について計算を行なう。
【０２７３】
Ｓ４０１にて、αmin、αmax、MAX_αmin、MIN_αmaxを計算する。計算は式（９）の通りである。リレー構造体がβを複数個持っていれば、各βについて計算する。これにより、ＣＰＵ１０１は、複数の測定パケットそれぞれの受信タイミングおよび複数の測定パケットを送信したそれぞれのタイミングに基づいて複数のαminを算出することとなる。ＣＰＵ１０１は、複数の返信パケットそれぞれが表わす受信タイミング、および複数の返信パケットそれぞれの受信タイミングに基いて複数のαmaxを算出することとなる。
【０２７４】
Ｓ４０２にて、現在のβの設定で矛盾（MAX_αmin > MIN_αmax）が生じているかどうかを調べる。矛盾が生じていれば、矛盾が生じていないβを探して、もしあればβをその値に変更する。
【０２７５】
Ｓ３０６にて、リンクリストの先頭のリレー構造体について矛盾が生じているかどうか調べる。（すべてのβにおいてMAX_αmin > MIN_αmaxとなった？）矛盾が生じていれば、Ｓ３０７にて先頭のリレー構造体を削除する。
【０２７６】
Ｓ３０８にて、条件が合致していればＳ３０９にて処理（２）を実行する。条件とは、リンクリストの先頭のリレー構造体が目標誤差に到達した事、かつ、ハードウェアによって前回の補正式がロードされた事、である。誤差は、式（１１）で求める。ここでは目標誤差を１．０×１０−５とする。
【０２７７】
目標誤差に到達していれば、Ｓ３０９にて、αestの計算と、αを有理数化した結果を補正回路のレジスタ群１１１に書き込む。
【０２７８】
Ｓ４１１にて、リンクリストの先頭のリレー構造体についてαestを計算する。すなわち、ＣＰＵ１０１は、αminおよびαmaxから、クロックパルスの周波数比（本実施例の場合、厳密には周波数比の推定値）を算出する。αestの計算は式（１０）または式（１０’）で行なう。これにより、ＣＰＵ１０１は、複数のαminの内の最大値であるＭＡＸ＿αminと、複数のαmaxの内の最小値であるＭＩＮ＿αmaxとの間の値であるクロックパルスの周波数比を算出することとなる。すなわち、ＣＰＵ１０１は、サーバー１３０に測定パケットを送信したタイミング、測定パケットに対応しかつサーバー１３０における測定パケットの受信タイミングを表わす返信パケットを通信Ｉ／Ｆ１０３の受信部が受信したタイミング、およびサーバー１３０における測定パケットの受信タイミングに基いて、自装置のクロックパルスおよびサーバー１３０のクロックパルスの周波数比を算出することとなる。さらにＣＰＵ１０１は、αestの有理数化も行なう。
【０２７９】
Ｓ４１２にて、現在のタイミングより少しだけの未来（ここでは１秒とする）におけるタイミングカウンタ候補を計算する。この計算は式（１７）で行なう。
【０２８０】
Ｓ４１３にて、以上の結果を補正回路のレジスタ群１１１に書き込む。レジスタ群１１１に書き込む値の計算は先に図１４および図１５を参照して述べた通りである。時刻補正部１０７は、レジスタ群１１１の値を読込み、時刻カウンタ部１０６が検出したタイミングを補正する。これにより、時刻補正部１０７は、ＣＰＵ１０１が算出した周波数比に基づいて、発振器１０５および時刻カウンタ部１０６が検出したタイミングを補正することとなる。このとき、時刻補正部１０７は、クロックパルスの周波数比が１より大きければ、時刻カウンタ部１０６がカウントしたクロックパルスの数を減らすことにより、タイミングを補正する。時刻補正部１０７は、クロックパルスの周波数比が１より小さければ、時刻カウンタ部１０６がカウントしたクロックパルスの数を増やすことにより、タイミングを補正する。
【０２８１】
ここでは、現在のクライアント１００にて検出されるタイミングより１秒後のタイミングを目標タイミングカウンタ（GOAL_TC）とする。
【０２８２】
ところで、タイミングカウンタ候補（CANDIDATE_TC）は、TC=GOAL_TCとなる時のサーバー１３０のタイミングを表している。補正回路は、TC=GOAL_TCとなった時に、タイミングカウンタ候補（CANDIDATE_TC）をロードするが、このとき補正後のタイミングカウンタは飛びが発生する可能性がある。タイミングカウンタの飛びが、ある程度の範囲におさまらないと、映像乱れなどの問題を引き起こす可能性がある。
【０２８３】
そこで、タイミングカウンタの飛びを少なくするためには次のようにすると良い。
【０２８４】
補正する時にCANDIDATE_TCをロードする時と、しない時に制御を分ける。そのため、LOAD REQUEST ビットを２ビットに設定する。
【０２８５】
１回目の補正の時は、クライアント１００にて検出されるタイミングとサーバー１３０にて検出されるタイミングに関連はないので、補正後のタイミングカウンタに飛びが生じるのはやむをえない。CANDIDATE_TCをロードする。
【０２８６】
２回目以降の補正の時は、現在までの補正が妥当であればCANDIDATE_TCをロードしない、妥当でなければロードする、というように処理を分ける。
【０２８７】
現在までの補正が妥当であるかどうかを式（２１）によって判断する。
【０２８８】
直近の補正前のタイミングをＣ２、Ｃ２に対応した補正後のタイミングをＡＣ２とすると、
ｐ＝（ＡＣ２−ＮＣmin）／（ＮＣmax−ＮＣmin）・・・（２１）
ここで、ＮＣmin＝MAX_αmin×（Ｃ２−Ｃ０）＋β、ＮＣmax＝MIN_αmax×（Ｃ２−Ｃ０）＋βとする。
【０２８９】
Ｃ＝Ｃ２における補正後のタイミングについて、考えられる最小の点をＮＣminとし、最大の点をＮＣmaxとしている。
【０２９０】
式（２１）によるとｐの値は、補正後のタイミングＡＣ２が最小の点に近ければ「０」付近になり、最大の点に近ければ「１」付近になる。
【０２９１】
ｐ＝０．５付近になっていれば、現在までの補正は妥当であると言える。
【０２９２】
０．２５＜＝ｐ＜＝０．７５の時は、現在までの補正が妥当であると判断し、CANDIDATE_TCをロードしない。（PACE, NUMERATOR, DENOMINATOR はロードする。）
ｐ＜０．２５の時は、現在までの補正が妥当でないと判断し、CANDIDATE_TCをロードする。ただし、タイミングカウンタの飛びは最大１０までに抑えると仮定し、CANDIDATE_TCをＦ’（Ｃｍ）＋１０に設定する。Ｆ’（Ｃｍ）は前回の補正式に基づくＣ＝Ｃｍの時のタイミングカウンタ候補である。
【０２９３】
ｐ＞０．７５の時は、現在までの補正が妥当でないと判断し、CANDIDATE_TCをロードする。ただし、タイミングカウンタの飛びは最大１０までに抑えると仮定し、CANDIDATE_TCをＦ’（Ｃｍ）−１０に設定する。Ｆ’（Ｃｍ）は前回の補正式に基づくＣ＝Ｃｍの時のタイミングカウンタ候補である。
【０２９４】
以上のようにすると、補正後のタイミングカウンタの飛びをある程度の範囲に抑えることができる。タイミングカウンタの飛びをどこまで許すかについては、別途ソフトウェアで設定できるようにパラメータ化しておくと良い。
【０２９５】
以上で、ハードウェアとソフトウェアの動作を詳しく説明し、本発明における基本的動作を説明した。すなわち、クライアント１００がサーバー１３０のタイミングの進み方に合わせるようなプロトコル（通信規約）を採用する。クライアント１００は適当な時間間隔をおいて繰り返しサーバー１３０に対してクロック進み合わせのためのパケットを送信し、サーバー１３０側のタイミングとクライアント１００側のタイミングの情報を集める。クライアント１００のタイミングをある補正式に従って補正できると仮定し、クロック進み合わせプロトコルで得られた結果を、満たすべき不等式に代入して下限の最大と上限の最小を計算すると、クロックの周波数比の上限と下限が得られる。クライアント１００は、上限と下限の中間値をクロックの周波数比として、その時の上限と下限の差を推定誤差とする。クライアント１００はクライアント１００側のタイミングの値を補正する回路（ハードウェア）を備える。この補正回路は、クライアント１００のソフトウェアによって制御される。クライアント１００のソフトウェアは、許容するジッタの量が与えられるので、ジッタ量を設定すると、クロック周波数比の誤差がどれだけの範囲に収まっていなければならないか、また、補正回路の制御をどれだけの頻度で更新しなければならないかの間隔を決定できる。それらを表示装置などに表示させることもできる。クライアント１００のソフトウェアは、クロックの周波数比の誤差が目標とする誤差に到達すれば、補正回路に対してレジスタにリード、ライトすることで制御を行なう。更新しなければならない間隔より短い間隔で繰り返し補正を行なう。クライアント１００の補正回路（ハード）は、レジスタにセットされた値を基にタイミングの進み方を早くまたは遅くすることで、クライアント１００のタイミングの進み方をサーバー１３０に合わせる。これにより、クライアント１００側のタイミングをサーバー１３０側のタイミングに合わせることができる。また、クライアント１００とサーバー１３０との間でクロック進み合わせプロトコルを走らせ、その結果を基にクライアント１００の補正回路に制御を行なうことを、繰り返し実行することにより、許容するジッタの量を満足した伝送が可能となり、また、任意の時点で許容するジッタの量を満足した伝送が可能となっているかどうかを表示装置等において明示することが可能となる。
【０２９６】
また、ソフトウェアは図１１における初期の待ち時間を認識できるので、初期の待ち時間が過ぎたときに、他のアプリケーション（たとえば映像伝送アプリケーション）に通知する手段を備えていてもよい。これにより、映像伝送アプリケーションは、初期の待ち時間中には、映像伝送を開始しないような制御をすることができる。
【０２９７】
また、初期の待ち時間が過ぎたかどうかを、ＬＥＤ（Light Emitting Diode）等において表示してもよい。これにより、ジッタの許容量を満足した伝送が可能である状態かどうかを外部で判別することができる。
【０２９８】
図１１における初期の待ち時間の間は、タイミングの補正を行なうことはできない。従って、初期の待ち時間の間に、映像伝送しなければならない時には、補正前のタイミングを出力タイミングの決定に使わざるをえない。
【０２９９】
しかし、前回の結果をフラッシュメモリ等の不揮発性メモリに記憶しておけば（クライアント１００がクロックパルスの周波数比を記憶する不揮発性メモリをさらに含んでいれば）、時刻補正部１０７は、前回の結果を使って（不揮発性メモリが記憶したクロック周波数比に基づいて）、発振器１０５および時刻カウンタ部１０６が検出したタイミングを補正することもできる。同じ相手と伝送するのであれば、前回の結果はそれなりに信用できるものである。前回の結果を不揮発メモリに記憶することで、次に起動した時の初期の待ち時間にも、タイミングを補正することができる。
【０３００】
また、先頭のリレー構造体については、クロック周波数比が目標となる精度に達していない時点でも、αestを計算してレジスタ群１１１に書き込みしてもよい。これにより、初期の待ち時間を長く待つことなく、サーバーとクライアント１００間のタイミングを一時的に合わせることができる。
【０３０１】
また、測定パケットが送信する情報の内容は特に限定されない。特にクロック進み合わせのためだけにパケットを送信する必要はない。任意の目的で通信するパケットを、上述した測定パケットとして送信してもよい。同様に、返信パケットは、サーバー１３０における測定パケットの受信タイミングを表わすパケットであれば（すなわち、パケットが表わす情報にサーバー１３０における測定パケットの受信タイミングの情報が含まれていれば）、いかなる情報を通信するためのパケットであってもよい。測定パケットおよび返信パケットが任意の目的で通信されるパケットであることにより、測定のための余計なパケットが発生せず、ネットワークの負荷を抑えることができる。
【０３０２】
また、本発明ではサーバー１３０が測定パケットを受信するとすぐに返信パケットを送信するようにしているが、サーバー１３０が返信パケットを送信するまでに若干の遅延があっても差し支えない。この場合は、サーバー１３０が測定パケットを受信した時点でのサーバー１３０側のタイミングをＳ１、サーバー１３０が返信パケットを送信した時点でのサーバー１３０側のタイミングをＳ２として、Ｓ１，Ｓ２を返信パケットの中に含めるようにすると良い。クライアント１００は、サーバー１３０で遅延した時間（Ｓ２−Ｓ１）を、上記記載のクライアント１００がサーバー１３０から返信された返信パケットを受信した時点でのクライアント１００側のタイミングＣ２から予め差引く。
【０３０３】
本発明の具体的な装置としては、送受信機が表示装置に含まれたものがある。表示装置の例として、テレビ、ホームシアター、ＨＤＤレコーダ／デジタルチューナ／ＡＶサーバとテレビとの組み合わせ、ホームシアターと無線スピーカとの組み合わせ、あるいは、ネットワーク映像伝送送受信ユニットなどの例が考えられる。
【０３０４】
なお、上記実施形態の各処理ステップは、ＣＰＵなどの演算手段が、ＲＯＭ（Read Only Memory）やＲＡＭ(Random Access Memory)などの記憶手段に記憶されたプログラムを実行し、キーボードなどの入力手段、ディスプレイなどの出力手段、あるいは、インタフェース回路などの通信手段を制御することにより実現することができる。したがって、これらの手段を有するコンピュータが、上記プログラムを記録した記録媒体を読み取り、当該プログラムを実行するだけで、本実施形態のクライアント１００の各種機能および各種処理を実現することができる。また、上記プログラムをリムーバブルな記録媒体に記録することにより、任意のコンピュータ上で上記の各種機能および各種処理を実現することができる。
【０３０５】
この記録媒体としては、マイクロコンピュータで処理を行なうために図示しないメモリ、たとえばＲＯＭのようなものがプログラムメディアであっても良いし、また、図示していないが外部記憶装置としてプログラム読取り装置が設けられ、そこに記録媒体を挿入することにより読取り可能なプログラムメディアであっても良い。
【０３０６】
また、何れの場合でも、格納されているプログラムは、マイクロプロセッサがアクセスして実行される構成であることが好ましい。さらに、プログラムを読み出し、読み出されたプログラムは、マイクロコンピュータのプログラム記憶エリアにダウンロードされて、そのプログラムが実行される方式であることが好ましい。なお、このダウンロード用のプログラムは予め本体装置に格納されているものとする。
【０３０７】
また、上記プログラムメディアとしては、本体と分離可能に構成される記録媒体であり、磁気テープやカセットテープ等のテープ系、フレキシブルディスクやハードディスク等の磁気ディスクやＣＤ／ＭＯ／ＭＤ／ＤＶＤ等のディスクのディスク系、ＩＣカード（メモリカードを含む）等のカード系、あるいはマスクＲＯＭ、ＥＰＲＯＭ（Erasable Programmable Read Only Memory）、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）、フラッシュＲＯＭ等による半導体メモリを含めた固定的にプログラムを担持する記録媒体等がある。
【０３０８】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０３０９】
【図１】本発明におけるタイミング同期システム
【図２】ジッタの説明
【図３】ジッタの吸収方法
【図４】本発明におけるクロック進み合わせプロトコルを示した図
【図５】クライアント側のタイミングとサーバー側のタイミングの関係を示した図
【図６】本発明におけるクロック進み合わせプロトコルの測定データ例
【図７】本発明におけるクロック進み合わせプロトコルの計算例
【図８】本発明におけるクロック進み合わせプロトコルのαminとαmaxをプロットした図
【図９】本発明におけるクロック進み合わせプロトコルのMAX_αminとMIN_αmaxとαestをプロットした図
【図１０】理想的なネットワーク環境におけるシミュレーション結果を示した図
【図１１】本発明におけるタイミングの補正方法を説明した概念図
【図１２】本発明における時刻補正回路を示した図
【図１３】本発明における時刻補正回路のレジスタ群を示した図
【図１４】本発明における時刻補正回路の動作を示した図（を早める場合）
【図１５】本発明における時刻補正回路の動作を示した図（を遅くする場合）
【図１６】本発明におけるサーバー側のプログラム
【図１７】本発明におけるクライアント側のプログラム（リレー概念図）
【図１８】本発明におけるクライアント側のプログラム（リレー構造体のリンクリスト）
【図１９】本発明におけるクライアント側のプログラム（１）
【図２０】本発明におけるクライアント側のプログラム（２）
【図２１】本発明におけるクライアント側のプログラム（３）
【図２２】本発明におけるクライアント側のプログラム（４）
【符号の説明】
【０３１０】
１００  クライアント、１０１，１３１  ＣＰＵ、１０２，１３２  メモリ、１０３，１３３  通信Ｉ／Ｆ、１０４，１３４  時刻制御部、１０５，１３５  発振器、１０６，１３６  時刻カウンタ部、１０７  時刻補正部、１０８  出力タイミング決定部、１０９，１３７  バッファ、１１０，１３８  映像出力Ｉ／Ｆ、１１１  レジスタ群、１２０  ネットワーク、１３０  サーバー。
【図１】
2006197399.tif 000003
【図２】
2006197399.tif 000004
【図３】
2006197399.tif 000005
【図４】
2006197399.tif 000006
【図５】
2006197399.tif 000007
【図６】
2006197399.tif 000008
【図７】
2006197399.tif 000009
【図８】
2006197399.tif 000010
【図９】
2006197399.tif 000011
【図１０】
2006197399.tif 000012
【図１１】
2006197399.tif 000013
【図１２】
2006197399.tif 000014
【図１３】
2006197399.tif 000015
【図１４】
2006197399.tif 000016
【図１５】
2006197399.tif 000017
【図１６】
2006197399.tif 000018
【図１７】
2006197399.tif 000019
【図１８】
2006197399.tif 000020
【図１９】
2006197399.tif 000021
【図２０】
2006197399.tif 000022
【図２１】
2006197399.tif 000023
【図２２】
2006197399.tif 000024