(57)【要約】【課題】装置間のクロックスキューによるジッタバッファ内部のデータ遅延を防止する通信装置を提供する。【解決手段】通信装置は、受信部と、バッファ制御部と、送信部と、推定部と、を備える。受信部は、対向装置からパケットを受信する。バッファ制御部は、バッファへの受信パケットの書き込み及び読み出しを制御する。送信部は、バッファから読み出された受信パケットを転送先装置に送信する。推定部は、受信パケットの受信時刻と受信パケットに含まれるタイムスタンプに基づき、対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定する。バッファ制御部は、クロックずれ反映値を用いてバッファから受信パケットを取り出す時刻を決定する。【選択図】図１
2020039021.tif 000002
【特許請求の範囲】
【請求項１】
対向装置からパケットを受信する、受信部と、
バッファへの受信パケットの書き込み及び読み出しを制御する、バッファ制御部と、
前記バッファから読み出された受信パケットを転送先装置に送信する、送信部と、
前記受信パケットの受信時刻と前記受信パケットに含まれるタイムスタンプに基づき、前記対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定する、推定部と、
を備え、
前記バッファ制御部は、前記クロックずれ反映値を用いて前記バッファから前記受信パケットを取り出す時刻を決定する、通信装置。
【請求項２】
前記推定部は、
前記タイムスタンプと前記受信パケットの受信時刻の回帰直線の傾きを前記クロックずれ反映値として算出する、請求項１に記載の通信装置。
【請求項３】
前記推定部は、複数のパケットがバースト受信された場合に、前記バースト受信された複数のパケットのうち最後に受信したパケット以外のバケットは、前記回帰直線の傾きの算出に不使用とする、請求項２に記載の通信装置。
【請求項４】
前記バッファ制御部は、
第１の受信パケットと前記第１の受信パケットの直前に受信した第２の受信パケットそれぞれの対応するタイムスタンプの差分に前記回帰直線の傾きを乗じて得られる時刻に基づき、前記第１の受信パケットを前記バッファから読み出す時刻を決定する、請求項３に記載の通信装置。
【請求項５】
前記推定部は、
前記対向装置と自装置のクロックずれにより蓄積する前記対向装置と自装置の時刻差を解消するための調整値を算出する、請求項１乃至４のいずれか一項に記載の通信装置。
【請求項６】
前記推定部は、
所定期間において、受信パケットが前記バッファに格納されている期間の平均値を算出し、前記算出された平均値に基づき前記調整値を算出する、請求項５に記載の通信装置。
【請求項７】
前記バッファ制御部は、
前記調整値を、前記バッファから前記受信パケットを取り出す時刻に反映する、請求項５又は６に記載の通信装置。
【請求項８】
前記バッファ制御部は、
前記調整値を前記バッファから前記受信パケットを取り出す時刻に反映してから所定の数のパケットを受信した後に再び前記調整値を前記バッファから前記受信パケットを取り出す時刻に反映する、請求項７に記載の通信装置。
【請求項９】
対向装置からパケットを受信する、受信部と、
受信パケットが書き込まれるバッファと、
前記バッファから読み出された受信パケットを転送先装置に送信する、送信部と、
を備える通信装置において、
前記受信パケットの受信時刻と前記受信パケットに含まれるタイムスタンプに基づき、前記対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定するステップと、
前記クロックずれ反映値を用いて前記バッファから前記受信パケットを取り出す時刻を決定するステップと、
を含む通信方法。
【請求項１０】
対向装置からパケットを受信する、受信部と、
受信パケットが書き込まれるバッファと、
前記バッファから読み出された受信パケットを転送先装置に送信する、送信部と、
を備える通信装置に搭載されたコンピュータに、
前記受信パケットの受信時刻と前記受信パケットに含まれるタイムスタンプに基づき、前記対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定する処理と、
前記クロックずれ反映値を用いて前記バッファから前記受信パケットを取り出す時刻を決定する処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信方法及びプログラムに関する。
【背景技術】
【０００２】
今後、ＰＯＩ（Point Of Interface）がＩＰ（Internet Protocol）化されていく。ＩＰ網では、Ｅｎｄ-Ｔｏ-Ｅｎｄでジッタを補正できることが理想的であり、事業者網間接続では網の境界にて送受信されるパケットのジッタ量が許容範囲内に抑えることが期待される。
【０００３】
特許文献１には、ジッタバッファに蓄積されているパケット数をカウントし、当該カウンタ値が所定の基準値より大きければ、ジッタバッファに蓄積されているパケットを削除する技術が開示されている。
【０００４】
特許文献２は、ルータ群を構成するルータに通信ネットワーク上を伝送されてきた音声パケットを蓄積するためのジッタバッファを設け、ルータは、当該ルータのジッタバッファに蓄積された音声パケットを基準クロック信号に同期させて出力する技術を開示する。
【０００５】
特許文献３は、モバイル網を利用した通信の場合に、基地局（ｅＮｏｄｅＢ）の仕様によってはＤｅｌａｙ  Ｐａｃｋｉｎｇによる送信がされる場合があることを開示している（例えば、特許文献３の図７参照）。
【０００６】
特許文献３には、複数のパケットがバースト的に送信される動作が記載されている。通常、複数のパケットがバースト的に送信されない場合には、図２１に示すようなパケットの送受信となる。対して、複数のパケットがバースト的に送信される場合には、図２２及び図２３に示すようなパケットの送受信となる。図２２は、２パケットバーストの送受信の一例を示し、図２３は３パケットバーストの送受信の一例を示す。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−１０１３４２号公報
【特許文献２】特開２００１−３４５８４０号公報
【特許文献３】特開２０１３−０４６２５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
【０００９】
近年、ネットワーク機能（通信装置）を仮想化する技術である、ＮＦＶ（Network Function Virtualization）の研究開発が盛んに進められている。当該ＮＦＶにより、通信キャリアのネットワークノードはかつて専用装置により提供されていたが、仮想化した汎用サーバ上に実装するニーズが多くなってきた。
【００１０】
ＮＦＶが適用されたネットワークにおいてもジッタの抑制が要求される。しかしながら、既存のジッタバッファを使用した対策では、クロックスキューにより受信速度がデキュー速度よりも遅い場合、パケットを削除するまで徐々に遅延が増えていってしまう問題やパケット削除が音声劣化につながる問題がある。
【００１１】
特許文献１に開示されたジッタ対策（ジッタバッファを利用する対策）では、クロックスキュー（クロックずれ）により受信速度がデキュー速度よりも遅い場合、パケットを削除するまで徐々に遅延が増える問題やパケット削除が音声劣化に繋がる問題がある。
【００１２】
なお、クロックスキューとは、例えば、ｐｐｍ（Parts Per Million）の単位で表現される装置内のデバイス（発信器）固有のクロック信号の精度のずれを示す。例えば、クロックの精度を±１００ｐｐｍと仮定した場合の上記問題を説明する。
【００１３】
送信装置のクロック精度が＋１００ｐｐｍ、受信装置のクロック精度が−１００ｐｐｍである場合には、送信装置より受信装置のクロックが２００ｐｐｍ早く進むことになる。従って、受信装置が、受信パケットに付与されたＲＴＰ（Real time Transport Protocol）タイムスタンプ値に従って時間間隔をあけてパケット送信すると、受信装置内のジッタバッファ内に溜め込んだデータが徐々に枯渇する。
【００１４】
一方、送信装置のクロック精度が−１００ｐｐｍ、受信装置のクロック精度が＋１００ｐｐｍである場合は、送信装置より受信装置のクロックが２００ｐｐｍ遅く進むことになる。受信装置が、受信パケットに付与されたＲＴＰタイムスタンプ値に従って時間間隔をあけてパケット送信すると、受信装置内のジッタバッファ内でデータが滞留する。
【００１５】
特許文献２に開示された技術をＮＦＶが適用されたネットワークに用いることが考えられる。しかし、網境界でジッタを補正することをＮＦＶで実現するためには、特許文献２に開示されたようなＰＯＩ網で行う専用ハードウェアを用いた外部同期が利用できない。つまり、特許文献２に開示された方式は、外部クロックを必要とする構成であり、専用のハードウェアが必要となる。そのため、特許文献２に開示された技術をＮＦＶが適用されたネットワークに用いることができない。
【００１６】
このように、特許文献２によるジッタ対策をＮＦＶで実現するためには、既存のＰＯＩ網で行っていた専用ハードウェアを用いた外部同期が利用できないため、汎用ＣＰＵで実現可能なジッタ対策（ソフトウェアにより実現可能なジッタ対策）が必要となる。
【００１７】
本発明は、装置間のクロックスキューによるジッタバッファ内部のデータ遅延を防止することに寄与する、通信装置、通信方法及びプログラムを提供することを主たる目的とする。
【課題を解決するための手段】
【００１８】
本発明乃至開示の第１の視点によれば、対向装置からパケットを受信する、受信部と、バッファへの受信パケットの書き込み及び読み出しを制御する、バッファ制御部と、前記バッファから読み出された受信パケットを転送先装置に送信する、送信部と、前記受信パケットの受信時刻と前記受信パケットに含まれるタイムスタンプに基づき、前記対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定する、推定部と、を備え、前記バッファ制御部は、前記クロックずれ反映値を用いて前記バッファから前記受信パケットを取り出す時刻を決定する、通信装置が提供される。
【００１９】
本発明乃至開示の第２の視点によれば、対向装置からパケットを受信する、受信部と、受信パケットが書き込まれるバッファと、前記バッファから読み出された受信パケットを転送先装置に送信する、送信部と、を備える通信装置において、前記受信パケットの受信時刻と前記受信パケットに含まれるタイムスタンプに基づき、前記対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定するステップと、前記クロックずれ反映値を用いて前記バッファから前記受信パケットを取り出す時刻を決定するステップと、を含む通信方法が提供される。
【００２０】
本発明乃至開示の第３の視点によれば、対向装置からパケットを受信する、受信部と、受信パケットが書き込まれるバッファと、前記バッファから読み出された受信パケットを転送先装置に送信する、送信部と、を備える通信装置に搭載されたコンピュータに、前記受信パケットの受信時刻と前記受信パケットに含まれるタイムスタンプに基づき、前記対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定する処理と、前記クロックずれ反映値を用いて前記バッファから前記受信パケットを取り出す時刻を決定する処理と、を実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００２１】
本発明乃至開示の各視点によれば、装置間のクロックスキューによるジッタバッファ内部のデータ遅延を防止することに寄与する、通信装置、通信方法及びプログラムが、提供される。
【図面の簡単な説明】
【００２２】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係る通信システムの概略構成の一例を示す図である。
【図３】第１の実施形態に係るＴｒＧＷの動作を説明するための図である。
【図４】第１の実施形態に係るＴｒＧＷの動作を説明するための図である。
【図５】第１の実施形態に係るＴｒＧＷの動作の一例を示す図である。
【図６】パケットの進み又は遅れを説明するための図である。
【図７】ＴｒＧＷによるバーストパケットの最終パケット決定動作を説明するための図である。
【図８】コネクション管理部により管理されるコネクション情報の一例を示す図である。
【図９】受信部の動作の一例を示すフローチャートである。
【図１０】受信部の受信処理の一例を示すフローチャートである。
【図１１】エンキュー部の動作の一例を示すフローチャートである。
【図１２】エンキュー部のエンキュー処理の一例を示すフローチャートである。
【図１３】デキュー部の動作の一例を示すフローチャートである。
【図１４】送信部の動作の一例を示すフローチャートである。
【図１５】推定部の動作の一例を示すフローチャートである。
【図１６】推定部によるＤＰ（Delay Packing）判定の動作の一例を示すフローチャートである。
【図１７】推定部による傾きａ１、調整量計算の動作の一例を示すフローチャートである。
【図１８】第１の実施形態に係るＴｒＧＷのハードウェア構成の一例を示す図である。
【図１９】第１の実施形態に係るＴｒＧＷの制御を説明するための図である。
【図２０】テレフォン−イベント対応用のＴＳ計算処理の一例を示すフローチャートである。
【図２１】通常パケットの送受信を説明するための図である。
【図２２】２パケットバーストの送受信の一例を示す図である。
【図２３】３パケットバーストの送受信の一例を示す図である。
【発明を実施するための形態】
【００２３】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。さらに、本願開示に示す回路図、ブロック図、内部構成図、接続図などにおいて、明示は省略するが、入力ポート及び出力ポートが各接続線の入力端及び出力端のそれぞれに存在する。入出力インターフェイスも同様である。
【００２４】
一実施形態に係る通信装置１００は、受信部１０１と、バッファ制御部１０２と、送信部１０３と、推定部１０４と、を備える（図１参照）。受信部１０１は、対向装置からパケットを受信する。バッファ制御部１０２は、バッファへの受信パケットの書き込み及び読み出しを制御する。送信部１０３は、バッファから読み出された受信パケットを転送先装置に送信する。推定部１０４は、受信パケットの受信時刻と受信パケットに含まれるタイムスタンプに基づき、対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定する。バッファ制御部１０２は、クロックずれ反映値を用いてバッファから受信パケットを取り出す時刻を決定する。
【００２５】
上記通信装置１００は、パケットの受信時刻とパケットに含まれるタイムスタンプに基づき、対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定する。ＴｒＧＷ１０は、このクロックずれが反映された値をバッファ制御に用いることで、対向装置の送信間隔に近い間隔にてジッタ補正を実現する。
【００２６】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２７】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２８】
図２は、第１の実施形態に係る通信システムの概略構成の一例を示す図である。図２を参照すると、通信システムは、ＴｒＧＷ（Translation Gateway）１０と、ＩＢＣＦ（Interconnect Border Control Function）２０と、を含んで構成される。
【００２９】
図２に示す通信システムは、ＩＰ電話に係るサービスを提供する。図２では、異なる網（ネットワーク）に属する端末３０−１と端末３０−２にＩＰ電話に係るサービスが提供される。
【００３０】
ＴｒＧＷ１０及びＩＢＣＦ２０は、異網間の接続を提供する。ＩＢＣＦ２０がシグナリング機能を提供し、ＴｒＧＷ１０はＮＡＰＴ（Network Address Port Translation）変換等を行い網間接続機能を提供する。
【００３１】
端末３０−１と端末３０−２が通信をする際には、セッション管理機能（ＣＳＣＦ；Call Session Control Function）がＳＩＰ（Session Initiation Protocol）メッセージをＩＢＣＦ２０に送信する。ＴｒＧＷ１０とＩＢＣＦ２０は、ＭＥＧＡＣＯ（Media Gateway Control Protocol）に規定されるインターフェイスにより互いに通信し、端末３０−１と端末３０−２のセッションを確立する。
【００３２】
第１の実施形態では、網間ゲートウェイであるＴｒＧＷ１０は、ＲＴＰパケットを端末３０−１から受信し、当該受信したパケットを端末３０−２に向けて転送する場合について説明する。
【００３３】
ＩＰ電話では、所定周期（例えば、８ｋＨｚ）で音声信号がサンプリングされ、複数のサンプル結果は１つのパケットにまとめられ所定間隔（例えば、２０ｍｓ）ごとに送信される。ＴｒＧＷ１０は、端末３０−１から所定の間隔ごとに送信されるＲＴＰパケットを受信し、当該所定の間隔で受信したＲＴＰパケットを端末３０−１の転送先装置である端末３０−２に転送する。その際、ＴｒＧＷ１０は、対向装置である端末３０−１から送信されるＲＴＰパケットのゆらぎ（ジッタ）を吸収し、所定間隔でＲＴＰパケットが端末３０−２に送信されるように制御する（図３参照）。
【００３４】
その際、ＴｒＧＷ１０は、対向装置である端末３０−１と自装置のクロックスキューにより内部のジッタバッファの遅延が起きないようにパケット転送を制御する。より具体的には、ＴｒＧＷ１０は、ジッタバッファのデキュー速度を、対向装置である端末３０−１から送信されるＲＴＰパケットに近づけ、所定期間経過後のタイミングにてジッタバッファ内にＲＴＰパケットが滞留する時間を調整する。即ち、ＴｒＧＷ１０は、ジッタバッファにパケットを格納してから読み出すまでの時間（デキュー速度）を、対向装置である端末３０−１のＲＴＰパケット送信間隔に近づくように、ＲＴＰパケットがジッタバッファ内に滞留する時間を制御する。
【００３５】
ＴｒＧＷ１０は、ＲＴＰパケット受信時の汎用ＣＰＵ（Central Processing Unit）の動作クロック毎に積算されるカウンタであるＴｉｍｅ  Ｓｔａｍｐ  Ｃｏｕｎｔｅｒ（以下、ＴＳＣと表記する）などの高分解能のクロックを利用してパケット受信時刻（以下、ＲＴ値と表記する）を測定する。即ち、ＴｒＧＷ１０は、自装置に内蔵された高分解能のクロック（例えば、４ＧＨｚ）の精度にてＲＴＰパケットの受信時刻（ＲＴ値）を測定する。
【００３６】
ＴｒＧＷ１０は、パケットの受信時刻ＲＴとパケットに含まれるタイムスタンプに基づき、対向装置と自装置のクロックずれが反映されたクロックずれ反映値を推定する。具体的には、ＴｒＧＷ１０は、上記測定したパケット受信時刻ＲＴと、ＲＴＰタイムスタンプ値（以下、ＴＳ値と表記する）と、の回帰直線の傾きをクロックずれ反映値として算出する。ＴｒＧＷ１０は、当該算出した傾き（クロックずれ反映値）を用いてデキュー時刻の制御を行う。具体的には、ＴｒＧＷ１０は、ジッタバッファにデータパケットをエンキューしてからデキューする間隔を「前パケットとのサイクル数差分×傾き」に設定することで、端末３０−１の送信間隔に近い間隔でのジッタ補正を実現する。
【００３７】
例えば、ＲＴＰタイムスタンプ値（ＴＳ値）とパケット受信時刻（ＲＴ値）をそれぞれＸ軸、Ｙ軸に設定すると図４に示すような直線が得られる。当該直線の傾きは、ＲＴ２−ＲＴ１）／（ＴＳ２−ＴＳ１）を計算することで求められる。ＴｒＧＷ１０は、当該傾きを求め、「前パケットとのサイクル数差分×傾き」を計算する。仮に、計算するタイミングが、図４のＴＳ２の場合であれば、前パケットとのサイクル数差分は、（ＴＳ２−ＴＳ１）相当のクロック数であり、当該クロック数に傾きａを乗算すると、（ＲＴ２−ＲＴ１）相当のクロック数が得られる。ＴｒＧＷ１０は、このクロック数（ＲＴ２−ＲＴ１）をジッタバッファのデキュー時間にする。
【００３８】
このように、ＴｒＧＷ１０は、第１の受信パケットとその直前に受信した第２の受信パケットそれぞれの対応するタイムスタンプの差分に回帰直線の傾きを乗じて得られる時刻に基づき、第１の受信パケットをジッタバッファから読み出す時刻を決定する。
【００３９】
また、ＴｒＧＷ１０は、Ｄｅｌａｙ  Ｐａｃｋｉｎｇを受信し得る状況で、Ｄｅｌａｙ  Ｐａｃｋｉｎｇ受信を判定する。ＴｒＧＷ１０は、当該判定結果により、Ｄｅｌａｙ  Ｐａｃｋｉｎｇにより遅れているパケットを上記傾きの推定に不使用とすることで、端末３０−１のパケット送信間隔を正確に推定する。つまり、ＴｒＧＷ１０は、複数のパケットがバースト受信された場合に、バースト受信された複数のパケットのうち最後に受信したパケット以外のバケットは、上記回帰直線の傾きの算出に不使用とする。ＴｒＧＷ１０は、Ｄｅｌａｙ  Ｐａｃｋｉｎｇのようなバースト受信を行う環境下において、回帰直線の傾きを推定するためのサンプルデータに遅れが発生したデータを含めないことで、対向装置（端末３０−１）の送信間隔に近い間隔でのジッタ補正を実現する。
【００４０】
初めに、上記ＴｒＧＷ１０の制御を実現するための理論的説明を行う。
【００４１】
＜デキュー速度とＴｒＧＷ１０内の遅延時間の調整＞
ＴｒＧＷ１０のデキュー速度を対向装置である端末３０−１の送信速度（送信間隔）に合わせ、ＴｒＧＷ１０内部の遅延はジッタバッファ深度設定値で動作するよう調整する仕組みを説明する。なお、バッファ深度設定値とは、揺らぎ吸収のための自装置内部の遅延時間相当のＴＳＣカウンタ値である。パケット化周期を２０ｍｓとすれば、バッファ深度設定値には２０ｍｓに相当するＴＳＣカウンタ値が設定される。さらに、３パケットのバースト送信が実施される環境を想定すれば、バッファ深度設定値には、６０ｍｓ（２０×３ｍｓ）に相当するＴＳＣカウンタ値が設定される。
【００４２】
上述のように、ＴｒＧＷ１０によるパケットの送信間隔はＴＳ値の差分値と比例するので、ＴＳ値とＲＴ値から得られる直線の傾き（係数）を導出し、ＴＳ値の差分に導出した係数（クロックずれ反映値）を乗じれば、端末３０−１と同じ送信間隔でパケットを転送できることになる。
【００４３】
ＲＴＰパケットの受信時刻ＲＴ、受信したＲＴＰパケットに付与されるＴＳ値の関係はＲＴＰセッション単位で、下記の式（１）の通りとなる。ここで、揺らぎに大きく偏りがないと仮定すれば、最小二乗推定で回帰直線の傾きを推定できる。あるいは、下記の式（２）に示すような２つのサンプル間の傾きで推定することができる。
【００４４】
［式１］
ＲＴ（ｋ）＝ａ１×ＴＳ（ｋ）＋ａ０＋揺らぎ
【００４５】
式（１）において、ＲＴ（ｋ）はｋ番目のパケット受信時刻、ＴＳ（ｋ）はｋ番目のパケットに付与されたＴＳ値、ａ１は対向端末である端末３０−１が送信するＴＳ値１クロック経過後（ＴＳ値１クロック分）の自装置での時刻である。また、ａ０は平均遅延時間やランダムに付与されるＴＳ値等の初期値からくる固定成分である。
【００４６】
［式２］
ａ１＝｛ＲＴ（ｎｅ）−ＲＴ（ｎｂ）｝／｛ＴＳ（ｎｅ）−ＴＳ（ｎｂ）｝
【００４７】
式（２）において、ｎｅは一定時間の経過後のサンプル番号、ｎｂは基準となるサンプル番号である。ここで、サンプル番号はＲＴＰシーケンス番号と等価なセッション内でユニークな、初回受信パケットに「１」が設定されるパケットの通し番号とする。
【００４８】
なお、ＲＴＰパケットに記載される（含まれる）タイムスタンプは対向装置である端末３０−１が付与する値である。一方、受信されたＲＴＰパケットの受信時刻はＴｒＧＷ１０が付与する値である。このように２つ異なる装置が付与する時刻から算出される、上記式（１）又は（２）の傾き（勾配）ａ１は、２つの装置のクロックずれを反映する値となる。
【００４９】
以下、推定結果については一定期間ごとに求めることとし、各期間における推定結果をａ１（ｇ）と示す。なお、上記推定結果に含まれるｇは世代数を示しており、ｇ＝０は推定前の値を示す。ａ１（０）は初期値であり、ＴｒＧＷ１０のクロック数（高分解能のクロック、ＴＳＣ）に換算したレートを指す。
【００５０】
なお、ＴｒＧＷ１０は、推定結果ａ１（ｇ）が初期値ａ１（０）と大きく異なる場合には、推定結果ａ１（ｇ）を初期値ａ１（０）で上書きする。具体的には、ＴｒＧＷ１０は、下記の式（３）で示される推定条件が成立する場合に、推定結果ａ１（ｇ）を採用する。
【００５１】
［式３］
｜ａ１（ｇ）-ａ１（０）｜／ａ１（０）＜α
【００５２】
式（３）において、αは正常とみなすクロック誤差範囲（例えば、０．１％）である。
【００５３】
ＴｒＧＷ１０は、内部のジッタバッファにエンキューを行う際、パケットデータ毎にデキュー予定時刻を設定する。ＴｒＧＷ１０は、ジッタバッファにエンキューされたパケットデータに関し、デキュー予定時刻に達したらパケットをジッタバッファからデキューし外部へ送信する。
【００５４】
ＴｒＧＷ１０は、直前のデキュー済パケットを用いて得られるＴＳ値差分が表すコーデック固有のサンプリング周波数分の時間を空けてデキューすることで、パケット〜パケット間の送信間隔を再現する。ＴｒＧＷ１０や端末３０−１に搭載された装置クロックには個体差があるため、初めは誤差があり、ＴｒＧＷ１０は端末３０−１のパケット送信間隔を正確に再現できない。
【００５５】
しかし、ＴｒＧＷ１０は、ＲＴＰパケットの受信情報を用い、式（１）の最小二乗推定、又は、式（２）で直線の傾きを導出し、当該傾きから得られる端末３０−１のパケット送信レート（送信間隔）をジッタバッファのデキュー間隔に反映させる。その結果、端末３０−１の送信間隔に近い間隔でのジッタ補正が実現される。
【００５６】
次に、デキュー予定時刻とＴｒＧＷ１０による送信間隔について説明する。
【００５７】
２つの装置が通信を開始した直後（ｇ＝０）ではＴｒＧＷ１０は、対向装置である端末３０−１の送信レート（送信間隔）が導出できていない。そこで、ＴｒＧＷ１０は、ジッタバッファのデキュー間隔は、ＴＳ値差分に相当する時間を自装置のクロックでカウントし送信間隔を決定する。
【００５８】
ＴｒＧＷ１０は、デキュー予定時刻ＤＱＴを下記の式（４）に従い設定する。
【００５９】
［式４］
初回受信パケット：ＤＱＴ（１）＝ＲＴ（１）＋ジッタバッファ深度設定値
２パケット目以降：
更新周期パケット：ＤＱＴ（ｎｕ（ｇ））＝｛ＴＳ（ｋ）−ＴＳ（ｋ−１）｝×ａ１（ｇ）＋ＤＱＴ（ｋ−１）＋調整量（ｇ）
非更新周期パケット以降：ＤＱＴ（ｋ）＝｛ＴＳ（ｋ）−ＴＳ（ｋ−１）｝×ａ１（ｇ）＋ＤＱＴ（ｋ−１）
【００６０】
なお、式（４）において、ｎｕ（ｇ）は推定結果ａ１（ｇ）をデキュー予定時刻計算に使用した初回サンプル番号。ｎｕ（ｇ）の初期値は１である（ｎｕ（０）＝１）。
【００６１】
式（４）によれば、初回パケット受信時には、ＴｒＧＷ１０は、最初のパケットを受信した時刻（ＲＴ（１））からジッタバッファ深度設定値（例えば、２０ｍｓ）遅らせて受信したパケットを転送先装置に転送する。
【００６２】
初回パケット受信時以外では、ＴｒＧＷ１０は、式（１）や式（２）から算出される傾きａ１と調整量（ｇ）により定まる遅延時間、パケットを遅延させて転送先装置に転送する。
【００６３】
なお、調整量（ｇ）は、装置クロックのずれ（クロックスキュー）により蓄積する２つの装置間の時刻差（時間の進み、時間の遅れ）を解消するための値である。当該進み分をＲＴＰパケットの受信ごとに調整すると揺らぎの発生要因となるので、ＴｒＧＷ１０は、世代数の更新時に限り上記調整量（ｇ）を決定する。
【００６４】
また、式（４）において、エンキュー処理中の世代更新直後にデキュー処理するパケットを「更新周期パケット」と表記し、それ以外のパケットを「非更新周期パケット」と表記する。
【００６５】
式（４）によれば、通信当初は、ＴｒＧＷ１０がＲＴＰパケットを最初に受信した時刻ＲＴ（１）からジッタバッファ深度設定値（例えば、２０ｍｓ）経過後に最初のＲＴＰパケットが転送先に送信される。その後、ＴｒＧＷ１０は、２つのＲＴＰパケットのパケット受信時刻及び当該２つのパケットに記載されたタイムスタンプ値ＴＳから算出される傾きａ１を算出する。ＴｒＧＷ１０は、当該算出したａ１に２つのパケットに記載されたタイムスタンプ値の差分を乗算することで、対向装置である端末３０−１のパケット転送間隔を把握する。ＴｒＧＷ１０は、先のデキュー予定時刻ＤＱＴ（ｋ−１）に当該得られたパケット転送間隔を反映し、対向装置と同じパケット転送間隔を実現する。
【００６６】
次に、傾きａ１の推定結果のデキュー予定時刻計算への更新について説明する。
【００６７】
ＴｒＧＷ１０は、式（１）又は（２）により傾きａ１を算出するタイミングにて、直前の傾きａ１算出から上記タイミングまでの間の遅延に関する平均値を下記の式（５）に従い計算する。つまり、ＴｒＧＷ１０は、各世代について、所定期間においてパケットがジッタバッファ２０２に格納されている期間の平均値を算出する。
【００６８】
［式５］
2020039021.tif 000003
【００６９】
式（５）において、ｎｂ（ｇ）は推定結果ａ１（ｇ）の推定に使用するデータの初回サンプル番号である。また、ｎｂ（０）＝１とする。式（５）において、ｎｅ（ｇ）はａ１（ｇ）の推定に使用するデータの最終サンプル番号、Ｎａは計算対象となるサンプル数である。なお、式（５）において、Ｄｅｌａｙ  Ｐａｃｋｉｎｇの一部パケットは、平均値算出の対象外とする。
【００７０】
また、ＴｒＧＷ１０は、｜ジッタバッファ深度−平均遅延｜が閾値よりも大きく、且つ、式（３）の条件を満たさない場合には、更新タイミング（傾きａ１を算出するタイミング）にて調整量（ｇ）を初期化する（０にする）。つまり、ＴｒＧＷ１０は、下記の式（６）に従って、調整量を更新する。
【００７１】
［式６］
｜ジッタバッファ深度−平均遅延｜＞β；調整量（ｇ＋１）＝−平均遅延（ｇ）
｜ジッタバッファ深度−平均遅延｜≦β；調整量（ｇ＋１）＝０
【００７２】
なお、式（６）において、βは閾値である。例えば、パケット化周期が２０ｍｓであればβは５ｍｓ程度とする。このように、ＴｒＧＷ１０は、式（５）により算出された平均値（平均遅延）に基づき調整値を算出する。
【００７３】
上記ＴｒＧＷ１０の動作の概略を図示すると、図５のとおりとなる。図５に示すように、ＴｒＧＷ１０は、セッション毎に対向装置から送信されてくるＲＴＰパケットの揺らぎ（ジッタ）をジッタバッファにより吸収する。その際、ＴｒＧＷ１０は、対向装置の送信レート（送信間隔）を推定し、当該推定値をジッタバッファの制御に反映する。その結果、ＴｒＧＷ１０は、対向装置と同じ送信間隔にて、転送先装置にパケットを転送することができる。
【００７４】
＜特定のパケット受信ケースでの外れ値判定＞
上述のように、基地局の仕様によっては複数のパケットがバースト的に送信される場合がある（図２２、図２３参照）。
【００７５】
ＴｒＧＷ１０が、図２２や図２３に示されるようなパケット間隔でパケットを受信した場合、揺らぎが大きく、式（１）に示す線形回帰による傾きの推定に影響する可能性がある。そこで、ＴｒＧＷ１０は、基地局での遅れが大きくないバースト受信単位における最後のパケットを傾きａ１の推定で用いる。
【００７６】
ＴｒＧＷ１０は、直前に受信したパケットと受信パケットとの受信間隔の検査を行う。ＴｒＧＷ１０は、下記の式（７）により受信間隔の検査を行う。
【００７７】
［式７］
ＤＥＬ（ｋ）＝｛ＲＴ（ｋ）−ＲＴ（ｋ−１）｝−｛ＴＳ（ｋ）−ＴＳ（ｋ−１）｝×ａ１（ｇ）
【００７８】
式（７）において受信間隔ＤＥＬ（ｋ）の値が負の値であれば、受信間隔は想定よりも短く、０であれば受信間隔は想定に一致し、正の値であれば受信間隔が想定よりも長いことを示す。ＴｒＧＷ１０は、受信間隔に対して閾値処理を施し、パケットがパケット化周期の何周期分進んでいるか又は遅れているかを判定する（図６参照）。
【００７９】
ＴｒＧＷ１０は、パケット化周期に換算して何周期分、受信パケットが進んでいるか遅れているかをＥ１（ｋ）として計算する。なお、Ｅ１（ｋ）及び後述するＥ２（ｋ）、Ｅ３（ｋ）はそれぞれ整数値である。例えば、パケット化周期が２０ｍｓ、受信間隔が４０ｍｓの場合には、２パケット化周期分進んでいるので、Ｅ１（ｋ）は２となる。
【００８０】
また、ＴｒＧＷ１０は、計算したＥ１（ｋ）を用いて、Ｅ２（ｋ）、Ｅ３（ｋ）を以下の式（８）に従い計算する。
【００８１】
［式８］
Ｅ１（ｋ）＝Ｅ１（ｋ）
Ｅ２（ｋ）＝Ｅ１（ｋ）＋Ｅ１（ｋ−１）
Ｅ３（ｋ）＝Ｅ２（ｋ）＋Ｅ１（ｋ−２）
【００８２】
なお、ＴｒＧＷ１０は、Ｅ１（ｋ）〜Ｅ３（ｋ）の計算の際、いずれかの値が「０」であれば計算を終了する。
【００８３】
図２１に示すような通常のパケット送受信では、顕著な遅れや進みが発生しないためＥ１は「０」になる。図２２に示すような２パケット毎にバースト受信する場合は、２パケット毎に通常タイミングでの受信に戻るのでＥ２は「０」になる。図２３示すような３パケット毎にバースト受信する場合は３パケット毎に通常タイミングでの受信に戻るのでＥ３は「０」になる。
【００８４】
ＴｒＧＷ１０は、Ｅ１〜Ｅ３の値を用いて、バーストパケットの最終パケットを決定する。具体的には、ＴｒＧＷ１０は、図７に示すような関係を用いて、バーストパケットの最終パケットを決定する。例えば、図７を参照すると、ＴｒＧＷ１０は、Ｅ１〜Ｅ３の計算結果が、それぞれ、「−１」、「−２」、「０」であれば、３パケット毎のバースト受信であること、及び３番目のパケットが最終パケットであることを把握できる。即ち、ＴｒＧＷ１０は、上記３変数の組み合わせを用い、Ｄｅｌａｙ  Ｐａｃｋｉｎｇのような３パケットの周期的なバースト受信の発生有無、及びバーストパケットの最終パケットを判定することができる。
【００８５】
なお、式（８）は、Ｅｉ（ｋ）＝Ｅ（ｉ−１）（ｋ）＋Ｅ１（ｋ−ｉ＋１）のように拡張できる。式（８）ではｉ＝１〜３までの３変数でパケットの周期的なバースト受信の発生有無を判定しているが、変数を増やすことでより多くのパケットによるバースト送受信を判定することもできる。
【００８６】
［装置構成］
図２を参照すると、第１の実施形態に係るＴｒＧＷ１０は、受信部２０１と、ジッタバッファ２０２と、バッファ制御部２０３と、送信部２０４と、推定部２０５と、ＴＳＣ部２０６と、コネクション管理部２０７と、を含んで構成される。さらに、バッファ制御部２０３は、エンキュー部２１１と、デキュー部２１２と、デキュー予定時刻リスト２１３を格納する記憶手段と、を含む。
【００８７】
受信部２０１は、対向装置である端末３０−１からパケットを受信する手段である。受信部２０１は、ＲＴＰパケットを受信した際のＴＳＣカウンタ値を記録し、セッション情報に合致するパケットを受信バッファに格納する。
【００８８】
ジッタバッファ２０２は、揺らぎ吸収を行うために受信パケット（パケットデータ）を一時的に格納するためのバッファである。
【００８９】
バッファ制御部２０３は、ジッタバッファ２０２への受信パケットの書き込み及び読み出しを制御する手段である。バッファ制御部２０３は、受信バッファに格納されたデータを読み出し、ジッタバッファ２０２に格納する（エンキュー部２１１によるエンキュー処理）。バッファ制御部２０３は、ジッタバッファ２０２内のデータのうちデキュー予定時刻を迎えたデータを送信バッファへ書き込む（デキュー部２１２によるデキュー処理）。その際、バッファ制御部２０３は、クロックずれ反映値を用いてジッタバッファ２０２から受信パケットを取り出す時刻（デキュー予定時刻）を決定する。また、バッファ制御部２０３は、エンキュー時には推定部２０５にデータを引き渡す（データをコピーする）。
【００９０】
デキュー予定時刻リスト２１３は、セッションＩＤ毎にデキュー予定時刻及び、パケットデータのジッタバッファ格納先が記録されたリストである。
【００９１】
送信部２０４は、ジッタバッファ２０２から読み出された受信パケットを転送先装置である端末３０−２に送信する手段である。送信部２０４は、内部に送信バッファを有し、当該送信バッファに格納されたデータをパケット化して送信する。
【００９２】
推定部２０５は、デキューしたパケット情報に基づき対向端末の送信間隔（送信レート）を定める傾きａ１や遅延調整量の計算を行い、計算結果をバッファ制御部２０３に通知する。
【００９３】
バッファ制御部２０３は、取得した計算結果（傾きａ１、遅延調整量）に基づきデキュー予定時刻を計算し、デキュー予定時刻リストに格納する。
【００９４】
ＴＳＣ部２０６は、ＴｒＧＷ１０に搭載されたＣＰＵの起動後、ＣＰＵサイクル毎に＋１される高分解能のＴＳＣ（Time Stamp Counter）カウンタである。ＴＳＣ部２０６によるカウンタ値は、受信部２０１でのパケット受信時刻の測定や、バッファ制御部２０３のデキュー処理による送信時刻の確認に使用される。なお、ＴＳＣ部２０６を実現するクロックは、少なくとも受信部２０１や送信部２０４の動作に用いられるクロック及び対向装置のパケット送受信に用いられるクロックよりも周波数（解像度）及び精度が高いものとする。
【００９５】
コネクション管理部２０７は、送信元セッション情報や転送先のセッション情報を記録したコネクション情報を管理する。図８は、コネクション管理部２０７により管理されるコネクション情報の一例を示す図である。コネクション管理部２０７は、ＩＢＣＦ２０等から取得する情報を用いて図８に示すようなコネクション情報の生成、管理を行う。
【００９６】
［動作の説明］
次に、図面を参照しつつ、第１の実施形態に係るＴｒＧＷ１０の動作を説明する。
【００９７】
図９は、受信部２０１の動作の一例を示すフローチャートである。
【００９８】
受信部２０１は、パケットを受信（ステップＳ０１）すると、受信処理を実行する（ステップＳ０２）。
【００９９】
図１０は、受信部２０１の受信処理（図９のステップＳ０２）の一例を示すフローチャートである。
【０１００】
受信部２０１は、ＴＳＣカウンタ値を参照する（ステップＳ１０１）。
【０１０１】
受信部２０１は、受信パケットに合致するコネクション情報がコネクション管理情報に含まれるか否かを確認する（ステップＳ１０２）。
【０１０２】
合致する情報がコネクション管理情報に含まれれば（ステップＳ１０２、Ｙｅｓ分岐）、受信部２０１は、コネクションＩＤ、ＴＳＣカウンタ値、パケットデータを受信バッファに格納する（ステップＳ１０３）。
【０１０３】
合致する情報がコネクション管理情報に含まれなければ（ステップＳ１０２、Ｎｏ分岐）、受信部２０１は、受信パケット（パケットデータ）を破棄する（ステップＳ１０４）。
【０１０４】
図１１は、バッファ制御部２０３に含まれるエンキュー部２１１の動作の一例を示すフローチャートである。
【０１０５】
エンキュー部２１１は、受信バッファを参照（ステップＳ１１）し、未処理のデータが存在するか否かを確認する（ステップＳ１２）。
【０１０６】
未処理のデータが存在すれば（ステップＳ１２、Ｙｅｓ分岐）、エンキュー部２１１はエンキュー処理を実行する（ステップＳ１３）。
【０１０７】
未処理のデータが存在しなければ（ステップＳ１２、Ｎｏ分岐）、エンキュー部２１１はステップＳ１１に戻る。
【０１０８】
図１２は、エンキュー部２１１のエンキュー処理（図１１のステップＳ１３）の一例を示すフローチャートである。
【０１０９】
エンキュー部２１１は、エンキュー用のサンプル番号（エンキューサンプル番号）であるｃｎｔ＿ｅｑをインクリメント（更新）する（ステップＳ２０１）。
【０１１０】
エンキュー部２１１は、更新されたエンキューサンプル番号に基づき内部ＴＳを決定する（ステップＳ２０２）。
【０１１１】
エンキュー部２１１は、当該決定された内部タイムスタンプＴＳに基づき、世代数の更新有無を判定する（ステップＳ２０３）。具体的には、エンキュー部２１１は、各世代にて最初にＲＴＰパケットを受信してから予め定めた数のＲＴＰパケットを受信したか否かにより世代の更新有無を判定する。例えば、１００パケットの受信を１世代と定めれば、エンキュー部２１１は、１つの世代で１００個のパケットを既に受信し、新たなパケット（１０１個目のパケット）を受信すると世代更新ありと判定する。
【０１１２】
世代数の更新がある場合には（ステップＳ２０３、Ｙｅｓ分岐）、エンキュー部２１１は、推定部２０５から取得する、セッションＩＤ、世代数、傾きａ１、調整量を参照する（ステップＳ２０４）。
【０１１３】
エンキュー部２１１は、傾きａ１を更新する（ステップＳ２０５）。
【０１１４】
エンキュー部２１１は、更新された傾きａ１を用いて、デキュー予定時刻ＤＱＴ（ｃｎｔ＿ｅｑ（ｉｄ））を決定する（ステップＳ２０６）。具体的には、エンキュー部２１１は、式（４）を用いてデキュー予定時刻ＤＱＴを決定する。
【０１１５】
世代数の更新がない場合には（ステップＳ２０３、Ｎｏ分岐）、エンキュー部２１１は、式（４）を用いてデキュー予定時刻ＤＱＴを決定する（ステップＳ２０７）。
【０１１６】
エンキュー部２１１は、エンキューサンプル番号（ｃｎｔ＿ｅｑ（ｉｄ））、パケットデータ、コネクション情報、パケット受信時刻ＲＴ（ｃｎｔ＿ｅｑ（ｉｄ））、内部タイムスタンプＴＳ（ｃｎｔ＿ｅｑ（ｉｄ））をジッタバッファ２０２に格納する（ステップＳ２０８）。
【０１１７】
エンキュー部２１１は、コネクションＩＤ、デキュー予定時刻ＤＱＴ（ｃｎｔ＿ｅｑ（ｉｄ））、パケットデータの格納位置をデキュー予定リストに登録する（ステップＳ２０９）。
【０１１８】
エンキュー部２１１は、エンキューするデータをジッタバッファ２０２に書き込む（ステップＳ２１０）。また、エンキュー部２１１は、エンキューするデータを推定部２０５に引き渡す。
【０１１９】
このように、ＴｒＧＷ１０は、世代数の更新があれば、傾きａ１や調整量を取得し、当該取得した傾きａ１、調整量を用いてデキュー予定時刻を決定する。つまり、ＴｒＧＷ１０は、世代が変わった際に、調整値をジッタバッファ２０２からパケットを取り出す時刻（デキュー予定時刻）に反映する。換言すれば、ＴｒＧＷ１０は、調整値をデキュー予定時刻に反映してから所定の数のパケットを受信した後（世代が更新された後）に再び調整値をデキュー予定時刻に反映する。
【０１２０】
図１３は、バッファ制御部２０３に含まれるデキュー部２１２の動作の一例を示すフローチャートである。
【０１２１】
デキュー部２１２は、ＴＳＣカウンタ値を参照する（ステップＳ３０１）。
【０１２２】
デキュー部２１２は、デキュー予定時刻リスト２１３を参照し、次にデキューする対象を決定する（ステップＳ３０２）。
【０１２３】
デキュー部２１２は、現在のＴＳＣカウンタ値がデキュー時刻（デキュー予定時刻）以降であるか否かを確認する（ステップＳ３０３）。
【０１２４】
現在のＴＳＣカウンタ値がデキュー時刻以降であれば（ステップＳ３０３、Ｙｅｓ分岐）、デキュー部２１２は、ジッタバッファ２０２からパケットデータを読み出し、当該データを送信バッファに書き込む（ステップＳ３０４）。
【０１２５】
現在のＴＳＣカウンタ値がデキュー時刻以降でなければ（ステップＳ３０３、Ｎｏ分岐）、デキュー部２１２はステップＳ３０１に戻る。
【０１２６】
デキュー部２１２は、デキュー用のサンプル番号（デキューサンプル番号）であるｃｎｔ＿ｄｑ（ｉｄ）をインクリメント（更新）する（ステップＳ３０５）。
【０１２７】
図１４は、送信部２０４の動作の一例を示すフローチャートである。
【０１２８】
送信部２０４は、送信バッファを参照（ステップＳ２１）し、未処理のデータが存在するか否かを確認する（ステップＳ２２）。
【０１２９】
未処理のデータが含まれれば（ステップＳ２２、Ｙｅｓ分岐）、送信部２０４は、当該データをパケット化する（ステップＳ２３）。
【０１３０】
未処理のデータが含まれなければ（ステップＳ２２、Ｎｏ分岐）、送信部２０４は、ステップＳ２１の処理に戻る。
【０１３１】
送信部２０４は、パケット化されたデータを送信する（ステップＳ２４）。
【０１３２】
図１５は、推定部２０５の動作の一例を示すフローチャートである。
【０１３３】
推定部２０５は、バッファ制御部２０３から傾きａ１推定用のデータパケットを受信する（ステップＳ３１）。
【０１３４】
推定部２０５は、当該データパケットが世代ｇにおける初受信のパケットか否かを判定する（ステップＳ３２）。
【０１３５】
パケットが初受信のパケットの場合（ステップＳ３２、Ｙｅｓ分岐）には、推定部２０５は、初回タイムスタンプ値ＴＳとの差分（ＴＳ（ｋ）−ＴＳ（ｎｂ（ｉｄ）））を計算する（ステップＳ３３）。
【０１３６】
パケットが初受信のパケットではない場合（ステップＳ３２、Ｎｏ分岐）には、推定部２０５は、初回タイムスタンプ値ＴＳ（ｎｂ（ｉｄ））を記憶する（ステップＳ３４）。
【０１３７】
推定部２０５は、更新周期の確認を行う（ステップＳ３５）。具体的には、推定部２０５は、ステップＳ３３にて算出した差分が閾値以上であるか否かを確認する。
【０１３８】
当該差分が閾値以上である場合（ステップＳ３５、Ｙｅｓ分岐）には、推定部２０５は、Ｄｅｌａｙ  Ｐａｃｋｉｎｇの判定を行う（ＤＰ判定；ステップＳ３６）。
【０１３９】
当該差分が閾値以上ではない場合（ステップＳ３５、Ｎｏ分岐）には、推定部２０５は、世代ｇのパケット受信時刻ＲＴ、タイムスタンプ値ＴＳ、デキュー予定時刻ＤＱＴを一時的に保存する（ステップＳ３７）。
【０１４０】
推定部２０５は、ＤＰ判定の後、傾きａ１、調整量ｇを計算する（ステップＳ３８）。
【０１４１】
その後、推定部２０５は、世代数を更新する（ステップＳ３９）。
【０１４２】
図１６は、推定部２０５によるＤＰ判定（図１５のステップＳ３６）の動作の一例を示すフローチャートである。
【０１４３】
推定部２０５は、上述の式（８）に基づき、Ｅ１〜Ｅ３を計算する（ステップＳ４０１）。
【０１４４】
推定部２０５は、計算したＥ１の値を確認する（ステップＳ４０２）。
【０１４５】
Ｅ１の値が「０」であれば、推定部２０５は、当該パケットは推定対象と判定する（ステップＳ４０５）。Ｅ１の値が「−１」であれば、推定部２０５は、ステップＳ４０３を実行する。Ｅ１の値が「０」、「−１」以外であれば、推定部２０５は、当該パケットは推定対象外と判定する（ステップＳ４０６）。
【０１４６】
推定部２０５は、計算したＥ２の値を確認する（ステップＳ４０３）。Ｅ２の値が「０」であれば、推定部２０５は、当該パケットは推定対象と判定する（ステップＳ４０５）。Ｅ２の値が「−２」であれば、推定部２０５は、ステップＳ４０４を実行する。Ｅ２の値が「０」、「−２」以外であれば、推定部２０５は、当該パケットは推定対象外と判定する（ステップＳ４０６）。
【０１４７】
推定部２０５は、計算したＥ３の値を確認する（ステップＳ４０４）。Ｅ３の値が「０」であれば、推定部２０５は、当該パケットは推定対象と判定する（ステップＳ４０５）。Ｅ３の値が「０」以外であれば、推定部２０５は、当該パケットは推定対象外と判定する（ステップＳ４０６）。
【０１４８】
図１７は、推定部２０５による傾きａ１、調整量計算（図１５のステップＳ３８）の動作の一例を示すフローチャートである。
【０１４９】
推定部２０５は、式（１）又は（２）により、傾きａ１を計算する（ステップＳ５０１）。
【０１５０】
推定部２０５は、計算された傾きａ１が式（３）の条件を満たすか否かを判定する（ａ１は所定の条件を満たすか確認；ステップＳ５０２）。
【０１５１】
当該条件を満たす場合（ステップＳ５０２、Ｙｅｓ分岐）、推定部２０５は、式（５）及び（６）に従い、調整量を計算する（ステップＳ５０３）。
【０１５２】
当該条件を満たさない場合（ステップＳ５０２、Ｎｏ分岐）、推定部２０５は、傾きａ１及び調整量ｇを初期化する（ステップＳ５０４）。具体的には、ａ１（ｇ）＝ａ１（０）、調整量ｇ＝０に設定される。
【０１５３】
推定部２０５は、傾きａ１（ｇ）、調整量（ｇ）をバッファ制御部２０３に通知する（ステップＳ５０５）。
【０１５４】
［ハードウェア構成］
図１８は、ＴｒＧＷ１０のハードウェア構成の一例を示す図である。ＴｒＧＷ１０は、図１８に例示する構成を備える。例えば、ＴｒＧＷ１０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）１１、メモリ１２、通信手段であるＮＩＣ（Network Interface Card）１３等を備える。
【０１５５】
但し、図１８に示す構成は、ＴｒＧＷ１０のハードウェア構成を限定する趣旨ではない。ＴｒＧＷ１０は、図示しないハードウェアを含んでもよい。ＴｒＧＷ１０に含まれるＣＰＵ等の数も図１８の例示に限定する趣旨ではなく、例えば、複数のＣＰＵ１１がＴｒＧＷ１０に含まれていてもよい。
【０１５６】
メモリ１２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）等である。
【０１５７】
ＴｒＧＷ１０の機能は、上述の処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ１２に格納されたプログラムをＣＰＵ１１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェア、或いはハードウェアを利用して実行されるソフトウェアにより実現できればよい。
【０１５８】
以上のように、第１の実施形態に係るＴｒＧＷ１０は、ＲＴＰパケットに付与されたＲＴＰタイムスタンプ及びＲＴＰパケット受信時のＴＳＣ（Time Stamp Counter）値から、対向装置である端末３０−１とのクロックずれをセッション毎に推定する。ＴｒＧＷ１０は、当該推定値を利用し、受信したＲＴＰパケットを転送先装置に転送する際のパケット転送の間隔を送信端末と同期させることで、クロックずれ（クロックスキュー）によるジッタバッファ２０２内部の遅延を防止する。その結果、クロックスキューにより受信速度がデキュー速度よりも遅い場合、パケットを削除するまで徐々に遅延が増えていってしまいパケット削除が音声劣化につながる、既存のジッタバッファ制御の問題が解消される。即ち、ＴｒＧＷ１０は、網同期を利用できない環境においても、対向装置のＲＴＰパケットの送信間隔に近い送信間隔及び一定の遅延時間にて転送先装置にＲＴＰパケットを転送することができる。
【０１５９】
例えば、図１９を確認すると、クロックずれにより、受信速度がデキュー速度よりも速い場合であっても遅い場合であっても、適宜行われる調整量により遅延（パケットの転送間隔）はジッタバッファ深度に収束していく。
【０１６０】
例えば、対向装置（端末３０−１）のクロック精度が−１００ｐｐｍ、ＴｒＧＷ１０のクロック精度が＋１００ｐｐｍの場合を考える。この場合、対向装置よりＴｒＧＷ１０のクロックが２００ｐｐｍ遅く進むことになる。ＴｒＧＷ１０が受信したＲＴＰパケットに付与されたＲＴＰタイムスタンプ値（ＴＳ値）に従って、ＴｒＧＷ１０が所定の時間間隔（例えば、パケット化周期の２０ｍｓ）をあけてパケット送信するとＴｒＧＷ１０内のジッタバッファ２０２内でデータが滞留する。しかし、第１の実施形態に係るＴｒＧＷ１０では、上記の例のようにクロックずれにより遅れが生じる場合であっても、当該ずれをキャンセルするようにジッタバッファ２０２の制御が行われる。
【０１６１】
上記の例では、ＴｒＧＷ１０は、２０ｍｓ×（１−２００ｐｐｍ）の時間を２０ｍｓと捉え、パケット転送を行う。その結果、上記制御を行わなければ、１００秒（＝２０ｍｓ／２００ｐｐｍ）に１パケット滞留してしまうが、ＴｒＧＷ１０は上記制御により当該パケットの滞留を解消できる。
【０１６２】
加えて、Ｄｅｌａｙ  Ｐａｃｋｉｎｇで送信される状況下でのクロックずれ推定においては、バースト受信の周期性からＤｅｌａｙ  Ｐａｃｋｉｎｇか否かを判定し、判定時にはクロックずれ推定への影響を抑えるよう、Ｄｅｌａｙが発生しているデータを推定に不使用とする。
【０１６３】
［変形例］
なお、上記実施形態にて説明した通信システムの構成及び動作は例示であって、種々の変形が可能である。例えば、通信システムは、以下のような構成又は動作であってもよい。
【０１６４】
ＴｒＧＷ１０は、音声パケット以外のジッタ吸収を行った後、ＲＴＰタイムスタンプ差分に応じ送信間隔を調整してもよい。
【０１６５】
あるいは、ＴｒＧＷ１０は、ＲＦＣ（Request for Comments）４７３３のｄｕｒａｔｉｏｎからクロックずれを推定してもよい。
【０１６６】
ＤＴＭＦ（Dual-Tone Multi-Frequency）信号を伝達するために、ＩＰ電話ではＲＦＣ４７３３に記載されたtelephone-event信号が用いられることがある。ＡＭＲ−ＮＢやＧ．７１１などの音声パケットに付与されるＲＴＰタイムスタンプ値は、パケットの先頭データの時刻を意味するが、telephone-event信号は同一のＤＴＭＦイベントの始まりの時刻を意味する。また、ＤＴＭＦの継続時間はｄｒａｔｉｏｎフィールドで表現される。
【０１６７】
通常、パケット化周期は音声パケットと同じで、且つ、ＤＴＭＦイベントの継続時間は４０ｍｓ以上となることが多く、同一ＲＴＰタイムスタンプを持ったｄｕｒａｔｉｏｎ値の異なるパケットが２０ｍｓ周期に連続送信されることがある。加えて、Ｅｖｅｎｔの最後のパケットはＥｂｉｔ＝１を設定して送信することが定められ、同一パケットを３回送信することがＲＦＣ４７３３で規定されている。
【０１６８】
上記の理由により、telephone-eventパケットの送信間隔を再現するためには、ＲＴＰタイムスタンプを参照するだけでは不十分であり、ＲＴＰタイムスタンプに換算した値をデキュー時に使用する必要がある。
【０１６９】
図２０は、テレフォン−イベント（telephone-event）対応用のＴＳ計算処理の一例を示すフローチャートである。
【０１７０】
推定部２０５は、受信パケットがテレフォン−イベントのパケットか音声パケットかを判定する（ステップＳ６０１）。
【０１７１】
音声パケットであれば、推定部２０５は、ＲＴＰタイムスタンプ値をデキュー時刻の設定に用いる内部タイムスタンプに設定する（ステップＳ６０２）。具体的には、推定部２０５は、内部ＴＳ値（ｃｎｔ＿ｅｑ）＝ＴＳ値（Ｌｃｎｔ＿ｅｑ）とする。
【０１７２】
telephone-eventであれば、推定部２０５は、Ｅｂｉｔ、ＤｕｒａｔｉｏｎやＲＴＰシーケンス番号を用いて、音声パケットと同等なＲＴＰタイムスタンプ値に換算する。具体的には、推定部２０５は、Ｅｂｉｔの値を確認する（ステップＳ６０３）。
【０１７３】
Ｅｂｉｔ＝１（最終パケット）でなければ、推定部２０５は、下記の式（９）により内部ＴＳ値を決定する（ステップＳ６０４）。
【０１７４】
［式９］
内部TS値(cnt_eq)＝TS値(cnt_eq)＋Duration(cnt_eq)−サンプリング周波数×ptime
【０１７５】
Ｅｂｉｔ＝１（最終パケット）であれば、推定部２０５は、下記の式（１０）により内部ＴＳ値を決定する（ステップＳ６０５）。
【０１７６】
［式１０］
内部TS値(cnt_eq)＝{SN(cnt_eq)-SN(cnt_eq-1)}×サンプリング周波数×ptime + 内部TS(cnt_eq-1)
【０１７７】
なお、ＡＭＲ−ＮＢ、Ｇ．７１１のサンプリング周波数は８ＫＨｚ、ｐｔｉｍｅはパケット化周期（例：２０ｍｓ）とする。
【０１７８】
このように、ＴｒＧＷ１０は、telephone-eventに係るパケットを受信した場合でも、装置間のクロックずれを推定し、対向装置の送信レート（送信間隔）でパケットを転送することができる。
【０１７９】
上記の説明により、本発明の産業上の利用可能性は明らかであるが、本発明は、低遅延でのパケット送信と揺らぎ吸収が要求される音声ＲＴＰパケット転送装置などに好適に適用可能である。例えば、異なるモバイルキャリア間を接続するＩＰ-ＰＯＩ網と自キャリア網との境界に位置するＴｒＧＷでの利用が想定される。
【０１８０】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
［付記１］
上述の第１の視点に係る通信装置のとおりである。
［付記２］
前記推定部は、
前記タイムスタンプと前記受信パケットの受信時刻の回帰直線の傾きを前記クロックずれ反映値として算出する、好ましくは付記１に記載の通信装置。
［付記３］
前記推定部は、複数のパケットがバースト受信された場合に、前記バースト受信された複数のパケットのうち最後に受信したパケット以外のバケットは、前記回帰直線の傾きの算出に不使用とする、好ましくは付記２に記載の通信装置。
［付記４］
前記バッファ制御部は、
第１の受信パケットと前記第１の受信パケットの直前に受信した第２の受信パケットそれぞれの対応するタイムスタンプの差分に前記回帰直線の傾きを乗じて得られる時刻に基づき、前記第１の受信パケットを前記バッファから読み出す時刻を決定する、好ましくは付記３に記載の通信装置。
［付記５］
前記推定部は、
前記対向装置と自装置のクロックずれにより蓄積する前記対向装置と自装置の時刻差を解消するための調整値を算出する、好ましくは付記１乃至４のいずれか一に記載の通信装置。
［付記６］
前記推定部は、
所定期間において、受信パケットが前記バッファに格納されている期間の平均値を算出し、前記算出された平均値に基づき前記調整値を算出する、好ましくは付記５に記載の通信装置。
［付記７］
前記バッファ制御部は、
前記調整値を、前記バッファから前記受信パケットを取り出す時刻に反映する、好ましくは付記５又は６に記載の通信装置。
［付記８］
前記バッファ制御部は、
前記調整値を前記バッファから前記受信パケットを取り出す時刻に反映してから所定の数のパケットを受信した後に再び前記調整値を前記バッファから前記受信パケットを取り出す時刻に反映する、好ましくは付記７に記載の通信装置。
［付記９］
前記受信パケットの受信時刻の測定に使用するクロックは、前記受信部及び前記送信部の動作に用いられるクロックよりも高周波数及び高精度である、好ましくは付記１乃至８のいずれか一に記載の通信装置。
［付記１０］
前記推定部は、
２点の前記タイムスタンプと前記受信パケットの受信時刻から前記クロックずれ反映値を算出する、好ましくは付記１に記載の通信装置。
［付記１１］
上述の第２の視点に係る通信方法のとおりである。
［付記１２］
上述の第３の視点に係るプログラムのとおりである。
なお、付記１１の形態及び付記１２の形態は、付記１の形態と同様に、付記２の形態〜付記１０の形態に展開することが可能である。
【０１８１】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択（部分的削除を含む）が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１８２】
１０  ＴｒＧＷ
１１  ＣＰＵ
１２  メモリ
１３  ＮＩＣ
２０  ＩＢＣＦ
３０−１、３０−２  端末
１００  通信装置
１０１、２０１  受信部
１０２、２０３  バッファ制御部
１０３、２０４  送信部
１０４、２０５  推定部
２０２  ジッタバッファ
２０６  ＴＳＣ部
２０７  コネクション管理部
２１１  エンキュー部
２１２  デキュー部
２１３  デキュー予定時刻リスト
【図１】
2020039021.tif 000004
【図２】
2020039021.tif 000005
【図３】
2020039021.tif 000006
【図４】
2020039021.tif 000007
【図５】
2020039021.tif 000008
【図６】
2020039021.tif 000009
【図７】
2020039021.tif 000010
【図８】
2020039021.tif 000011
【図９】
2020039021.tif 000012
【図１０】
2020039021.tif 000013
【図１１】
2020039021.tif 000014
【図１２】
2020039021.tif 000015
【図１３】
2020039021.tif 000016
【図１４】
2020039021.tif 000017
【図１５】
2020039021.tif 000018
【図１６】
2020039021.tif 000019
【図１７】
2020039021.tif 000020
【図１８】
2020039021.tif 000021
【図１９】
2020039021.tif 000022
【図２０】
2020039021.tif 000023
【図２１】
2020039021.tif 000024
【図２２】
2020039021.tif 000025
【図２３】
2020039021.tif 000026