• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:音声のコーデックについて)

音声コーデックについての質問

このQ&Aのポイント
  • 音声のコーデックについての質問です。G711コーデックとG729コーデックについて、それぞれのエンコード時の音声情報のサイズや帯域幅について質問させていただきました。
  • 具体的には、G711コーデックのエンコード時に20msの音声が160サンプル、8ビットから構成されることになり、その結果が160バイトの音声情報となる理由や計算方法について質問しました。
  • また、G729コーデックでは20msの音声が160サンプルで構成され、10サンプルが1つのグループとして10ビットのコードワードで表され、その結果が160ビット(20バイト)の音声情報となる理由や計算方法についても質問しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • blue_rose
  • ベストアンサー率49% (717/1445)
回答No.4

またまた#1です。 1s=1000msですよね。1000/20というのは、1秒間あたりのデータレートを求めたかったので、20msあたり160bitの場合、1000msあたり○bitなのか求めるには、 20:160=1000:○ ⇔ ○=160×1000÷20  ということです。 帯域幅というのは、本来、周波数に使われる(単位がHz)ものだと思いますが、デジタルでのデータのやり取りでは、単位時間にやり取りされるデータ量のことを指す場合もあります。混同しやすいですが、これはサンプリングやスイッチングの周波数をこのデータ量が内包していることに由来するのでしょう。 ですので、#2での8Kbpsというのは、質問文からすると帯域幅に相当しますが、きちんと基礎からデータ通信を学ぶ際には違う表現(ビットレート)になると思います。 ついでに、私の浅い知識で(3)の一部を回答しますと、 G.729を使用してのVoIP通信では、20ms分のデータを1パケットとして扱う(それ以上だと遅延を起こしやすくなるようです)ようですが、これには20ms分の音声20バイトにくわえ、通信先、通信元、大きさなどのパケットに関する情報が加わります。他にも通信手段などの情報も加わります。これらのことを情報ヘッダといいますが、今回の場合IP(パケット情報)、UDP、RTP(通信情報)が加わります。 今回、IPヘッダが20バイト、UDPヘッダは8バイト、RTPヘッダは12バイトになりますので、音声のデータ(音声ベイロード)20バイトと合わせて、音声データの3倍の60バイトになります。これをビットに直すと480ビットです。 それで1秒間にどれだけのデータを転送するかを求めると、 20:480=1000:○ → 480×1000÷20=24000 1K=1000とすると、24Kbps ということになります。 というわけで、ただ単に3倍、というわけではありません。 あまり詳しくないので、今回の説明では、G.729とG.729Annex Aを混同してしまっている部分はありますが、Layer2ヘッダのオーバヘッドがなければ同じだと思いますので・・・ 同様にして、G.711の場合は、20ms分1パケットあたり、160バイトの音声と合計40バイトの情報ヘッダで構成されるので、 200バイト=1600ビットですので、 20:1600=1000:○ → 1600×1000÷20=80000=80K → 80Kbps となります。 これは、どちらかというと、音声のコーデックというより、携帯電話やIP電話の通信部分になると思います。他のカテゴリーで質問名を変えて再度質問したほうが、よりよい回答をいただけるかもしれませんよ。

58258615
質問者

お礼

ご回答ありがとうございます。おかげさまで助かりました。わかりやすい説明で理解することができました。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

えっと.... 20ms 分のデータが 160ビットになるわけでしょ? じゃあ, 1s 分のデータは何ビットになりますか?

58258615
質問者

補足

1ms=1/1000sだから20msだと20ms=20/1000s=1/50s。50倍すると1sだから160ビットも50倍の8000ビット=8kビットとなるという感じでしょうか。

  • blue_rose
  • ベストアンサー率49% (717/1445)
回答No.2

すいません、#1です。 以下が、ビットとバイトが逆でした。#1の(2)以降は無視してください。 正しくは、 (2)10個のサンプルを1つのグループとして、1つ10ビットの情報に変換するということですので、20msの160個のサンプルが変換され、16個のサンプルになるわけです。このとき、新たなサンプルの情報は10ビットであらわされるので、 16×10=160(ビット)、160÷8=20(バイト) となります。 ここから20ms、160ビットの情報は、1K=1000としたとき、1秒あたりの情報量は、 160×(1000÷20)=8000(ビット)、8000÷1000=8(Kビット)→8Kbps となります。 すいません。

58258615
質問者

補足

ご回答ありがとうございます。解説いただいた部分の「ここから20ms、160ビットの情報は、1K=1000としたとき、1秒あたりの情報量は、160×(1000÷20)=8000(ビット)、8000÷1000=8(Kビット)→8Kbpsとなります。」についてですが、1000/20とは何を意味しているのでしょうか?また、8kbpsとは帯域幅のことを指しているのでしょうか?再度質問して申し訳ありませんが、ご教授お願いします。

  • blue_rose
  • ベストアンサー率49% (717/1445)
回答No.1

こんにちは あまり詳しくないので、(1)(2)だけ。 (1)1バイト=8ビット、ですよね。20msの間に160個のサンプルを8ビットの情報で記録するということですので、その情報総量は、 160×8=1280(ビット)、1280÷8=160(バイト) (2)10個のサンプルを1つのグループとして、1つ10ビットの情報に変換するということですので、20msの160個のサンプルが変換され、16個のサンプルになるわけです。このとき、新たなサンプルの情報は10ビットであらわされるので、 16×10=160(バイト)、160÷8=20(ビット) となります。 ここから20ms、160バイトの情報は、1K=1000としたとき、1秒間の情報量は、 160×(1000÷20)=8000(バイト)、8000÷1000=8(Kバイト)→8Kbps となります。 通信関係は全く詳しくないので・・・ 基本だけを、ということで。

関連するQ&A