Mauro Graziani

Docente di Musica Elettronica presso il Conservatorio F.A. Bonporti - Trento
Docente a contratto presso il Conservatorio E.F. Dall'Abaco - Verona


Modelli di analisi, rappresentazione e trattamento digitale del suono
Modulo 2

MP3
(MP1 layer III)


NB: questo approfondimento richiede nozioni di acustica tratte dal Corso di Acustica (cap. frequenza, dinamica) e la conoscenza della prima parte di questo corso.

NB: ovunque si citi la sigla MP3, si intende MP1 layer III.

0.   Introduzione: il bitrate

Attualmente l'MP3 del Fraunhofer Institute è il sistema di compressione più utilizzato al mondo. Il suo scopo è quello di ridurre il bitrate di un flusso di dati audio. In effetti è stato realizzato proprio per trasmettere il suono via rete. La riduzione delle dimensioni del segnale memorizzato su disco è un ovvio effetto collaterale.
Il bitrate è il numero di bit trasmessi per ogni secondo di suono. Nel caso di un segnale non compresso (es.: WAV), abbiamo già imparato a calcolare il numero di bytes per ogni secondo di suono. Per passare al bitrate, basta ricordare che ogni byte è formato da 8 bit, quindi è sufficiente moltiplicare per 8.
Considerando che un segnale stereo, SR 44100, 16 bit produce 2 * 44100 * 2 = 176400 bytes al secondo, il suo bitrate sarà di 176400 * 8 = 1411200 bit al secondo, cioè circa 1411 Kbit.
Scopo dell'MP3 è ridurre tale valore a livelli che vanno da un massimo di circa 384 Kbit (compressione 1:4) in giù. Ovviamente, per ottenere questo risultato, qualcosa dovrà essere tolto dal segnale originale. Lo schema della codifica, che si basa sia su considerazioni psico-acustiche che algoritmiche, è descritto nei capitoli seguenti.
Nell'MP3, il bitrate è il principale parametro di controllo dell'entità della compressione e quindi anche della qualità risultante. Più alto il bitrate, più alta la qualità, ma maggiore dimensione del file. Nei coder più evoluti (per es. LAME) esso è gestito in tre modi, a scelta dell'utente:
Dalle specifiche tecniche, il VBR appare la scelta migliore e in effetti i file in VBR suonano praticamente identici ai CBR con bitrate superiore. Resta il fatto che parecchi audiofili hanno i brividi all'idea che la qualità della codifica possa cambiare da un istante all'altro.

1.   Codifica psico-acustica

La prima cosa da tener presente è che l'MP3 suddivide il flusso in frames (piccoli segmenti), ognuno dei quali consta di 1152 campioni. La loro durata, quindi, non è fissa, perché dipende dalla frequenza di campionamento. Con SR 44100, la durata di un frame è 1152 / 44100 = 0.026 sec., cioè 26 millisec.
La figura seguente schematizza le varie fasi della codifica che vengono spiegate in dettaglio più oltre. Tutte le operazioni vengono eseguite su ogni singolo frame.

Schema MP3

1.1   Banco di filtri

Il primo passaggio consiste in un banco di 32 filtri a terzi di ottava (come l'equalizzatore grafico di Cool-Edit) che copre tutto il campo udibile (da 16 a 20000 Hz ci sono poco più di 10 ottave = 30 terzi + 2). Il segnale viene così diviso in 32 bande ognuna delle quali è analizzata e trattata a parte.
Questo sistema è sensato perché anche il sistema percettivo umano lavora in questo modo (vedi Corso di Acustica, Banda Critica in Timbro, prima parte), con la differenza che le sue bande non sono esattamente identiche (quelle sotto i 1000 Hz sono proporzionalmente più larghe).

Come esercizio, per rendervi conto di cosa significa, caricate in Cool-Edit un brano musicale, poi aprite l'equalizzatore grafico a terzi di ottava; portate l'estensione a 120 dB; regolate tutti i cursori a -60 in modo da non sentire nulla premendo preview e poi portateli uno ad uno a 0 (metà corsa) per sentire che cosa c'è in quella banda. Noterete anche che in alcune bande (molto basse/alte) non sentirete nulla.

1.2   Elaborazione psicoacustica

Sulle bande vengono eseguite alcune operazioni basate su considerazioni psico-acustiche:

1.2.1   Eliminazione frequenze mascherate

Vedi ancora Corso di Acustica, comunque ne do un breve riepilogo.
Si ha un effetto di mascheramento (masking) quando una frequenza o un rumore, più forte, maschera una frequenza più debole impedendo che quest'ultima venga percepita. L'entità dell'effetto varia in base alla frequenza e al tipo di suono. Esaminiamo la figura seguente:
Mascheramento
Nel riquadro a sin. si vede l'entità del mascheramento di una sinusoide di frequenza 800 Hz a varie ampiezze. Quando questa frequenza è a 20 dB sopra la soglia della percezione (linea a 0 dB che segue la curva di Fletcher) maschera tutto ciò che sta sotto l'area gialla: una frequenza a 900 Hz e 10 dB, per esempio, verrà mascherata.
L'effetto aumenta con l'aumentare dell'ampiezza della frequenza mascherante. A 60 dB (zona verde), la nostra frequenza di 800 Hz sarà in grado di mscherare una frequenza di 1000 Hz con ampiezza fino a poco meno di 40 dB, mentre una frequenza di 2000 Hz dovrà avere una ampiezza maggiore di 15 dB per essere percepita (sotto, verrà mascherata). A 100 dB (zona azzurra), tutte le frequenze più alte subiranno mascheramenti di varia entità. I 2000 Hz, per es., dovranno superare i 70 dB per bucare il mascheramento.
Il secondo riquadro illustra lo stesso effetto per una frequenza di 3500 Hz. Come si vede, nelle frequenze alte, l'effetto è minore.
Il terzo riquadro, infine, mostra l'effetto di mascheramento di un rumore che copre l'intera banda (es.: rumore bianco, fruscio di una fontana). Tutte le frequenze sono notevolmente mascherate.
Nella codifica MP3, le frequenze mascherate vengono inesorabilmente tolte in base al principio secondo il quale è inutile codificare ciò che non si sente.
Notare che il mascheramento vale anche per frequenze non simultanee, purché la differenza temporale di entrata sia piccola (max circa 5 msec). Questo significa che una frequenza più forte è in grado anche di mascherarne una debole che inizia meno di 5 msec prima o dopo.

1.2.2   Eliminazione frequenze sotto la cuva di Fletcher

In base al principio appena menzionato, anche le eventuali frequenze di ampiezza inferiore alla curva di Fletcher a 0 dB (vedi Corso Acustica: dinamica) verranno brutalmente spazzate via, perché impercettibili. Notate che questo significa che, per es., anche una componente a 100 Hz e 20 dB viene eliminata.

1.2.3   Joint Stereo

Innanzitutto ricordiamo che l'applicazione del Joint Stereo è opzionale in fase di codifica e dovrebbe essere inserita solo in segnali con bassa separazione stereofonica. Alcuni coder, come LAME, sono in grado di valutare, per ogni frame, il grado di separazione e quindi lo attivano o meno. In questo caso lo si può inserire, ma senza forzarlo.
Per capire come funziona lo "stereo congiunto", bisogna ricordare che nel segnale i due canali sono codificati separatamente e in effetti un segnale stereo ha il doppio dei campioni di uno mono della stessa durata. A volte, però, la cosa non si giustifica, in quanto i la differenza fra i due canali è minima o anche nulla.
La prima modalità di applicazione del joint stereo è detta  M/S (middle/side) e cosiste nel creare un canale dato dalla somma dei 2 canali (middle = L+R) e uno dato dalla differenza (side = L-R). A questo punto, il flusso middle viene codificato con un numero di bit maggiore rispetto al side che è, generalmente, più esile.
In parecchi frames, inoltre, la differenza fra i canali può benissimo essere zero, per cui il side non viene codificato affatto.
Il segnale originale può essere ricostruito osservando che, conoscendo la somma e la differenza di due numeri, è sempre possibile ricalcolarli risolvendo il banale sistema
x + y = K1
x - y = K2
dove K1 è il valore del middle per quel campione e K2 quello del side. Notate che, operando in questo modo non si eliminano le differenze stereofoniche: semplicemente si riduce la ridondanza.

Come esercizio, per rendervi conto di cosa significa, caricate in Cool-Edit un file stereo (possibilmente preso da un CD), poi fate la somma (attenzione a non oltrepassare l'ampiezza massima) e la differenza (somma con inversione di fase) dei due canali e ascoltate il risultato.
Provate con vari file per rendervi conto della separazione stereo.

Esiste una seconda modalità di Joint Stereo, detta IS (Intensity Stereo) più distruttiva e usata molto di rado, che si basa sul fatto che il nostro sistema percettivo ha difficoltà nel localizzare la posizione di frequenze molto basse e molto alte. Infatti, se ci pensate, negli impianti surround esiste un solo sub-woofer, non due casse come per i medi e gli alti.
Di conseguenza, è in teoria possibile sommare le frequenze bassissime e altissime di entrambi i canali e codificarle come un solo canale, risparmiando il 50% su certe bande. Il modo IS consiste appunto nell'applicare questo sistema di riduzione, ma solo alla banda più alta. Questo sistema, però, non è per niente neutro (si sente) per cui non viene usato quasi mai.

È interessante notare che esiste anche una modalità a stereo totalmente disgiunto, in cui i 2 canali sono trattati come del tutto indipendenti. Questo sistema è usato quando i 2 canali contengono audio non correlato (es.: commento in lingua originale e traduzione oppure musica e commento).

2.   Codifica numerica

Qui termina la parte psicoacustica di riduzione del segnale e inizia la parte di codifica numerica del risultato nella quale non ci addentreremo più di tanto. Alcuni passi, inoltre, vengono eseguiti solo se il bitrate non è definito come costante (CBR), ma come variabile (VBR).
Le azioni principali che si eseguono in questa fase per ogni frame sono
  • se VBR, determinazione del bitrate
  • eventuale riduzione della frequenza di campionamento con relativo taglio degli alti: in realtà questo passo non si esegue praticamente mai, ma solo nel caso in cui venga richiesto un bitrate costante (CBR) così basso da risultare impossibile da raggiungere con i precedenti artifici, pena la produzione di artifatti audio (vedi esempio più avanti).
  • codifica del segnale con controllo del rumore di quantizzazione
  • il layer III applica una compressione con codifica Huffman (loseless)
  • calcolo di un CRC, cioè un codice inserito nel frame che in caso di trasmissione permette a un ricevente di assicurarsi che il frame sia stato ricevuto correttamente
Il tutto viene poi scritto su disco o trasmesso sotto forma di un flusso che contiene tutte le bande in parallelo (bitstream multiplex).
Occorre, infine, tener presente che le specifiche MP3 indicano cosa fare, non come farlo. Per questa ragione la qualità di realizzazione del programma di encoding è critica. Un ottimo coder è LAME.
Non è critica, invece, la qualità del decoder perché l'algoritmo di decodifica non porta particolari problemi (basta eseguire, pari pari, le istruzioni delle specifiche).

3.   Test

3.1   Confronto CBR - VBR

Lo stesso frammento in CBR 128 Kbps e VBR medio di 96 e 128 Kbps. Il numero su cui si clicca indica la dimensione del file.
Ascoltandolo in ambiente silenzioso con buone casse o cuffia si nota come il VBR con media 96 sia equivalente al CBR 128 con risparmio della dimensione di oltre il 20%.

CBR - 128 Kbps
VBR - media 96 Kbps
VBR - media 128 Kbps
480781
376462
524645

3.2   Effetto della compressione in varie modalità

Il fine del test è didattico. Serve a farsi una idea delle possibilità e dei problemi dell'MP3 a vari livelli di compressione e a sentire l'incidenza della riduzione dei dati a vari livelli. Proprio per questo è stato scelto un brano piuttosto pulito e non molto complesso (l'aria "...la ci darem la mano...").
Il test si compone dei seguenti files:
  • originale qualità CD: stereo, 16 bit, SR 44100. Purtroppo per ora non ho potuto metterlo in linea per la sua dimensione. Potete comunque ascoltare le differenze fra i vari livelli di compressione. In ogni caso r_320 può essere utilizzato come file di riferimento per l'ascolto.

  • file denominati k_bitrate: tutti i file con nome k_numero sono MP3 con codifica CBR senza riduzione di SR. Il valore del numero è il bitrate.
    Non potendo abbassare l'SR per raggiungere il bitrate richiesto, si producono distorsioni (artifatti) a bitrate bassi (da 64 in giù). La cosa si sente chiaramente in k_032 quando il cantante pronuncia il 'sì'.

  • file denominati r_bitrate: tutti i file con nome r_numero sono MP3 con codifica CBR e riduzione di SR, se necessaria (da bitrate 64 in giù).
    Come già accennato, infatti, ad alti livelli di compressione i coder riducono l'SR tagliando gli alti per ottenere il bitrate richiesto. Se non si fa, si producono delle distorsioni (artifatti) che potete sentire negli esempi a bitrate inferiore (ascoltate k_032). Notate che questo comportamento è il default perché si preferisce un brano con meno frequenze alte a uno con distorsioni.
    Anche qui il valore del numero è il bitrate.
    A partire dal bitrate 96, la riduzione dell'SR non è più necessaria per cui le versioni k_ e r_ coincidono.

  • file denominati vbr_numero: questi file sono codificati con bitrate variabile. Essendo variabile non può essere espresso con un numero fisso perché cambia da un frame all'altro. Il parametro di controllo è un valore indicativo di compressione che va da 0 a 9 e indica il livello medio della compressione (0 minima, 9 massima).
    Nella codifica di questo brano con compressione a livello 0 (minima), LAME codifica quasi tutti i frame con bitrate intorno a 192 con punte da 256 a 128. Con compressione massima, invece, il bitrate medio è 112 con punte da 64 a 160.
Confrontate files di dimensioni simili per valutare la resa dei vari metodi. Dividete le dimensioni dell'originale (34.104.044) per la dimensione del file per avere il rapporto di compressione. Tutti il file sono codificati con LAME 3.92 MMX su linux. In tutti i file si usa il Joint Stereo.

Dimensioni
File
Note
34104044 Originale
Originale in wav (non compresso) a qualità CD: stereo, 16 bit, SR 44100.
773538 k_032 Tutti i file con nome k_numero sono MP3 con codifica CBR senza riduzione di SR. Il valore del numero è il bitrate.
Non potendo abbassare l'SR per raggiungere il bitrate richiesto, si producono distorsioni (artifatti) a bitrate bassi (da 64 in giù)
1160307 k_048
1547283 k_064
2320927 k_096 Da qui in poi le versioni k_ e r_ sono identiche per cui teniamo solo la versione r_
773424 r_032 Tutti i file con nome r_numero sono MP3 con codifica CBR e riduzione di SR, se necessaria (da bitrate 64 in giù). Il valore del numero è il bitrate.
In questo esempio il coder ha dovuto ridurre l'SR fino a 16000 per ottenere un bitrate di 32 senza distorsioni
1160307 r_048 Qui l'SR è stato ridotto a 22050 per la stessa ragione.
1547136 r_064 Qui l'SR è stato ridotto a 24000 per la stessa ragione.
2320927 r_096 A partire da qui non c'è più riduzione di SR. Da qui in poi le versioni k_ e r_ sono identiche per cui teniamo solo la versione r_
2707748 r_112
3094568 r_128
3868212 r_160
4641853 r_192
5415497 r_224
6189138 r_256
7736423 r_320
4490135 vbr_00 MP3 a bitrate variabile (VBR). Il bitrate variabile non può essere espresso con un numero fisso. Il parametro di controllo è un valore indicativo di compressione che va da 0 a 9 e indica il livello medio della compressione (0 minima, 9 massima)
4155996 vbr_01
3999820 vbr_02
3707989 vbr_03
3595327 vbr_04
3489822 vbr_05
3238105 vbr_06
3026466 vbr_07
2823177 vbr_08
2666879 vbr_09


Back