音声コーデック 比較のポイント
音声帯域・サンプリング周波数
音声コーデックの分類上サンプリング周波数が8kHzのものを狭帯域(Narrow Band)コーデック, 16kHzのものを広帯域(Wide Band)コーデックと呼んでいます。(表2) 従来の電話(PSTN)の音声帯域は3.4kHzであり,会話を行うためにはこの程度の帯域があれば十分です。 そのためVoIPに使用される音声コーデックはほとんどが狭帯域コーデックに属しています。(表1)
(表2)音声帯域による分類
分類 | サンプリング周波数 | 音声帯域 |
---|---|---|
狭帯域(Narrow Band) | 8kHz | 3.4kHz |
広帯域(Wide Band) | 16kHz | 7kHz |
ビットレート,パケット長
符号データの情報量はビットレート(kbit/s)で表します。音声コーデックのビットレートはほとんどが2kbit/sから64kbit/sの間です。(表1) (図2) VoIPでは符号データにIP/UDP/RTPのヘッダ情報が加わりますので,それらの情報量を含めたビットレートを考慮する必要があります。例えば8kbit/sの音声コーデックを20msecのパケット長で使用する場合,符号データの20バイトにIPヘッダの20バイト,UDPヘッダの8バイト,RTPヘッダの12バイトが加算されて合計60バイトのパケットになります。これは24kbit/sのビットレートに相当します。同じコーデックでもパケット長を40msecにするとオーバヘッドが軽減されて16kbit/s相当になりますが,当然ながら遅延が増えてしまいます。
VAD/DTX/CNG
平均的なビットレートを下げるための技術で,無音圧縮とも呼ばれます。まずエンコーダで音声の有無を判断し(VAD), 無音の場合には背景雑音情報だけを送信するか,または全く送信せず(DTX),デコーダでは無音時の背景雑音を擬似的に生成します(CNG)。
- VAD:Voice Activity Detection(有音/無音検出)
- DTX:Discontinuous transmission(不連続送信)
- CNG:Comfort Noise Generation(雑音生成)
音声品質の評価
音声コーデックの評価にはMOSが多く使われます。 MOSは複数の人が実際に音を聞いて評価をした結果を統計的にまとめたもので1(最低)から5(最高)までの点数で表します。
背景雑音の影響・音声以外の信号
人間の発声構造をモデル化したコーデック(ボコーダ方式,ハイブリッド方式)は,人間の音声以外の信号で品質が劣化します。 特にビットレートが低い場合に顕著です。 音楽も通したい場合には波形符号化方式か,高ビットレートのハイブリッド方式のコーデックを使用すべきです。 背景雑音が大きな場所ではノイズ・キャンセラを併用すると効果があります。
タンデミング
エンコードとデコードを繰り返し行う事をタンデミングと言い,繰り返すほど品質は劣化します。 送話者と受話者で同じコーデックを使用し,途中で無駄な変換を行わないようなシステム設計が望まれます。 逆にある程度の品質劣化を容認すれば変換装置(ゲートウェイ)を経由して,異なるコーデック同士でも通話ができます。
フレーム・エラー
VoIPではRTP/UDPプロトコルが使用されるため,ネットワークの都合でパケットが破棄されてしまう事があります。 通常1パケットには20msec~200msec相当の符号データが入っているため,パケット・ロスは大きな品質劣化につながります。 フレーム単位で処理を行うコーデックにはフレーム・エラーに対応したものがあります。 デコーダに「フレーム・エラーが発生した」という情報を入力するだけで,過去の符号データから違和感の少ない音声を合成する事ができます。 サンプル単位で処理を行うコーデックではG.711 Appendix Iが利用できます。 これは過去に再生した音声を保存・分析し,パケット・エラーが発生した時に違和感の少ない音声を作り出す方法です。
遅延量
音声コーデックには原理的に避けられない遅延があり,これを原理遅延と呼びます。 その他の遅延の要素としては処理遅延,パケット化による遅延,伝送遅延,ジッタ・バッファによる遅延などがあります。 フレーム単位で処理を行うコーデックのフレーム長と原理遅延は異なりますので注意が必要です。
ジッタ
VoIPではジッタ(=遅延のゆらぎ)の影響を取り除くためにジッタ・バッファを使用します。 ジッタの低減は本来ネットワークで対応すべき問題ではありますが,音声コーデックの特徴や機能を利用する事により, 遅延や音質劣化が少ないジッタ・バッファを構成する事ができます。 サンプル単位で処理を行うコーデックではパケット単位ではなく,サンプル単位のよりきめ細かいジッタ・バッファの制御を行うようにします。 フレーム単位で処理を行うコーデックでは,前述の「フレーム・エラー対応機能」を積極的に使う事により,過度の遅延増加を抑えるようにします。
実現方法
組み込み装置ではDSP(Digital Signal Processor)や専用LSIが使用される事が多いですが,最近では汎用プロセッサが使用される事例も増えています。 パソコンやPDAで使用される機会も増えて来ています。 標準化されているコーデックは各標準化組織からソースコードを入手する事ができます。 しかしそれらはアルゴリズムの解説を目的としており,そのままでは十分な性能(演算速度)が得られません。 使用するプロセッサに合わせて最適化を行う必要があります。 特にITU-T G.723.1やG.729などはbasopという固定小数点DSP向きの演算ライブラリで記述されており,汎用プロセッサでは大きなオーバー・ヘッドになります。
標準化
不特定な人々が通話をするオープンなシステムでは標準化された音声コーデックが必要です。 VoIPではITU-T(国際電気通信連合)勧告のG.711,G.723.1,G.726,G.729 Annex Aなどが使用されます。 表3に音声コーデックの標準化を行っている組織をまとめました。これらの組織から勧告書やソースコードを入手する事ができます。 ITU-T勧告については,日本ITU協会やTTCから日本語に翻訳されたものを入手する事もできます。 紹介はできませんでしたが標準化されていない音声コーデックも多数ありますので通話範囲が限られたシステムではさらに選択肢が広がります。
(表3)音声コーデックの標準化組織
組織名 | URL |
---|---|
国際電気通信連合(ITU-T) | http://www.itu.int/ITU-T/ |
財団法人日本ITU協会 | http://www.ituaj.jp/ |
社団法人情報通信技術委員会(TTC) | http://www.ttc.or.jp/ |
社団法人電波産業会(ARIB) | http://www.arib.or.jp/ |
米国電気通信産業協会(TIA) | http://www.tiaonline.org/ |
欧州通信規格協会(ETSI) | http://www.etsi.org/ |
3GPP | http://www.3gpp.org/ |
The Department of Defense Digital Voice Processor Consortium (DDVPC) | http://maya.arcon.com/ddvpc/ (現在ページ無) |
特許
標準化されているコーデックの中にも,使用するためには特許料を支払わなければならないものがあります。 製品開発を行う場合には注意が必要です。