ADPCM

PCM

アナログ信号である音 (媒体の振動) をコンピュータで処理するためには, 0 と 1 のみの情報, すなわち, デジタル信号に変換する必要があります. その処理は, 以下の 3 つのステップになります.

  1. サンプリング
  2. 量子化
  3. 符号化

サンプリングや量子化に共通することは, 連続した信号を離散信号に変換することです. コンピューター (の内部) では連続した値や無限大となる値を扱うことが不可能だからです. さらに, 離散信号に変換することで, データサイズを圧縮することもできます. このような, 音データの圧縮方法を PCM (Pulse Code Modulation) と呼びます.

サンプリング・量子化・符号化

音信号は, 2 つの連続した物理量 (次元) をもっています. 時間振幅です. サンプリングと量子化は, 2 つの連続した物理量を離散信号に変換する処理となります.

サンプリング (標本化)

サンプリング (標本化) は, 時間を離散した値に変換する処理です. 離散信号, つまり, とびとびの値をとるためには, その間隔を決定するパラメータが必要です. それが, サンプリング周期 (標本化周期) です. また, サンプリング周期の逆数となるパラメータは, サンプリング周波数 (標本化周波数) です.

サンプリング周波数は, 1 sec のあいだに, いくつのサンプル (離散点) をとるかを表しています. 例えば, サンプリング周波数が 48000 の場合, 1 sec のあいだに 48000 サンプル (離散点) をとることになります.

サンプリング周波数

サンプリングでは重要な定理があります. それは, サンプリング周波数の 1 / 2 より大きい周波数は元のアナログ信号に復元できないという定理です. これは, サンプリング定理 (標本化定理, , シャノンの定理) と呼ばれます. また, サンプリング周波数の 1 / 2 の周波数はナイキスト周波数と呼ばれます.

サンプリングの精度を高くするほど, すなわち, サンプリング周波数を高くするほど元のアナログ信号に対してより忠実度の高いデジタル信号に変換可能となります. 一方で, より多くのサンプルをとることになるので, データサイズはサンプリング周波数に比例して大きくなってしまいます.

サンプリング周波数と音質

サンプリング周波数の具体例として, 音楽 CD は 44.1 kHz に設定されています. この理由は, 人間の聴覚が知覚可能な周波数はおよそ 20 kHz であることを考慮して, サンプリング定理を適用しているからです. さらに音質の高いものだと 96 kHz に設定されている音楽データもあります. しかし, 電話では, 8 kHz に設定されています. 音声の場合, 多少音質が損なわれても相手の音声を聴きとることが可能なこと, 楽器音ほど高い周波数成分が含まれないこと, また, リアルタイム性が重視されるので, 可能な限りデータサイズを減らす必要があることなどが理由としてあげられます.

量子化

量子化は, 振幅を離散した値に変換する処理です. サンプリングと同じく, とびとびの値をとるためには, その間隔を決定づけるパラメータが必要になります. それが, 量子化ビット (量子化精度) です.

サンプリングされたアナログ信号は時間軸方向は離散化されていますが, 振幅軸の方向は, 連続したままです. 量子化では, 量子化ビットで指定された精度にしたがって, 振幅を整数値に丸める処理をします.

例えば, 量子化ビットが 2 bit の場合は, 4 つのステップの値 ($2^{2}=4$) のいずれかに, 3 bit の場合は, 8 つのステップの値 ($2^{3}=8$) のいずれかに振幅が丸められます.

量子化ビット

サンプリングの精度と同様に, 量子化の精度を高くするほど, すなわち, 量子化ビットを大きくするほど元のアナログ信号に対してより忠実度の高いデジタル信号に変換可能となります. 一方で, データサイズは量子化ビットに比例して大きくなってしまいます.

量子化ビットと音質

符号化

量子化した (整数値に丸めた) 振幅を 2 進数に変換すると, コンピューターの内部で処理することが可能なデジタル信号となります.

log-PCM

音信号は振幅の小さい部分と振幅の大きい部分がありますが, 振幅の小さい部分の方が発生する確率は圧倒的に高くなります. したがって, 振幅の小さい部分は細かく, 振幅の大きい部分はあらく量子化することによって, データサイズをおさえつつも, 音質の劣化を知覚的に防止することができます.

このような PCM を log-PCM (Logarithmic PCM) と呼びます. 主に固定電話に適用される方式です. log-PCM では, 入力音の振幅を対数変換し, 変換後の音に対して一様な量子化を実行します.

PCM では, 圧縮された音を元に戻すために, 圧縮の逆の手順となる復号の処理が必要です (圧縮に対して伸張と呼ぶこともあります). log-PCM の対数特性の決め方には自由度があるので, 伸張の方法も各方式によって異なります.

代表的な対数特性としては, A 法則 (A-law) と $\mu$ 法則 ($\mu$-low) があります.

DPCM (デルタ PCM)

サンプリング周期が短い場合には, 音の隣接するサンプル間の変化は小さくなります. そこで, 隣接するサンプルの差分をとれば, 元の音よりも信号の散らばり (分散) の程度を小さくでき, 割り当てるビット数を少なくできます. このように, 差分信号を量子化する方式を DPCM (Differential PCM), または, デルタ PCM と呼びます.

適応量子化

音が急激に変化する部分と, 緩やかに変化する部分では, 差分信号であっても 2 つの差は大きくなるので, このような信号に対して, 固定の量子化幅を利用することは効果的ではありません.

そこで, 信号の大きさに合わせて量子化幅を変更し, 圧縮効率を改善する方式が, 適応量子化 (Adaptive Quantization) です.

ADPCM

音信号は多くの場合, 過去の信号と密接に関係しているので, 過去の値から現在の値をある程度予測することができます. 予測値と現在の音との差分を予測誤差 (Prediction Error) と呼び, DPCM よりもさらに小さい分散をもちます. したがって, 予測誤差を量子化の対象として, さらに, 適応量子化を導入することで, 非常に高い圧縮効率を得ることができます. このような, 予測と量子化の 2 つの適応制御をそなえた方式を ADPCM (Adaptive Differential PCM), 適応差分パルス変調と呼びます.

ADPCM は WAVE ファイルにも利用されています. ADPCM はエンコーダ / デコーダの実装が複雑というデメリットはもちますが, 少ないビット数で高い音質を保持できるというメリットがあります.

以下のセクションでは, 国際電気通信連合 (ITU) で定められている, G.726 方式の ADPCM について解説します.

ADPCM エンコーダ

適応量子化器は, 入力信号 $s_{1}(n)$ から, 予測信号 $s_{e}(n)$ を減算した, 予測誤差を量子化します. 予測信号 $s_{e}(n)$ は過去の入力信号 (実際は, 再合成信号) を参照して生成されます. 量子化された予測誤差が, ADPCM 信号 $I(n)$ として送信されます.

ADPCM エンコーダ

ADPCM 信号生成の後処理として, 逆量子化によって予測誤差を復元します. そして, 予測誤差と予測信号を加算することで入力信号を再合成 ($s_{r}(n)$) します. 再合成信号 $s_{r}(n)$ を利用して, 次の時刻の入力信号を予測します. 予測信号 $s_{e}(n)$ は, 前回の予測誤差が 0 に近づくように予測器の係数を更新したあとに計算されます. 逆量子化以降の処理は, $I(n)$ だけから実行できることが特徴です. また, ADPCM ではこの特徴を, そのままでデコーダに活用しています. まとめると,

  1. 現在の観測信号に対する予測値を生成する
  2. 観測信号から予測値を減算して予測誤差を得る
  3. 予測誤差を量子化する (ADPCM 信号)
  4. 予測誤差と予測値を加算して, 観測信号を再合成する
  5. 予測誤差を参照して, 量子化器と予測器を更新する

ADPCM デコーダ

ADPCM 信号の逆量子化以降の処理は, エンコーダと同じです. 予測器の更新結果も, 観測された予測誤差を 0 に近づけることを目的とするので, エンコーダと同じ更新結果が取得できます. 予測信号の初期値をどのように設定するかですが, G.726 では, ある定数を指定しています. デコーダの最終出力は, 予測誤差と予測信号を加算した再合成信号です.

ADPCM デコーダ

  1. 現在の観測信号に対する予測値を生成する
  2. 予測誤差である ADPCM 信号を受信する
  3. 予測誤差と予測値を加算して, 観測信号を再合成する
  4. 予測誤差を参照して, 量子化器と予測器を更新する

リファレンス

Share Comments
comments powered by Disqus