Code Excited Linear Prediction(CELP、セルプ)は線形予測符号・ベクトル量子化・合成による分析を組み合わせた音声符号化アルゴリズムである。直訳すると「符号励振線形予測」。
CELPは当時の既存の低ビットレートのアルゴリズム(RELP、LPC、ヴォコーダーのFS-1015など)に比べて格段に優れた音質を示した。様々な派生が生まれ(ACELP、RCELP、LD-CELP、VSELPなど)、現在最も広く使われている音声符号化アルゴリズムである。CELPはこのアルゴリズムのクラスを指す用語であり、特定のコーデックを指す用語ではない。
CELPアルゴリズムは次の考え方に基づいている:
CELPは1985年に米AT&Tの Schroeder と Atal が提案した[1]。2人が1983年に行った最初のシミュレーションでは、スーパーコンピュータCray-1を使って、1秒間の音声を符号化するのに150秒かかった。その後コードブックの実装方法を改善し、コンピュータの性能向上もあり、携帯電話などでもこのアルゴリズムが使えるようになった。
CELPデコーダは、適応型コードブック (ピッチ成分) と 固定型コードブック (残差成分) から エンコード信号で指定された要素を取出し、指定ゲインを掛けて加算して、励振信号 (excitation) を得る。
ここで、 は適応型コードブックの成分、 は固定型コードブックの成分、は各々のゲインである。固定型コードブックはベクトル量子化辞書であり、コーデック内に固定的に記述されている。このコードブックは代数的な形式で格納する場合 (ACELP) と、そのままの形で格納する場合 (Speex) がある。適応型コードブックには、励振信号の過去の時系列が格納され、人間の声などの周期的な信号を効率的に符号化できる。
励振信号を整形する合成フィルタには、たとえば という形の全極モデルを使用し、ここで は線形予測(レビンソン再帰)で得られる予測フィルタであり、線形予測係数 (LPC)はエンコード信号で指定される。全極フィルタを使うのは、人間の声道をうまく表現でき、また計算も容易だからである。
CELPの基本原理は「合成による分析」(AbS; Analysis-by-Synthesis) と呼ばれ、閉ループ内で行われるデコード信号 (synthesis) の聴覚的最適化を通じて、エンコード (analysis) が行なわれることを意味する。理論上、最善のCELPストリームは、可能なあらゆるビットの組み合わせを試行し、最もよく聞こえるデコード済み信号を選択することで得られる。しかし、それは利用可能なハードウェアの計算能力を超えており、「最もよく聞こえる」ものを選ぶということは人間の介在を必要とするため、現実的ではない。
限られた計算リソースを使ってリアルタイムにエンコードを行うため、単純な聴覚的重み付け関数 W(z) を使い、より小さくより扱いやすい逐次探索でCELP探索を実施する。通常、エンコードは次の順序で実施する。
最近の音声コーデックの多くは、音響心理学を応用して符号化雑音が可聴帯域外の周波数領域になるようにしている。例えば、振幅の大きい周波数帯域にある雑音はマスキングされる。そのため、CELPは誤差を聴覚的重み付けの上で最小化する。重み付け関数 W(z) は、帯域幅拡張 (bandwidth expansion) を使ったLPCフィルタに基づいている。
ここで である。