# Codifica numerica del segnale audio/Capitolo 7

../Capitolo 6 ../Appendici IncludiIntestazione 17 marzo 2021 75% Da definire
Codifica numerica del segnale audio Daniele Sereno/Pietro Valocchi 1996 CC BY-SA 3.0 GFDL Indice:Codifica numerica del segnale audio.djvu //it.wikisource.org/w/index.php?title=Codifica_numerica_del_segnale_audio/Capitolo_7&oldid=- 20210317181924 //it.wikisource.org/w/index.php?title=Codifica_numerica_del_segnale_audio/Capitolo_7&oldid=- 20210317181924
7
CODIFICA NEL DOMINIO DELLA FREQUENZA
Le codifiche di forma d’onda e per modelli precedentemente presentate lavorano essenzialmente nel dominio del tempo. In tal modo risulta difficile estrarre alcune ridondanze presenti nel segnale che richiedono un’analisi in frequenza dello stesso. In particolare, gli aspetti su cui è possibile lavorare con un’analisi in frequenza sono:
* diversa struttura del segnale vocale. Lo spettro del segnale vocale può essere suddiviso fondamentalmente in due bande. Nella banda al di sotto dei 2 kHz si trovano le componenti relative ai suoni vocalizzati che richiedono un’estrema cura nella codifica. Nella banda superiore dello spettro si trova il contributo dei suoni non vocalizzati che, essendo approssimabili a rumore, sopportano codifiche meno curate senza un proporzionale degradamento della qualità percepita;
* differente dinamica delle componenti spettrali del segnale. All'aumentare della frequenza, la dinamica del segnale tipicamente diminuisce. Questo permette di adottare quantizzatori che, fissa l’ampiezza del quanto, abbiano estremi di saturazione (e quindi numero di livelli) che variano in funzione della frequenza del segnale;
* effetti di mascheramento presenti nell’apparato uditivo. A causa dell’impossibilità di percepire dettagli del segnale che si trovano al disotto della soglia di udibilità, soglia che viene influenzata da [p. 264 fenomeni di mascheramento, è possibile sia adottare quanti tali che il rumore di quantizzazione venga mascherato dal segnale, sia eliminare alcune componenti armoniche del segnale di dinamica modesta, che comunque non verrebbero percepite.
In ogni caso è necessario rappresentare il segnale in un dominio differente da quello del tempo. Considerando per semplicità una rappresentazione in frequenza, la trasformazione può avvenire in due modi distinti. Dato un segnale discreto x(n) e considerato un blocco di campioni pesato tramite una finestra h(n), la sua trasformata di Fourier è definita come
| $X_{n}(j\omega )=\sum _{m=-\infty }^{\infty }h(n-m)x(m)e^{-j\omega m}$ | (7.1) |
Questa trasformata è funzione di due variabili: l’indice temporale n e la pulsazione cu. Se si tiene fissa la pulsazione co = Cù o, la trasformata è interpretabile come 1 ’uscita di un filtro con risposta impulsiva h(n) ed ingresso pari al segnale modulato x(n) e-i“o n, cioè
| $X_{n}(j\omega _{0})=h(n)\otimes \left[x(m)e^{-j\omega _{0}m}\right]$ | (7.2) |
La modulazione introdotta nella trasformata ha Io scopo di riportare nell'intorno dell’origine una porzione del segnale, la cui banda è fissata dal filtro adottato. Al variare di co 0, si suddivide lo spettro del segnale in blocchi, analogamente a quanto avviene per mezzo di un banco di filtri passa banda (codifica per sottobande). Il flusso continuo emesso da ciascun filtro è poi codificabile con le tecniche tipiche dei codificatori di forma d’onda (vedi par. 7.2).
Viceversa, se si tiene fisso l’indice n = nO,XnO(j(0) è interpretabile come la trasformata del blocco di campioni [h(nO m) x(m)] centrato sull'istante
| $X_{n_{0}}(j\omega )=F\left[h(n_{0}-m)x(m)\right]$ | (7.3) |
Trasformando ciascun blocco del flusso numerico, si ottiene una rappresentazione in frequenza, i cui coefficienti costituiscono la codifica del segnale stesso (codifica per trasformate) (vedi par. 7.3).
Sebbene le due tecniche siano simili nell'impostazione (fig. 7.1), codifiche per trasformate eseguite su blocchi estesi di campioni permettono [p. 265 Fig. 7.1 - Differenza tra codifica per sottobande e per trasformate.
una migliore risoluzione in frequenza rispetto a codifiche per sottobande. D’altra parte, all'aumentare della dimensione dei blocchi utilizzati nelle trasformate peggiora la risoluzione temporale ottenibile. Per tali motivi, i maggiori rapporti di compressione si ottengono adottando tecniche ibride, anche se a prezzo di una maggiore complessità computazionale.
Concettualmente, la codifica per sottobande (sub-band coding: SBC) è ottenibile filtrando innanzitutto il segnale tramite un banco di M filtri passa banda e riportando poi ciascuna banda nell'intorno dell’origine, tramite una sua modulazione (fig. 7.2). Un primo problema da affrontare è, quindi, quello di determinare l’ampiezza di ciascuna sottobanda, dato che riducendo l’ampiezza delle sottobande si migliorano le prestazioni del codificatore, ma se ne aumenta la complessità. La suddivisione in sottobande può avvenire secondo più criteri. Innanzitutto è possibile utilizzare bande equispaziate e non [p. 266 Fig. 7.2 - Codifica per sotto-bande.
equispaziate (fig. 7.3). Considerando la distribuzione spettrale di potenza del segnale, la prima soluzione viene preferita nel caso di distribuzione omogenea (es.: segnale audio musicale). In tal caso, infatti non vi è ragione di privilegiare porzioni dello spettro nei confronti di altre.
Nel caso di segnale vocale, invece, le bande, tipicamente, non sono equispaziate, ma si tenta di far coincidere le frequenze centrali di ciascuna sottobanda con quelle delle formanti. In tal modo vengono riprodotte al meglio le componenti del segnale che hanno un maggiore impatto sulla qualità di codifica. Le sottobande ottenute in questo caso risultano essere di ampiezza maggiore al crescere della frequenza. Nel caso di spettro particolarmente disomogeneo è possibile addirittura utilizzare bande che risultino non contigue. [p. 267 Fig. 7.3 - Possibili scelte per l’ampiezza delle sottobande.
Per il segnale vocale, ad esempio, tale soluzione sarebbe praticabile rinunciando a riprodurre le componenti spettrali poste al di fuori delle formanti, caratterizzate da ampiezze modeste e, quindi, trascurabili.
Anche nel caso si consideri la risoluzione in frequenza dell’apparato uditivo, le bande utilizzate non sono equispaziate (vedi par. 7.3.3), dato che le bande critiche hanno ampiezza crescente all'aumentare della frequenza.
Nel seguito del paragrafo verrà considerato solamente il caso di bande equispaziate. In tal caso, indicando con ω$_x$ la banda complessiva del segnale, ciascuna sottobanda risulterà di ampiezza pari a ω$_B$ = ω$_x$/M. Ipotizzando di lavorare sulla rappresentazione numerica del segnale, i filtri passa banda richiesti risulteranno digitali. Tralasciando per il momento il problema della traslazione della sottobanda nell'intorno dell’origine, si nota che sull'uscita di ciascun filtro è possibile eseguire una decimazione. Infatti, essendo 1'ampiezza della banda pari a ω$_B$, la frequenza di campionamento richiesta è corrispondente ad una pulsazione 2ω$_B$, mentre il segnale è campionato per una pulsazione ω$_x$ = M x ω$_B$. Il fattore di sovracampionamento è, quindi pari a M. Di conseguenza, la sequenza decimata y(n), corrispondente ad un periodo di campionamento T’= MT, si ottiene dal segnale continuo x$_c$(t) come
| $y(n)=x_{c}(nT')=x_{c}(nMT)=x(nM)$ | (7.4) |
Considerando anche l’effetto dei filtri passa banda, le sequenze di uscita (non decimate e decimate) possono essere espresse come
| $W(n)=\sum _{k=-\infty }^{\infty }h(k)x(n-k)$ | (7.1) |
| $y(m)=\sum _{k=-\infty }^{\infty }h(k)\ x(M\times m-k)=\sum _{n=-\infty }^{\infty }h(M\times m-n)\ x(n)$ | (7.5) |
Tali relazioni sono esprimibili in frequenza come
| $Y\left(e^{j\omega T}\right)={\frac {1}{M}}\sum _{k=0}^{M-1}X\left(e^{j{\frac {\omega T'-2\pi k}{M}}}\right)$ | (7.6) |
In ricezione le sequenze vanno interpolate, innanzitutto inserendo campioni nulli al di fuori degli istanti di campionamento
| $w(m)={\begin{cases}x(m/M)&m=\pm M,\pm 2M,...\\0&altrimenti\end{cases}}$ | (7.7) |
e poi interpolando la nuova sequenza tramite un filtraggio numerico passa basso con frequenza di taglio corrispondente all'ampiezza della sottobanda
| $y(m)=\sum _{k=-\infty }^{\infty }h(m-k)\ x\left({\frac {k}{M}}\right)=\sum _{n=-\infty }^{\infty }h(m-M\times n))\ x(n)$ | (7.8) |
Tale relazione in frequenza è pari a
| $Y\left(e^{j\omega T}\right)={\frac {1}{M}}\sum _{k=0}^{M-1}X\left(e^{j{\frac {\omega T'-2\pi k}{M}}}\right)$ | (7.9) |
Per i dettagli implementativi sulla struttura dei filtri necessari per la conversione della frequenza di campionamento si rimanda in [Appendice D].
Il ricampionamento, grazie alle repliche da esso introdotte, esegue automaticamente la necessaria traslazione del segnale nell'intorno dell’origine. Infatti, è sufficiente eliminare le repliche non necessarie tramite un filtro passa basso con frequenza di taglio ω$_B$. C’è, però, da tener presente che, a secondo che si consideri una sottobanda di ordine pari o dispari, la decimazione fornisce una sua replica esatta o rovesciata nell'intorno dell’origine (fig. 7.4). Nel [p. 269 Fig. 7.4 - Decimazione di sottobande di ordine pari e dispari.
secondo caso è possibile ripristinare la corretta orientazione tramite una modulazione con un segnale sinusoidale a frequenza pari a metà della frequenza di campionamento. Numericamente ciò si ottiene moltiplicando i campioni per la sequenza (-l)n, cioè cambiando di segno ad un campione su due.
Ciascuna banda viene, infine, codificata tramite tecniche di forma d’onda. Nel caso di bande piuttosto piccole, dato che esse risultano essere campionate a frequenza molto prossima alla frequenza di Nyquist, non risulta utile adottare codifiche predittive. Viceversa, il vantaggio principale della codifica per sottobande risiede nella possibilità di poter quantizzare ciascuna banda con un numero di bit Rk variabile. Trascurando gli aspetti percettivi, trattati in un successivo paragrafo, per fissare le caratteristiche di quantizzazione nelle diverse sottobande si possono adottare più criteri, a volte tra loro combinabili, mentre altre volte tra loro contrastanti. Ad esempio:
* è possibile tentare di minimizzare l’errore globale di codifica per un fissato flusso numerico; [p. 270
* utilizzando sempre quanti della stessa ampiezza, è possibile fissare gli estremi di saturazione di ciascuna sottobanda (e quindi il numero di bit) in maniera che si riducano al diminuire della potenza del segnale (tipicamente a frequenza crescente) (in maniera simile a quanto fatto nella codifica APCM);
* se si tenta di rendere uniforme il rapporto segnale rumore in frequenza, è possibile diminuire l’ampiezza dei quanti (e quindi il rumore) per le componenti ad energia inferiore (tipicamente a frequenza crescente) (in maniera simile a quanto fatto nella codifica NFC);
* sfruttando le caratteristiche della sorgente, nel caso di segnale vocale è possibile assegnare un numero di bit inferiore alle bande a frequenza maggiore (interessate alla produzione di suoni non vocalizzati e, quindi, più simili a rumore) ed un numero maggiore per le bande inferiori (legate alla ricostruzione del pitch e delle formanti) (es.: codifica ITU-T G.722).
Ipotizziamo di voler fissare la distribuzione di bit tra sottobande in modo che venga minimizzato il rumore di quantizzazione complessivo, per un fissato flusso numerico. Se si indica con Rk il numero di bit utilizzati nella sottobanda k-esima, con fs la frequenza di campionamento ed ipotizzando M sottobande equispaziate, il flusso totale generato nella codifica SBC è pari a
| $f_{c}=f_{s}\sum _{k=0}^{M-1}R_{k}$ | (7.10) |
Per quanto riguarda la potenza dell’errore di quantizzazione, ipotizzando sottobande non sovrapposte risulta
| $\sigma _{x}^{2}=\sum _{k=0}^{M-1}\sigma _{k}^{2}$ | (7.11) |
dove con $\sigma _{x}^{2}$ è indicata la potenza complessiva del segnale, mentre con $\sigma _{k}^{2}$ la potenza che cade nella sottobanda k-esima. Ricordando dalla 2.45 che la componente granulare dell’errore di quantizzazione vale
| $e_{g}^{2}=\epsilon _{x}^{2}\sigma _{x}^{2}2^{-2R_{k}}$ | (7.12) |
$\epsilon _{k}^{2}=\epsilon _{x}^{2}=\epsilon ^{2}$
| $e_{g}^{2}=\epsilon ^{2}\sum _{k=0}^{M-1}\sigma _{k}^{2}2^{-2R_{k}}$ | (7.13) |
II problema è minimizzare tale grandezza rispetto alle incognite Rk, con il vincolo che il flusso numerico
| $M\ R=\sum _{k=0}^{M-1}R_{k}$ | (7.14) |
si mantenga costante. In questa espressione, R è il numero medio di bit per campione. Utilizzando i moltiplicatori di Lagrange, ciò equivale a minimizzare la funzione non vincolata
| $L=\epsilon ^{2}\sum _{k=0}^{M-1}\sigma _{k}^{2}2^{-2R_{k}}-\lambda \left(M\ R-\sum _{k=0}^{M-1}R_{k}\right)$ | (7.15) |
rispetto alle incognite Rk, con λ parametro arbitrario. Il minimo si ottiene imponendo che
| ${\frac {\partial }{\partial R_{k}}}\left[\epsilon ^{2}\sum _{k=0}^{M-1}\sigma _{k}^{2}2^{-2R_{k}}-\lambda \left(M\ R-\sum _{k=0}^{M-1}R_{k}\right)\right]=0$ | (7.16) |
da cui si ricavano gli Rk in funzione di λ
| $R_{k}={\frac {1}{2}}log_{2}\left(2\epsilon ^{2}log_{e}2\right)+{\frac {1}{2}}log_{2}\left({\frac {\sigma _{k}^{2}}{\lambda }}\right)$ | (7.17) |
La cercata allocazione ottima dei bit è, quindi, data da
| $R_{k,ott}=R+{\frac {1}{2}}log_{2}\left[{\frac {\sigma _{k}^{2}}{\left(\prod _{j=0}^{M-1}\sigma _{j}^{2}\right)^{1/M}}}\right]$ | (7.18) |
| $e_{min}^{2}=M\epsilon _{x}^{2}2^{-2R}\left[\prod _{j=0}^{M-1}\sigma _{j}^{2}\right]^{1/M}$ | (7.19) |
Per valutare le prestazioni di questa codifica, è possibile definire il guadagno di codifica per sottobande G$_{SBC}$, come il miglioramento del rapporto segnale rumore ottenuto rispetto a quanto ottenuto con la codifica PCM. Sempre nell'ipotesi di $\epsilon _{k}^{2}=\epsilon _{x}^{2}=\epsilon ^{2}$, questo è pari a
| $G_{SBC}={\frac {\sigma _{x}^{2}2^{-2R}}{\sum _{k=0}^{M-1}\sigma _{k}^{2}2^{-2R_{k}}}}$ | (7.20) |
Si nota innanzitutto che tale guadagno può essere maggiore di uno solamente nel caso di segnale a spettro non piatto. Sostituendo poi in esso l'espressione degli Rk ottimi, il massimo guadagno di codifica che si ottiene è pari a
| $G_{SBC,max}={\frac {{\frac {1}{M}}\sum _{j=0}^{M-1}\sigma _{j}^{2}}{\left(\prod _{j=0}^{M-1}\sigma _{j}^{2}\right)^{1/M}}}$ | (7.21) |
Esempio [Jay84]: si consideri la densità spettrale di potenza riportata in figura 7.5, che nella metà inferiore e superiore della banda del segnale ha varianza pari a
| $\sigma _{1}^{2}={\frac {16}{17}}\sigma _{x}^{2};\ \sigma _{2}^{2}={\frac {1}{17}}\sigma _{x}^{2}$ | (7.22) |
Fissato un valor medio di bit per campione R = 3, l’allocazione di bit ottima per ciascuna sottobanda si ottiene come [p. 273
* $R_{1,ott}=R+{\frac {1}{2}}log_{2}\left({\frac {\sigma _{1}^{2}}{\sqrt {\prod _{j=0}^{1}\sigma _{j}^{2}}}}\right)=3+{\frac {1}{2}}log_{2}\left({\frac {\frac {16}{17}}{\sqrt {{\frac {16}{17}}\cdot {\frac {1}{17}}}}}\right)=4$
| $R_{2,ott}=R+{\frac {1}{2}}log_{2}\left({\frac {\sigma _{2}^{2}}{\sqrt {\prod _{j=0}^{1}\sigma _{j}^{2}}}}\right)=3+{\frac {1}{2}}log_{2}\left({\frac {\frac {1}{17}}{\sqrt {{\frac {16}{17}}\cdot {\frac {1}{17}}}}}\right)=2$ | (7.23) |
ed il guadagno di codifica che si ottiene è pari a
| $G_{SBC,max}={\frac {1}{2}}{\frac {\sum _{j=0}^{1}\sigma _{j}^{2}}{\sqrt {\prod _{j=0}^{1}\sigma _{j}^{2}}}}={\frac {1}{2}}{\frac {1}{\sqrt {{\frac {16}{17}}\cdot {\frac {1}{17}}}}}={\frac {17}{8}}$ | (7.24) |
Fig. 7.5 - Esempio di distribuzione spettrale di potenza non uniforme.
Analogamente a quanto descritto a proposito della codifica predittiva, fissata l’entità del flusso numerico generato, il guadagno di codifica può essere [p. 274 Fig. 7.6 - Funzioni di traferimento dei filtri utilizzati nella G.722.
sfruttato per migliorare la qualità del segnale, trasferendo bit dalle bande a dinamica inferiore verso quelle a dinamica maggiore. Viceversa, è possibile fissare la qualità del segnale prodotto e sfruttare il guadagno di codifica per comprimere il flusso numerico, eliminando bit nelle sottobanda a dinamica inferiore.
La raccomandazione ITU-T G.722 utilizza una codifica per sottobande di un segnale audio con 7 kHz di banda generando un flusso numerico di 64 kbit/s [ITU-T G.722].
Le bande utilizzate sono due, di 4 kHz ciascuna, ricavate tramite dei filtri QMF FIR a fase lineare con 24 coefficienti [Appendice D], il valore dei quali è riportato in tabella 7.1
In figura 7.6 sono riportate le relative funzioni di trasferimento. Date le uscite dei filtri [p. 275
| ${\begin{cases}x_{A}=\sum _{i=0}^{11}h_{2i}x_{in}(j-2i)\\x_{B}=\sum _{i=0}^{11}h_{2i+1}x_{in}(j-2i-1)\end{cases}}$ | (7.25) |
le componenti a frequenza inferiore e superiore del segnale si ottengono come
| ${\begin{cases}x_{L}(n)=x_{A}+x_{B}\\x_{H}(n)=x_{A}-x_{B}\end{cases}}$ | (7.26) |
| Coefficienti | Valore |
| h0,h23 | 0.000366211 |
| h1,h22 | -0.00134277 |
| h2,h21 | -0.00134277 |
| h3,h20 | 0.00646973 |
| h4,h19 | 0.00146484 |
| h5,h18 | -0.0190430 |
| h6,h17 | 0.00390625 |
| h7,h16 | 0.0441895 |
| h8,h15 | - 0.0256348 |
| h9,h14 | -0.0982666 |
| h10,h13 | 0.116089 |
| h11,h12 | 0.473145 |
Tab. 7.1 - Coefficienti dei filtri utilizzati nella G.722.
Le uscite dei due filtri sono ricampionate ad 8 kHz e ciascuna banda è codificata ADPCM. La banda superiore utilizza 2 bit per campione, producendo un flusso di 16 kbit/s. La banda inferiore può essere codificata secondo tre modalità, utilizzando 6, 5 o 4 bit per campione; i flussi numerici prodotti risultano di 48,40 o 32 kbit/s. Nel caso di codifica su meno di bit inferiore a 6 bit per campione, fermo restando il flusso complessivo, si ricava un canale dati ausiliario di 8 o 16 kbit/s sfruttando i bit meno significativi del codice.
La codifica della banda inferiore su 6 bit avviene tramite un quantizzatore non uniforme su 60 livelli. Non si utilizza il numero massimo di livelli per un quantizzatore su 6 bit (=64), per evitare lunghe sequenze di zeri nel [p. 276 flusso generato [ITU-T G.802], La quantizzazione è adattativa e per l’aggiornamento del quanto si utilizzano solamente i quattro bit più significativi. In questo modo l'algoritmo non è influenzato dalla modalità di funzionamento.
Il predittore è simile a quanto descritto a proposito della raccomandazione G.721, con una struttura data dalla combinazione di un filtro a soli poli del 2° ordine ed uno a soli zeri del 6° ordine. I coefficienti di entrambi i filtri sono adattati tramite LMS con crosscorrelazione di polarità tra segnale ed errore.
La codifica di forma d’onda per sottobande precedentemente esposta tende alla ricostruzione fedele del segnale emesso dalla sorgente tramite una quantizzazione adattativa variabile per le differenti componenti spettrali. D’altra parte, grazie alla rappresentazione in frequenza fornita dalla codifica per sottobande, sarebbe possibile ottenere migliori rapporti di compressione sfruttando gli aspetti percettivi dell’apparato uditivo, eliminando componenti non rilevanti del segnale.
In particolare, la soglia di udibilità statica non è uniforme in frequenza, per cui è possibile sopprimere in fase di codifica quelle componenti spettrali la cui ampiezza è inferiore al valore della soglia per quella particolare frequenza. Inoltre, per quanto riguarda le componenti non mascherate e continuando a considerare esclusivamente la soglia di udibilità statica, la sua non uniformità permette di distribuire non uniformemente lo spettro del rumore di quantizzazione utilizzando quanti differenti per ciascuna sottobanda.
Il vantaggio maggiore, però, si ha considerando gli effetti di mascheramento. Come descritto nella presentazione dell’apparato uditivo, si ha una variazione locale e variabile nel tempo della soglia di udibilità in corrispondenza delle componenti spettrali del segnale. Questo permette di fissare per ciascuna sottobanda il livello ammissibile del rumore di quantizzazione, assegnando un opportuno numero di bit, in modo tale che questo si trovi al di sotto della soglia di udibilità istantanea e, quindi, non sia percepibile. Inoltre è possibile evitare totalmente la trasmissione di informazioni relative a sottobande che risultano totalmente mascherate.
Ciò richiede la realizzazione di un modello dell’apparato uditivo, detto modello psicoacustico o percettivo, in grado di fornire in tempo reale la soglia [p. 277 di udibilità dinamica associata al particolare segnale in esame (fig. 7.7). Il calcolo della soglia di udibilità da parte del modello percettivo richiede innanzitutto la determinazione dello spettro del segnale. Data la necessità di ottenere un’elevata risoluzione, per il mappaggio in frequenza del segnale richiesto dal modello non possono essere utilizzate le uscite del banco di filtri (solitamente in numero limitato). Tipicamente, invece, questo è ottenuto tramite una FFT [Appendice E], eseguita, parallelamente al filtraggio, su di un blocco consistente di campioni del segnale d’ingresso.
Fig. 7.7 - Codifica basata su modelli percettivi.
Lo spettro del segnale viene utilizzato per calcolare la soglia di udibilità istantanea. Nota la soglia di udibilità statica, il calcolo della soglia di udibilità istantanea richiede innanzitutto che vengano individuate le componenti mascheranti del segnale cercando i massimi relativi dello spettro del segnale (fig. 7.8). Per la differente capacità mascherante è poi opportuno determinare se tali componenti siano assimilabili a toni puri (segnali sinusoidali) o a rumore. Ciò si ricava controllando che lo spettro decada più o meno rapidamente da ciascun massimo relativo. Note le ampiezze delle componenti tonali e non tonali, è infine possibile determinare le caratteristiche di mascheramento e, quindi, la soglia di udibilità istantanea.
Nota la soglia di udibilità istantanea, viene calcolato per ciascuna sottobanda il rapporto segnale/maschera (Signal to Mask Ratio: SMR), come rapporto tra il livello di pressione sonora (massima componente spettrale) e minimo della soglia. In funzione di tale rapporto è possibile, infine, procedere alla definizione delle caratteristiche del quantizzatore per ciascuna sottobanda (bit allocation). Questa è una procedura iterativa che consiste nel non assegnare [p. 278 Fig. 7.8 - Rumore di qnantizzazione permesso per sottobanda grazie al mascheramento con un rapporto maschera/rumore di 5 dB.
bit in quel (e bande dove l’informazione è posta al di sotto della soglia di udibilità istantanea e nell'alimentare progressivamente il numero di livelli di quantizzazione (migliorando, quindi, il rapporto segna le/rumore SNR) a partire da quelle soltobande dove risulta minimo il rapporto tra livello della maschera e quello del rumore ili quantizzazione (Mask to quantizing Noise Ratio: MNR). definito come
| $MNR=SNR-SMR$ | (7.27) |
Un’implementazione di codifica per sottobande che tenga conto di modelli percettivi è stata proposta nel 1988 dall’ISO con standard MPEG-1 Audio [IS092], approvato poi nel 1992. Questo standard prevede 3 differenti tecniche di codifica, delle quali la prima (Layer I) deriva dal MUSICAM (Masking-pattern adapted Universal Sub-band Integrated Coding And Multiplexing), uno standard proposto da CCETT, IRT, Philips e Matsushita.
Il segnale in ingresso (campionato a 32,44.1 o 48 kHz e quantizzato su 16 bit) viene codificato in blocchi di 384 campioni. Il bit rate di uscita è fisso, ma selezionabile tra 14 differenti possibili valori che vanno da 32 a 448 kbit/s.
Il blocco d’ingresso è mappato in frequenza in 32 sottobande equispaziate di 750 Hz, con un campionamento di 48 kHz (fig. 7.9). Si nota come questa risoluzione è insufficiente per le bande critiche a frequenza più bassa, le cui ampiezze sono dell’ordine dei 100 Hz. La scomposizione in sottobande viene effettuata tramite un banco di 32 filtri FIR polifase a 512 coefficienti con cancellazione dell’aliasing [Appendice D], seguiti da una traslazione in banda base e da una decimazione con rapporto 32:1 (fig. 7.10). L’uscita del filtro è quindi esprimibile come:
* $s_{i}=\sum _{k=0}^{511}x(k)\cdot h(k)\cdot cos\left[(2i+1)8k-16){\frac {\pi }{64}}\right]$
| $=\sum _{k=0}^{63}cos\left[(2i+1)(k-16){\frac {\pi }{64}}\right]\cdot \sum _{j=0}^{7}x(k+64\ j)\cdot h(k+64\ j)$ | (7.28) |
Ciascun blocco di 12 campioni consecutivi prodotti da ciascun filtro (384/32 campioni del segnale) è codificato tramite quantizzazione adattativa. Viene, infatti, trasmesso un fattore di scala (scalefactor), dato dal massimo valore assoluto delle ampiezze, che rappresenta la soglia di saturazione del blocco corrente. Codificando il fattore di scala su 6 bit ed utilizzando una risoluzione di 2 dB, la dinamica che ne deriva è di 96 dB. Il flusso necessario per la trasmissione di tale informazione è pari a 8 kbit/s.
Ricavato il fattore di scala, i campioni di ciascuna sottobanda sono poi normalizzati nell'intervallo [-1,1]. Questa caratteristica, che fa pensare ad una rappresentazione in virgola mobile delle ampiezze, fa spesso vedere il fattore [p. 280 Fig. 7.9 - Codifica MPEG-l/Audio/Layer I.
di scala come esponente, dove la quantizzazione adattativa dei campioni rappresenta la mantissa (wordlength).
La codifica dei campioni avviene sfruttando il modello percettivo descritto nel paragrafo precedente (Modello I). Infatti, parallelamente al filtraggio, viene eseguita, per ciascuna finestra di 24 ms, una FFT su 1024 campioni del segnale d’ingresso per ottenere una stima del suo spettro con risoluzione (47 Hz) maggiore di quella permessa dal banco di filtri.
Noto lo spettro viene calcolata la soglia di udibilità istantanea ed il rapporto segnale/maschera per ciascuna sottobanda. La bit (o noise) allocation determina il numero di bit per sottobanda, con l’obiettivo di mantenere il rumore di quantizzazione almeno al di sotto di 5 dB del livello della maschera. Per le sottobande con segnale al di sopra della maschera, viene generata una codifica con una lunghezza variabile da 2 a 15 bit. Per le altre bande non viene trasmessa nessuna informazione. L’informazione su quale allocazione sia stata effettuata è codificata su 4 bit, con un flusso di 3.5 kbit/s.
La trama generata (fig. 7.11), prevede:
* un’intestazione contenente informazioni sulle caratteristiche del segnale d’ingresso (32 bit);
* un blocco per la rilevazione degli errori (16 bit);
* la codifica della bit allocation (32*4 bit); [p. 281 Fig. 7.10 - Caratteristiche dei filtri polifase.
* la codifica dei fattori di scala per le sottobande non eliminate ([0..31]*6 bit);
* la codifica dei campioni delle sottobande non eliminate ([0..31]*[2..15]*6 bit).
La decodifica è decisamente più semplice della codifica, al fine di ridurre il costo dei riproduttori, e si svolge le quattro fasi di decodifica della bit allocation, decodifica dei fattori di scala, riquantizzazione dei campioni e sintesi per sottobande.
In funzione delle informazioni ricevute sul numero “b” dei bit allocati in ciascuna sottobanda, si esegue la riquantizzazione dei campioni ricevuti “q” come
| ${\hat {x}}={\frac {2^{b}}{2^{b}-1}}\left(q+2^{-b+1}\right)$ | (7.29) |
Il risultato è un numero frazionale dal quale è possibile ottenere le uscite moltiplicandolo per il relativo fattore di scala “f" Il segnale di ciascuna sottobanda è, infine, inviato al banco di filtri di ricostruzione. [p. 282 Fig. 7.11 - Formato della trama per il Layer I della codifica MPEG-1/Audio.
È da notare come la struttura gli algoritmi che definiscono la quantizzazione delle uscite del banco dei filtri (modello psicoacustico ed algoritmo di bit allocatìon) siano del tutto trasparenti in decodifica, dato che nella trama trasmessa appaiono solamente il risultato della bit allocatìon, i fattori di scala ed i campioni delle sottobande. Di conseguenza è possibile utilizzare algoritmi più sofisticati in fase di codifica senza alterare il formato della trama trasmessa e, quindi, la struttura del decodificatore/riproduttore. Al termine della trama è prevista la possibilità di appendere dati ausiliari (ancillary data), utilizzabili per future estensioni dello standard.
Passando alle prestazioni, si nota come l’analisi in frequenza eseguita dal modello psicoacustico non abbia la stessa risoluzione temporale delle uscite dei filtri da codificare. Inoltre, nel caso in cui il blocco di campioni da codificare presenti variazioni di dinamica al proprio interno, il modello causerà la generazione di un rumore di quantizzazione in funzione della potenza media all'interno del blocco, che potrebbe risultare eccessivo, e quindi, percepibile, per le parti del segnale a dinamica inferiore (pre-eco) (fig. 7.12). Infine, dato che l’effetto di mascheramento si riduce al diminuire del livello, per porzioni di segnale con dinamica e conseguente mascheramento modesti, il flusso numerico (fisso) previsto potrebbe non essere sufficiente a garantire il voluto rapporto segnale rumore.
Lo standard MPEG, presentato per la codifica di un solo canale, permette, in realtà, la codifica di segnali stereo. Inoltre, esso è stato mantenuto anche nel- l’MPEG-2, che introduce una codifica multicanale 5+1 (anteriore: destro, centrale, sinistro; posteriore: destro, sinistro; effetti). Sono, inoltre, introdotte codifiche a basso bit rate con frequenze di campionamento di 16, 22.5 e 24 kHz [Bra95]. [p. 283 Fig. 7.12 - Pre-eco dovuto ad un transitorio di dinamica.
Dal punto di vista delle applicazioni, il Layer I di MPEG si caratterizza per una contenuta complessità computazionale, cosa che risulta particolarmente interessante nell’elettronica consumer. In questo modo, infatti, è possibile contenere il costo del codificatore/decodifìcatore e quindi del registratore/riproduttore.
Il primo esempio di utilizzo di tecniche percettive in sistemi consumer è stato la DCC (Digital Compact Cassette) della Philips [Wir91]. In questo caso, per la codifica del segnale è stato utilizzato lo standard PASC (Precision Adaptive Sub-band Coding), compatibile con l’MPEG Layer I. Il PASC adottato nella DCC, infatti, è praticamente l’MPEG Layer I con flusso numerico fissato a 192 kbit/s per canale. Il fattore di compressione complessivamente ottenuto rispetto al PCM è pari a quattro.
La necessità di comprimere il segnale nasce dall'esigenza di mantenere una compatibilità meccanica tra DCC e cassetta analogica, sia in termini di velocità di trascinamento del nastro, che nell'utilizzo di una testina di lettura/scrittura fissa. In tal modo, pur utilizzando in parallelo otto tracce, non è possibile ottenere una velocità di lettura/scrittura sufficiente a sostenere il flusso di 1.5 Mbit/s prodotto da segnali con frequenze di campionamento dell’ordine dei 40 kHz e 16 bit per campione (es.: 44.1 kHz/16 bit per il Compact Disc). Il problema di sostenere senza compressione un flusso numerico paragonabile a quello del CD, aveva portato nel DAT (Digital Audio [p. 284 Tape) della Sony, all'adozione di un sistema meccanico di lettura/scrittura basato su di una scansione elicoidale del nastro tramite una testina rotante, analogamente a quanto già adottato nei sistemi di videoregistrazione.
Sempre nell’MPEG Audio, si trova, come Layer II, un algoritmo che, pur derivando anch'esso dal MUSICAM, è in grado di ottenere rapporti di compressione più elevati del Layer I tramite una codifica di sorgente dei dati prodotti e lo sfruttamento di fenomeni di mascheramento temporale. Queste migliori caratteristiche si traducono, però, in un conseguente incremento della complessità del codificatore/decodificatore (fig. 7.13). Il bit rate di uscita è sempre fisso, ma selezionabile tra 14 differenti possibili valori che vanno da 32 a 384 kbit/s.
Fig. 7.13 - Codi fica MPEG-l/Audio Layer II.
Pur utilizzando lo stesso modello psicoacustico del Layer I, nella codifica si considerano 3 sottoblocchi consecutivi di 384 campioni, con 1152 campioni complessivi per blocco. L’obiettivo del raggruppamento di tre sottoblocchi del segnale, è quello di condividere gli stessi codici che identificano la quantizzazione implementata, sfruttando il mascheramento temporale dell’apparato uditivo. Infatti, in condizioni stazionarie, è possibile mantenere la stessa bit allocation per i 3 blocchi, mentre in presenza di transitori, è necessario trasmettere due o tutti e tre i codici di bit allocation. Per decidere se è possibile [p. 285 raggruppare i fattori di scala, vengono definite due “classi”, date delle differenze tra i fattori di scala del primo e secondo sottoblocco e tra il secondo ed il terzo sottoblocco. In funzione del valore di tali classi, è possibile trasmettere non tutti i tre fattori di scala, ma solamente alcune loro combinazioni. Ad esempio, è possibile trasmettere solo il primo, il primo fattore di scala, solo il secondo, il massimo dei tre, ecc. Ovviamente è necessario trasmettere 1* informazione su quali raggruppamenti sono stati effettuati tramite una Scale Factor Selection Information (SCFSI), codificata su 2 bit per ciascun blocco. Tale informazione è inserita nella trama tra l’allocazione ed i fattori di scala (fig. 7.14).
Fig. 7.14 - Formalo della trama per il Layer II della codifica MPEG-1/Audio.
Un’ulteriore compressione è ottenibile nella codifica delle ampiezze dei campioni. Infatti, nel caso si utilizzino quantizzazioni su pochi bit (3, 5 o 9 livelli), vengono raggruppate le uscite di ciascuna sottobanda in blocchi di 3 campioni consecutivi, chiamati granuli, codificati tramite un unico codice.
Campo di applicazione del Layer II è nella codifica di segnali per trasmissioni broadcast (Digital Audio Broadcasting: DAB) a 128 kbit/s per canale o con 4 canali a 192 kbit/s su di un unico canale DSR (Digital Satellite Radio) non compresso.
Si consideri una trasformazione espressa tramite una matrice A di dimensioni NxN che, a partire dal vettore di N campioni x= {x(0), x(l),..., x(N - 1)}$^T$ fornisca un vettore di coefficienti y di pari lunghezza
| $y=Ax$ | (7.30) |
* qualora la trasformazione riuscisse a concentrare l’energia su di un numero ridotto di coefficienti con un andamento dell’ampiezza degli stessi risultasse decrescente (con lunghe sequenze di coefficienti nulli), sarebbe possibile ridurre il numero medio di bit per campione sia applicando tecniche di compressione del tipo run-length, sia con codifica di Huffman dei coefficienti della trasformata;
* la trasformazione dovrebbe risultare ottima secondo qualche criterio, ad esempio tale da minimizzare l’errore quadratico medio di ricostruzione
| ${\frac {1}{N}}E\left\{\sum _{k=1}{N}(x_{k}-{\hat {x}}_{k})^{2}\right\}$ | (7.31) |
Prima di affrontare il problema della determinazione della trasformata ottima, è necessario richiamare alcune proprietà di analisi delle matrici. Per una sequenza mono-dimensionale x, una matrice A rappresenta una trasformazione in un vettore y, i cui elementi si ottengono come
| $y=Ax\Rightarrow y(k)=\sum _{n=0}^{N-1}a(k,n)x(n),\ 0\leq k\leq N-1$ | (7.32) |
La matrice A è detta ortogonale se la sua inversa coincide con la sua trasposta
| $A^{-1}=A^{T}\Rightarrow AA^{T}=A^{T}A=I$ | (7.33) |
Nel caso in cui la matrice A sia complessa, è detta unitaria se la sua inversa coincide con la trasposta coniugata
| $A^{-1}=A^{*T}$ | (7.34) |
| $x=A^{-1}y=A^{*T}y\Rightarrow x(n)=\sum _{k=0}^{N-1}a^{*}(k,n)\ y(k),\ 0\leq n\leq N-1$ | (7.35) |
Una matrice ortogonale reale è anche unitaria, ma non è vero il viceversa. Inoltre, come conseguenza diretta della definizione, si ha che le righe o le colonne di una matrice unitaria formano una base ortogonale nello spazio ad N dimensioni. Le colonne di A T, cioè i vettori a k = a*(k, n), 0 < n < N - 1 vengono chiamati vettori base di A.
Una matrice A è detta simmetrica se coincide con la sua trasposta (A = A T ) ed Hermitiana se coincide con la trasposta coniugata (A = A T ). Per una matrice Hermitiana tutti gli autovalori (radici dell’equazione IA - X k 11 = 0) sono reali. Inoltre, esiste sempre la matrice unitaria degli autovettori (automatrice di A) tale che
| $\Phi ^{T}A\Phi =\Lambda$ | (7.36) |
dove Λ è la matrice diagonale formata dagli autovalori di A.
Alcune proprietà delle trasformate unitarie sono particolarmente importanti per quanto riguarda la codifica. La prima è la conservazione dell’energia. Infatti
| $\|y\|_{2}=\sum _{k=0}^{M-1}|y(k)|^{2}=y^{T}y=x^{T}A^{T}A\ x=\sum _{k=0}^{M-1}|x(k)|^{2}=\|x||_{2}$ | (7.37) |
Ciò significa che, interpretando i campioni del segnale come coordinate di uno spazio ad N dimensioni, ogni trasformazione unitaria è semplicemente una rotazione del vettore x, fermo restando il suo modulo.
Questa proprietà apre la strada alla ricerca di trasformate unitarie che compattino l’energia del segnale in un numero ridotto di coefficienti. Infatti, poiché l’energia viene conservata, se essa viene compattata, molti coefficienti conterrebbero un’energia molto piccola e, quindi, risulterebbero trascurabili. Condizione necessaria perché ciò avvenga è che i coefficienti risultino essere scorrelati: in tal modo è possibile che alcuni se ne annullino, mentre altri risultano essere diversi da zero. [p. 288 Se μ$_x$ e R$_x$ indicano la media e la covarianza del vettore x, allora le quantità corrispondenti per il vettore trasformato y sono date da
* $\mu _{y}=E[y]=E[A\ x]=A\ E[x]=A\ \mu _{x}$
| $R_{y}=E\left[(y-\mu _{y})(y-\mu _{y})^{T}\right]=A\left\{E\left[(x-\mu _{x})(x-\mu _{x})^{T}\right]\right\}A^{T}=A\ R_{x}\ A^{T}$ | (7.38) |
La varianza dei coefficienti è data dagli elementi della diagonale di R$_y$, cioè
| $\sigma _{y}^{2}\left[R_{y}\right]_{k,k}=\left[A\ R_{x}\ A^{T}\right]_{k,k}$ | (7.39) |
Dato che A è unitaria
* ${\begin{cases}\sum _{k=0}^{N-1}|\mu (k)|^{2}=\mu _{y}^{T}\mu _{y}=\mu _{x}^{T}\ A^{T}\ A\mu _{x}=\sum _{n=0}^{N-1}|\mu _{x}(n)|^{2}\\\sum _{k=0}^{N-1}\sigma _{y}^{2}(k)=Tr\left[A\ R_{x}\ A^{T}\right]=Tr[R_{x}]=\sum _{n=0}^{N-1}|\sigma _{x}^{2}(n)|^{2}\end{cases}}$
| $\sum _{k=0}^{N-1}E\left[|y(k)|^{2}\right]=\sum _{n=0}^{N-1}E\left[|x(n)|^{2}\right]$ | (7.40) |
Se si considera come matrice di trasformazione l’automatrice Φ della matrice di autocovarianza R
| ${\begin{cases}X=\Phi ^{T}x\\x=\Phi X\end{cases}}$ | (7.41) |
si ottiene la trasformata di Karhunen-Loeve (KLT). Per gli elementi X della sequenza trasformata, risulta
* $E\left[X\ X^{T}\right]=\Phi ^{T}E\left[X\ X^{T}\right]\Phi =\Phi ^{T}\ R\ \Phi =\Lambda$
| $E\left[X(k)\ X(l)^{*}\right]=\lambda _{k}\delta (k-l)$ | (7.42) |
Fig. 7.15 - Codifica per trasformate.
Si consideri, ora, il problema della minimizzazione dell’errore quadratico medio. Si vuole verificare che l’insieme di vettori base Φ$_i$, i=0,...,N-1 minimizza l’MSE di una rappresentazione troncata, utilizzante solo i primi D coefficienti (D < N) di una coppia di trasformazioni A-B. L’importanza dal punto della codifica di tale approccio è evidente, dato che la mancata trasmissione dei coefficienti irrilevanti comporterebbe una compressione del flusso numerico prodotto (fig. 7.15). La rappresentazione troncata x di x è data da
| ${\hat {x}}=\sum _{i=0}^{D-1}X_{i}\ \Phi _{i}$ | (7.43) |
ed il corrispondente MSE si ottiene come
| $\epsilon _{D}={\frac {1}{N}}E\left[\sum _{n=0}^{N-1}|x(n)-{\hat {x}}(n)|^{2}\right]={\frac {1}{N}}Tr\left\{\left[(x-{\hat {x}})(x-{\hat {x}})^{T}\right]\right\}$ | (7.44) |
Introducendo una matrice identità I$_d$ di dimensione D, l’MSE può essere riscritto come
| $\epsilon _{D}={\frac {1}{N}}Tr\left[(I-B\ I_{D}A)R(I-B\ I_{D}A)^{T}\right]$ | (7.45) |
La minimizzazione dell’MSE è ottenibile differenziando questa espressione rispetto ad A ed uguagliando a zero
| $I_{D}B^{T}(I-B\ I_{D}A)R=0$ | (7.46) |
* $\epsilon _{D}={\frac {1}{N}}Tr\left[(I-B\ I_{D}A)R\right]$
| $I_{D}B^{T}=I_{D}B^{T}B\ I_{D}A$ | (7.47) |
Imponendo che l’errore si annulli per D = N
* $I-B\ A=0\to B=A^{-1}$
| $I_{D}-B^{T}\ B=I_{D}B^{T}\ B\ I_{D}$ | (7.48) |
Affinché ciò sia vero per qualsiasi valore di D, la matrice B deve essere unitaria e, di conseguenza, risulterà unitaria anche la matrice A con B = A$^T$.
Per quanto riguarda l’errore
| $\epsilon _{D}={\frac {1}{N}}Tr\left[(I-A^{T}I_{D}A)R\right]={\frac {1}{N}}Tr\left[R-I_{D}A\ R\ A^{T}\right]$ | (7.49) |
Dato che R è fissa, è necessario massimizzare la quantità
| ${\hat {\epsilon }}_{D}=Tr\left[I_{D}A\ R\ A^{T}\right]=\sum _{k=0}^{D-1}a_{k}^{T}Ra_{k}$ | (7.50) |
dove a$_k$$^T$ è la k-esima riga di A e, essendo A unitaria, a$_k$$^T$ a$_k$ = 1. A tal fine si considera il lagrangiano
| ${\hat {\epsilon }}_{D}=\sum _{k=0}^{D-1}a_{k}^{T}Ra_{k}+\sum _{k=0}^{D-1}\lambda _{k}(1-a_{k}^{T}a_{k})$ | (7.51) |
differenziando il quale rispetto ad a$_j$ si ottiene la soluzione
| $R\ a_{j}=\lambda _{j}\ a_{j}$ | (7.52) |
che porta all'errore
| ${\hat {\epsilon }}_{D}=\sum _{k=0}^{D-1}\lambda _{k}$ | (7.53) |
| $\lambda _{0}\geq \lambda _{1}\geq \ldots \geq \lambda _{N-1}$ | (7.54) |
Le righe di A sono quindi gli autovettori di R e, quindi, la trasformazione A porta di nuovo alla KLT. L’MSE dovuto al troncamento è dato da
| ${\hat {\epsilon }}_{D}=\sum _{i_{D}}^{N-1}\lambda _{i}$ | (7.55) |
Una conseguenza importante di questa proprietà è che la KLT, tra tutte le trasformazioni unitarie, riesce più di altre a concentrare la maggior parte dell’energia in un numero D ≤ N di coefficienti. Infatti, se si considera la serie ordinata delle varianze dei coefficienti ottenuti da una trasformazione A
| $\sigma _{k}^{2}=E\left[|X(k)|^{2}\right],\ \sigma _{0}^{2}\geq \ldots \geq \sigma _{k}^{2}\geq \ldots \geq \sigma _{N-1}^{2}$ | (7.54) |
e se ne considera una loro somma parziale
| $S_{m}(A)=\sum _{k=0}^{m-1}\sigma _{k}^{2},\ m\in [1,N]$ | (7.57) |
risulta
| $S_{B}(A)=\sum _{k=0}^{D-1}(ARA^{T})_{k,k}=Tr(I_{D}A^{T}R\ A)={\hat {\epsilon }}_{D}$ | (7.58) |
che essere massimizzato quando A è la trasformata KL. Poiché σ$_k$$^2$ = λ$^2$ quando A =Φ$^T$, si ha
| $\sum _{k=0}^{D-1}\lambda _{k}\geq \sum _{k=0}^{D-1}\sigma _{k}^{2},\ 1\leq D\leq N$ | (7.59) |
| $S_{D}(\Phi ^{T})\geq S_{D}(A)$ | (7.60) |
In tal modo, eliminando i coefficienti di ampiezza trascurabile, il vettore x può essere rappresentato da un numero ridotto di elementi, eseguendo la voluta compressione del segnale.
Nonostante le buone proprietà della KLT, risulta evidente che occorre trovare una trasformata più agevole, che non dipenda dai dati in ingresso e che sia di più semplice implementazione. Infatti le funzioni base dipendono dalla matrice di autocovarianza R e quindi dal segnale e non possono essere predeterminate a meno di pochi casi particolari nei quali sono disponibili soluzioni analitiche.
L’approssimazione migliore della KLT con coefficienti indipendenti dai dati è data dalla trasformata coseno di Fourier (FCT) e, nel discreto, dalla Discrete Cosine Transform (DCT) [appendice E] [fig. 7.16). A causa dei suoi legami con l’analisi in frequenza, nella codifica audio si preferisce usare questa trasformata anche perché legata agli aspetti psicofisici dell’udito, pur se lievemente meno efficiente dal punto di vista della compressione. Fig. 7.16 - Guadagno rispetto al PCM di codifiche per trasformate.
Per la definizione della trasformata coseno, si consideri un segnale x(t) definito solo per t ≥ 0 e si costruisca una funzione y(t) data da
| $y(t)={\begin{cases}x(t)&t\geq 0\\x(-t)&t\leq 0\end{cases}}$ | (7.61) |
* $F[y(t)]={\sqrt {\frac {1}{2\pi }}}\left\{\int _{0}^{\infty }x(t)e^{-j\omega t}dt+\int _{0}^{\infty }x(-t)\ e^{j\omega t}dt\right\}$
| $={\sqrt {\frac {1}{2\pi }}}\int _{0}^{\infty }x(t)\left[e^{-j\omega t}+e^{j\omega t}\right]dt={\sqrt {\frac {1}{2\pi }}}\int _{0}^{\infty }x(-t)\ cos(\omega t)dt$ | (7.62) |
dove l’ultimo membro, per definizione, rappresenta la trasformata coseno di Fourier di x(t).
In tal modo, la codifica per trasformate avviene calcolando dapprima la trasformata coseno della serie dei campioni e poi quantizzando i coefficienti ottenuti (Adaptive Transform Coding: ATC).
Nel rendere adattativa la quantizzazione, è possibile sfruttare un modello percettivo. Inoltre, data l’elevata probabilità che i coefficienti a frequenza maggiore si annullino dopo la quantizzazione, l’efficienza di compressione può essere ulteriormente aumentata tramite una codifica entropica dei coefficienti ottenuti.
La codifica ASPEC (Adaptive Spectral Perceptual Entropy Coding) è una codifica per trasformate proposta da AT&T, CNET, Fraunhofer Institute /Erlangen University e TCE.
La trasformata utilizzata è la DCT. Le finestre di campioni sulle quali viene eseguita la trasformazione si sovrappongono per metà della lunghezza del blocco al fine di ridurre eventuali discontinuità nel passaggio da un blocco al successivo. Dato che, come già visto, una variazione della dinamica del segnale sugli ultimi campioni della finestra si ripercuoterebbero sull'intero blocco, ciò provocherebbe in sede di decodifica un indesiderabile pre-eco. A tal fine la lunghezza della finestra stessa varia dinamicamente in modo di adattarsi alle caratteristiche del segnale. In particolare la lunghezza si riduce da 1024 a 256 campioni in corrispondenza di un gradino di dinamica. Questa variazione delle dimensioni della finestra è, ovviamente, segnalato nel flusso prodotto. [p. 294 A causa della sovrapposizione tra finestre, blocchi lunghi e corti generano rispettivamente blocchi di 512 e 128 coefficienti. Tali coefficienti vengono codificati innanzitutto scalandoli tramite un opportuno fattore di scala. Al fine di ridurre il flusso richiesto alla trasmissione di tali fattori di scala, per ogni 1024 campioni, nel caso di blocchi lunghi i coefficienti vengono raggruppati in 20 bande, mentre nel caso di blocchi corti si utilizza una serie di 4 gruppi di 12 bande. La trasmissione di un fattore di scala per ciascuna banda genera un flusso relativo di 8 kbit/s.
La successiva codifica dei coefficienti utilizza un modello percettivo simile a quello utilizzato nel MUSICAM. Il calcolo della soglia istantanea tiene conto sia degli effetti di mascheramento all’interno della banda che delle interazioni tra bande adiacenti. Nota la maschera si procede alla bit allocation. L’informazione relativa a quale allocazione sia stata prescelta viene trasmessa con una banda di circa 2 kbit/s.
I coefficienti vengono, infine codificati tramite una codifica di Huffman, con lunghezza variabile da zero a 19 bit.
Un algoritmo che combina le caratteristiche del MUSICAM e dell’ASPEC è utilizzato nel Layer III della codifica ISO/MPEG- 1/Audio [IS092].
Il segnale è suddiviso in blocchi di 1152 campioni. Il bit rate di uscita è variabile in tempo reale tra 14 differenti possibili valori che vanno da 32 a 320 kbit/s. Nel caso di codifica a bit rate costante, è possibile considerare una bufferizzazione (bit reservoir) che permette di spostare bit di blocchi più esigenti in termini di flusso su quelli che lo sono meno.
La principale differenza nella codifica tra i primi due livelli dell’MPEG ed il terzo è che, in questo caso, alle uscite del banco dei filtri viene applicata una trasformata, rendendo il codificatore ibrido (per sottobande e trasformate) (fig. 7.17). Altre differenze si hanno dall'adozione di una quantizzazione non uniforme, da una segmentazione adattativa e da una codifica entropica delle uscite.
La trasformata, che è una trasformata coseno modificata (MDCT), viene applicata alle uscite del banco di filtri per aumentare la risoluzione dell’analisi in frequenza. Infatti, nel Layer I si era visto come per le frequenze inferiori, la [p. 295 Fig. 7.17 - Codifica MPEG-l/Audio/Layer III.
larghezza di banda dei filtri (750 Hz) era eccessiva se paragonata a quella delle bande critiche (100 Hz) (vedi tab. 1.1). La trasformata viene eseguita su blocchi di dimensioni variabili da 12 (considerando separatamente ciascun sottoblocco) a 18 campioni (considerando l’intero blocco scomposto in due parti). Questo è fatto per tenere in conto fenomeni di pre-eco dovuti a variazioni di dinamica del segnale. Considerando una MDCT su 18 campioni, si ottiene una risoluzione in frequenza di circa 40 Hz, sufficiente per risolvere le bande critiche. Ovviamente, la risoluzione temporale viene peggiorata.
Come detto, la dimensione della finestra di analisi è resa variabile in funzione delle caratteristiche del segnale, classificato in quattro differenti stati (normal, start, stop, short). La rilevazione di un transitorio avviene in funzione dello scostamento del risultato della bit allocation dal valor medio, con relativo accesso al bit reservoir. Questo approccio si giustifica per il fatto che nei transitori sono presenti sia campioni con ampiezze elevate (che portano ad innalzare la soglia di saturazione del quantizzatore e quindi il fattore di scala), sia porzioni di segnale con ampiezze modeste (che richiedono quanti di ampiezza ridotta e quindi elevato numero di livelli): questo complessivamente provoca un brusco aumento di bit richiesti nella codifica.
Il modello psicoacustico utilizzato per il Layer III è basato su FFT, ma si adotta una finestra variabile di 1024 o 256 campioni, in funzione della stazionarietà del segnale (Modello II). Inoltre, calcolato Io spettro in modulo e fase, tali valori vengono anche stimati da quelli ottenuti nei precedenti due blocchi. Per non appesantire eccessivamente gli aspetti computazionali, tale [p. 296 predizione può essere limitata ad una banda inferiore ai 7Khz o, al massimo, di 3kHz. Lo spettro attuale e la sua stima sono utilizzati per fissare una soglia di mascheramento che tenga in conto fenomeni di pre-eco.
Passando alla codifica dei coefficienti della MDCT, la quantizzazione adottata è logaritmica. Per controllare che la soglia di mascheramento calcolata dal modello sia rispettata, questa codifica (che è a perdita) è eseguita in maniera iterativa in due loop annidati, uno di calcolo ed uno di verifica.
La codifica dei fattori di scala è simile a quanto fatto per il Layer II. La quantizzazione è relativa a coppie di frequenze (granuli) ed è possibile trasmettere un solo fattore di scala per due granuli adiacenti. La codifica è a lunghezza variabile tramite una codifica statica di Huffman.
Un possibile campo di applicazione del Layer III è nella trasmissione di segnali a banda audio (20 kHz) su canali a 64 kbit/s (es.: ISDN).
La codifica ATRAC (Adaptive Transform Acoustic Coding) è la codifica utilizzata per il MiniDisc della Sony.
Anche questo è un codificatore ibrido, che utilizza una trasformata in cascata ad un banco di filtri (fig. 7.18). Per garantire una risoluzione paragonabile a quella delle bande critiche (migliore alle basse frequenze), il banco di filtri è costituito da filtri QMF [Appendice D], con bande di 0-5.5 kHz, 5.5-11 kHz e 11-22.05 kHz. All'uscita dei filtri è applicata una MDCT. Infine, coefficienti relativi a bande adiacenti sono raggruppati non uniformemente in blocchi chiamati Block Floating Unit (BFU), dando alle basse frequenze una risoluzione migliore delle alte.
Le finestre temporali utilizzate per la MDCT, che presentano overlap tra blocchi adiacenti (al fine di ottenere una buona risoluzione), hanno ampiezze che variano in maniera adattativa in funzione delle caratteristiche del segnale. Si hanno due modalità di funzionamento. La prima (long mode) ha una risoluzione temporale di 11.6 ms (512 campioni). La seconda modalità (short mode) ha una risoluzione di 1.45 ms (64 campioni) alle frequenze superiori e di 2.9 ms (128 campioni) alle inferiori. Alla buona risoluzione temporale alle bande superiori corrisponde una bassa risoluzione in frequenza e viceversa per le bande inferiori, coerentemente con gli aspetti percettivi. Il passaggio allo [p. 297 Fig. 7.18 - Struttura del codificatore ATRAC.
short mode avviene solo per transitori dati da incrementi di dinamica (attack), mentre nei transitori dovuti a riduzioni di dinamica (decay) si continua ad operare in long mode. Questo è giustificato dal fatto che il forward masking è molto più efficiente del backward masking.
La trama prodotta contiene:
* MDCT block size (Iong/short)
* word length per ciascuna BFU
* scale factor per ciascuna BFU
* coefficienti spettrali quantizzati
Per quanto riguarda la bit allocation, lo standard non specifica nessun algoritmo, dato che il decodificatore ne è indipendente e si permette, in questo modo, un’evoluzione delle tecniche adottate. Comunque, in [Tsu92] viene descritta una possibile implementazione avente come obiettivo una bassa complessità computazionale. Questa è basata su una prima assegnazione di bit fissa, che privilegia le frequenze inferiori ed una seconda che è funzione del logaritmo dello spettro all’interno di ciascuna BFU.
Con un ingresso campionato a 44.1 su 16 bit, il rapporto di compressione è di 5:1 ed il bit rate di uscita è di 140 kbit/s per canale.