Salta al contenuto
Note per Studenti Codifica della voce

Codifica della voce

In questa pagina 7

Il parlato digitalizzato in modo diretto occupa 64 kbit/s (Audio, immagini e video digitali non compressi e spazi di coloreIl parlato (banda 200-3400 Hz) si digitalizza con $F_c=8$ kHz e 8 bit per campione: 64 kbit/s (PCM, pacchetti di 20 ms = 160 campioni = 160 byte). La musica (banda fino a 20 kHz) con $F_c=44{,}1$ kHz, 16 bit, 2 canali: 1,411 Mbit/s. Un'immagine a colori RGB ha 3 canali da 8 bit (24 bit per pixel); nello spazio YCbCr, ottenuto con una rotazione dello spazio colore, l'occhio è molto meno sensibile alla crominanza e si scartano 3 campioni su 4 di Cb e Cr (4:2:0), dimezzando i dati: $1{,}5\cdot H\cdot W$ campioni per immagine. Un video non compresso costa $H,W,1{,}5,b,f$ bit/s (1080p a 50 Hz: 1,244 Gbit/s, 4K: 5,3 Gbit/s): serve la compressione.Audio, immagini e video digitali non compressi e spazi di colore →). Su un collegamento mobile o in una chiamata via Internet è tanto: si può scendere a un decimo, o meno, sfruttando il modo in cui la voce viene prodotta. Questa nota spiega le tre famiglie di codificatori vocali, lo schema didattico LPC10 con i suoi conti, e i problemi pratici (ritardo, errori, silenzi).

1. Il segnale vocale

Il segnale vocale non è stazionario, ma è localmente stazionario: per intervalli di circa 20 ms, durante la pronuncia di un fonema, le sue proprietà restano quasi costanti. Per questo i codificatori lavorano su finestre (frame) di 20 ms. A 8 kHz, 20 ms sono 20⋅10−3×8000=16020\cdot10^{-3}\times8000=160 campioni.

Si distinguono:

  • suoni vocali (voiced): segnali pseudo-periodici, come le vocali e le consonanti sonore (le slide citano anche "s" e "f", ma in fonetica sono consonanti sorde, quindi non vocali: probabile imprecisione). Hanno una frequenza fondamentale, il pitch (nell'esempio delle slide, 178 Hz), prodotta dalla vibrazione delle corde vocali;
  • suoni non vocali (unvoiced): la maggior parte delle consonanti; somigliano a rumore bianco (flusso d'aria turbolento);
  • transizioni tra fonemi e altri suoni.

2. Le tre famiglie di codificatori

Famiglia Idea Pregi Difetti
A forma d'onda rappresentano il segnale, ignorandone la semantica; senza compressione è il PCM bassa complessità, alta qualità, qualunque suono bit-rate molto elevato (64 kbit/s)
Vocoder non conservano la forma d'onda: modellano come il suono è prodotto e trasmettono i parametri del modello (stimati con la codifica predittiva lineare, LPC); il ricevitore sintetizza la voce bit-rate bassissimo (2,4 kbit/s e meno) qualità bassa, voce non naturale
Ibridi vocoding per ricavare alcuni parametri, più codifica della forma d'onda del residuo tra parlato originale e sintetizzato qualità buona (intelligibilità) a circa 10 kbit/s complessità maggiore

3. Standard principali

  • G.711 (ITU-T): PCM non compresso, 8 kHz, quantizzazione non uniforme adattata alle statistiche dei campioni (i valori piccoli sono molto più probabili di quelli grandi, quindi si usano passi piccoli vicino a zero e grandi per le ampiezze alte: si guadagna qualità a parità di bit), 64 kbit/s.
  • G.729 (CS-ACELP, algebraic code excited linear prediction): codificatore ibrido, 8 kHz, blocchi con 15 ms di ritardo di elaborazione, circa 8 kbit/s.
  • GSM (full, half, enhanced, adaptive rate): ibrido con LPC; nella variante full-rate il tasso è 13 kbit/s.
  • AMR-WB (G.722.2): lo standard dell'HD Voice nelle reti mobili 4G e 5G (VoLTE). Campionamento a 16 kHz (wideband) per una resa più naturale; banda audio 50 Hz-7 kHz; 9 tassi adattativi da 6,6 a 23,85 kbit/s scelti dinamicamente in base alla congestione: se il radio peggiora si sacrificano bit di sorgente per aumentare la protezione di canale, senza interrompere la chiamata.
  • Opus (RFC 6716): il codec "universale" di Internet, ibrido, standard IETF libero e senza royalty; bit-rate adattativo 6-510 kbit/s, banda da 8 kHz (narrowband) a 48 kHz (fullband, hi-fi), ritardo algoritmico tipico 26,5 ms. Usato da WhatsApp, Zoom, Discord, WebRTC, YouTube.

Perché AMR-WB suona meglio. La telefonia classica taglia le alte frequenze: si perdono la brillantezza e la distinzione tra fonemi simili ("f" e "s"). L'estensione wideband cattura le armoniche superiori (più nitidezza, riconoscimento del parlatore), che vengono ricostruite come multipli del pitch estratto in banda base con ampiezza stimata dall'energia in banda bassa e dall'inviluppo LPC; abbassando la frequenza di taglio inferiore si elimina l'effetto "metallico", con un piccolo aumento di bit-rate. Risultato: più intelligibilità, meno affaticamento nelle chiamate lunghe.

Architettura di Opus. Due motori: SILK, basato sulla predizione lineare (adatto al parlato a basso bit-rate), e CELT, che non usa un modello del tratto vocale ma codifica la forma d'onda con trasformate di tipo Fourier, codificando solo le frequenze che "l'orecchio sente" (si attiva a bit-rate più alti o per segnali non vocali, come musica e rumori). La modalità ibrida li fa lavorare insieme su parti diverse dello spettro.

4. Un vocoder didattico: LPC10

Lo schema LPC10 (linear predictive coding, predizione lineare sui 10 campioni precedenti) è un vocoder di base, a validità puramente pedagogica, ma contiene tutti gli ingredienti.

4.1 Predizione lineare

Il segnale a 8 kHz è diviso in finestre di 20 ms (160 campioni). Per ogni finestra si vuole predire il campione corrente x(n)x(n) con una combinazione lineare dei 10 precedenti: xP(n)=∑k=110ak x(n−k).x_P(n)=\sum_{k=1}^{10}a_k\,x(n-k). I coefficienti aka_k si trovano minimizzando il valore quadratico medio dell'errore di predizione y(n)=x(n)−xP(n)=x(n)−a1x(n−1)−a2x(n−2)−⋯−a10x(n−10).y(n)=x(n)-x_P(n)=x(n)-a_1x(n-1)-a_2x(n-2)-\dots-a_{10}x(n-10). L'errore yy è l'uscita di un filtro a media mobile (FIR, filtro di predizione A(z)A(z)) alimentato dal parlato. Il punto chiave: il filtro è invertibile. Noto yy si ricostruisce xx con l'equazione alle differenze x(n)=y(n)+∑kakx(n−k)x(n)=y(n)+\sum_ka_kx(n-k) (un filtro autoregressivo, che fa da "tratto vocale" sintetico).

Esempio minimo. Se x(n)=0,9 x(n−1)x(n)=0{,}9\,x(n-1) con x(0)=10x(0)=10, cioè la sequenza 10, 9, 8,1, 7,29,…10,\ 9,\ 8{,}1,\ 7{,}29,\dots, con un solo coefficiente a1=0,9a_1=0{,}9 si ha y=10, 0, 0, 0,…y=10,\ 0,\ 0,\ 0,\dots: l'errore è quasi nullo, mentre il segnale non lo è. Quando la predizione è accurata il residuo ha piccola potenza ed è poco più di rumore: ciò che resta da trasmettere è poca informazione.

Schema di codifica: un blocco LPC determina i coefficienti, il filtro A(z)A(z) calcola il residuo; coefficienti e residuo vanno quantizzati (c'è perdita) e trasmessi.

4.2 Perché non serve trasmettere il residuo

Se la predizione è buona, il residuo yy è praticamente rumore, in due possibili forme:

  1. rumore bianco (spettro piatto): è il caso dei suoni non vocali;
  2. rumore con una frequenza predominante, il pitch: è il caso dei suoni vocali (un treno di impulsi periodici).

Allora non c'è bisogno di trasmettere yy, ma solo i suoi parametri: se è bianco o no (1 bit), la potenza e, per i suoni vocali, il pitch (la fase non serve: il rumore di fase è inudibile). Si decide facilmente quale dei due casi vale con la stima dell'autocorrelazione (un picco periodico indica pitch). Il decodificatore genera l'eccitazione opportuna (rumore bianco oppure treno di impulsi) e, con i coefficienti del filtro, ricostruisce xx.

4.3 Quanti bit?

Ogni 20 ms si trasmettono:

  • 36 bit per i 10 coefficienti del filtro;
  • 1 bit per distinguere vocale/non vocale;
  • per i suoni vocali 6 bit di potenza e 7 bit di pitch (periodo); per i non vocali solo i 6 bit di potenza.

Rvoiced=36+1+6+720⋅10−3=500,02=2500 bit/s,Runvoiced=36+1+60,02=2150 bit/s.R_{\text{voiced}}=\frac{36+1+6+7}{20\cdot10^{-3}}=\frac{50}{0{,}02}=2500\ \text{bit/s},\qquad R_{\text{unvoiced}}=\frac{36+1+6}{0{,}02}=2150\ \text{bit/s}. Le slide indicano un tasso medio di 2400 bit/s. Attenzione: la media aritmetica dei due valori (metà del tempo vocale, metà no) è 2325 bit/s; si ottiene 2400 solo se i suoni vocali sono circa il 71%71\% del tempo (2150+350p=2400⇒p=0,7142150+350p=2400\Rightarrow p=0{,}714). Il numero 2400 è comunque l'ordine di grandezza corretto (e coincide con il tasso del codec LPC-10 reale). Rispetto al PCM, 64 0002400≈26,7\frac{64\,000}{2400}\approx26{,}7 volte meno bit: da 8 bit per campione a circa 0,30{,}3 bit per campione.

4.4 L'effetto "sussurrato" e i limiti

LPC10 dà una voce innaturale, un po' "soffiata", per quattro motivi:

  • la decisione vocale/non vocale è binaria per frame: nessuno stato intermedio;
  • se un tratto vocale è classificato come non vocale per errore, la struttura armonica sparisce a favore dell'eccitazione stocastica;
  • molti fonemi reali sono misti (vibrazione delle corde vocali più turbolenza): LPC10 elimina la componente periodica;
  • il rumore bianco sintetico ignora la pendenza spettrale e la coerenza di fase del residuo reale, dando un timbro artificiale.

5. Codificatori ibridi avanzati: ACELP

I codificatori moderni correggono i limiti di LPC con:

  • modelli più sofisticati per il residuo: invece di impulsi o rumore, si cerca in un dizionario ampio (codebook) la forma del residuo che meglio descrive il frame;
  • codifica ad anello chiuso (analysis by synthesis): il codificatore sintetizza davvero il parlato per ogni candidato e sceglie i parametri che minimizzano l'errore di codifica;
  • un errore pesato secondo il mascheramento (conta di più dove l'orecchio sente di più).

Risultato: ottima intelligibilità a circa 10 kbit/s (da confrontare con i 64 del PCM).

6. Problemi pratici della codifica vocale

Domande d'esame

1. Qual è l'intuizione che consente di ridurre il bit-rate della voce nei sistemi basati su vocoder? Traccia: non si rappresenta la forma d'onda ma si modella come l'uomo produce il suono; in codifica si definisce un filtro invertibile di predizione; in decodifica i parametri dell'errore di predizione generano un segnale di eccitazione (rumore o treno di impulsi) che, filtrato con l'inverso del filtro di predizione, sintetizza il parlato; si trasmettono solo coefficienti del filtro e parametri dell'eccitazione.

2. Nel vocoder LPC10 con finestre di 20 ms, 36 bit di coefficienti, 1 bit voiced/unvoiced, 6 bit di potenza e 7 di pitch, quanti bit al secondo servono per un frame vocale e per uno non vocale? Traccia: 36+1+6+70,02=2500\frac{36+1+6+7}{0{,}02}=2500 bit/s; 36+1+60,02=2150\frac{36+1+6}{0{,}02}=2150 bit/s.

3. Quali sono le tre famiglie di codificatori vocali e in cosa differiscono per bit-rate e qualità? Traccia: forma d'onda (PCM, 64 kbit/s, alta qualità), vocoder (2,4 kbit/s, qualità bassa e innaturale), ibridi (circa 10 kbit/s, ottima intelligibilità).

Versione ripasso

Il segnale. Localmente stazionario su circa 20 ms (a 8 kHz: 160 campioni per frame). Suoni vocali: pseudo-periodici con pitch (corde vocali). Non vocali: simili a rumore bianco. Poi transizioni.

Tre famiglie.

  • Forma d'onda (PCM, G.711 a 64 kbit/s con quantizzazione non uniforme): bassa complessità, alta qualità, bit-rate alto.
  • Vocoder: modellano la produzione della voce (LPC), si trasmettono i parametri, il ricevitore sintetizza; 2,4 kbit/s e meno; voce innaturale.
  • Ibridi: parametri LPC più codifica della forma d'onda del residuo; circa 10 kbit/s con ottima intelligibilità.

Standard. G.711 64 kbit/s, 8 kHz. G.729 ACELP, circa 8 kbit/s, 15 ms di ritardo. GSM full-rate 13 kbit/s. AMR-WB (G.722.2): 16 kHz, banda 50-7000 Hz, 9 tassi da 6,6 a 23,85 kbit/s, HD Voice 4G/5G; adattativo: toglie bit di sorgente per dare protezione di canale. Opus (RFC 6716): 6-510 kbit/s, 8-48 kHz, ritardo 26,5 ms, SILK (predizione lineare, parlato) + CELT (trasformata, musica) + modalità ibrida; WebRTC, WhatsApp, Zoom.

LPC10. Finestre da 20 ms, predizione sui 10 campioni precedenti: xP(n)=∑k=110akx(n−k)x_P(n)=\sum_{k=1}^{10}a_kx(n-k), y(n)=x(n)−xP(n)y(n)=x(n)-x_P(n), coefficienti scelti per minimo MSE. Filtro FIR A(z)A(z) invertibile: x(n)=y(n)+∑akx(n−k)x(n)=y(n)+\sum a_kx(n-k) (autoregressivo). Esempio: x(n)=0,9x(n−1)x(n)=0{,}9x(n-1) dà residuo 10,0,0,…10,0,0,\dots. Residuo quasi rumore: bianco (non vocale) o con pitch (vocale, treno di impulsi); non si trasmette, solo i parametri: bianco/non bianco (1 bit), potenza (6 bit), pitch (7 bit se vocale); fase inutile. L'autocorrelazione decide vocale o no.

  • Bit ogni 20 ms: 36 (coefficienti) + 1 + 6 (+7 se vocale).
  • Rvoiced=500,02=2500R_{\text{voiced}}=\frac{50}{0{,}02}=2500 bit/s; Runvoiced=430,02=2150R_{\text{unvoiced}}=\frac{43}{0{,}02}=2150 bit/s; le slide dicono media 2400 (la media 50-50 è 2325; 2400 richiede circa 71% di vocale).
  • Rispetto al PCM: 64 000/2400≈26,764\,000/2400\approx26{,}7 volte meno bit.
  • Limiti ("sussurrato"): decisione vocale/non vocale binaria, errori di classificazione, nessuna eccitazione mista, rumore bianco sintetico senza coerenza di fase.

ACELP. Dizionario ampio per il residuo; analisi per sintesi (anello chiuso): si scelgono i parametri che minimizzano l'errore; errore pesato dal mascheramento.

Problemi pratici.

  • Latenza (algoritmica: buffering e look-ahead; computazionale) che si somma al limite di 150 ms.
  • Resilienza: errori casuali e a burst sui canali mobili, FEC necessaria ma costa tempo e bit-rate.
  • Silenzio: circa 50% della conversazione; la soppressione con VAD risparmia banda, ma può tagliare l'inizio delle parole (clipping) e il rumore di fondo.

Errori tipici: dire che il vocoder trasmette il residuo (trasmette parametri del residuo e coefficienti); scambiare 36 bit (coefficienti) con 36 coefficienti; sommare 7 bit di pitch anche ai suoni non vocali; ritenere "2400 bit/s" la media aritmetica dei due tassi.

Collegamenti: Audio, immagini e video digitali non compressi e spazi di coloreIl parlato (banda 200-3400 Hz) si digitalizza con $F_c=8$ kHz e 8 bit per campione: 64 kbit/s (PCM, pacchetti di 20 ms = 160 campioni = 160 byte). La musica (banda fino a 20 kHz) con $F_c=44{,}1$ kHz, 16 bit, 2 canali: 1,411 Mbit/s. Un'immagine a colori RGB ha 3 canali da 8 bit (24 bit per pixel); nello spazio YCbCr, ottenuto con una rotazione dello spazio colore, l'occhio è molto meno sensibile alla crominanza e si scartano 3 campioni su 4 di Cb e Cr (4:2:0), dimezzando i dati: $1{,}5\cdot H\cdot W$ campioni per immagine. Un video non compresso costa $H,W,1{,}5,b,f$ bit/s (1080p a 50 Hz: 1,244 Gbit/s, 4K: 5,3 Gbit/s): serve la compressione.Audio, immagini e video digitali non compressi e spazi di colore →, Metriche e prestazioni di rete per i servizi multimedialiUna rete è una pila di livelli: ogni livello offre un servizio al superiore tramite un'interfaccia e dialoga con il livello pari con un protocollo; il pacchetto di un livello è il payload del livello inferiore ($\mathrm{PDU}n=\mathrm{PCI}n+\mathrm{SDU}n$), con efficienza $\eta=\frac{|\mathrm{SDU}n|}{|\mathrm{PDU}n|}$. Metriche: bit-rate $R_0$ (livello fisico) $\ge$ throughput $S$ $\ge$ goodput (throughput a lungo termine a livello applicazione). Ritardo nodale $d=d{proc}+d{queue}+d{trans}+d{prop}$ con $d{trans}=\frac LR$ e $d_{prop}=\frac xc$; ritardo end-to-end = somma dei nodali; jitter = variabilità del ritardo; BDP $=S\cdot\mathrm{RTT}$ (con il bit-rate minimo del percorso). Affidabilità: nel canale binario simmetrico $\mathrm{PER}=1-(1-\varepsilon)^L$ e $P(\ell)=\binom L\ell\varepsilon^\ell(1-\varepsilon)^{L-\ell}$; codici di canale $R=\frac kn$, parità, Hamming, interleaving per i burst; perdite per errori o congestione, $\mathrm{PDR}=1-P_{\text{LOSS}}$.Metriche e prestazioni di rete per i servizi multimediali →, Codifica lossless - entropia, Huffman e codifiche a dizionarioLa codifica lossless rappresenta i simboli di una sorgente con parole di codice a lunghezza variabile in modo invertibile; si usano codici a prefisso (istantanei). L'entropia $H(X)=\sum p_i\log_2\frac1{p_i}$ è il limite: $H(X)\le\mathcal L^*<H(X)+1$ (Shannon), con uguaglianza se le probabilità sono potenze di 1/2. Il codice di Huffman è ottimo ma lascia fino a 1 bit di overhead per simbolo; raggruppando $K$ simboli (codifica a blocchi) si tende al tasso entropico $\mathcal H(X)\le H(X)$, ma la complessità cresce come $M^K$; la codifica aritmetica ($\mathcal L<H+2$ per messaggio) ha complessità lineare. Altre tecniche: dizionario (LZ, DEFLATE di ZIP e PNG, ANS in Zstandard), Exp-Golomb e categoria/ampiezza (usati in JPEG e nei codec video) per interi con probabilità decrescente col modulo, codifica predittiva (si codifica l'errore di predizione, che ha entropia molto più bassa).Codifica lossless - entropia, Huffman e codifiche a dizionario →.

Esercizi su questo argomento

Teoria collegata