# Linear predictive coding

La codifica predittiva lineare (LPC, Linear predictive coding) è uno strumento utilizzato per lo più nell'elaborazione dei segnali audio e nelle tecniche di sintesi vocale per rappresentare l'inviluppo spettrale di un segnale numerico del parlato in forma compressa, utilizzando le informazioni provenienti da un modello predittivo lineare. È una delle più potenti tecniche di analisi del parlato, uno dei metodi più utili per codificare un discorso buona qualità ad un basso bitrate. Fornisce stime estremamente accurate dei parametri del parlato.

## Descrizione

Il principio di base sta nella assunzione secondo la quale la voce è il risultato dalla modulazione provocata da gola e bocca (detta formante) della emissione sonora da parte delle corde vocali (il residuo).
Secondo tale assunzione, la formante può essere predetta mediante una equazione lineare che tenga conto dei campioni precedenti ed il residuo dalla sottrazione della formante dal campione.
Generalmente un segnale vocale è composto da due componenti: un insieme di coefficienti per la predizione lineare e un errore di predizione.
Questa tecnica è utilizzata per abbassare notevolmente il bitrate di un messaggio vocale, basandosi sulla conoscenza della sorgente stessa (variante vocoder).
I coefficienti di predizione vengono aggiornati ogni 10-20 ms (dimensioni molto simili a un fonema). Inoltre la quantità di coefficienti è un indice di qualità della codifica vocale. Ovviamente un numero maggiore di frame garantisce una migliore resa nel risultato finale.
Scendendo più nel dettaglio si adotta uno schema in cui si ottiene un segnale differenza a partire dal segnale sorgente meno il segnale passato attraverso il filtro di predizione (modellato quindi dai coefficienti di predizione).
Tale segnale differenza è detto "errore di predizione".
In fase di decodifica l'errore di predizione viene quindi utilizzato per ricostruire il segnale vocale. Tale segnale ricostruito sarà quindi sorgente per la predizione successiva secondo un modello detto di local decoding loop.
Nelle modulazioni di tipo LPC la trasmissione segue essenzialmente questo schema: il segnale X(kTc) viene fatto passare per un analizzatore in grado di identificare il vettore p di parametri che poi verranno sia trasmessi tramite multiplazione al ricevitore, sia passati al sintetizzatore, la cui uscita f(p) verrà poi sottratta dal segnale X(kTc) per ottenere l'errore E(kTc) che, dopo un'opportuna quantizzazione e codifica, viene multiplato insieme al vettore p ed inviato al ricevitore.
Il sintetizzatore di una codifica LPC è composto essenzialmente da due generatori, uno vocalico (generatore di impulsi) e uno non vocalico (generatore di rumore bianco). Per modellare le proprietà acustiche della voce del parlatore si utilizzano un amplificatore e un filtro trasversale.
In ricezione lo schema è all'incirca duale, in quanto il segnale LPC viene demultiplato per riottenere distintamente il vettore p che verrà opportunamente sintetizzato, e l'errore di predizione E(kTc) il quale, dopo un'opportuna decodifica viene sommato all'uscita del sintetizzatore, ricostruendo così il segnale X(kTc) a meno dell'errore di quantizzazione.
La modulazione LPC riduce sensibilmente la bitrate in trasmissione, con una conseguente riduzione dell'occupazione di banda. Comporta, però, un forte incremento nella complessità hardware e una riduzione della qualità del segnale originale per la presenza del sintetizzatore.

## Residual excited linear predictive coding

Soluzione a quest'ultimo problema è la modulazione RELPC (residual excited linear predictive coding). Come si evince dal nome, la RELPC sfrutta non più l'errore di predizione, bensì il residuo R(kTc), che consiste nel segnale campionato, filtrato in un filtro LPC inverso (che elimina le alte frequenze del segnale) e modellato da dei coefficienti c in uscita dall'analizzatore. Il residuo costituisce l'eccitazione ideale affinché il filtro LPC produca esattamente il segnale vocale originale. Il residuo così ottenuto viene filtrato con un filtro passa basso, sottocampionato (avendo eliminato le alte frequenze non è più necessario utilizzare la stessa frequenza di campionamento di prima), quantizzato e codificato. Viene poi multiplato assieme ai coefficienti c, necessari per la ricostruzione del segnale in ricezione.
In ricezione, il demultiplatore restituisce i coefficienti c e il residuo sottocampionato, che verrà modificato con l'inserimento di determinati zeri nella sequenza, in modo da riportarsi alla stessa frequenza del residuo originale R(kTc). Sia il residuo, sia i coefficienti vengono fatti infine entrare in un filtro LPC che restituirà il segnale originale.
Il segnale originale e quello ricevuto possono essere anche significativamente diversi nel dominio del tempo, ma risultano percettivamente molto simili avendo un comportamento spettrale simile.