Codarea Code Excited Linear Prediction ( CELP ) este un algoritm de codare a vorbirii propus inițial de Manfred Schroeder și B. S. Atal în 1985. La acea vreme, algoritmul oferea o calitate semnificativ mai bună decât algoritmii existenți cu rată scăzută de biți , cum ar fi codecurile audio RELP și LPC (de exemplu FS-1015 ). Alături de variante precum ACELP , RCELP , LD-CELP și VSELP , este cel mai utilizat algoritm de codificare a vorbirii în prezent. CELP este utilizat în prezent ca termen general pentru o clasă de algoritmi, mai degrabă decât un codec specific .
Algoritmul CELP se bazează pe patru idei principale:
Algoritmul original al lui Schroeder și Atal din 1983, când a fost rulat pe supercomputerul Cray I, a necesitat 150 de secunde pentru a codifica un semnal vocal de 1 secundă. Odată cu apariția unor modalități mai eficiente de implementare a tabelelor de cod și îmbunătățirea capacităților de calcul, rularea algoritmului a devenit posibilă în dispozitivele încorporate, cum ar fi telefoanele mobile.
Înainte de a explora procesul complex de codificare CELP, să vedem cum funcționează un decodor. Ilustrația descrie decodorul universal CELP. Excitația se realizează prin însumarea contribuțiilor din tabelul de coduri adaptive (altfel ceas ) și tabelul de coduri fix (altfel stocastic):
unde este contribuția adaptivă (ceas) la cartea de coduri și este contribuția fixă (stochastică) la cartea de coduri. O carte de coduri fixe este un dicționar de cuantizare vectorială care este (implicit sau explicit) codificat într-un codec. Această carte de coduri poate fi ACELP algebrică sau stocată în mod explicit (de exemplu , Speex ). Intrările din cartea de coduri adaptive constau în versiuni întârziate ale excitației. Acest lucru face posibilă codificarea eficientă a semnalelor periodice, cum ar fi vorbirea umană.
Filtrul care generează excitația are toți polii modelului sub formă Acest filtru este aplicabil nu numai pentru că folosește toți polii, ci și pentru că este ușor de calculat și reprezintă o bună reprezentare a vocii umane.
Principiul de bază din spatele CELP se numește (Absolut) „Analiză prin Sinteză”, ceea ce înseamnă că codificarea (analiza) se realizează perceptiv, optimizând semnalul decodat într-o buclă închisă. În teorie, cel mai bun flux CELP ar fi produs combinând toate seturile de caractere binare posibile și alegându-l pe cel care produce cel mai bun semnal decodificat. Acest lucru, evident, nu este posibil din două motive: complexitatea implementării depășește orice hardware disponibil în prezent, iar criteriul de selecție „cel mai bun sunet” implică o ființă umană ca ascultător.
Pentru a implementa codificarea în timp real folosind resurse de calcul limitate, căutarea CELP este împărțită în căutări mai mici, mai ușor de gestionat, secvențiale, folosind o funcție simplă de ponderare perceptivă. De obicei, codarea se face în următoarea ordine:
Majoritatea (dacă nu toate) codecurile audio moderne încearcă să modeleze distorsiunea în codificare, astfel încât să apară în principal în acele regiuni de frecvență în care nu poate fi captată de urechea umană. De exemplu, urechea este mai tolerantă la distorsiuni în părțile din gama audio care sunt mai puternice și invers. De aceea, în loc să minimizeze eroarea pătratică, CELP minimizează erorile pe regiunea ponderată. Rezultatul ponderării pe curba W(z) este de obicei derivat din filtrul LKP prin extensia lățimii de bandă :
unde .
de compresie | Metode|||||||
---|---|---|---|---|---|---|---|
Teorie |
| ||||||
Fara pierderi |
| ||||||
Audio |
| ||||||
Imagini |
| ||||||
Video |
|