Code Excited Linear Prediction
CELPアルゴリズムは次の考え方に基づいている:
線形予測符号 (LPC) に基づく音源フィルタモデル 声帯相当の音源 (励起信号): 線形予測残差 声道相当のフィルタ: 線形予測フィルタ
ベクトル量子化 (VQ) と コードブック による符号化: 線形予測フィルタに入力される音源 (励起信号) を、適応型 (ピッチ成分) と固定型 (残差成分成分) のコードブックで符号化
合成による分析 (AbS: Analysis-by-Synthesis): 聴覚的重み付けドメイン上の閉ループ内でコードブックを探索して符号化
CELPは1985年に米AT&Tの Schroeder と Atal が提案した。2人が1983年に行った最初のシミュレーションでは、スーパーコンピュータCray-1を使って、1秒間の音声を符号化するのに150秒かかった。その後コードブックの実装方法を改善し、コンピュータの性能向上もあり、携帯電話などでもこのアルゴリズムが使えるようになった。
Code Excited Linear Prediction(CELP、セルプ)は線形予測符号・ベクトル量子化・合成による分析を組み合わせた音声符号化アルゴリズムである。直訳すると「符号励振線形予測」。
CELPは当時の既存の低ビットレートのアルゴリズム(RELP、LPC、ヴォコーダーのFS-1015など)に比べて格段に優れた音質を示した。様々な派生が生まれ(ACELP、RCELP、LD-CELP、VSELPなど)、現在最も広く使われている音声符号化アルゴリズムである。CELPはこのアルゴリズムのクラスを指す用語であり、特定のコーデックを指す用語ではない。
最近の音声コーデックの多くは、音響心理学を応用して符号化雑音が可聴帯域外の周波数領域になるようにしている。例えば、振幅の大きい周波数帯域にある雑音はマスキングされる。そのため、CELPは誤差を聴覚的重み付けの上で最小化する。重み付け関数 W(z) は、帯域幅拡張 (bandwidth expansion) を使ったLPCフィルタに基づいている。
W ( z ) = A ( z / γ 1 ) A ( z / γ 2 ) {\displaystyle W(z)={\frac {A(z/\gamma _{1})}{A(z/\gamma _{2})}}}
ここで γ 1 > γ 2 {\displaystyle \gamma _{1}>\gamma _{2}} である。
CELPデコーダは、適応型コードブック (ピッチ成分) と 固定型コードブック (残差成分) から エンコード信号で指定された要素を取出し、指定ゲインを掛けて加算して、励振信号 (excitation) e [ n ] {\displaystyle e[n]} を得る。
e [ n ] = g a ⋅ e a [ n ] + g f ⋅ e f [ n ] {\displaystyle e[n]=g_{a}\cdot e_{a}[n]+g_{f}\cdot e_{f}[n]\,}
ここで、 e a [ n ] {\displaystyle e_{a}[n]} は適応型コードブックの成分、 e f [ n ] {\displaystyle e_{f}[n]} は固定型コードブックの成分、 g a , g b {\displaystyle g_{a},g_{b}} は各々のゲインである。