Dithering (da Wikipedia)

Da Wikipedia, l'enciclopedia libera.

  

In questo articolo ci sono delle imprecisioni.

Il primo errore (perché di un errore si tratta) è chiamare l’errore di quantizzazione “rumore” di quantizzazione. Ma purtroppo questa è ormai una abitudine consolidata contro cui non c’è nulla da fare.  

I convertitori A/D producono distorsione solo se non sono lineari. Un convertitore A/D lineare non produce distorsione. La distorsione dipende dall’ampiezza e dalla forma del segnale e non può essere “cancellata” aggiungendo rumore.

Quando si converte un segnale periodico in forma digitale quella che viene definita “distorsione” è rumore di quantizzazione che, a causa della periodicità del segnale, è a sua volta periodico e presenta uno spettro che sembra quello della distorsione armonica. L’applicazione del dithering (ovvero la somma al segnale di un rumore casuale non correlato) distrugge la periodicità del rumore di quantizzazione e trasforma quella che sembrava distorsione , in rumore di fondo. Se si fosse trattato veramente di distorsione questa non sarebbe sparita semplicemente aggiungendo del rumore così come , aggiungendo del rumore, la distorsione prodotta (per es. da un amplificatore) non scompare.

Se la distorsione potesse essere corretta aggiungendo del rumore avremmo dispositivi “rumorosi” ma perfettamente lineari e saremmo tutti più felici.

L’altra imprecisione riguarda quando applicare il dithering. Il dithering va applicato solo e soltanto quando i segnali, per la loro particolare forma nel tempo, producono un rumore di quantizzazione periodico. In sostanza in casi rarissimi e solo con segnali periodici di basso livello (e nemmeno tutti come è stato dimostrato). Con programmi musicali o con il parlato il dithering non fa altro che aggiungere del rumore il quale, essendo molto debole, non viene di norma percepito.

Quindi si può anche applicare il dithering di default senza chiedersi se serva o non serva. Se serve bene, se non serve non si sente. Resta il fatto che si sottopone il segnale ad un processo inutile e ciò che è inutile spesso è dannoso (infatti aggiunge inutilmente rumore).

QUESTO PER QUANTO RIGUARDA IL CAMPO AUDIO. In campo video è tutta un’altra questione e il dithering è molto più utile ed efficace.

Tutto questo è stato dimostrato con una serie di misure eseguite su segnali di varia natura con e senza dithering. È stato anche dimostrato che, in certe circostanze, il dithering è inutile anche con segnali formati dalla sovrapposizione di due segnali sinusoidali.

Mario Bon

 

Il dithering, nella elaborazione numerica di segnali, è una forma di rumore con una opportuna distribuzione, che viene volontariamente aggiunto ai campioni con l'obiettivo di minimizzare la distorsione introdotta dal troncamento nel caso in cui si riquantizzino i campioni stessi. Il dithering viene usato abitualmente nell'elaborazione di segnali video e audio campionati e quantizzati. Il dithering non ha nulla a che vedere col jitter. G. Roberts nella sua tesi di dottorato nel 1961, presso il MIT, nonostante egli non abbia usato .

 

Audio digitale

 

La versione finale di un brano audio che viene scritto digitalmente su di un compact disc, è tipicamente quantizzata a 16 bit per campione ma, grazie al processo di editing audio, i dati crescono in profondità quanto occorre. Più calcoli matematici svolgiamo, più il campione cresce in profondità: come se si trattasse di aggiungere, moltiplicare o dividere numeri decimali. Alla fine i dati digitali vengono riportati alla profondità iniziale (16 bit) per poter essere memorizzati su di un CD e distribuiti.

Esistono molti metodi che permettono di tornare ai canonici 16 bit. Ad esempio, si possono semplicemente troncare i bit in eccesso (troncamento). È anche possibile arrotondare i bit in eccesso al valore più prossimo. Ognuno di questi algoritmi, comunque, produce un imprevedibile errore nel risultato. Consideriamo, ad esempio, una forma d'onda composta dai seguenti valori:

1   2   3   4   5   6   7   8

Se la riduciamo del 20% otteniamo questa sequenza:

0.8 1.6 2.4 3.2 4.0 4.8 5.6 6.4

Troncando i valori otteniamo:

0   1   2   3   4   4   5   6

Se invece li arrotondassimo avremmo:

1   2   2   3   4   5   6   6

Se qualsiasi sequenza, compresa quella iniziale, viene processata moltiplicando i valori per 0.8 il risultato conterrà errori che saranno ovviamente ripetibili. Un'onda rappresentante la funzione di seno quantizzata al valore originario, ad esempio, comporterà lo stesso errore ogni volta che il suo valore sarà "3.4" visto che il risultato verrebbe abbassato di 0,4. Ogni volta che il valore è "5", l'errore dopo il processo sarà 0. In ogni caso, l'ammontare dell'errore cambierà continuamente al modificarsi dei valori. Il risultato ha un comportamento ciclico nell'errore, che mostra la sua frequenza addizionale sulla forma d'onda (distorsione armonica). L'orecchio è in grado di percepire questo errore sotto forma di frequenza addizionale.

Non possiamo evitare il riprodursi degli errori in questo procedimento. Prendere un numero a due cifre (4.8) e trasformarlo in uno ad una cifra (5) produce un errore, e questo è inevitabile. Quello che vogliamo fare è creare un sistema in cui l'errore non si ripeta al ripetersi dei valori.

Una plausibile soluzione potrebbe essere di prendere un numero a due cifre (4.8) ed arrotondarlo in una delle due direzioni. Ad esempio, lo arrotondiamo la prima volta a 5, la seconda a 4, e così via. In questo modo la media a lungo termine sarà 4.5, invece di 4, ed il valore sarà più simile a quello di partenza, 4.8. Questo metodo produce ancora un errore deterministico (nonostante sia più complicato). Ogni volta che troviamo il valore 4.8 l'errore sarà 0.2 o -0.8. Quindi il problema non è risolto.

Un'altra soluzione consiste nell'arrotondare il 4.8 in modo che quattro volte su cinque diventi 5, e l'altra diventi 4. In questo caso la media è esattamente 4.8 ma, sfortunatamente, l'errore è ancora deterministico, ed ancora l'orecchio lo percepisce (nonostante il sovracampionamento possa limitare il disturbo).

Questo ragionamento porta al dithering. Invece di arrotondare con una ciclicità predicibile, che succederebbe se lavorassimo in modo casuale? Possiamo arrotondare casualmente vincolando il totale in modo che l'80% delle volte venga arrotondato a 5, lasciando così la media a 4.8 ma generando un errore irriproducibile. Proprio questo è il cuore del dithering.

Calcoliamo una serie di numeri casuali compresi tra 0 e 0.9 (ad esempio: 0.6, 0.4, 0.5, 0.3, 0.7, etc.) e li aggiungiamo al risultato della nostra equazione. Due volte su dieci il risultato verrà troncato a 4 (se 0 o 0.1 vengono aggiunti a 4.8), mentre nei restanti casi il valore diverrà 5; ognuna di queste situazioni ha una possibilità del 20% di diventare 4 e dell'80% di diventare 5. A lungo andare la media sarà 4.8 e la quantizzazione dell'errore diverrà casuale. Il rumore così ottenuto è percepito meno dall'orecchio.

Plot small.png

Per far comprendere al meglio la funzione del dithering, vengono messi a disposizione i seguenti file audio:

 

Quando aggiungere il dithering

Il dithering va aggiunto prima di qualsiasi quantizzazione o ri-quantizzazione al fine di prevenire comportamenti non lineari (distorsione); più bassa è la profondità di bit, più grande deve essere il dither. Il risultato sarà ancora distorto, ma la distorsione, essendo di natura casuale, viene ridotta a rumore. Qualsiasi processo di riduzione di bit dovrebbe aggiungere il dither alla forma d'onda prima di applicare la riduzione.

 

Differenti tipi di dithering

 

RPDF sta per "Rectangular Probability Density Function" (Funzione rettangolare di densità della probabilità), ed è equivalente al lancio di un dado. Ogni numero ha la stessa probabilità di uscire.

 

TPDF sta per "Triangular Probability Density Function" (Funzione triangolare di densità della probabilità), equivalente al lancio di due dadi. La somma dei dadi ha differenti probabilità d'uscita:

1/1 = 2

1/2 2/1 = 3

1/3 2/2 3/1 = 4

1/4 2/3 3/2 4/1 = 5

1/5 2/4 3/3 4/2 5/1 = 6

1/6 2/5 3/4 4/3 5/2 6/1 = 7

2/6 3/5 4/4 5/3 6/2 = 8

3/6 4/5 5/4 6/3 = 9

4/6 5/5 6/4 = 10

5/6 6/5 = 11

6/6 = 12

il 7 uscirà molto più spesso del 2 o del 12, e la relazione tra queste probabilità viene detta triangolare.

 

La PDF Gaussiana è equivalente al lancio di infiniti dadi. La relazione tra le probabilità dei risultati ha una forma a campana detta curva Gaussiana. Il dithering prodotto dalla PDF Gaussiana è quasi coincidente al rumore atmosferico naturale, il fruscio delle musicassette, ecc.

 

Il dithering colorato viene a volte descritto come quel dithering che è stato filtrato per differenziarsi dal rumore bianco. Alcuni algoritmi di dithering usano un rumore che possiede più energia nelle alte frequenze, e meno nella banda audio critica.

Il noise shaping non è in realtà un dithering, poiché consiste nel "modellare" il rumore, come dice il suo nome, spostandolo in zone dello spettro audio in cui è meno udibile. Normalmente viene associato al dithering, e quindi sposta appunto questo rumore. È tuttavia possibile anche usarlo senza dithering. In tal caso il rumore di ri-quantizzazione rimane distorto, ma viene spostato in zone dello spettro audio in cui è meno udibile.

 

Quale dithering usare

Se il segnale da processare deve subire un ulteriore lavoro, dovrebbe essere usato il TPDF che ha l'ampiezza di due passi di quantizzazione (in modo che i valori calcolati varino tra -1 e +1 o, se vogliamo, tra 0 e 2). Se il dithering colorato viene usato come processo intermedio, la gamma di frequenze può sfumarsi in un'altra e diventare vagamente udibile.

Se il segnale da lavorare non deve essere ulteriormente processato (ovvero accettiamo direttamente il risultato del dithering) è conveniente usare il dithering colorato o il noise shaping, in grado di diminuire enormemente il livello del rumore udibile spostandone buona parte nell'area non critica.