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%.
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 |
|