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 CD 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%.
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 |
|
L'originale è a 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.
|
| 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 |
|