CELP

分析合成方式

PCM は, 音の波形そのものを符号化する, いわゆる, 波形符号化方式ですが, そうではなく, 観測信号から音の発生機構を推定し, そのパラメータを符号化するのが分析合成方式です. 特に, 分析合成方式のなかでも, 携帯電話や VoIP で利用されるのが, CELP (Code-Excited-Linear Prediction) と呼ばれる方式です.

音声のメカニズム

音声の発声は, 最初に声帯が振動することによって, ブザーのような単調な音が発生します. これが音声の音源となります. そして, この音源が声道を通過することで実際の音声信号として発声されます.

音声のメカニズム

実際に発声される音声は複雑な波形となりますが, その音源は単純な波形としてモデル化できます. 複雑な特性は, 音声合成フィルタに含めると, 音源は周期的なパルス列としてモデル化することも可能です.

この単純なモデルにおいては, 音源となるパルスの周期 (ピッチ周期), パルスの振幅, 音声合成フィルタのフィルタ係数だけで音声を表現できるので, これら 3 つのパラメータのみを符号化します. また, 音声は, 10 ms - 30 ms 程度の短時間であれば, その性質がほとんど変化しないことが知られているので, 3 つのパラメータを一定時間ごとに 1 度符号化すればよいので, 高い圧縮率を実現できます.

線形予測分析

分析合成方式のエンコーダでは, 3 つのパラメータを実際の音声から抽出する必要があります. 一般的に, 音声を通過させると, その出力が音源波形となる線形予測器 (Linear Predictor) と呼ばれる適応フィルタが利用されます. 線形予測器のフィルタ係数は, LPC (Linear Prediction Coding) 係数と呼ばれ, 音声合成フィルタを構成するために利用されます. LPC 係数を算出することを, 線形予測分析 (Linear Prediction Analysis) と呼びます.

音源を出力する線形予測器と, 音声を出力する音声合成フィルタは互いに逆フィルタの関係にあります. したがって, LPC 係数が取得できれば, その逆フィルタである, 音声合成フィルタを構成できます.

音声合成フィルタと線形予測器との関係

LPC 係数を $h_{m} (m=1, \cdots, M)$ として, 線形予測器への入力音声を $s(n)$ とすると, その出力である $w(n)$ は, 以下の式で定義できます.

$ \begin{eqnarray} w(n)=s(n)+\sum_{m=1}^{M}h_{m}s(n-m) \end{eqnarray} $

$w(n)$ は音声の音源に相当します.

逆に, $w(n)$ を入力とする音声合成フィルタ出力 $s(n)$ は, 以下の式で定義できます.

$ \begin{eqnarray} s(n)=w(n)-\sum_{m=1}^{M}h_{m}s(n-m) \end{eqnarray} $

線形予測器の出力は音源である $w(n)$ なので, ピッチ周期とパルスの大きさも線形予測器の出力から取得することができます.

それらの伝達関数は, 以下のように定義できます.

$ \begin{eqnarray} H_{LP}(z)=1+\sum_{m=1}^{M}h_{m}z^{-m} \end{eqnarray} $

$ \begin{eqnarray} H_{AR}(z)=\frac{1}{1+\sum_{m=1}^{M}h_{m}z^{-m}} \end{eqnarray} $

分析合成方式の音声圧縮では, LPC 係数と音源の情報 (ピッチ周期, パルスの大きさ) を符号化することで, 波形符号化方式よりも高い圧縮率を実現しています. 線形予測分析を利用して, 音声の符号化を実現するものを, LPCボコーダ (Linear Predictive Coding Vocoder) と呼びます.

LPC 係数は, 線形予測器の出力である $w(n)$ の 2 乗平均値,

$ \begin{eqnarray} J=E\left[w^{2}(n)\right] \end{eqnarray} $

を最小化することで取得できます.

ここで, $J$ は, $m$ 番目の係数 $h_{m}$ に対して, 下に凸な 2 次関数となっているので, $J$ を $h_{m}$ で微分した値が $0$ になるように $h_{m}$ を決定します. つまり, 以下の連立方程式を解くことで, LPC 係数を取得できます.

$ \begin{eqnarray} \frac{dJ}{dh_{m}}=2\sum_{k=1}^{M}h_{k}E\left[s(n-k)s(n-m)\right]+2E[s(n)s(n-m)]=0 \quad (1 \leqq m \leqq M) \end{eqnarray} $

音声の自己相関関数,

$ \begin{eqnarray} r(m)=E\left[s(n)s(n-m)\right] \end{eqnarray} $

を定義すると, レビソン・ダービンのアルゴリズムから LPC 係数を求めることもできます.

CELP

標準符号化方式の 1 つとして ITU-T が勧告している G.729 の CS-ACELP 方式の概要について説明します.

CS-ACELP 方式では, 個人差のある音声を可能な限り忠実に合成するため, 音源として単純なパルス列ではなく, データベースとして用意した複数の固定音源と, 過去に利用した音源を適応的に変化させる適応音源の 2 つを組み合わせて音源を生成します. さらに, 音声の分析合成を 10 ms の短時間フレームごとに実行することで, 忠実度を向上させています.

CS-ACELP の音声合成部 (デコーダ)

固定音源と適応音源に, それぞれ個別にゲインを乗算して音源の振幅を調整しています. つまり, デコーダを動作させるためには, 音声合成フィルタの LPC 係数, ピッチ周期, 固定音源, ゲインの 4 つの情報が必要になります.

エンコーダでは, この 4 つの情報を入力音声から抽出して符号化します.

  1. 線形予測分析を実行して LPC 係数を取得します
  2. LPC 係数を, 粗い量子化に対して頑健な LSP (Line Spectral Pairs) と呼ばれる量に変換 (18 bits)
  3. 自己相関関数を利用してピッチ周期を推定 (14 bits)
  4. ピッチ周期と過去の入力音源から適応音源を作成し, 適応音源用のゲインを算出
  5. 固定 (データベース) 音源探索 (34 bits)
  6. 固定音源用のゲインを算出
  7. 2 つのゲインを符号化 (14 bits)
  8. 4 つのパラメータを送信

CS-ACELP では, これを音声が定常とみなせる 10 ms ごとに送信するので, 全体のビットレートは 8 kbps と非常に小さくすることができます.

リファレンス

Share Comments
comments powered by Disqus