Sei sulla pagina 1di 2

CORSO DI ELABORAZIONE DELL'AUDIO DIGITALE

A.A. 2013/14

ESERCITAZIONE N.1 - DEL 28.11.2013

Quantizzazione PCM (lineare)


PARTE GUIDATA

1. Quantizzazione lineare Si realizzi una funzione Matlab qenc per la quantizzazione lineare di un vettore di campioni chiamato in. La funzione riceve, oltre a tale vettore, il numero di bit da utilizzare nbits e il valore massimo della dinamica del quantizzatore xol (dinamica tra -xol e + xol). Restituisce come valore di ritorno il vettore ) di campioni quantizzati X [n] . Parimenti si realizzi anche loperazione inversa di de-quantizzazione tramite una funzione qdec che ) ) ricevuti in ingresso i valori X [n] ritorni i valori de-quantizzati x[n] . Per effettuare la quantizzazione (midread quantizer) si utilizzi la seguente formulazione, dove N il numero di bit su cui rappresentare i campioni:

) ) ) X [n] = ceil (( x ( xol )) ) x[n] = ( X [n] 0.5) + ( xol )

1 2 x = = N ol 2 1

La funzione indicata provvede a: 1) ridurre il segnale nellintervallo [-1-(-xol),1-xol] (es. -xol = -1 [-1-(-1), +1-(-1)] => [0, +2]), 2) scalare tale intervallo sullintervallo di valori [0, 2N-1] (es. N=4 [0,+2]((2N-1)/(2(+1)) => [0,16]), ) 3) approssimare (quantizzare) i valori reali a valori interi X [n] tramite loperazione di troncamento (es. ceil(x) => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) 4) a ripetere i passi al contrario (nella decodifica) per riportare i valori nellintervallo iniziale, viene sottratto il termine .5 per riportare i valori nel mezzo dellintervallo di quantizzazione (es. ceil{[.6-(-1)]15/2}=ceil{12}=12 => [(12-.5)/(15/2)]+(-1) = 0.5333). Esempio: xol=1 N=4 =7.5 x=0 => ceil{[0-(-1)]7.5}=ceil{7.5}=8 => [(8-.5)/7.5]+(-1) = 0 Tramite lintroduzione del parametro xol, se questo vale meno (pi) del valore massimo (minimo) del segnale, ) possibile che alcuni valori di X [n] eccedano lintervallo dei valori interi disponibili per il quantizzatore [1, 2N]. In tal caso necessario effettuare il clipping di tali valori, troncandoli al valore massimo 2N o minimo 1 che il quantizzatore pu assumere.
z: output

0.5

-0.5

-1 -1 -0.5 0 x: input 0.5 1

Approfondimento: Matlab mette a disposizione una funzione per la quantizzazione chiamata quantiz, interessante capirne limplementazione ed, eventualmente, confrontarsi con essa (doc quantiz).

PAG. 1/2

CORSO DI ELABORAZIONE DELL'AUDIO DIGITALE


A.A. 2013/14

2. Calcolo della distorsione in termini di rapporto segnale rumore Per valutare leffetto della quantizzazione sulla qualit del segnale audio si realizzi una funzione Matlab per il calcolo del rapporto segnale - rumore (SNR) in dB [snrdb]=snr(original,modified). Si utilizzino le funzioni realizzate in precedenza (qenc, qdec) per valutare, anche percettivamente, gli effetti di perdita di qualit dovuta alla peggiore quantizzazione (6, 4, 2, 1 bit): - si considerino i file audio forniti con lesercitazione (sinusoide, voce, audio) come segnali originali nei confronti del quale calcolare il rapporto SNR; - si quantizzino (e de-quantizzino) i segnali con le diverse risoluzioni in bit (per il momento utilizzando 1 come valore di xol (massimo dei campioni in input); - si calcolino lSNR dei nuovi segnali rispetto a quelli originali, quali valori di SNR sono ancora accettabili? Si ascoltino i segnali cos degradati, che effetto si nota al variare del numero di bit usati per la quantizzazione? Si calcoli la differenza tra il segnale originale ed il segnale modificato, e lo si ascolti (eventualmente amplificato tramite la funzione Matlab soundsc). Lerrore introdotto suona davvero, e sempre, come rumore di quantizzazione?
0.5

Si estenda lo script in modo da plottare su una stessa figura (comando Matlab subplot) due grafici: uno che rappresenta la forma donda originale e, insieme, la forma donda modificata, laltro che rappresenta lerrore di quantizzazione. Si veda lesempio in figura. Si aggiunga una legenda con il numero di bit utilizzati e il valore dellSNR.

O riginal Q uantized 4 bits

-0.5 1.5 0.1 N oise (SN R : 11.529038 db) 0.05 0 -0.05 -0.1 1.55 1.6 1.65 1.7 1.75 1.8 1.85

1.5

1.55

1.6

1.65

1.7

1.75

1.8

1.85

FACOLTATIVO

3. Valutazione empirica del valore ottimo di overload Il valore di xol utilizzato nellesercizio precedente non lottimo per i segnali forniti come esempio (sarebbe ottimo se i valori del segnale in ingresso fossero uniformemente distribuiti tra [-1,+1]). Ripetere lesercizio utilizzando valori diversi di xol al fine di identificare il valore di xol ottimo (che produce il massimo valore di SNR) per quei segnali. U niform quantizer and G aussian input Quanto si discosta da 1? Perch? 70 4 bits (c=2.65) E sempre lo stesso valore indipendentemente dal numero 5 bits (c=2.95) 60 di bit utilizzati per la quantizzazione? 6 bits (c=3.25) PDF Gaussiana: se il segnale in ingresso ha una pdf di tipo gaussiano (=0) si pu studiare, al variare di N (tra 4 e 12), il valore ottimo per il rapporto xol/ (dove la varianza della pdf del segnale). Verificare i valori di SNR al variare di tale rapporto tra 1 e 5. Quale il valore ottimo? (Per generare il segnale cn pdf gaussiana utilizzare la funzione Matlab randn).
50 snr (dB) 7 bits (c=3.55) 8 bits (c=3.65) 9 bits (c=3.85) 10 bits (c=3.95) 11 bits (c=4.00) 12 bits (c=4.05)

40

30

20

10 1.5

2.5

3 3.5 c (xol/sigm a)

4.5

PAG. 2/2