(57)【要約】【課題】揺らぎ吸収バッファを用いて音声パケットの伝送における揺らぎを吸収するように制御する場合において、雑音の影響をできるだけ少なくすることができる音声パケットの揺らぎ吸収制御方法を提供する。【解決手段】揺らぎ吸収バッファに蓄積されている音声パケットのデータについて、音声波形周期を検出しておく。所定数の音声パケット分のデータを廃棄する際には、検出された音声波形周期の単位で廃棄を行なうことにより、音声波形の連続性を保持するようにする。出力する音声パケットがバッファになくなったときには、合成音声信号を生成するが、当該合成音声信号は、検出された音声波形周期の単位で生成することにより、音声波形の連続性を保持するようにする。【選択図】図１
2005318379.tif 000002
【特許請求の範囲】
【請求項１】
リアルタイムで再生されるべき音声信号が所定時間長分毎にパケット化されて順次に伝送されてくる音声パケットを、揺らぎ吸収バッファを通じて受信し、伝送系において発生する前記音声パケットの到着タイミングの揺らぎを、前記揺らぎ吸収バッファにより制御する方法であって、
受信開始時に、前記揺らぎ吸収バッファに、開始蓄積パケット数の音声パケットが蓄積されてから、前記揺らぎ吸収バッファからの前記音声パケットの読み出しを開始し、前記揺らぎ吸収バッファに蓄積される音声パケット数が最大蓄積パケット数を越えたときには、所定数の音声パケット分のデータを廃棄するようにする音声パケットの揺らぎ吸収制御方法において、
前記揺らぎ吸収バッファに蓄積されている音声パケットのデータについて、音声波形周期を検出しておき、前記所定数の音声パケット分のデータを廃棄する際には、前記検出された音声波形周期の単位で廃棄を行なうことにより、音声波形の連続性を保持するようにした
ことを特徴とする音声パケットの揺らぎ吸収制御方法。
【請求項２】
リアルタイムで再生されるべき音声信号が所定時間長分毎にパケット化されて順次に伝送されてくる音声パケットを、揺らぎ吸収バッファを通じて受信し、伝送系において発生する前記音声パケットの到着タイミングの揺らぎを、前記揺らぎ吸収バッファにより制御する方法であって、
受信開始時に、前記揺らぎ吸収バッファに、開始蓄積パケット数の音声パケットが蓄積されてから、前記揺らぎ吸収バッファからの前記音声パケットの読み出しを開始し、前記揺らぎ吸収バッファに蓄積される音声パケット数が前記開始蓄積パケット数よりも少なくなり、前記揺らぎ吸収バッファから前記リアルタイムで再生されるべき音声信号が読み出されなくなったときには、合成音声信号を前記リアルタイムで再生する音声信号とするようにする音声パケットの揺らぎ吸収制御方法において、
前記揺らぎ吸収バッファに蓄積されている音声パケットのデータについて、音声波形周期を検出しておき、前記合成音声信号は、前記揺らぎ吸収バッファに蓄積されている音声パケットのデータを用いて、前記検出された音声波形周期の単位で生成することにより、音声波形の連続性を保持するようにした
ことを特徴とする音声パケットの揺らぎ吸収制御方法。
【請求項３】
請求項１または請求項２に記載の音声パケットの揺らぎ吸収制御方法において、
前記伝送系で発生する前記揺らぎの量の増減に応じて前記開始蓄積パケット数および前記最大蓄積パケット数を動的に変更することにより、前記揺らぎを吸収するようにする
ことを特徴とする音声パケットの揺らぎ吸収制御方法。
【請求項４】
請求項１に記載の音声パケットの揺らぎ吸収制御方法において、
前記揺らぎ量が、そのときの前記開始蓄積パケット数より低い値で安定している場合に、前記開始蓄積パケット数および前記最大蓄積パケット数を、そのときの値よりも少ない値に変更すると共に、前記変更に伴って前記揺らぎ吸収バッファから溢れるパケット数分の音声データを、前記音声波形周期の単位で廃棄する
ことを特徴とする揺らぎ吸収制御方法。
【請求項５】
請求項１に記載の音声パケットの揺らぎ吸収制御方法において、
前記音声波形周期単位の廃棄は、Ｎ個（Ｎ≧１）の音声パケットごとに、行なうようにしたことを特徴とする揺らぎ吸収制御方法。
【請求項６】
請求項１に記載の音声パケットの揺らぎ吸収制御方法において、
前記音声波形周期単位で音声データの廃棄を行なった前後のデータのつなぎ目においては、波形合成処理を行なうことを特徴とする揺らぎ吸収制御方法。
【請求項７】
請求項２に記載の音声パケットの揺らぎ吸収制御方法において、
前記合成音声信号は、その前後のデータと波形合成処理を行なうことを特徴とする揺らぎ吸収制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えば、ＶｏＩＰ（Ｖｏｉｃｅ  ｏｖｅｒ  Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）電話システムにおける音声パケットの授受の際に適用して好適な揺らぎ吸収制御方法に関する。
【背景技術】
【０００２】
インターネットやイントラネットのようなＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ネットワークを利用して音声信号を送る技術であるＶｏＩＰを用いて電話通信を行なうようにするＶｏＩＰ電話システムが提供されている。このＶｏＩＰ電話システムは、例えば、一般のＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）用の規格であるＩＴＵ‐Ｔ勧告Ｈ.３２３が用いられて構成される。
【０００３】
この場合、通話音声信号は所定時間長分毎にパケット化されてＬＡＮ上を順次に伝送されるもので、そのためのトランスポート層のプロトコルとしてはＲＴＰ（Ｒｅａｌ−ｔｉｍｅ  Ｔｒａｎｓｐｏｒｔ  Ｐｒｏｔｏｃｏｌ）が用いられる。このＲＴＰにおいては、送信側では、ＲＴＰヘッダの中にパケットの順序番号（シーケンス番号）やタイムスタンプ（時刻情報）を付けてパケットを送信し、受信側では、前記順序番号やタイムスタンプを基に、再生の同期をとることにより、実時間動作をすることができる。
【０００４】
ところで、ＶｏＩＰ端末間での通話品質劣化の要因として、ＬＡＮからの受信ＲＴＰパケット到着時間間隔の遅延、すなわち、揺らぎが挙げられる。この揺らぎの問題については、例えば、特許文献１（特開２００４−４８６８０公報参照）にも記載されているように、従来から対策が施されており、通常、受信開始時に、所定数のパケットを揺らぎ吸収バッファに蓄積して、音声の再生を遅れさせることにより、揺らぎの吸収を行っている。
【０００５】
揺らぎ吸収バッファのバッファサイズは、開始蓄積パケット数と、最大蓄積パケット数とにより決定される。開始蓄積パケット数は、ＲＴＰパケット受信開始時に、揺らぎ吸収バッファからのパケットの読み出しを遅らせて、音声再生開始を待たせる受信パケット数である。
【０００６】
すなわち、ＲＴＰパケット受信開始時には、揺らぎ吸収バッファに、開始蓄積パケット数の受信パケットが蓄積されるまで、揺らぎ吸収バッファからパケットデータは読み出さず、揺らぎ吸収バッファに開始蓄積パケット数の受信パケットが蓄積されたときには、次の受信パケットの到来のときに、蓄積している受信パケットの先頭のパケットを読み出すようにする。
【０００７】
最大蓄積パケット数は、揺らぎ吸収バッファに蓄積可能な最大パケット数であり、音声再生の遅延の最大値に対応する。揺らぎ吸収バッファの蓄積パケット数が、この最大蓄積パケット数を越えた場合には、開始蓄積パケット数分のパケットをバッファ内に残して、それ以外の蓄積パケットを廃棄するようにする。これにより、音声再生の遅延を最大蓄積パケット数の範囲内に押さえるようにしている。
【０００８】
従来、一般的には、開始蓄積パケット数と最大蓄積パケット数の値、したがって、揺らぎ吸収バッファのバッファサイズは、使用環境に応じて設定された固定値とされるが、実際の揺らぎよりも揺らぎ吸収バッファのバッファサイズが小さすぎたり、大きすぎたりすると、次のような問題がある。
【０００９】
すなわち、発生する揺らぎに対して、揺らぎ吸収バッファのサイズが小さい場合には、揺らぎによりパケット受信間隔が遅延している間に、揺らぎ吸収バッファに蓄積されていたパケット分の音声データを再生しきってしまうため、再生音声の音切れの問題が発生する。一方、発生する揺らぎに対して、揺らぎ吸収バッファのサイズが大きすぎる場合には、必要以上に音声再生が遅延してしまう問題がある。
【００１０】
上記の特許文献１の発明は、揺らぎ吸収バッファのサイズ、すなわち、開始蓄積パケット数および最大蓄積パケット数を、伝送系で発生する揺らぎの量の増減に応じて動的に変更することにより、上記の問題を解決している。そして、この特許文献１に記載の発明による揺らぎ吸収方法においては、パケットの単位でデータを廃棄したり、無音データや、直前に受信したパケットデータを繰り返し再生したりして、揺らぎ吸収バッファにおけるパケットの蓄積量を動的に変更している。
【００１１】
図３４および図３５は、特許文献１における揺らぎ吸収バッファのサイズの変更およびパケット単位のデータ処理を説明するための図である。この例は、送信端末から送られてくるパケット単位の音声１、音声２、音声３、・・・を、受信端末で受信して、リアルタイムで再生するときの処理例である。この例は、説明の簡単のため、揺らぎ吸収バッファの開始蓄積パケット数が「０」で、最大蓄積パケット数が「１」以上である場合である。図３６は、そのときの受信端末での処理のフローチャートを示すものである。
【００１２】
図３４では、送信端末から送出された音声１、音声２のパケットデータに関しては、伝送系では揺らぎがなく、受信端末では、それらを順次に受信してリアルタイムに再生することができる（図３６のステップＳ１およびステップＳ２）。
【００１３】
しかし、送信端末から送出された音声３のパケットは、伝送系で発生した揺らぎのため受信端末への到達が遅れ、このため、受信端末では、例えば音声２から生成した１パケット分の合成信号を生成して再生する（ステップＳ３）。
【００１４】
そして、受信端末では、遅れて到着する音声３のパケットデータを受信し、この音声３を再生するが、このとき、揺らぎの発生に合わせて揺らぎ吸収バッファの開始蓄積パケット数および最大蓄積パケット数を増加させる（ステップＳ４）。つまり、揺らぎ吸収バッファのバッファ量（蓄積パケット数）を増加する。そして、次に到来する音声４のパケットデータは、揺らぎ吸収バッファの開始蓄積パケット数が増加したことにより、受信して保存し、再生はしない（ステップＳ５）。
【００１５】
次に、伝送系での揺らぎが収束して、音声５のパケットが到来したときには、受信端末では、揺らぎ収束に応じて、揺らぎ吸収バッファの開始蓄積パケット数および最大蓄積パケット数を減少させると共に、保存していた音声４のパケットは廃棄して、音声５のパケットを再生するようにする（ステップＳ６）。
【００１６】
その後の音声６および音声７のパケットデータは、伝送系での揺らぎがない状態であるので、受信端末では、それらを順次に受信してリアルタイムに再生することができる（ステップＳ７およびステップＳ８）。このときのパケット単位の音声データについての再生順序は、図３５に示すようなものとなる。
【００１７】
上記の特許文献は、次の通りである。
【特許文献１】特開２００４−４８６８０公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
上述したように、揺らぎ吸収バッファによる揺らぎ吸収制御方法においては、伝送系で発生する揺らぎに応じて、パケット単位で音声データを廃棄したり、無音データを追加したり、直前に受信したパケットデータから合成音声信号を生成して再生したりするようにしている。
【００１９】
しかしながら、パケット単位で音声データを廃棄したり、合成音声信号を生成したりしているため、パケット単位のデータの区切り位置で音声信号波形に不連続部分が生じ、音声信号の再生音においては、当該不連続部分が人間の耳には雑音として聞こえるという問題がある。
【００２０】
この発明は、以上の点にかんがみ、揺らぎ吸収バッファを用いて、音声パケットの伝送における揺らぎを吸収するように制御する場合において、雑音の影響をできるだけ少なくすることができる音声パケットの揺らぎ吸収制御方法を提供することを目的とする。
【課題を解決するための手段】
【００２１】
上記の課題を解決するために、請求項１の発明は、
リアルタイムで再生されるべき音声信号が所定時間長分毎にパケット化されて順次に伝送されてくる音声パケットを、揺らぎ吸収バッファを通じて受信し、伝送系において発生する前記音声パケットの到着タイミングの揺らぎを、前記揺らぎ吸収バッファにより制御する方法であって、
受信開始時に、前記揺らぎ吸収バッファに、開始蓄積パケット数の音声パケットが蓄積されてから、前記揺らぎ吸収バッファからの前記音声パケットの読み出しを開始し、前記揺らぎ吸収バッファに蓄積される音声パケット数が最大蓄積パケット数を越えたときには、所定数の音声パケット分のデータを廃棄するようにする音声パケットの揺らぎ吸収制御方法において、
前記揺らぎ吸収バッファに蓄積されている音声パケットのデータについて、音声波形周期を検出しておき、前記所定数の音声パケット分のデータを廃棄する際には、前記検出された音声波形周期の単位で廃棄を行なうことにより、音声波形の連続性を保持するようにした
ことを特徴とする音声パケットの揺らぎ吸収制御方法を提供する。
【００２２】
この請求項１の発明においては、揺らぎ吸収バッファに蓄積されていた音声パケットデータについて、データの廃棄が必要なときには、当該揺らぎ吸収バッファに蓄積されている音声パケットのデータについて検出された音声波形周期単位でデータが廃棄される。
【００２３】
音声波形周期単位で廃棄されるため、廃棄されたデータの前後のデータは、連続性が保たれると共に、廃棄されずに残ったパケットデータの最後の部分と、その次の音声パケットデータの先頭の部分とは、本来、連続性を保持しているデータであるので、全体として、波形的に不連続なつなぎ目が生じることは無く、雑音の発生を抑えることができる。
【００２４】
また、請求項２の発明は、
リアルタイムで再生されるべき音声信号が所定時間長分毎にパケット化されて順次に伝送されてくる音声パケットを、揺らぎ吸収バッファを通じて受信し、伝送系において発生する前記音声パケットの到着タイミングの揺らぎを、前記揺らぎ吸収バッファにより制御する方法であって、
受信開始時に、前記揺らぎ吸収バッファに、開始蓄積パケット数の音声パケットが蓄積されてから、前記揺らぎ吸収バッファからの前記音声パケットの読み出しを開始し、前記揺らぎ吸収バッファに蓄積される音声パケット数が前記開始蓄積パケット数よりも少なくなり、前記揺らぎ吸収バッファから前記リアルタイムで再生されるべき音声信号が読み出されなくなったときには、合成音声信号を前記リアルタイムで再生する音声信号とするようにする音声パケットの揺らぎ吸収制御方法において、
前記揺らぎ吸収バッファに蓄積されている音声パケットのデータについて、音声波形周期を検出しておき、前記合成音声信号は、前記揺らぎ吸収バッファに蓄積されている音声パケットのデータを用いて、前記検出された音声波形周期の単位で生成することにより、音声波形の連続性を保持するようにした
ことを特徴とする音声パケットの揺らぎ吸収制御方法を提供する。
【００２５】
また、この請求項２の発明においては、伝送系における揺らぎのために、揺らぎ吸収バッファから前記リアルタイムで再生されるべき音声信号が読み出されなくなったときには、当該揺らぎ吸収バッファに蓄積されている音声パケットのデータについて検出された音声波形周期単位で生成された合成音声信号を用いて再生するようにする。
【００２６】
合成音声信号は、音声波形周期単位で生成されるため、生成された音声波形周期単位のデータは、連続性が保たれると共に、音声波形周期単位であるため、当該合成音声信号と、その次に到来する音声パケットデータとのつなぎ目においても、音声波形周期単位とすることができるので、波形的に不連続なつなぎ目が生じることを防止することができ、雑音の発生を抑えることができる。
【発明の効果】
【００２７】
この発明によれば、音声信号の廃棄および合成は、揺らぎ吸収バッファに蓄積されている音声パケットのデータから検出された音声波形周期単位でなされるので、音声データのつなぎ目における波形の不連続性を防止して、再生音声における雑音の発生を抑えることができる。
【発明を実施するための最良の形態】
【００２８】
以下、この発明による音声パケットの揺らぎ吸収方法の実施形態を、ＶｏＩＰ電話システムにおける音声パケットの伝送に適用した場合を例にとって、図を参照しながら説明する。
【００２９】
図１は、この実施形態におけるＶｏＩＰ電話システムの全体の概要を示すブロック図である。この例のＶｏＩＰ電話システムは、ゲートキーパー１と、電話端末（Ｈ．３２３端末）２の複数個と、ＬＡＮ３と、ＶｏＩＰゲートウエイ４とによって構成される。
【００３０】
電話端末２は、コンピュータの機能を備えると共に、ハンドセット２Ｈを備えている。そして、複数個の電話端末２のそれぞれは、ＩＰネットワークを構成するＬＡＮ３に接続され、このＬＡＮ３を通じてゲートキーパー１に接続されている。
【００３１】
ＶｏＩＰゲートウエイ４は、複数回線分の電話回線６を介して、電話網５と接続されると共に、ＬＡＮ３に接続される。電話回線６は、例えばＩＳＤＮ（Ｉｎｔｅｇｒａｔｅｄ  Ｓｅｒｖｉｃｅｓ  Ｄｉｇｉｔａｌ  Ｎｅｔｗｏｒｋ）回線、専用回線などを含む。このゲートウエイ４は、電話網５とＩＰネットワークとを接続するための機能を備える中継管理装置の役割を果たすもので、連続音声信号とＩＰ音声パケットの相互変換や、ＩＰ音声パケットのゲートキーパー１とのやり取り、さらに、電話番号とＩＰアドレスとの相互変換を行なう。
【００３２】
この場合、ＬＡＮ３は、ＩＴＵ−Ｔ勧告Ｈ．３２３の規格によるＩＰネットワークの構成とされている。
【００３３】
ゲートキーパー１は、ＩＴＵ−Ｔ勧告Ｈ．３２３のシステム構成の中で中心的な管理機能を担当するもので、例えばパーソナルコンピュータで構成される。複数の電話端末２のそれぞれは、ＬＡＮ３に接続されたときに、ゲートキーパー１に登録される。
【００３４】
ゲートキーパー１は、システム内のゲートウエイ４や複数の電話端末２の交換管理、帯域幅の割り当て、電話番号とＩＰアドレスの対応付けなどを行ない、これに登録された複数個の電話端末による複数の電話回線６を利用した電話通信を管理する機能を有する交換管理装置の役割を果たす。
【００３５】
［ゲートキーパー１のハードウエア構成例］
この実施の形態のシステムにおけるゲートキーパー１のハードウエア構成例を図２に示す。この実施の形態のゲートキーパー１は、例えばパーソナルコンピュータにより構成されるもので、ＣＰＵ１１０に対して、システムバス１１１を介してＲＯＭ１１２と、ＲＡＭ１１３と、ＬＡＮインターフェイス１１４と、パケット処理部１１５と、ネットワーク管理メモリ１１６とが接続されている。
【００３６】
ＲＯＭ１１２には、電話番号情報とＩＰアドレスとの変換の処理プログラムなど、ゲートキーパー１が実行する処理プログラムが記憶されている。ＲＡＭ１１３は、主としてＲＯＭ１１２のプログラムがＣＰＵ１１０によって実行される際にワークエリアとして使用される。
【００３７】
また、ＬＡＮインターフェイス１１４は、ＬＡＮ３を通じて送られてくるパケット化データを取り込み、また、ＬＡＮ３にパケット化データを送出するための機能を備える。
【００３８】
パケット処理部１１５は、ＬＡＮインターフェイス１１４により取り込んだパケットが、制御データのパケットであった場合には、その制御データを解読するために、受信したパケットを分解し、また、送信する制御データのパケット化データを生成する機能を有する。
【００３９】
なお、音声データのパケットの場合には、一般的には、ゲートキーパー１を介さずに、ゲートウエイ４と電話端末２との間でやり取りする。ただし、ゲートキーパー１を介して音声データのパケットの転送を行なう場合もあり、その場合には、ゲートキーパー１は、ゲートウエイ４からのパケットは電話端末２に宛てて、電話端末２からのパケットはゲートウエイ４または他の電話端末２に宛てて、その音声パケットを転送するようにする。
【００４０】
そして、パケット処理部１１５は、パケット化データを分解／生成したり、転送処理のために一時保存したりするためのバッファメモリを備える。
【００４１】
ネットワーク管理メモリ１１６は、ネットワーク内に存在するゲートウエイ４や複数の電話端末２の登録情報やそれらのＩＰアドレスおよび、電話端末２のＩＰアドレスと電話番号との対応などの情報を記憶している。ＣＰＵ１１０は、それらの情報を用いて、パケットの行き先のＩＰアドレスを決定したり、受信先のＩＰアドレスを判別したりする。
【００４２】
［電話端末２のハードウエア構成例］
この実施形態のシステムにおける電話端末２は、図３に示すようなハードウエア構成例を示すものである。この実施形態の電話端末２は、端末本体２００と、ハンドセット２Ｈとからなる。ハンドセット２Ｈは、図示を省略したが、送話器を構成するマイクロホンと、送話アンプと、受話器を構成するスピーカと、受話アンプとを備えている。
【００４３】
端末本体２００は、コンピュータにより構成されており、ＣＰＵ２１０に対して、システムバス２１１を介してＲＯＭ２１２と、ＲＡＭ２１３と、ディスプレイコントローラ２１４と、操作入力インターフェイス（図ではインターフェイスはＩ／Ｆと記載する。以下同じ）２１６と、ＬＡＮインターフェイス２１８と、パケット分解／生成部２１９と、音声データ入出力インターフェイス２２０と、揺らぎ吸収バッファを構成するＲＴＰ受信バッファ２２１と、ＲＴＰ送信バッファ２２２とが接続されている。
【００４４】
さらに、システムバス２１１には、受話音声データや送話音声データについての音声波形周期を抽出演算する音声波形周期演算部２２３と、音声データ合成処理部２２４と、音声データ廃棄処理部２２５とが接続されている。
【００４５】
ディスプレイコントローラ２１４には、ディスプレイ２１５が接続されており、このディスプレイ２１５の表示画面には、ＣＰＵ２１０の制御にしたがった表示が行われる。
【００４６】
また、操作入力インターフェイス２１６には、テンキー、カーソルキー、その他の操作キーを含む操作入力部２１７が接続されている。ＣＰＵ２１０は、操作入力インターフェイス２１６を介して操作入力部２１７を通じて使用者がいずれの入力キーを操作したかを認識し、その認識結果に基づいて、キー入力操作に応じた処理をＲＯＭ２１２のプログラムに従って実行する。
【００４７】
ＲＯＭ２１２には、電話端末２をゲートキーパー１に登録する際の処理シーケンスを実行するためのプログラムや揺らぎ吸収バッファを構成するＲＴＰ受信バッファ２２１のバッファサイズを、ＬＡＮ３上で実際に発生する揺らぎに動的に対応して制御するためのプログラム、音声波形周期演算部２２３、音声データ合成処理部２２４および音声データ廃棄処理部２２５などを制御して、音声データの音声波形単位の合成または廃棄処理をするためのプログラムなどが記憶されている。
【００４８】
ＲＡＭ２１３は、主としてＲＯＭ２１２のプログラムがＣＰＵ２１０によって実行される際にワークエリアとして使用される。
【００４９】
ＬＡＮインターフェイス２１８は、ＬＡＮ３を通じて送られてくるパケット化データを取り込んでＲＴＰ受信バッファ２２１に順次に蓄積し、また、ＲＴＰ送信バッファ２２２に蓄積されている音声データの送信パケットを、ＬＡＮ３の空きを確認しながら、ＬＡＮ３に順次に送出する機能を備える。
【００５０】
パケット分解／生成部２１９は、ＬＡＮインターフェイス２１８により取り込まれ、ＲＴＰ受信バッファ２２１から読み出されたパケット化データを分解して、制御データや音声データを得る機能と、送信する制御データや所定時間分毎の音声データをパケット化したパケット化データを生成し、ＲＴＰ送信バッファ２２２に転送する機能を有する。このパケット分解／生成部２１９は、パケット化データを分解したり、生成したりするためのバッファメモリを備える。
【００５１】
なお、このパケット分解／生成部２１９のパケット分解処理機能や生成処理機能は、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）により構成されるが、ＣＰＵ２１０と、ＲＯＭ２１２とにより、ソフトウエアとして実現することもできる。
【００５２】
音声データ入出力インターフェイス２２０は、パケット分解されて得られた音声データをアナログ音声信号に変換してハンドセット２Ｈに供給し、また、ハンドセット２Ｈから入力されるアナログ音声信号をデジタル信号に変換して取り込む機能を備える。
【００５３】
音声波形周期演算部２２３は、揺らぎ吸収バッファを構成するＲＴＰ受信バッファ２２１に格納されている音声データから、当該音声データの音声波形周期を演算して求めるようにする。この音声波形周期演算部２２３は、例えばＤＳＰで構成されるが、ＣＰＵ２１０と、ＲＯＭ２１２とにより、ソフトウエアとして実現することもできる。この音声波形周期演算部２２３における音声波形周期演算処理の詳細については、後で詳述する。
【００５４】
音声データ合成処理部２２４は、音声パケットについての伝送揺らぎのために、揺らぎ吸収バッファとしてのＲＴＰ受信バッファ２２１から音声データが読み出されなくなる状態になったときに、ＲＴＰ受信バッファ２２１に記憶されている音声データから合成音声信号を生成し、生成した合成音声信号を次のパケットの音声データとつなぎ合わせる処理を行なう。
【００５５】
ここで、この実施形態では、音声データ合成処理部２２４では、音声波形周期演算部２２３で求められた音声波形周期に基づいて、音声波形周期単位で合成音声信号を生成し、つなぎ合わせの処理を行なうようにする。この音声データ合成処理部２２４における処理も、後で詳述する。
【００５６】
音声データ廃棄処理部２２５は、後述するように、揺らぎ吸収バッファとしてのＲＴＰ受信バッファ２２１のバッファサイズを、音声パケットのデータの伝送揺らぎに応じて動的に変更制御する際において、音声データを廃棄する必要が生じたときに、音声波形周期演算部２２３で求められた音声波形周期に基づいて、音声波形周期単位で音声データの廃棄処理を行なう。
【００５７】
なお、音声データ合成処理部２２４や音声データ廃棄処理部２２５も、例えばＤＳＰで構成されるが、ＣＰＵ２１０と、ＲＯＭ２１２とにより、ソフトウエアとして実現することもできる。
【００５８】
［ゲートウエイ４のハードウエア構成例］
この実施の形態のシステムにおけるゲートウエイ４のハードウエア構成例を図４に示す。この実施の形態のゲートウエイ４は、例えばパーソナルコンピュータにより構成されるもので、ＣＰＵ４１０に対して、システムバス４１１を介してＲＯＭ４１２と、ＲＡＭ４１３と、ＬＡＮインターフェイス４１４と、パケット処理部４１５と、揺らぎ吸収バッファを構成するＲＴＰ受信バッファ４１７と、ＲＴＰ送信バッファ４１８とが接続されている。
【００５９】
また、この実施形態のゲートウエイ４においては、システムバス４１１に対して、受話音声データや送話音声データについての音声波形周期を抽出演算する音声波形周期演算部４１９と、音声データ合成処理部４２０と、音声データ廃棄処理部４２１とが接続されている。
【００６０】
ＲＯＭ４１２には、電話端末２からの音声パケットのデータを、ＲＴＰ受信バッファ４１７を介して受け取り、電話回線６を通じて電話網５に送出するデータに変換するためのプログラム、また、逆に電話網５から取得したデータをＬＡＮ３を通じて電話端末２に送出するパケット化データに変換するためのプログラムや、揺らぎ吸収バッファを構成するＲＴＰ受信バッファ４１７のバッファサイズをＬＡＮ３上で実際に発生する揺らぎに動的に対応して制御するためのプログラム、音声波形周期演算部４１９、音声データ合成処理部４２０および音声データ廃棄処理部４２１などを制御して、音声データの音声波形単位の合成または廃棄処理をするためのプログラムなどが記憶されている。
【００６１】
ＲＡＭ４１３は、主としてＲＯＭ４１２のプログラムがＣＰＵ４１０によって実行される際にワークエリアとして使用される。
【００６２】
また、ＬＡＮインターフェイス４１４は、ＬＡＮ３を通じて送られてくるパケット化データを取り込み、また、ＬＡＮ３にパケット化データを送出するための機能を備える。
【００６３】
パケット処理部４１５は、ＬＡＮインターフェイス４１４により取り込んだパケットを分解して、電話網５を伝送する形式のデータに変換し、また、電話網５から受信したデータをパケット化して、ＬＡＮインターフェイス４１４を通じてＬＡＮ３に送出するパケット化データを生成する機能を有する。
【００６４】
ＲＴＰ受信バッファ４１７とＲＴＰ送信バッファ４１８とは、前述した図３の電話端末のＲＴＰ受信バッファ２２１とＲＴＰ送信バッファ２２２と同様の働きをするものである。これらＲＴＰ受信バッファ４１７とＲＴＰ送信バッファ４１８とは、図４では、一つずつ示したが、実際には、複数本の電話回線６のそれぞれの電話回線に対して、一つずつ設けられるものである。
【００６５】
音声波形周期演算部４１９と、音声データ合成処理部４２０と、音声データ廃棄処理部４２１とは、図３の音声波形周期演算部２２３と、音声データ合成処理部２２４と、音声データ廃棄処理部２２５と同様の処理動作をするものである。
【００６６】
［揺らぎ吸収制御方法の実施形態の説明］
この実施形態の揺らぎ吸収制御方法は、電話端末のＲＴＰ受信バッファ２２１、また、ゲートウエイ４のＲＴＰ受信バッファ４１７の、いずれの制御にも適用される。この実施の形態においては、揺らぎ吸収バッファとしてのＲＴＰ受信バッファ２２１または４１７のバッファサイズを、ＬＡＮ３において実際に発生する揺らぎに応じて動的（ダイナミック）に変更制御する。
【００６７】
そして、この実施形態では、揺らぎ吸収バッファとしてのＲＴＰ受信バッファ２２１または４１７のバッファサイズの変更制御に伴い、音声データの廃棄または追加（合成音声信号の追加）が必要であるときに、それら廃棄または追加を、音声パケット単位ではなく、音声波形周期単位で行なうようにする。
【００６８】
この実施形態のバッファサイズの制御方法を説明する前に、揺らぎ吸収バッファのバッファサイズを決定するためのパラメータの定義を、図５を参照して説明する。この図５は、揺らぎ吸収バッファとしてのＲＴＰ受信バッファ２２１または４１７のバッファサイズを決定するためのイメージを説明するためのものである。
【００６９】
初期再生パケット数は、ＲＴＰ受信バッファから読み出すパケット数であり、固定値であって、この例では、初期再生パケット数＝１とされている。
【００７０】
開始蓄積パケット数は、前述したように、パケット受信開始時に、ＲＴＰ受信バッファからのパケットの読み出しを遅らせて、音声再生開始を待たせる受信パケット数である。前述したように、この開始蓄積パケット数は従来は固定値であったが、この実施形態では、後述するようにＬＡＮ３に発生する揺らぎ量に応じて動的に変化する。以下に説明する例では、開始蓄積パケット数の初期値は、開始蓄積パケット数の初期値＝４とされている。
【００７１】
次に、最大蓄積パケット数は、前述したように、揺らぎ吸収バッファであるＲＴＰ受信バッファに蓄積可能な最大パケット数であり、ＲＴＰ受信バッファに最大蓄積パケット数以上のパケットが蓄積されたときには、前述したように、開始蓄積パケット数分のパケットをＲＴＰ受信バッファ内に残して、それ以外の蓄積パケットを廃棄する。このときに廃棄するパケット数を、溢れバッファ廃棄数と呼び、この例では、溢れバッファ廃棄数＝２とされる。ただし、後述するように、実際に廃棄する音声データは、音声波形周期単位のデータである。
【００７２】
この最大蓄積パケット数は、
最大蓄積パケット数＝開始蓄積パケット数＋溢れバッファ廃棄数
と定義できるもので、音声再生の遅延の最大値に対応する。この実施形態では、上記の定義から、開始蓄積パケット数が動的変化値であるので、これも動的変化値である。
【００７３】
次に、最大開始蓄積パケット数は、動的変化値である開始蓄積パケット数の最大値（上限）であり、固定値である。
【００７４】
ＲＴＰ受信バッファ２２１または４１７は、図５に示すように、最大開始蓄積パケット数以上のメモリセル（１つのパケットの蓄積メモリ部をこの明細書ではセルと呼ぶ）を備え、メモリアクセス上、最後のメモリセルの次には最初のメモリセルに戻るようにされたリング状のバッファ構成とされている。
【００７５】
そして、ＲＴＰ受信バッファ２２１または４１７から読み出すパケット位置（メモリセル）は参照インデックスにより指定される。参照インデックスのメモリセルにパケットが蓄積されていないとき、または、ＲＴＰ受信バッファ２２１または４１７に開始蓄積パケット数が蓄積されていないときには、パケットは読み出さずに、後述するように、その前の音声パケットのデータから合成音声信号のデータを生成して、その再生を行なう。このときは、参照インデックスはインクリメントしない。
【００７６】
そして、開始蓄積パケット数分のパケットがＲＴＰ受信バッファ２２１または４１７に蓄積されていて、参照インデックスのセルのパケットの読み出しをしたときには、参照インデックスをインクリメントする。
【００７７】
また、ＣＰＵ２１０またはＣＰＵ４１０は、ＲＴＰ受信バッファ２２１または４１７の各メモリセルに蓄積されているパケットのシーケンス番号を保持して管理している。シーケンス番号は、パケットのＲＴＰヘッダに含まれており、パケットの受信時にＲＴＰヘッダを解析して取得する。
【００７８】
そして、検索開始インデックスが、
検索開始インデックス＝参照インデックス＋初期再生パケット数  
として定義されている。ＣＰＵ２１０またはＣＰＵ４１０は、パケットを受信したとき、受信したパケットのＲＴＰヘッダからシーケンス番号を抽出して検知し、検索開始インデックスのメモリセルから、各メモリセルに格納されているパケットのシーケンス番号を検索し、受信パケットを格納するメモリセルを決定する。
【００７９】
図６は、揺らぎ吸収制御装置５００の機能ブロック図である。この図６の揺らぎ吸収バッファの制御装置５００は、電話端末２およびゲートウエイ４のいずれにも適用されるものであり、図３に示した電話端末２の端末本体２００のハードウエアおよび図４に示したゲートウエイ４のハードウエアから、揺らぎ吸収バッファとしてのＲＴＰ受信バッファ２２１，４１７の制御および音声データの廃棄および追加に関する部分を抽出したものに相当する。
【００８０】
ＬＡＮ３を通じて自分宛に送られてくるＲＴＰパケットは、データ受信部５０１（ＬＡＮインターフェイス２１８，４１４に対応）で受信され、揺らぎ吸収バッファ５０２（ＲＴＰ受信バッファ２２１または４１７に対応）に蓄積される。データ受信部５０１で受信されたＲＴＰパケットは、揺らぎ検出部５０３に供給されて、ＬＡＮ３において発生しているＲＴＰパケットについての揺らぎ量（単位は時間）が検出される。
【００８１】
ここで、揺らぎ量は、順次に受信される２つの受信ＲＴＰパケットの到着時間差と、パケットのＲＴＰヘッダに含まれるタイムスタンプの差よりパケット受信毎に算出される。すなわち、シーケンス番号がｉのパケットＳｉのタイムスタンプをＴｉ、パケットＳｉの到着時間をＡｉ、パケットＳｉの受信時の揺らぎ量をＤｉとしたとき、
Ｄｉ＝（Ａｉ−Ａｉ−１）−（Ｔｉ−Ｔｉ−１）  ・・・（式１）
により、揺らぎ量Ｄｉが算出される。
【００８２】
揺らぎ検出部５０３で検出された揺らぎ量Ｄｉは、揺らぎ吸収制御部５０４に供給される。揺らぎ吸収制御部５０４は、揺らぎ検出部５０３で検出された揺らぎ量Ｄｉに基づいて、後述するようにＲＴＰ受信バッファのバッファサイズの制御を行ない、揺らぎ吸収処理を行ないながら、揺らぎ吸収バッファ５０２から受信パケットを読み出し、バッファ出力データ処理制御部５０５に供給する。
【００８３】
バッファ出力データ処理制御部５０５は、音声波形周期演算部５０５１と、音声データ合成処理部５０５２と、音声データ廃棄処理部５０５３とを備える。音声波形周期演算部５０５１、音声データ合成処理部５０５２および音声データ廃棄処理部５０５３は、図３の音声波形周期演算部２２３、音声データ合成処理部２２４および音声データ廃棄処理部２２５、または、図４の音声波形周期演算部４１９、音声データ合成処理部４２０および音声データ廃棄処理部４２１に対応する。
【００８４】
バッファ出力データ処理制御部５０５は、音声波形周期演算部５０５１で、出力済みの音声データから音声波形周期の算出を行なう。また、バッファ出力データ処理制御部５０５は、揺らぎ吸収制御部５０４からの制御情報に基づいて、音声データ合成処理部５０５２および音声データ廃棄処理部５０５３で、揺らぎ吸収制御部５０４による揺らぎ吸収バッファ５０２のバッファサイズの変更制御に伴い、音声データの廃棄または追加（合成音声信号の追加）が必要であるときに、それら廃棄または追加を、音声波形周期演算部５０５１で算出した音声波形周期単位で行なう。
【００８５】
そして、バッファ出力データ処理制御部５０５は、その出力音声データをデータデコード処理部５０６に供給する。
【００８６】
データデコード処理部５０６は、受け取った音声データをデコードし、データ送信部５０７に供給する。データ送信部５０７は、電話端末２の場合であれば、音声データをアナログ音声信号に変換してハンドセット２Ｈに送る。また、データ送信部５０７は、ゲートウエイ４の場合であれば、音声データを空き回線を通じて電話網５に送出する。
【００８７】
なお、揺らぎ検出部５０３および揺らぎ吸収制御部５０４の動作は、ＣＰＵ２１０または４１０により実行される。また、バッファ出力データ処理制御部５０５およびデータデコード処理部５０６は、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）により構成される。データ送信部５０７は、音声データ入出力インターフェイス２２０または回線インターフェイス４１６により構成される。
【００８８】
［揺らぎ吸収制御部５０４における開始蓄積量の制御動作］
この実施形態では、ＲＴＰ受信バッファの開始蓄積量（開始蓄積パケット数に対応）は、ＬＡＮ３上で発生する揺らぎ量に応じて動的に制御するが、この開始蓄積量の動的制御には、開始蓄積量の増加制御と、開始蓄積量の減少制御とがある。なお、この明細書において、蓄積量等における「量」は、時間の単位の値を示しており、蓄積パケット数等における「パケット数」は、前記「量」としての時間を、１パケット当たりの時間で割った値となるものである。
【００８９】
〔開始蓄積量の増加手順〕
まず、開始蓄積量の増加制御手順について説明する。  
この実施の形態においては、開始蓄積量より大きな揺らぎが、連続して、または周期的に、ＬＡＮ３上に発生した場合、開始蓄積量を増やして、受信パケットを再蓄積するようにする。以下、その増加手順を説明する。
【００９０】
（１）増加目標蓄積量の算出
パケットを受信する毎に、揺らぎ量を検出し、検出した揺らぎ量の増減から、増加目標蓄積量を算出する。増加目標蓄積量は、開始蓄積量を増加させるときの目標値である。すなわち、増加目標蓄積量をＩＢｉとし、その初期値をＩＢｏ、揺らぎ量をＤｉとしたとき、以下のようにして、増加目標蓄積量ＩＢｉを求める。なお、サフィックスｉは、パケットのシーケンス番号に相当する。
【００９１】
ＩＢｏ＝開始蓄積量
ＩＢｉ＝ＩＢｉ−１＋ｆａ（Ｄｉ，ＩＢｉ−１）／ＣＩ  ・・・（式２）
ただし、
Ｄｉ＞ＩＢｉ−１の場合、
ｆａ（Ｄｉ，ＩＢｉ−１）＝Ｄｉ−ＩＢｉ−１
Ｄｉ≦ＩＢｉ−１の場合、
ｆａ（Ｄｉ，ＩＢｉ−１）＝０
・・・（式３）
ここで、ＣＩは収束速度定数であり、ＣＩ≧１である。この収束速度定数ＣＩにより、局所的に発生した揺らぎの影響を抑え、連続的に発生する揺らぎ量を得ることができる。ｆａ（）は、（）内の変数に関する関数を意味している。
【００９２】
（２）開始蓄積量の更新
揺らぎ遅延によりＲＴＰ受信バッファが空になったときに、開始蓄積量＝増加目標蓄積量として、開始蓄積量を増加目標蓄積量に置き換えて増加させる。そして、更新された開始蓄積量になるまで、ＲＴＰ受信バッファからのパケットの読み出しを停止して、ＲＴＰ受信バッファに受信パケットを再蓄積する。なお、増加目標蓄積量＞最大開始蓄積量のときには、増加目標蓄積量＝最大開始蓄積量とされて制限される。
【００９３】
以上のようにして、この実施の形態においては、揺らぎが連続的または周期的に発生する期間が十分に長ければ、揺らぎに対する蓄積量の不足分が増加目標蓄積量に累積されてゆき、増加目標蓄積量は適切な揺らぎ量（ＩＢｉ＞Ｄｉ）で収束してゆくので、その収束した増加目標蓄積量に開始蓄積量を置き換えることにより、発生する揺らぎ量に対応した揺らぎ吸収を行なうことができる。
【００９４】
〔開始蓄積量の減少手順〕
次に、開始蓄積量の減少制御手順について説明する。  
上述のようにして開始蓄積量を増加させた後、揺らぎがより小さい値に収束することがあるが、そのように揺らぎ量が小さくなった場合にも、開始蓄積量を、増加したままの値に保持していた場合には、ＲＴＰ受信バッファでの遅延（通話遅延）が大きくなる問題がある。
【００９５】
この実施形態では、揺らぎ量が、そのときの開始蓄積量よりも低い値で安定している場合には、通話遅延を減少させるために、適切な開始蓄積量にまで減少させるようにする。この実施の形態では、以下の手順で揺らぎが安定しているかどうかを判定し、適切な開始蓄積量の算出を行なう。
【００９６】
（１）減少目標蓄積量の算出
パケットを受信する毎に、揺らぎ量を検出し、検出した揺らぎ量の増減から、開始蓄積量を減少させるときの目標値を求めるための減少目標蓄積量を算出する。すなわち、減少目標蓄積量をＤＢｉとし、その初期値をＤＢｏ、揺らぎ量をＤｉとし、増加目標蓄積量をＩＢｉとし、収束速度定数をＣＤとしたとき、以下のようにして、減少目標蓄積量ＤＢｉを求める。
【００９７】
ＤＢｏ＝０
Ｄｉ＞ＩＢｉ−１の場合、
ＤＢｉ＝０
Ｄｉ≦ＩＢｉ−１の場合、
ＤＢｉ＝ＤＢｉ−１＋ｆｂ（Ｄｉ，ＤＢｉ−１）／ＣＤ
・・・（式４）
ただし、
Ｄｉ＞ＤＢｉ−１の場合、
ｆｂ（Ｄｉ，ＤＢｉ−１）＝Ｄｉ−ＤＢｉ−１
Ｄｉ≦ＤＢｉ−１の場合、
ｆｂ（Ｄｉ，ＤＢｉ−１）＝０
・・・（式５）
ここで、収束速度定数ＣＤは、ＣＤ≧１である。
【００９８】
なお、式４において、減少目標蓄積量ＤＢｉの更新判定に、増加目標蓄積量ＩＢｉを用いるのは、前述の（式２），（式３）との同期のためである。ｆｂ（）は、（）内の変数に関する関数を意味している。
【００９９】
（２）揺らぎ安定の判定
揺らぎが安定したかどうかは、減少目標蓄積量が変化しない期間の長さ（パケット受信回数）で判定する。この実施形態では、収束期間カウント値ＣＮＴを、以下の手順で更新し、揺らぎ安定判定を行なう。
【０１００】
すなわち、
Ｄｉ＞ＤＢｉ−１の場合、
ＣＮＴ＝０
Ｄｉ≦ＤＢｉ−１の場合、
ＣＮＴｉ＝ＣＮＴｉ−１＋１
・・・（式６）
とする。
【０１０１】
そして、収束期間カウント値ＣＮＴが、予め定めた揺らぎ安定と認められるような収束期間カウント値である収束期間定数ＣＮＴ−ｔｈよりも大きくなったかどうかを検査し、収束期間カウント値ＣＮＴが、収束期間定数ＣＮＴ−ｔｈよりも大きくなったときには、揺らぎが安定したと判定する。
【０１０２】
なお、収束期間定数ＣＮＴ−ｔｈは、固定値でもよいし、また、受信パケットサイズにより変更するようにしてもよい。
【０１０３】
（３）バッファ更新判定およびバッファ更新処理
収束期間カウント値ＣＮＴが、収束期間定数ＣＮＴ−ｔｈよりも大きくなって、揺らぎが安定したと判定したときには、ＲＴＰ受信バッファのバッファサイズを変更するかどうかのバッファ更新判定を行なう。バッファ更新判定は、開始蓄積量と減少目標蓄積量との差が、予め定めた最小減少量よりも大きいかどうかにより行なう。最小減少量は、例えば１パケット分の時間とされる。
【０１０４】
バッファ更新判定の結果、開始蓄積量と減少目標蓄積量との差が、予め定めた最小減少量よりも小さい場合には、ＲＴＰ受信バッファサイズは、減少処理する必要がないとして、収束期間カウント値ＣＮＴや減少目標蓄積量はゼロリセットされる。
【０１０５】
バッファ更新判定の結果、開始蓄積量と減少目標蓄積量との差が、予め定めた最小減少量よりも大きい場合には、バッファ更新処理を実行して、開始蓄積量＝減少目標蓄積量とし、開始蓄積量を減少目標蓄積量まで減少させる。ただし、１度のバッファ更新手順で減少させる開始蓄積量は、予めパラメータとして設定された最大減少量により制限する。そして、収束期間カウント値ＣＮＴや減少目標蓄積量はゼロリセットすると共に、減少した分のバッファ内パケットを廃棄するようにする。
【０１０６】
図７のフローチャートを参照して、以上のバッファ更新判定およびバッファ更新処理のルーチンを、さらに説明する。この図７の処理は、パケットを受信する毎に、電話端末２では、ＣＰＵ２１０により、ゲートウエイ４では、ＣＰＵ４１０により実行されるものである。
【０１０７】
まず、収束期間カウント値ＣＮＴが、収束期間定数ＣＮＴ−ｔｈよりも大きくなって、揺らぎが安定したかどうかを判定する（ステップＳ１１）。揺らぎが安定していないと判定したときには、このルーチンを抜けて他の処理ステップに進む。
【０１０８】
また、揺らぎが安定したと判定したときには、その時点における開始蓄積量から減少目標蓄積量を減算して、その減算結果ΔＳを求める（ステップＳ１２）。そして、その減算結果ΔＳが、予め設定された最小減少量よりも大きいかどうか判定する（ステップＳ１３）。
【０１０９】
ステップＳ３で、減算結果ΔＳが、予め設定された最小減少量よりも小さいと判定された場合には、収束期間カウント値ＣＮＴを「０」にし（ステップＳ１４）、また、減少目標蓄積量を「０」にする（ステップＳ１５）。
【０１１０】
ステップＳ１３で、減算結果ΔＳが、予め設定された最小減少量よりも大きいと判定されたときには、当該減算結果ΔＳは、予め設定された最大減少量以下であるか否か判別する（ステップＳ１６）。
【０１１１】
このステップＳ１６において、減算結果ΔＳは、予め設定された最大減少量以下であると判別したときには、開始蓄積量＝減少目標蓄積量として、開始蓄積量を減少させる（ステップＳ１７）。また、ステップＳ１６において、減算結果ΔＳは、予め設定された最大減少量よりも大きいと判別したときには、開始蓄積量＝そのときの開始蓄積量−最大減少量として、開始蓄積量を、最大減少量分だけ減少させる（ステップＳ１８）。
【０１１２】
ステップＳ１７およびステップＳ１８の後は、ステップＳ１９に進んで、増加目標蓄積量を、更新された開始蓄積量に置き換える。つまり、この時点から、増加目標蓄積量の初期値は、更新された開始蓄積量になる。
【０１１３】
次に、収束期間カウント値ＣＮＴを「０」にし（ステップＳ２０）、また、減少目標蓄積量を「０」にする（ステップＳ２１）。さらに、開始蓄積量を減少させたことにより溢れる分のパケットデータを、ＲＴＰ受信バッファから廃棄する（ステップ２２）。ここで、実際に廃棄する音声データは、パケット単位ではなく、音声波形周期単位とする。この場合の開始蓄積量の減少により廃棄するパケット数は、最大蓄積パケット数を越えて溢れたときに廃棄する溢れバッファ廃棄数のような固定値ではなく、動的なものとなる。以上で、バッファ更新処理は終了となる。
【０１１４】
［揺らぎ吸収バッファ制御の処理ルーチン］
次に、揺らぎ吸収バッファのバッファサイズの制御および読み出し処理動作の全体を、図８および図９のフローチャートを参照しながら説明する。
【０１１５】
ＲＴＰパケットを受信すると、電話端末２では、ＣＰＵ２１０に、ゲートウエイ４ではＣＰＵ４１０に割り込みが発生して、図８および図９のフローチャートの処理ルーチンを開始し、まず、ＲＴＰヘッダを解析する（ステップＳ３１）。次に、既にパケットの受信を開始しているかどうか判別する（ステップＳ３２）。
【０１１６】
ステップＳ２２で、未だ、パケット受信開始状態になっておらず、受信したパケットが受信開始のパケットであると判別したときには、パケットサイズ、つまり、音声データサイズを、予め決定されているパラメータに基づいて取得する（ステップＳ３３）。
【０１１７】
すなわち、この例においては、送信側は、音声信号を所定時間長分毎にパケット化して、ＬＡＮ３に送出するが、この場合のパケット化の際の所定時間長（音声データのサイズ）は、例えば１０ｍｓｅｃ、２０ｍｓｅｃ、３０ｍｓｅｃなどのいくつかのサイズの中から、選択することができる。そして、どのサイズでパケット化されているかの情報（パラメータ）は、音声データの送受信の前に制御信号をやり取りすることにより決定されており、その情報（パラメータ）により、音声データサイズを取得する。
【０１１８】
音声データサイズを取得したら、初期再生パケット数、開始蓄積パケット数の初期値、バッファ廃棄数、最大開始蓄積パケット数等のバッファサイズ制御パラメータを算出する（ステップＳ３４）。この例では、開始蓄積量の初期値、バッファ廃棄量、最大開始蓄積量は、時間単位で定められており、１パケット当たりの時間長である音声データサイズから、前記パラメータをパケット数単位に変換する。
【０１１９】
例えば、開始蓄積量の初期値が３０ｍｓｅｃ、バッファ廃棄量が２０ｍｓｅｃ、最大開始蓄積量が１０００ｍｓｅｃに設定されており、音声データサイズが、１０ｍｓｅｃ／パケットであったときには、開始蓄積パケット数の初期値は「３」、バッファ廃棄数は「２」、最大開始蓄積パケット数は「１００」となる。
【０１２０】
以上のパラメータの算出が終了したら、ＲＴＰ受信バッファを受信開始状態にし、ステップＳ３３で取得した音声データサイズに合わせて、図６のバッファ出力データ処理制御部５０５の制御側からの受信割り込み周期を設定する（ステップＳ３５）。そして、前記受信割り込み周期は、バッファ出力データ処理制御部５０５が制御側から受信する割り込みに関するものであり、この割り込みは、ＬＡＮ３側の音声データの受信で発生するものではない。
【０１２１】
電話端末２あるいはゲートウエイ４は、この受信割り込み周期で、ＲＴＰ受信バッファからパケットの取り出しを行って、後述する音声送出処理を行なう。
【０１２２】
次に、受信開始状態にしたら、到着したパケットについての揺らぎ量の算出を行なう。また、ステップＳ３２で既に受信開始状態であると判別したときには、即座に、到着したパケットについての揺らぎ量の算出を行なう（ステップＳ３６）。このステップＳ３６における揺らぎ量の算出は、前述した（式１）によって行われる。
【０１２３】
次に、算出した揺らぎ量に基づき、前述の（式２）、（式３）に基づき増加目標蓄積量ＩＢｉの算出を行なうと共に、前述の（式４）、（式５）に基づき減少目標蓄積量ＤＢｉの算出を行なう（ステップＳ３７）。
【０１２４】
次に、ＲＴＰ受信バッファ内の蓄積パケット数が、初期再生パケット数より小さいかどうか判定する（ステップＳ３８）。
【０１２５】
ＲＴＰ受信バッファ内の蓄積パケット数が、初期再生パケット数より小さいときには、再生するパケットがバッファ内にないため、ＲＴＰ受信バッファからのパケットの読み出し時に用いるバッファ参照フラグを「ＦＡＬＳＥ」にして、バッファ参照を禁止させ、無音生成を指示する（ステップＳ３９）。
【０１２６】
次に、開始蓄積量を、そのときの増加目標蓄積量とする（ステップＳ４０）。ただし、増加目標蓄積量が最大開始蓄積量よりも大きいとき（増加目標蓄積量＞最大開始蓄積量）には、開始蓄積量＝最大開始蓄積量に制限される。前述したように、増加目標蓄積量の初期値は、開始蓄積量の初期値である。
【０１２７】
このステップＳ４０においては、パケットの受信を開始したときには、前回のパケット受信時における揺らぎ量に応じたＲＴＰ受信バッファサイズとなるように、開始蓄積量が設定される。また、パケットの受信を開始している状態においては、ＲＴＰ受信バッファ内の蓄積パケット数が、初期再生パケット数より小さいということは、揺らぎによる遅延のために、ＲＴＰ受信バッファ内のパケットが空になったことを意味するため、開始蓄積量がそのときの増加目標蓄積量に増加変更される。
【０１２８】
次に、ＲＴＰ受信バッファサイズを、
ＲＴＰ受信バッファサイズ＝開始蓄積パケット数
として算出する（ステップＳ４１）。また、最大蓄積パケット数を、
最大蓄積パケット数＝ＲＴＰ受信バッファサイズ＋溢れ時のバッファ廃棄数
として算出する（ステップＳ４２）。次に、次回受信したときに、受信パケットをＲＴＰ受信バッファのいずれのメモリセルに蓄積するかを検索する際の開始インデックス（インデックスは、ＲＴＰ受信バッファのメモリセルを指し示す指標である）である検索開始インデックスを、ＲＴＰ受信バッファの先頭にセットする（ステップＳ４３）。その後、ＲＴＰ受信バッファへの受信パケット蓄積処理に進む（ステップＳ４５）。
【０１２９】
また、ステップ３８で、蓄積パケット数が初期再生パケット数以上であると判別したときには、検索開始インデックスを、
検索開始インデックス＝参照インデックス＋初期再生パケット数
とする（ステップ４４）。その後、ステップＳ４５の受信パケット蓄積処理に進む。
【０１３０】
ステップ４５の受信パケット蓄積処理においては、前述したように、検索開始インデックスで指し示されるメモリセルから順に、ＲＴＰ受信バッファの各メモリセルに蓄積されているパケットのシーケンス番号を検索して、今回受信したパケットを格納すべきセルを検出し、検出されたセルに、受信パケットを格納する。
【０１３１】
以上のようにして、ＲＴＰ受信バッファ内に受信パケットを蓄積したら、蓄積パケット数を１だけインクリメントする（図９のステップＳ５１）。
【０１３２】
次に、揺らぎが、収束したか否か判別する（ステップＳ５２）。そして、揺らぎが収束したと判別したときには、前述した開始蓄積量の減少手順を実行する（ステップＳ５３）。ステップＳ５２の処理は、図７のステップＳ１１の処理に対応し、また、ステップＳ５３の処理は、図７のステップＳ１２〜ステップＳ２２に処理に対応する。
【０１３３】
ステップＳ５３での開始蓄積量の減少手順が終了した後と、ステップＳ５２で、減少目標蓄積量が収束していないと判別したときには、ＲＴＰ受信バッファの蓄積パケット数が、最大蓄積パケット数以上であるか否か判別する（ステップ５４）。そして、蓄積パケット数が最大蓄積パケット数以上であると判別したときには、ＲＴＰ受信バッファの先頭から、ステップＳ２４で定められた溢れ時のバッファ廃棄数分のパケットを、ＲＴＰ受信バッファから廃棄する（ステップＳ５５）。なお、実際の音声データの廃棄は、後述するように音声波形周期単位である。
【０１３４】
ステップＳ５４で、蓄積パケット数が最大蓄積パケット数よりも少ないと判別されたとき、また、ステップ５５でのパケットの廃棄処理が終了した後には、蓄積パケット数が、ＲＴＰ受信バッファサイズ以上であるか否か判別する（ステップＳ５６）。
【０１３５】
ステップＳ５６で、蓄積パケット数が、ＲＴＰ受信バッファサイズ以上であると判別したときには、参照インデックスを、ＲＴＰ受信バッファの先頭のセル番号とし（ステップＳ５７）、検索開始インデックスは、
検索開始インデックス＝参照インデックス＋初期再生パケット数
とした後（ステップＳ５８）、バッファ参照フラグを「ＴＲＵＥ」として、音声データ送出処理手順において、バッファ参照を許可し、音声データ再生開始を指示する（ステップＳ５９）。
【０１３６】
その後、このパケット受信時の処理ルーチンを終了する。また、ステップＳ５６で、蓄積パケット数が、ＲＴＰ受信バッファサイズ以上ではないと判別したときにも、このパケット受信時の処理ルーチンを終了する。
【０１３７】
［ＲＴＰ受信バッファ内のパケット数の変化の具体例］
次に、図１０〜図１２を参照して、パケット到着時のＲＴＰ受信バッファ内のパケット数の変化の具体例について説明する。図１０〜図１２の各図において、ＢＦはＲＴＰ受信バッファを模式的に示し、網掛けを付して示したメモリセルは、パケットが蓄積されていることを示しており、当該蓄積パケットの中に示した数字はシーケンス番号を示している。また、白抜き部分のセルは、空きを示している。
【０１３８】
以下に説明する例では、初期再生パケット数＝１、開始蓄積量の初期パケット数＝３、最大蓄積パケット数の初期値＝５、最大開始蓄積パケット数＝１０とした場合である。開始蓄積パケット数と、最大蓄積パケット数は動的に変化する。
【０１３９】
なお、図１０〜図１２の各図において、Ａ〜Ｄは、Ａ＝開始蓄積量の初期パケット数、Ｂ＝開始蓄積パケット数（動的変化）、Ｃ＝最大蓄積パケット数（動的変化）、Ｄ＝最大開始蓄積パケット数であり、各図において、上方に示したこれらＡ〜Ｄのうち、ＢおよびＣの値は、その初期値を示している。また、図１０〜図１２において、網掛けを付して示したものは、蓄積パケットを示しており、当該蓄積パケットの中に示した数字はシーケンス番号を示している。
【０１４０】
図１０は、パケットの受信開始からの処理と、揺らぎ発生による開始蓄積量および最大蓄積パケット数の変更および揺らぎ吸収処理を示すものである。この図１０では、発生した揺らぎは、パケットを廃棄しなければならないほど大きいものではなかった場合である。
【０１４１】
最初のパケットを受信すると、前述したように、音声データサイズ（パケットサイズ）が認識され、バッファサイズ制御パラメータの算出がなされて、受信開始状態とされ、以後、音声データサイズ（パケットサイズ）に基づいて設定された受信割り込み周期で、後述するような音声データ送出処理がなされる。そして、到着したパケットがＲＴＰ受信バッファＢＦに蓄積される。
【０１４２】
そして、パケット受信開始から、ＲＴＰ受信バッファＢＦに３個のパケットが蓄積されるまでは、ＲＴＰ受信バッファＢＦからパケットは読み出されず、無音再生が行われる。
【０１４３】
４個目のパケットが到着すると、それが蓄積されると共に、前述した受信割り込み周期のタイミングで、ＲＴＰ受信バッファＢＦの先頭のパケットが読み出されて、音声データの送出がなされる。以後は、受信割り込み周期のタイミングで、ＲＴＰ受信バッファＢＦに蓄積されているパケットは、先頭から順次読み出されて音声データ送出される。したがって、揺らぎが発生しなければ、図１０の例においては、ＲＴＰ受信バッファＢＦには、常に３個のパケットが蓄積される状態になる。
【０１４４】
ここで、遅延揺らぎが発生すると、受信パケットが到着しないにも関わらず、受信割り込み周期のタイミングで、ＲＴＰ受信バッファに蓄積されているパケットは、先頭から順次、読み出されるので、新パケットが到着しない限り、ＲＴＰ受信バッファＢＦ内の蓄積パケット数は、徐々に減ってゆく。
【０１４５】
そして、ＲＴＰ受信バッファＢＦ内の蓄積パケット数がゼロになると、揺らぎ吸収制御部５０４は、前述したように、開始蓄積パケット数Ｂを、増加目標蓄積パケット数に増加変更する。これに伴い、最大蓄積パケット数Ｃも増加変更される。図１０の例では、開始蓄積パケット数は「５」に、最大蓄積パケット数は「７」にそれぞれ変更される。
【０１４６】
その後、揺らぎの発生により遅れた３周期分と合わせて４個のパケットが到着すると、それがＲＴＰ受信バッファＢＦに蓄積される。この時点では、変更された開始蓄積パケット数「５」には満たないので、ＲＴＰ受信バッファＢＦからパケットは読み出されず、無音再生が行われる。そして、次にパケットが到着してＲＴＰ受信バッファＢＦの蓄積パケット数が５になるまで、ＲＴＰ受信バッファＢＦからパケットは読み出されず、バッファ出力データ処理制御部５０５で、音声信号がその直前の音声データから音声波形周期単位で合成され、それが出力音声信号とされる。
【０１４７】
そして、ＲＴＰ受信バッファＢＦの蓄積パケット数が５になると、受信割り込み周期のタイミングで、ＲＴＰ受信バッファＢＦに蓄積されているパケットは、先頭から順次読み出されて音声データの送出がなされる。こうして、発生した揺らぎの量に合わせて、開始蓄積パケット数が変更されるので、パケットが廃棄されることによる音切れが防止される。
【０１４８】
次に、大きな揺らぎが発生した場合におけるＲＴＰ受信バッファのバッファサイズの変更制御（増加制御）について、図１１を参照して説明する。図１１の例は、開始蓄積パケット数が３、最大蓄積パケット数が５である場合において、大きな揺らぎが発生した場合である。
【０１４９】
図１１において、揺らぎが発生するまでは、受信割り込み周期のタイミングで、順次、ＲＴＰ受信バッファＢＦの蓄積パケットの先頭のパケットが読み出されると共に、受信パケットが蓄積される。
【０１５０】
この状態で揺らぎが発生すると、前述と同様にして、受信パケットが到着しないにも関わらず、受信割り込み周期のタイミングで、ＲＴＰ受信バッファに蓄積されているパケットは、先頭から順次、読み出されるので、ＲＴＰ受信バッファＢＦ内の蓄積パケット数は、徐々に減ってゆく。
【０１５１】
そして、ＲＴＰ受信バッファＢＦ内の蓄積パケット数がゼロになると、前述と同様に、揺らぎ吸収制御部５０４により、開始蓄積パケット数Ｂは、増加目標蓄積パケット数に増加変更される。これに伴い、最大蓄積パケット数Ｃも増加変更される。図１１の例では、開始蓄積パケット数は「４」に、最大蓄積パケット数は「６」にそれぞれ変更される。
【０１５２】
この図１１の例では、このように開始蓄積パケット数の増加変更を行った後においても、揺らぎ量が大きいため、さらにパケットの到着が遅れる。このため、ＲＴＰ受信バッファＢＦからパケットは読み出されず、バッファ出力データ処理制御部５０５で、音声信号がその直前の音声データから音声波形周期単位で合成され、それが出力音声信号とされる。このとき、後述するように、出力音声データは、音声信号がその直前の音声データから合成されたものとされる。
【０１５３】
そして、到着が遅れていた複数個のパケットと共に、図１１に示すように、最大蓄積パケット数を越える新たなパケットがまとめて到着する。すると、揺らぎ吸収制御部５０４は、予め定められている溢れバッファ廃棄数のパケット、この例では２パケットと、さらに１個のパケットを、ＲＴＰ受信バッファＢＦの先頭から、順次、バッファ出力データ処理制御部５０５に送出して、バッファ出力データ処理制御部５０５に廃棄処理させるように指示する。
【０１５４】
なお、このときに、図示のように、ＲＴＰ受信バッファＢＦからはパケット単位で読み出されるが、バッファ出力データ処理制御部５０５においては、廃棄処理のために送られてきたパケットデータの全てを廃棄するのではなく、後述するように、音声波形周期単位で廃棄して、音声波形の連続性を保持するようにする。
【０１５５】
ＲＴＰ受信バッファＢＦからの前記パケットの廃棄処理のための送出の結果、ＲＴＰ受信バッファＢＦの蓄積パケット数は５になるので、最大蓄積パケット数「６」以内に収まる。そして、受信割り込み周期のタイミングで、ＲＴＰ受信バッファＢＦに蓄積されているパケットは、先頭から読み出されて再生される。
【０１５６】
図１１の例では、以上の処理により、ＲＴＰ受信バッファＢＦ内の蓄積パケット数は、開始蓄積パケット数になるので、その後は、揺らぎがなければ、先頭からのパケットの読み出しと、到着パケットの蓄積が行われる。
【０１５７】
次に、揺らぎが停止してゆくときのＲＴＰ受信バッファのバッファサイズの変更制御（減少制御）について、図１２を参照して説明する。図１２の例は、開始蓄積パケット数Ｂが５に増加していて、このため、最大蓄積パケット数Ｃが７である場合において、揺らぎが収束して停止してゆく場合である。
【０１５８】
すなわち、図１２に示すように、揺らぎが発生している間は、開始蓄積パケット数Ｂは「５」とされて、揺らぎ吸収処理が行われるが、揺らぎが停止して収束してゆくと、揺らぎ吸収制御部５０４は、前述した収束期間カウント値ＣＮＴが、収束期間定数ＣＮＴ−ｔｈよりも大きくなって、揺らぎが安定したと判定する。このときには、前述したように、揺らぎ吸収制御部５０４は、開始蓄積パケット数Ｂを減少目的蓄積量に減少変更し、減少させたパケット数分をＲＴＰ受信バッファＢＦの先頭から廃棄のためにバッファ出力データ処理制御部５０５に送出して、バッファ出力データ処理制御部５０５に廃棄処理させるように指示する。
【０１５９】
さらに、揺らぎが収束してゆくと、揺らぎ吸収制御部５０４は、収束期間カウント値ＣＮＴが、再び、収束期間定数ＣＮＴ−ｔｈよりも大きくなって、揺らぎが安定したと判定する。そして、揺らぎ吸収制御部５０４は、開始蓄積パケット数Ｂを減少目的蓄積量に減少変更し、減少させたパケット数分をＲＴＰ受信バッファＢＦの先頭から廃棄のためにバッファ出力データ処理制御部５０５に送出して、バッファ出力データ処理制御部５０５に廃棄処理させるように指示する。
【０１６０】
なお、このときにも、図１１の場合と同様に、ＲＴＰ受信バッファＢＦからは図示のようにパケット単位で読み出されるが、バッファ出力データ処理制御部５０５においては、廃棄処理のために送られてきたパケットデータの全てを廃棄するのではなく、後述するように、音声波形周期単位で廃棄して、音声波形の連続性を保持するようにする。
【０１６１】
以上の処理を繰り返すことにより、揺らぎがなくなる方向に収束するにつれて、開始蓄積パケット数Ｂは、初期値にまで減少させられる。
【０１６２】
以上のようにして、この実施形態によれば、揺らぎの発生に合わせて、ＲＴＰ受信バッファの開始蓄積パケット数を増加し、揺らぎが停止して減少収束するにつれて、開始蓄積パケット数を減少させるようにするので、ＲＴＰ受信バッファサイズは揺らぎ量に合わせて動的に制御され、音切れが軽減されると共に、音の遅延も最小限に抑えられるものである。
【０１６３】
なお、上述の実施形態においては、ＲＴＰ受信バッファが空になったら、開始蓄積パケット数を増加目標蓄積量に変更するようにしたが、空ではなく、ＲＴＰ受信バッファの蓄積パケット数が所定数以下、例えば１個以下になったときに、開始蓄積パケット数を増加目標蓄積量に変更するようにしてもよい。
【０１６４】
［バッファ出力データ処理制御部５０５での処理］
図１３は、バッファ出力データ処理制御部５０５での処理をさらに説明するための機能ブロック図である。
【０１６５】
すなわち、バッファ出力データ処理制御部５０５では、この例では、音声パケットサイズに合わせた周期で揺らぎ吸収バッファ５０２に対して受信パケットの取得を要求し、処理判断部５０５４で、受信パケットが得られたかどうかを判断する。
【０１６６】
そして、処理判断部５０５４は、受信パケットの受信に成功したと判断したときには、当該受信パケットのデータをデータデコード処理部５０６に出力すると共に、履歴バッファＨＴＢＦに追加するようにする。
【０１６７】
履歴バッファＨＴＢＦは、所定時間分（複数パケット分以上）の音声データを保持することができるメモリで構成されており、常に、再生出力された最新の所定時間分の音声データを保持するようにする。すなわち、履歴バッファＨＴＢＦは再生した音声を前記所定時間分保持するもので、新たに履歴バッファＨＴＢＦに音声データが追加されるときには、当該履歴バッファＨＴＢＦに蓄積されている音声データの内の最も旧いデータが廃棄される。
【０１６８】
音声波形周期演算部５０５１は、この履歴バッファＨＴＢＦに蓄積された音声データを用いて、最新の音声波形周期を算出する。この音声波形周期の算出処理方法については、後で詳述する。
【０１６９】
また、処理判断部５０５４は、受信パケットを受信できなかったと判断したときには、音声データ合成処理部５０５２を制御して、出力した直近の音声データに基づいて音声信号を合成させる。
【０１７０】
音声データ合成処理部５０５２は、処理判断部５０５４からの制御指示により、ピッチバッファＰｉＢＦに記憶されている再生出力された最新の所定時間分の音声データに基づいて、その音声波形周期単位の合成音声信号を生成する。そして、音声データ合成処理部５０５２は、生成した合成音声信号をデータデコード処理部５０６に出力すると共に、履歴バッファＨＴＢＦに追加するようにする。
【０１７１】
ピッチバッファＰｉＢＦには、合成音声信号の生成が必要となったときに、処理判断部５０５４からの制御指示により、履歴バッファＨＴＢＦに格納されている所定時間分の音声データがコピーされて書き込まれる。音声データ合成処理部５０５２は、履歴バッファＨＴＢＦの蓄積データを直接アクセスして合成音声信号の生成をすることもできるが、この例では、合成音声信号の生成処理作業を容易化するため、履歴バッファＨＴＢＦの内容を、ピッチバッファＰｉＢＦにコピーして、当該ピッチバッファＰｉＢＦを音声データ合成処理部５０５２がアクセスするようにしている。
【０１７２】
＜音声波形周期の算出処理＞
図１４〜図１５は、音声波形周期の算出処理を説明するための図である。図１４（Ａ）は、履歴バッファＨＴＢＦの記憶データを説明するための図である。この例では、音声データはＰＣＭ信号であって、サンプリング周波数は例えば８ｋＨｚとされ、１音声パケットは８０サンプルとされている。
【０１７３】
図１４（Ａ）に示すように、この例の履歴バッファＨＴＢＦは、音声データの３９０サンプル分を記憶可能な容量を有するものとされている。図１４（Ａ）において、０〜３９０の数値は、サンプルアドレスを示し、数値が小さいアドレスほど、旧い音声データが記憶されているものとする。
【０１７４】
音声波形周期は、この例では、履歴バッファＨＴＢＦに記憶データの最新の過去の２０ミリ秒から求めるようにする。そのため、この例では、履歴バッファＨＴＢＦの最後（最新）の２０ミリ秒の波形ＳＡ（アドレス２３０〜３９０までの１６０サンプル）と、最新時点から３５ミリ秒までの過去の波形中の２０ミリ秒分の波形ＳＢ（アドレス１１０〜３９０までの２８０サンプルのうちの１６０サンプル）とを比較し、最も近似した箇所を検出するようにする。当該近似した箇所の検出方法は、２つの波形ＳＡとＳＢとの自己相関関数を計算し、その計算結果の値が大きいものほど近似しているという方法を用いるものである。
【０１７５】
すなわち、アドレス１１０〜３９０までの２８０サンプル中から、順次に１６０サンプル分を抽出したものを波形ＳＢとして、この波形ＳＢと波形ＳＡとを比較する。このとき、波形ＳＢの先頭アドレスのアドレス１１０に対する差をオフセット量と呼び、このオフセット量により、音声波形周期を算出するものである。
【０１７６】
つまり、図１４（Ｂ）、（Ｃ）、（Ｄ）に示すように、この例では、オフセット０から１づつ順次にオフセットを増加しながら、オフセット８０まで、波形ＳＢを更新し、波形ＳＡと比較する（自己相関関数を演算する）。そして、自己相関関数の演算結果がピーク値を示すオフセット量から音声波形周期を算出する。ここで、オフセット８０の波形ＳＢまでしか繰り返さない理由は、求める音声波形周期の範囲が４０〜１２０サンプル分であるためである。
【０１７７】
図１５は、音声波形周期の算出方法を説明するための図である。図１５（Ａ）は、オフセット０のときの相関関数値が最大ピークとなった場合であり、図１５（Ｂ）は、オフセットが８０のときの相関関数値が最大ピークになった場合である。
【０１７８】
図１５（Ａ）の場合には、履歴バッファＨＴＢＦ（図１５（Ａ−１）参照）のアドレス２３０〜３９０の波形ＳＡと、オフセット０の波形ＳＢ（アドレス１１０〜２７０の波形；図１５（Ａ−２）参照）とでは、両波形ＳＡ，ＳＢにおいて斜線を付した部分と網点を付した部分も近似した波形となっていることが分かる。
【０１７９】
したがって、アドレス２３０〜３９０の波形ＳＡにおいては、図１５（Ａ−３）で斜線を付して示すように、アドレス２３０〜２７０の部分と、アドレス３５０〜３９０の部分も近似している。このことから、図１５（Ａ）の例の音声波形周期は、図１５（Ａ−４）に示すように、アドレス２７０〜３９０までの１５ミリ秒であることが分かる。
【０１８０】
また、図１５（Ｂ）の場合には、履歴バッファＨＴＢＦ（図１５（Ｂ−１）参照）のアドレス２３０〜３９０の１６０サンプル分の波形ＳＡと、オフセット８０の波形ＳＢ（アドレス１９０〜２７０の１６０サンプルの波形；図１５（Ｂ−２）参照）とでは、４０サンプル分ごとの部分においても近似した波形となっていることが分かる。
【０１８１】
したがって、アドレス２３０〜３９０の波形ＳＡにおいては、図１５（Ｂ−３）で網点を付して示すように、アドレス２３０〜２７０の部分、アドレス２７０〜３１０の部分と、アドレス３１０〜３５０の部分およびアドレス３５０〜３９０の部分の４つは互いに近似していることになる。このことから、図１５（Ｂ）の例の音声波形周期は、図１５（Ｂ−４）に示すように、アドレス３５０〜３９０までの５ミリ秒であることが分かる。
【０１８２】
以上のことから、この実施形態では、音声波形周期の値は、（１２０−オフセット）サンプル分として求めることができる。
【０１８３】
図１６に、この例の場合における音声波形周期の算出処理の一例のフローチャートを示す。
【０１８４】
先ず、オフセット０での音声信号エネルギーを算出する（ステップＳ６１）。次に、オフセット０の波形ＳＢと波形ＳＡとの自己相関関数の値を算出する（ステップＳ６２）。次に、ステップＳ６１で求めたエネルギー値を元に正規化係数を算出する（ステップＳ６３）。そして、ステップＳ６３で求めた正規化係数により、ステップＳ６２で求めたオフセット０のときの自己相関関数の値を、正規化する（ステップＳ６４）。そして、そのときに得られた正規化された自己相関関数の値をピーク値として保持する（ステップＳ６５）。
【０１８５】
次に、オフセットを２インクリメントして、上記ステップＳ６１〜６４を行なって、正規化された自己相関関数の値を求め、それまでのピーク値と比較して、それまでのピーク値よりも新たに求めた自己相関関数が大きい時には、当該新たに求めた自己相関関数の値をピーク値としてそのときのオフセットと共に保持する。この処理を、オフセット８０まで繰り返す（ステップＳ６６）。
【０１８６】
ステップＳ６６の処理が終了したら、最後まで保持されていたピーク値のときのオフセットの前後±１のオフセットの範囲で、上記ステップＳ６１〜６４における自己相関関数の値を求める演算を行ない、値が最大となるオフセットを求める（ステップＳ６７）。そして、ステップＳ６７で求めたオフセットを、１２０から減算して、音声波形周期分のサンプル数を求める（ステップＳ６８）。以上で、音声波形周期の演算処理を終了する。
【０１８７】
この音声波形周期の算出結果は、音声データ合成処理部５０５２および音声データ廃棄処理部５０５３に通知されて、音声データの合成処理および音声データの廃棄処理が、当該音声波形周期単位で実行されるようにされる。
【０１８８】
＜正常再生音声データ出力処理および合成音声データ処理＞
次に、バッファ出力データ処理制御部５０５が、揺らぎ吸収バッファ５０２（ＲＴＰ受信バッファ）からのパケットを受信したときは、正常処理を行ない、受信できなかったときには、合成音声信号を生成する処理について説明する。この処理は、図８および図９に示した揺らぎ吸収バッファ５０２のバッファサイズ変更制御処理に併せて行なわれるのは、前述した通りである。
【０１８９】
図１７は、バッファ出力データ処理制御部５０５における処理のメインルーチンを示すフローチャートである。この図１７のバッファ出力処理制御部５０５における処理は、設定された割り込み周期で起動される。この例では、この割り込み周期は、音声パケットサイズに合わせたものとされている。なお、割り込み周期は、音声パケットサイズと一致させなくても勿論よい。
【０１９０】
まず、ＲＴＰ受信バッファを検索する（ステップＳ７１）。そして、バッファ参照フラグが「ＴＲＵＥ」であるか「ＦＡＬＳＥ」であるか判別する（ステップＳ７２）。バッファ参照フラグが「ＴＲＵＥ」であった場合には、バッファ出力データ処理制御部５０５では後述する正常フレーム処理を行なう（ステップＳ７３）。また、バッファ参照フラグが「ＦＡＬＳＥ」であった場合には、バッファ出力データ処理制御部５０５では、再生すべき音声データがないと判断して、後述する異常フレーム処理を行なう（ステップＳ７４）。なお、ここで、フレームは、パケットと同義の意味として用いている。
【０１９１】
そして、ステップＳ７３およびステップＳ７４の処理の後、これらステップＳ７３、ステップＳ７４での処理結果の音声データをデータデコード処理部５０６（コーデック部に相当）に渡す。そして、この例では、割り込み周期分である１パケット分の時間を待ち（ステップＳ７６）、ステップＳ７１に戻って、以上の処理を繰り返す。
【０１９２】
＜ステップＳ７３の正常フレーム処理＞
ステップＳ７３の正常フレーム処理について、図１８および図１９のフローチャートを参照して説明する。
【０１９３】
先ず、揺らぎ吸収バッファ５０２からの音声パケットデータを受信する（ステップＳ８１）。次に、直前はデータロスのため、合成音声信号が出力されていたか否か判別する（ステップＳ８２）。直前は、データロスではなかったときには、受信した音声パケットデータを、履歴バッファＨＴＢＦに追加すると共にデータデコード処理部５０６に送る（ステップＳ９０）。また、このとき、揺らぎ吸収制御部５０４は、管理上、揺らぎ吸収バッファ５０２の蓄積パケット数をデクリメントすると共に、参照インデックスをインクリメントする。バッファ出力データ処理制御部５０５からのパケット取得要求があったときには、参照インデックスから音声パケットを読み出すものである。
【０１９４】
なお、音声データは、オーディオポートに送られる前に、例えば３０サンプル分遅延される。この遅延により、次フレーム（次パケット）が合成音声信号となった場合に、この遅延区間を波形合成することにより、波形が滑らかに遷移するようになる。
【０１９５】
ステップＳ８２で、直前はデータロスであったため、合成音声信号が出力されていたと判別したときには、受信パケットのシーケンス番号が、合成音声信号が出力される前に受信されて出力された受信パケットのシーケンス番号に連続するシーケンス番号であるか、不連続のシーケンス番号であるかを判別する（ステップＳ８３）。
【０１９６】
ステップＳ８３で、連続するシーケンス番号であると判別したときには、合成音声信号が、前の受信パケットと波形的に連続するように、前の受信パケットから求められた音声周期に基づいて生成されたパケット単位データであることから、受信パケットは、そのまま波形的に連続するものと考えられるが、より波形を滑らかに遷移させるようにするため、この例では、先に出力された合成音声信号と受信パケットの音声データとは波形合成するようにする。
【０１９７】
すなわち、先ず、先に出力された合成音声信号と受信パケットとについて波形合成範囲を算出する（ステップＳ８８）。次に、先に出力された合成音声信号についての波形合成範囲を波形合成用バッファＯＬＢＦにコピーする（ステップＳ８９）。そして、波形合成範囲において、先に出力された合成音声信号と受信パケットの音声データとを波形合成する（ステップＳ９０）。そして、波形合成範囲において波形合成処理した１パケット分の受信データを履歴バッファＨＴＢＦに追加すると共に、データデコード処理部５０６に送る（ステップＳ９１）。
【０１９８】
また、ステップＳ８３で、不連続のシーケンス番号であると判別したときには、音声波形周期演算部５０５１で算出された音声波形周期を取得する（ステップＳ８４）。そして、音声波形周期は、パケットサイズである８０サンプルに対してどのような値であるか判別する（ステップＳ８５）。
【０１９９】
ステップＳ８５で、音声波形周期が丁度８０サンプル分で、パケットサイズと等しいと判別されたときには、合成音声信号が音声周期単位で生成されていることから、そのまま波形的に連続するものと考えられるが、より波形を滑らかに遷移させるようにするため、この例では、先に出力された合成音声信号と受信パケットの音声データとは波形合成するようにする。
【０２００】
すなわち、ステップＳ８５からステップＳ８８に飛び、前述したステップＳ８８〜ステップＳ９１の処理を行なうようにする。
【０２０１】
また、ステップＳ８５で、音声波形周期が８０サンプル分よりも短い周期であると判別したときには、図２０に示すような処理を行なう。
【０２０２】
すなわち、図２０（Ａ）は、履歴バッファＨＴＢＦに格納されている過去の音声パケットデータを示すものであり、この例では、最新のパケットデータは合成音声信号となっている。この実施形態では、音声波形周期単位で合成音声信号を生成して、パケットのつなぎ目で再生音声波形が滑らかに遷移するようにしており、合成音声信号は、図２０（Ｂ）に示すような状態で、音声波形周期単位で生成されているものである。
【０２０３】
受信パケットは、伝送系での揺らぎにより遅れて到着したものであり、図２０の例であれば、「音声２」のパケットの次の「音声３」であって、合成音声信号が算出された音声波形周期分であれば、滑らかに繋がると予想できる。
【０２０４】
しかし、合成音声信号のパケットサイズよりも音声波形周期が短いため、合成音声信号のパケットは、図２０（Ｂ）に示すように、（１音声波形周期＋残余部分）からなり、当該残余部分の存在により、そのまま「音声３」の受信パケットをつなげたのでは、波形は不連続になってしまう。
【０２０５】
そこで、この例においては、図２０（Ｃ）に示すように、「音声３」の受信パケットは、その先頭の前記残余部分に相当する部分を削除した後、合成音声信号とつなげるようにすれば、図２０（Ｄ）に示すように、音声波形周期単位で連続したものとなり、音声波形は連続性を維持することができる。ただし、合成音声信号と「音声３」の受信パケットとをより滑らかにつなげるため、この例では、合成音声信号と「音声３」の受信パケットとの間で後述するような波形合成処理を行なう。
【０２０６】
以上のことを考慮して、ステップＳ８５で、音声波形周期の値がパケットサイズである８０よりも短いときには、図２０（Ｃ）に示した残余部分に対応する削除部分ＥＲの長さ（削除レングス）を算出する（ステップＳ８６）。削除レングスは、（８０−音声波形周期）として算出することができる。そして、算出した削除レングス分を、受信パケットの先頭から削除する（ステップＳ８７）。
【０２０７】
そして、合成音声信号と受信パケットとについて波形合成範囲を算出する（ステップＳ８８）。次に、合成音声信号についての波形合成範囲を波形合成用バッファＯＬＢＦにコピーする（ステップＳ８９）。そして、波形合成範囲において、波形合成用バッファＯＬＢＦの音声データと受信パケットの音声データとを波形合成する（ステップＳ９０）。そして、波形合成範囲において波形合成処理した１パケット分の受信データを履歴バッファＨＴＢＦに追加すると共に、データデコード処理部５０６に送る（ステップＳ９１）。
【０２０８】
また、ステップＳ８５で、音声波形周期が８０サンプル分よりも長い周期であると判別したときには、図２１に示すような処理を行なう。
【０２０９】
すなわち、図２１（Ａ）は、履歴バッファＨＴＢＦに格納されている過去の音声パケットデータを示すものであり、この例では、最新のパケットデータは合成音声信号となっている。この実施形態では、音声波形周期単位で合成音声信号を生成して、パケットのつなぎ目で再生音声波形が滑らかに遷移するようにしており、合成音声信号は、図２１（Ｂ）に示すような状態で、音声波形周期単位で生成されているものである。
【０２１０】
受信パケットは、伝送系での揺らぎにより遅れて到着したものであり、図２１の例であれば、「音声２」のパケットの次の「音声３」であって、合成音声信号が算出された音声波形周期分であれば、滑らかに繋がると予想できる。
【０２１１】
しかし、合成音声信号のパケットサイズよりも音声波形周期が長いため、合成音声信号のパケットは、図２１（Ｂ）に示すように、（１音声波形周期−不足部分）からなり、当該不足部分の存在により、そのまま「音声３」の受信パケットをつなげたのでは、波形は不連続になってしまう。
【０２１２】
そこで、この例においては、図２１（Ｃ）に示すように、「音声３」の受信パケットは、そのパケットの前に前記不足部分に相当する部分を追加した後、合成音声信号とつなげるようにすれば、図２１（Ｄ）に示すように、音声波形周期単位で連続したものとなり、音声波形は連続性を維持することができる。ただし、合成音声信号と「音声３」の受信パケットとをより滑らかにつなげるため、この例では、合成音声信号と「音声３」の受信パケットとの間で後述するような波形合成処理を行なう。
【０２１３】
以上のことを考慮して、ステップＳ８５で、音声波形周期の値がパケットサイズである８０よりも長いときには、図２１（Ｃ）に示した不足部分に対応する追加部分の長さ（追加レングス）を算出する（図１９のステップＳ１０１）。追加レングスは、（音声波形周期−８０）として算出することができる。そして、算出した追加レングス分を、図２１（Ｃ）に示すように、「音声２」のパケットの最後の相当分として抽出してコピーすることにより、受信パケットの先頭に追加する（ステップＳ１０２）。
【０２１４】
そして、追加したデータ部分を適当に波形減衰させ（ステップＳ１０３）、それを履歴バッファＨＴＢＦに追加する（ステップＳ１０４）。その後、追加部分と受信パケットとについて波形合成範囲を算出する（ステップＳ１０５）。次に、波形合成範囲を波形合成用バッファＯＬＢＦにコピーする（ステップＳ１０６）。そして、波形合成範囲において、波形合成用バッファの音声データと受信パケットの音声データとを波形合成する（ステップＳ１０７）。そして、波形合成範囲において波形合成処理した１パケット分の受信データを履歴バッファＨＴＢＦに追加すると共に、データデコード処理部５０６に送る（図１８のステップＳ９０）。
【０２１５】
図２２は、この波形合成処理を説明するための図であり、この図２２の例は、音声波形周期がパケットサイズである８０よりも短い場合である。
【０２１６】
すなわち、図２２（Ａ）は、波形合成処理前の履歴バッファＨＴＢＦの記憶内容およびピッチバッファＰｉＢＦの記憶内容を説明するための図である。ピッチバッファＰｉＢＦの記憶内容は、後述する合成処理（図２４〜図２８参照）を行なった後の記憶内容であり、ｐｉｓｔは、音声波形周期のデータのスタートアドレス、ｐｏｆｓは、スタートアドレスｐｉｓｔよりも（パケットサイズ−音声波形周期）分だけ離れたアドレス、ｐｅｎｄは、ピッチバッファＰｉＢＦの終わりのアドレスである。
【０２１７】
履歴バッファＨＴＢＦの記憶内容である合成信号（１パケット分）は、ピッチバッファＰｉＢＦの１周期分の音声波形データを、スタートアドレスｐｉｓｔからエンドアドレスｐｅｎｄに向かって、その間を繰り返すことにより得られるもので、１周期分に対してｐｉｓｔ−ｐｏｆｓだけの差分が追加あるいは削除されたものに等しい。つまり、履歴バッファＨＴＢＦの最後尾の音声データサンプルは、アドレスｐｏｆｓのサンプルに等しい。
【０２１８】
したがって、波形合成範囲は、図２２（Ｂ）に示すように、ピッチバッファＰｉＢＦのアドレスｐｏｆｓから所定時間分（例えば、音声波形周期の１／４）とされる部分ｏｌａｐとされ、この部分ｏｌａｐが波形合成用バッファＯＬＢＦにコピーされる。
【０２１９】
そして、図２２（Ｃ）に示すように、波形合成用バッファＯＬＢＦにコピーされた部分ｏｌａｐと、受信パケットの音声データの対応する範囲部分が波形合成され、その波形合成結果が、受信パケットの音声データの対応する範囲部分に書き戻される。
【０２２０】
そして、このようにして、先頭の波形合成範囲のデータについて波形合成が行なわれた受信パケットが、図２２（Ｄ）に示すようにして、履歴バッファＨＴＢＦに追加されるものである。
【０２２１】
波形合成処理は、図２３に示すようにして行なわれる。すなわち、図２３は、波形Ａと波形Ｂとを合成する場合を示すものである。ここで、図２３（Ａ）に示す波形Ａは、履歴バッファＨＴＢＦに記憶されている音声データ、図２３（Ｂ）に示す波形Ｂは、受信パケットの音声データとする。
【０２２２】
先ず、波形Ａは、図２３（Ｃ）に示すように、徐々に減衰するゲイン特性を掛け算して、図２３（Ｅ）に示すように、徐々に振幅が減衰する波形の信号に変換する。また、波形Ｂは、図２３（Ｄ）に示すように、徐々に上昇するゲイン特性を掛け算して、図２３（Ｆ）に示すように、徐々に振幅が大きくなる波形の信号に変換する。そして、図２３（Ｅ）おおび（Ｆ）の波形を掛け算することにより、両波形を合成して、図２３（Ｇ）に示すような合成波形を得る。この合成波形は、波形Ａの信号から波形Ｂの信号に連続性を保持して滑らかに変化するものとなる。
【０２２３】
＜ステップＳ７４の異常フレーム処理＞
図２４および図２５は、バッファ出力データ処理制御部５０５におけるステップＳ７４の異常フレーム処理の詳細例を示すフローチャートである。また、図２６〜図２８は、その処理内容を説明するための図である。以下、これらの図を参照しながら、ステップＳ７４の異常フレーム処理の例について説明する。
【０２２４】
先ず、揺らぎ吸収バッファ５０２から受信できなかったパケットが１個目であるか否か判別する（ステップＳ１１１）。１個目であると判別したときには、履歴バッファＨＴＢＦの内容をピッチバッファＰｉＢＦにコピーする（ステップＳ１１２；図２６（Ａ）参照）。そして、音声波形周期演算部５０５１から算出された音声波形周期を取得する（ステップＳ１１３）。
【０２２５】
次に、ピッチバッファＰｉＢＦにコピーされた音声データの最後の部分（最新部分）について、波形合成範囲部分ｐｏｖｌを算出し（ステップＳ１１４）、算出した波形合成範囲部分ｐｏｖｌをバッファｌａｓｔｑにコピーしておく（ステップＳ１１５；図２６（Ｂ）参照）。この例では、波形合成範囲は、前述したように、音声波形周期の１／４とされている。
【０２２６】
次に、図２６（Ｃ）に示すように、ピッチバッファＰｉＢＦの最新の音声波形周期分よりも前の波形合成範囲分ｐｏｖｌと、バッファｌａｓｔｑにコピーされた波形合成範囲ｐｏｖｌとについて前述した波形合成処理を行ない、その波形合成結果を、ピッチバッファＰｉＢＦの最新の音声波形周期分のうちの最後尾の波形合成範囲分ｐｏｖｌに書き戻す（ステップＳ１１６）。
【０２２７】
次に、ステップＳ１１６で書き戻されたピッチバッファＰｉＢＦの最新の音声波形周期分のうちの最後尾の波形合成範囲分ｐｏｖｌを、履歴バッファＨＴＢＦに追加すると共にデータデコード処理部５０６に送出する（ステップＳ１１７；図２６（Ｄ）参照）。
【０２２８】
次に、ピッチバッファＰｉＢＦの最新の音声波形周期分を、図２６（Ｅ）に示すように、アドレスｐｉｓｔからｐｅｎｄ（＝３９０）までを繰り返し読み出すようにして、１パケット分をピッチバッファＰｉＢＦから読み出し（ステップＳ１１８）、読み出した１パケット分の合成音声信号を、１パケット分の容量の出力バッファＯＵＴを介してデータデコード処理部５０６に送出すると共に、履歴バッファＨＴＢＦに追加する（ステップＳ１１９）。
【０２２９】
次に、ステップＳ１１１で、パケットデータの受信を失敗したのは１回目ではないと判別したときには、パケットデータの受信を失敗したのは、連続した２回あるいは３回であるかどうか判別し（ステップＳ１２０）、そうであると判別したときには、ピッチバッファＰｉＢＦの最新の音声波形周期分から、波形合成範囲部分を算出して、それをバッファｔｍｐにコピーしておく（ステップＳ１２１；図２７（Ａ）および（Ｂ）参照）。
【０２３０】
すなわち、図２７（Ａ）は、このときの履歴バッファＨＴＢＦの記憶内容およびピッチバッファＰｉＢＦの記憶内容であり、連続した２回目の受信パケットの取得を失敗した場合である。このピッチバッファＰｉＢＦの記憶内容は、前述した１回目のパケット受信の失敗における処理を行なった後の記憶内容であり、ｐｉｓｔは、音声波形周期のデータのスタートアドレス、ｐｏｆｓは、スタートアドレスｐｉｓｔよりも（パケットサイズ−音声波形周期）分だけ離れたアドレス、ｐｅｎｄは、ピッチバッファＰｉＢＦの終わりのアドレス（＝３９０）である。
【０２３１】
前述したように、履歴バッファＨＴＢＦの記憶内容である合成信号（１パケット分）は、ピッチバッファＰｉＢＦの１周期分の音声波形データを、スタートアドレスｐｉｓｔからエンドアドレスｐｅｎｄに向かって、その間を繰り返すことにより得られるもので、１周期分に対してｐｉｓｔ−ｐｏｆｓだけの差分が追加あるいは削除されたものに等しく、履歴バッファＨＴＢＦの最後尾の音声データサンプルは、アドレスｐｏｆｓのサンプルに等しい。
【０２３２】
したがって、波形合成範囲は、図２７（Ｂ）に示すように、ピッチバッファＰｉＢＦのアドレスｐｏｆｓから所定時間分（例えば、音声波形周期の１／４）とされる部分ｐｏｖｌとされ、この部分ｐｏｖｌが一時バッファｔｍｐにコピーされる。
【０２３３】
次に、ピッチバッファＰｉＢＦの最終アドレスｐｅｎｄから、連続２回目の受信失敗の場合には２音声波形周期分前、連続３回目の受信失敗の場合には３音声波形周期分前、のアドレスを算出し、それをアドレスｐｉｓｔとすると共に、そのアドレスｐｉｓｔよりもさらに、所定時間分（例えば、音声波形周期の１／４）前までの部分を波形合成範囲ｐｏｖｌとする（ステップＳ１２２）。連続２回目の受信失敗の場合を図２７（Ｃ）の上側に示す。
【０２３４】
そして、図２７（Ｃ）に示すように、ステップＳ１２２で求めた波形合成範囲ｐｏｖｌと、１回目のパケット受信失敗の際にコピーして保存したバッファｌａｓｔｑの波形合成範囲ｐｏｖｌとを、前述の図２３を用いて説明したようにして波形合成し、当該波形合成結果を、ピッチバッファＰｉＢＦのアドレスｐｅｎｄの前の波形合成範囲ｐｏｖｌの部分に書き戻す（ステップＳ１２３）。
【０２３５】
次に、ピッチバッファＰｉＢＦから１パケット分の合成音声信号を読み出して、１パケット分の容量のバッファＯＵＴに書き込む（ステップＳ１２４）。このとき、１パケット分の音声データのピッチバッファＰｉＢＦからの読み出しは、連続２回目の受信失敗の場合であれば、図２７（Ｄ）に示すように、ピッチバッファＰｉＢＦのアドレスｐｏｆｓ（ｐｅｎｄよりも波形合成範囲ｐｏｖｌ分手前のアドレス）から開始し、アドレスｐｅｎｄになったら、このアドレスｐｅｎｄから２音声波形周期前のアドレスｐｉｓｔに飛び、それ以降は、アドレスｐｅｎｄの方向に向かって順次行われる。
【０２３６】
連続３回目の受信失敗の場合には、ピッチバッファＰｉＢｆにおける上記アドレスｐｉｓｔがアドレスｐｅｎｄから３音声波形周期前のアドレスになる点が異なるだけでその他は、同様である。
【０２３７】
次に、図２７（Ｅ）に示すように、バッファＯＵＴの先頭の波形合成範囲分ｐｏｖｌのデータと、一時バッファｔｍｐにコピーされた波形合成範囲分ｐｏｖｌのデータとについて、前述の図２３を用いて説明したようにして波形合成し、当該波形合成結果を、バッファＯＵＴの先頭の波形合成範囲分ｐｏｖｌに書き戻す（ステップＳ１２５）。そして、このバッファＯＵＴの合成音声信号データを、例えば全体を２０％減衰させた後（ステップＳ１２６）、履歴バッファＨＴＢＦに追加すると共に、データデコード処理部５０６に出力する（ステップＳ１１９）。
【０２３８】
また、ステップＳ１２０で、連続してパケットの受信を失敗したのは２〜３回目ではないと判別したときには、連続してパケットの受信を失敗したのは４〜５回目であるか否か判別し（図２５のステップＳ１３１）、そうであれば、図２８に示すように、そのときのピッチバッファＰｉＢＦに格納されている音声データのうちの、アドレスｐｅｎｄから３音声波形周期前までの音声データから、１パケット分の音声信号を読み出す（ステップＳ１３２）。
【０２３９】
このとき、１パケット分の音声データのピッチバッファＰｉＢＦからの読み出しは、図２８に示すように、ピッチバッファＰｉＢＦのアドレスｐｏｆｓ（ｐｅｎｄよりも波形合成範囲ｐｏｖｌ分手前のアドレス）から開始し、アドレスｐｅｎｄになったら、このアドレスｐｅｎｄから３音声波形周期前のアドレスｐｉｓｔに飛び、それ以降は、アドレスｐｅｎｄの方向に向かって順次行われる。
【０２４０】
次に、ステップＳ１３２で読み出した１パケット分の音声データの全体を６０％減衰した後（ステップＳ１３３）、履歴バッファＨＴＢＦに追加すると共に、データデコード処理部５０６に出力する（ステップＳ１３４）。
【０２４１】
また、ステップＳ１３１で、連続して受信パケットの受信を失敗したのは、４〜５回ではなく、６回以上であると判別したときには、１パケット分のデータとして全て「０」（無音）を出力バッファＯＵＴに書き込み（ステップＳ１３５）、それを履歴バッファＨＴＢＦに追加すると共に、データデコード処理部５０６に出力する（ステップＳ１３４）。
【０２４２】
上述のようにして、この実施形態では、合成音声信号は、音声波形周期単位で生成して、出力するようにしているので、音声波形は、連続性が保持される。また、この実施形態では、受信パケットの受信を２〜３回連続して失敗したときには、１回目の受信失敗の際に用いた音声波形周期のデータを、そのまま用いずに、ピッチバッファＰｉＢＦに格納されている２音声波形周期分の音声データ、３音声波形周期分の音声データをも用いるようにしたことにより、合成音声信号が人工音になってしまうことを防止している。
【０２４３】
［音声データの廃棄］
前述したように、バッファ出力データ処理制御部５０５は、揺らぎ吸収制御部５０４からの割り込みによる廃棄要求に基づいて、音声波形周期単位の音声データの廃棄処理を行なう。この廃棄処理は、音声データ廃棄処理部５０５３が行なうものである。
【０２４４】
図２９および図３０、図３１は、この音声波形周期単位の音声データの廃棄処理を説明するためのフローチャートである。また、図３２および図３３は、このときの廃棄処理の様子を説明するための図である。
【０２４５】
バッファ出力データ処理制御部５０５では、まず、揺らぎ吸収制御部５０４からの廃棄要求に含まれる廃棄レングス（データ廃棄のために揺らぎ吸収バッファ５０２から強制送出されるパケット数に応じたデータ量）を受信し、それをバッファに保持する（ステップＳ１４１）。
【０２４６】
次に、揺らぎ吸収バッファ５０２から送出されてくる音声パケットデータを受信し（ステップＳ１４２）、音声波形周期単位の音声データの廃棄処理を行なう（ステップＳ１４３）。そして、ステップＳ１４１で保持した廃棄レングス分の処理が終了したか否か判別し（ステップＳ１４４）、終了していなければ、ステップＳ１４２に戻って、ステップＳ１４２とステップＳ１４３を繰り返し行ない、終了したと判別したときには、この廃棄処理ルーチンを終了する。
【０２４７】
次に、ステップＳ１４３における音声波形周期単位の音声データの廃棄処理を、図３０および図３１のフローチャートおよび図３２および図３３を参照して説明する。図３０および図３１のフローチャートは、１パケット分ごとに実行されるものである。
【０２４８】
すなわち、先ず、音声データ廃棄処理部では、周期残余データがあるか否か判別する（ステップＳ１５１）。ここで、周期残余データは、音声波形周期単位でデータ廃棄を行なったときに、音声波形周期が１パケットよりも長い場合には、１パケット分の音声サンプルデータの廃棄では１音声波形周期分の廃棄とはならず、廃棄しなければならない部分が残るが、当該残った部分を指す。
【０２４９】
このステップＳ１５１で、周期残余データが「０」であると判別したときには、廃棄カウンタが最大値であるか否か判別する（ステップＳ１５２）。ここで、廃棄カウンタは、毎回パケットデータを破棄してしまうと、早送り音声のように不自然な音声となってしまうので、それを避けるために、破棄するパケットの間隔を設定するためのものであり、廃棄カウンタのカウント値が、設定された最大値になったときに、廃棄を実行するようにするものである。この例では、廃棄カウンタの最大値は、例えば「１」に設定されている。なお、揺らぎ吸収制御部５０４において決定する廃棄パケット数は、設定される廃棄カウンタのカウント値の最大値に応じて決定されるものである。
【０２５０】
ステップＳ１５２で、廃棄カウンタのカウント値が最大値になっていると判別したときには、廃棄カウンタのカウント値をリセットして「０」にした後（ステップＳ１５３）、音声波形周期を音声波形周期演算部５０５１から取得する（ステップＳ１５４）。
【０２５１】
次に、波形合成のための波形合成範囲データを、履歴バッファＨＴＢＦの最後尾の（音声波形周期／４）分に更新しておく（ステップＳ１５５）。次に、音声波形周期の値を検知し、パケットサイズである８０サンプル分未満か、あるいは、８０サンプル分以上であるかを判別する（ステップＳ１５６）。
【０２５２】
ステップＳ１５６で、音声波形周期が８０サンプル分未満であると判別したときには、受信パケットのデータの先頭から音声波形周期分を削除（廃棄）する（ステップＳ１５７）。そして、履歴バッファＨＴＢＦの最後のデータと、波形合成する波形合成範囲を算出する（ステップＳ１５８）。このとき、（８０（１パケット分のサンプル数）−音声波形周期分のサンプル数）が、（音声波形周期／４）分よりも大きいときには、（音声波形周期／４）分を波形合成範囲とし、（音声波形周期／４）分よりも小さいときには、（８０−音声波形周期分のサンプル数）分を波形合成範囲とする。
【０２５３】
次に求めた波形合成範囲の音声データを履歴バッファＨＴＢＦから波形合成用バッファにコピーし（ステップＳ１５９）、コピーされた波形合成用バッファのデータと、受信パケットのうちの廃棄されずに残った（８０−音声波形周期分のサンプル数）分とを、前述と同様にして波形合成する（ステップＳ１６０）。
【０２５４】
そして、波形合成後の受信パケットのうちの廃棄されずに残った（８０−音声波形周期分のサンプル数）分を履歴バッファＨＴＢＦに追加すると共に、データデコード処理部５０６に出力する（ステップＳ１６１）。そして、バッファに記憶された廃棄レングスの値から、廃棄した１音声波形周期分を減算する（ステップＳ１６２）。そして、この１パケット分の廃棄処理ルーチンを終了する。
【０２５５】
ステップＳ１５６で、音声波形周期の値が８０以上であると判別したときには、（音声波形周期分のサンプル数−８０（１パケット分のサンプル数））を、周期残余データとして保持する（ステップＳ１６３）。そして、バッファに記憶された廃棄レングスの値から、廃棄した１音声波形周期分を減算する（ステップＳ１６４）。そして、この１パケット分の廃棄処理ルーチンを終了する。
【０２５６】
また、ステップＳ１５２で、破棄カウンタのカウント値は、最大値ではないと判別したときには、受信パケットは、廃棄対象とはしないので、廃棄カウンタを１だけインクリメントし（ステップＳ１６５）、受信パケットを履歴バッファＨＴＢＦに追加すると共にデータデコード処理部５０６に出力するようにする（ステップＳ１６６）。そして、この１パケット分の廃棄処理ルーチンを終了する。
【０２５７】
また、ステップＳ１５１で、周期残余データが「０」ではないと判別したときには、受信パケットの先頭から周期残余データ分のサンプルを削除（廃棄）する（図３１のステップＳ１７１）。
【０２５８】
次に、周期残余分を削除した受信パケットのデータについて、波形合成範囲を算出し（ステップＳ１７２）、算出した波形合成範囲の音声データ分を履歴バッファＨＴＢＦから波形合成用バッファにコピーし（ステップＳ１７３）、コピーされた波形合成用バッファのデータと、受信パケットのうちの廃棄されずに残った（８０−周期残余データサンプル数）分とを、前述と同様にして波形合成する（ステップＳ１７４）。
【０２５９】
そして、波形合成後の受信パケットのうちの廃棄されずに残った（８０−周期残余データサンプル数）分を履歴バッファＨＴＢＦに追加すると共に、データデコード処理部５０６に出力する（ステップＳ１７５）。そして、バッファに記憶された廃棄レングスの値から、廃棄した周期残用データサンプル分を減算する（ステップＳ１７６）。そして、周期残余データの値を「０」にした後（ステップＳ１７７）、この１パケット分の廃棄処理ルーチンを終了する。
【０２６０】
以上説明した音声データの廃棄処理を図３２および図３３を参照してさらに説明する。図３２は、音声波形周期がパケットサイズ＝８０サンプルよりも短い場合の廃棄処理を説明するための図である。
【０２６１】
すなわち、図３２の例においては、図３２（Ａ）に示すように、音声２のパケットの受信処理の後、データ廃棄要求が到来した場合である。このときは、図３２（Ｃ）に示すように、音声３のパケットの先頭から音声波形周期分の音声データを廃棄する。廃棄されずに残った音声３の部分は、図３２（Ｄ）に示すように、履歴バッファＨＴＢＦに追加される。
【０２６２】
このとき、図３２（Ｂ）と図３２（Ｃ）とから分かるように、廃棄されたのが、音声波形周期分であるので、音声２と廃棄されずに残った音声３とは、音声波形周期でみると連続したものとなり、しかも、音声２と廃棄されずに残った音声３との間で波形合成処理がなされることにより、波形は、滑らかに連続するものとなる。
【０２６３】
そして、音声３のパケットについてデータ廃棄がなされたときに廃棄カウンタがリセットされるため、音声４のパケットは、データ廃棄の対象とはならず、図３２（Ｄ）に示すように、そのまま履歴バッファＨＴＢＦに追加される。そして、図３２（Ｃ）に示すように、次の音声５のパケットについて、音声３のパケットと同様の処理がなされる。以下、廃棄レングス分の処理が終了するまで、以上の処理が繰り返し行われる。
【０２６４】
次に、図３３は、音声波形周期がパケットサイズ＝８０サンプル以上である場合の廃棄処理を説明するための図である。
【０２６５】
すなわち、図３３の例においても、図３３（Ａ）に示すように、音声２のパケットの受信処理の後、データ廃棄要求が到来した場合である。このときは、図３３（Ｃ）に示すように、音声波形周期がパケットサイズ以上であるので、音声３のパケット全部の音声データを廃棄すると共に、次の音声４のパケットの先頭から、周期残余データ分を廃棄するようにする。
【０２６６】
そして、廃棄されずに残った音声４の部分は、図３３（Ｄ）に示すように、履歴バッファＨＴＢＦに追加される。この場合、当該音声４の部分が音声２の後に追加されることになるが、音声波形周期単位の破棄であるので、波形の連続性が保持されると共に、音声２と廃棄されずに残った音声４との間で波形合成処理がなされることにより、波形は、滑らかに連続するものとなる。
【０２６７】
そして、以上の処理が廃棄レングス分の処理が終了するまで、繰り返し行われる。
【０２６８】
以上説明したように、廃棄レングスが複数個の音声パケット分となる場合であっても、それら全ての音声パケットのデータが廃棄されるのではなく、音声波形周期単位の廃棄であるので、再生音は、ノイズが少なく、かつ、聞きやすいものとなる。
【０２６９】
［その他の変形例］
以上説明した実施形態は、揺らぎ吸収バッファのバッファサイズを、発生する揺らぎに応じて動的に変更制御するようにする場合であるが、揺らぎ吸収バッファのバッファサイズが固定であって、揺らぎ吸収バッファに蓄積される音声パケット数が最大蓄積パケット数を越えたときには、所定数の音声パケット分のデータを廃棄するようにする場合にも、この発明は適用できる。
【０２７０】
また、揺らぎ吸収バッファのバッファサイズが固定であって、揺らぎ吸収バッファに、開始蓄積パケット数の音声パケットが蓄積されてから、揺らぎ吸収バッファからの音声パケットの読み出しを開始し、揺らぎ吸収バッファに蓄積される音声パケット数が開始蓄積パケット数よりも少なくなり、揺らぎ吸収バッファからリアルタイムで再生されるべき音声信号が読み出されなくなったときには、合成音声信号をリアルタイムで再生する音声信号とするようにする場合にも、この発明は適用できる。
【０２７１】
また、この発明は、ＬＡＮを通じてリアルタイム再生が必要なデータを伝送する際において、ＬＡＮ上で発生する揺らぎについて適用可能であるので、上述の実施形態で説明したＶｏＩＰ電話システムにのみ適用される場合のみに、この発明が限られるものではないことは言うまでもない。
【図面の簡単な説明】
【０２７２】
【図１】この発明の適用例としてのＶｏＩＰ電話システムの構成例を示す図である。
【図２】図１の例のＶｏＩＰ電話システムを構成するゲートキーパーの構成例を示すブロック図である。
【図３】図１の例のＶＯＩＰ電話システムを構成する電話端末の構成例を示すブロック図である。
【図４】図１の例のＶＯＩＰ電話システムを構成するゲートウエイの構成例を示すブロック図である。
【図５】この発明の実施の形態における揺らぎ吸収バッファの構成を説明するための図である。
【図６】この発明の実施の形態における揺らぎ吸収制御装置の構成を説明するためのブロック図である。
【図７】この発明の実施の形態における揺らぎ吸収制御方法の一部を説明するためのフローチャートである。
【図８】この発明の実施の形態における揺らぎ吸収制御方法を説明するためのフローチャートの一部である。
【図９】この発明の実施の形態における揺らぎ吸収制御方法を説明するためのフローチャートの一部である。
【図１０】この発明の実施の形態が適用された揺らぎ吸収バッファにおける蓄積パケットの変化およびバッファサイズの変更制御を説明するための図である。
【図１１】この発明の実施の形態が適用された揺らぎ吸収バッファにおける蓄積パケットの変化およびバッファサイズの変更制御を説明するための図である。
【図１２】この発明の実施の形態が適用された揺らぎ吸収バッファにおける蓄積パケットの変化およびバッファサイズの変更制御を説明するための図である。
【図１３】この発明の実施の形態における揺らぎ吸収制御装置の要部の構成を説明するためのブロック図である。
【図１４】この発明の実施の形態における音声波形周期算出処理を説明するための図である。
【図１５】この発明の実施の形態における音声波形周期算出処理を説明するための図である。
【図１６】この発明の実施の形態における音声波形周期算出処理を説明するためのフローチャートである。
【図１７】この発明の実施の形態の揺らぎ吸収制御方法を説明するためのフローチャートである。
【図１８】この発明の実施の形態の揺らぎ吸収制御方法を説明するためのフローチャートである。
【図１９】この発明の実施の形態の揺らぎ吸収制御方法を説明するためのフローチャートである。
【図２０】この発明の実施の形態の揺らぎ吸収制御方法におけるパケットデータの処理手順を説明するための図である。
【図２１】この発明の実施の形態の揺らぎ吸収制御方法におけるパケットデータの処理手順を説明するための図である。
【図２２】この発明の実施の形態の揺らぎ吸収制御方法におけるパケットデータの処理手順を説明するための図である。
【図２３】この発明の実施の形態の揺らぎ吸収制御方法における波形合成処理を説明するための図である。
【図２４】この発明の実施の形態の揺らぎ吸収制御方法を説明するためのフローチャートの一部である。
【図２５】この発明の実施の形態の揺らぎ吸収制御方法を説明するためのフローチャートの一部である。
【図２６】この発明の実施の形態の揺らぎ吸収制御方法におけるパケットデータの処理手順を説明するための図である。
【図２７】この発明の実施の形態の揺らぎ吸収制御方法におけるパケットデータの処理手順を説明するための図である。
【図２８】この発明の実施の形態の揺らぎ吸収制御方法におけるパケットデータの処理手順を説明するための図である。
【図２９】この発明の実施の形態の揺らぎ吸収制御方法を説明するためのフローチャートである。
【図３０】この発明の実施の形態の揺らぎ吸収制御方法を説明するためのフローチャートの一部である。
【図３１】この発明の実施の形態の揺らぎ吸収制御方法を説明するためのフローチャートの一部である。
【図３２】この発明の実施の形態の揺らぎ吸収制御方法におけるパケットデータの処理手順を説明するための図である。
【図３３】この発明の実施の形態の揺らぎ吸収制御方法におけるパケットデータの処理手順を説明するための図である。
【図３４】従来の揺らぎ吸収制御方法を説明するためのシーケンス図である。
【図３５】従来の揺らぎ吸収制御方法を説明するための図である。
【図３６】従来の揺らぎ吸収制御方法を説明するためのフローチャートである。
【符号の説明】
【０２７３】
１  ゲートキーパー
２  電話端末
３  ＩＰネットワークを構成するＬＡＮ
４  ゲートウエイ
２１０，４１０  ＣＰＵ
２２１、４１７  揺らぎ吸収バッファを構成するＲＴＰ受信バッファ
５０２  揺らぎ吸収バッファ
５０３  揺らぎ検出部
５０４  揺らぎ吸収制御部
５０５  バッファ出力データ処理制御部
５０６  データデコード処理部
５０５１  音声波形周期演算部
５０５２  音声データ合成処理部
５０５３  音声データ廃棄処理部
５０５４  処理判断部
【図１】
2005318379.tif 000003
【図２】
2005318379.tif 000004
【図３】
2005318379.tif 000005
【図４】
2005318379.tif 000006
【図５】
2005318379.tif 000007
【図６】
2005318379.tif 000008
【図７】
2005318379.tif 000009
【図８】
2005318379.tif 000010
【図９】
2005318379.tif 000011
【図１０】
2005318379.tif 000012
【図１１】
2005318379.tif 000013
【図１２】
2005318379.tif 000014
【図１３】
2005318379.tif 000015
【図１４】
2005318379.tif 000016
【図１５】
2005318379.tif 000017
【図１６】
2005318379.tif 000018
【図１７】
2005318379.tif 000019
【図１８】
2005318379.tif 000020
【図１９】
2005318379.tif 000021
【図２０】
2005318379.tif 000022
【図２１】
2005318379.tif 000023
【図２２】
2005318379.tif 000024
【図２３】
2005318379.tif 000025
【図２４】
2005318379.tif 000026
【図２５】
2005318379.tif 000027
【図２６】
2005318379.tif 000028
【図２７】
2005318379.tif 000029
【図２８】
2005318379.tif 000030
【図２９】
2005318379.tif 000031
【図３０】
2005318379.tif 000032
【図３１】
2005318379.tif 000033
【図３２】
2005318379.tif 000034
【図３３】
2005318379.tif 000035
【図３４】
2005318379.tif 000036
【図３５】
2005318379.tif 000037
【図３６】
2005318379.tif 000038