Comments
Description
Transcript
codifica del segnale vocale
L. Piazzo, M. G. di Benedetto CODIFICA DEL SEGNALE VOCALE Roma, dicembre 1998 1. Segnale vocale - Generalita' 1 1.1 Produzione del segnale vocale..................................................................................1 1.2 Classificazione e caratteristiche dei suoni ...............................................................2 1.3 Spettro a breve termine ...........................................................................................3 2. Codifica del segnale vocale - Generalita' 5 2.1 Codificatori e qualita' utilizzate ..............................................................................6 2.2 Valutazione delle prestazioni di un codificatore .....................................................7 3. Codifica LPC 9 3.1 Predizione lineare.....................................................................................................9 3.2 Schema di un codificatore LPC...............................................................................11 4. Alcuni Codificatori LPC 14 4.1 APC (Adaptive Predictive Coder) e ADPCM (Adaptive Differential PCM).........14 4.2 Vocoder (Voice-Coder) LPC ...................................................................................16 4.3 Codificatori ABS (Analysis By Synthesis) ..............................................................17 5. Il codificatore LTP-RPE 21 5.1 Preprocessing e LPC................................................................................................21 5.2 LTP (Long Term Prediction) ..................................................................................22 5.3 RPE (Regular Pulse Excitation) ..............................................................................23 5.4 Decodificatore ..........................................................................................................23 6. Bibliografia 25 Codifica del Segnale Vocale 1. Segnale vocale - Generalita' 1.1 Produzione del segnale vocale La comunicazione orale fra due persone avviene per mezzo della trasmissione di un segnale vocale dal parlatore all' ascoltatore. Il segnale viene generato dal parlatore tramite il suo "sistema di produzione della voce", costituito dall' insieme degli "organi di fonazione", cioe' da tutti gli organi che intervengono in qualche maniera nella produzione (lingua, corde vocali, polmoni etc. etc.). Tramite il sistema di produzione, il parlatore induce una variazione nella pressione acustica dell' aria; questa variazione costituisce il segnale vocale propriamente detto. Il segnale si propaga ed e' ricevuto dall' ascoltatore tramite il suo "sistema di percezione della voce", costituito dall' insieme degli organi che intervengono in qualche maniera nell' ascolto (orecchio esterno, timpano etc. etc.). Cavita' nasale Cavita' orale Narici Velo palatino Labbra Glottide (Corde vocali) Lingua Polmoni Figura 1: schema dell' apparato di produzione della voce. Il sistema di produzione e' rappresentato schematicamente in figura 1. Per generare un segnale vocale, la massa d'aria contenuta nei polmoni viene separata dalla massa d'aria esterna, tramite l'occlusione di uno o piu' punti del collegamento fra le due, e compressa: si crea cosi' una differenza di pressione fra le due masse. Successivamente, l'occlusione viene parzialmente aperta, permettendo all' aria contenuta nei polmoni di fluire verso l'esterno e creare una variazione (nel tempo e nello spazio) della pressione acustica. Nell' occlusione e' possibile identificare la "sorgente del suono", ovvero il punto in cui inizia a variare la pressione acustica. Nelle immediate vicinanze dell' occlusione la pressione acustica sara' una funzione del tempo: questa forma d'onda e' detta "segnale di sorgente". La sorgente puo' essere realizzata in primo luogo alle corde vocali (due membrane situate nella glottide) che, se tese si oppongono alla fuoriuscita dell' aria ed entrano in 1 Codifica del Segnale Vocale vibrazione. Se invece le corde vocali sono rilassate, l' aria fluisce liberamente attraverso di esse e la sorgente e' realizzata occludendo il tratto in qualche altro punto. Il segnale di sorgente si propaga verso l'esterno ed attraversa il tratto vocale, composto da due cavita', quella orale e quella nasale. Il segnale viene modificato dal passaggio per queste cavita', la cui forma e dimensioni dipendono dalla posizione dei vari organi di fonazione e sono controllate dal parlatore; in particolare, la cavita' nasale puo' essere del tutto esculsa tramite l'innalzamento del velo palatino (e in questo caso il segnale non avra' alcuna componente nasale). Il segnale giunge infine alle labbra ed alle narici e da qui viene irradiato nello spazio. 1.2 Classificazione e caratteristiche dei suoni Il segnale vocale e’ il supporto fisico del messaggio linguistico che si forma nella mente di un parlatore. Tale messaggio linguistico e’ costituito dalla successione di unita’ fonetiche (fonemi) caratteristici di una lingua data. Nella produzione di voce, il parlatore traduce ogni fonema in una serie di "comandi articolatori", trasmessi dal cervello agli organi di fonazione, che risultano nella emissione di una successione di "suoni" diversi, opportunamente concatenati a causa dell’ inerzia degli articolatori stessi. Ad ogni fonema corrisponde dunque, a livello acustico, un suono dotato di caratteristiche specifiche. Una prima classificazione dei suoni li suddivide in sonori e sordi, a seconda che la sorgente del suono sia costituita o no dalle corde vocali. Un suono sonoro e’ prodotto quando le corde vocali sono tese, e quindi entrano in vibrazione al passaggio dell’ aria, aprendosi e chiudendosi regolarmente. Nel caso dei suoni sonori il segnale di sorgente e' una sequenza di forme d'onda elementari (impulsi glottali) ed il segnale vocale ha una struttura pseudo-periodica, il cui periodo (pari alla distanza temporale fra due aperture successive delle corde vocali) e' detto periodo di pitch. I suoni sonori sono ulteriormente classificati in base all'organo di fonazione che da' il maggior contributo alla formazione del suono e/o al tipo di suono prodotto . Figura 2: esempio di segnale vocale. Un suono sordo e’ prodotto quando le corde vocali sono aperte, e quindi l'aria fluisce liberamente dai polmoni attraverso la glottide. Nel caso dei suoni sordi la sorgente del suono e' una costrizione del tratto vocale, che provoca un moto turbolento e caotico delle 2 Codifica del Segnale Vocale molecole del flusso d'aria che la attraversa. Il segnale di sorgente e’ in questo caso di tipo rumoroso. Anche i suoni sordi sono ulteriormente classificabili in base all'organo di fonazione che da' il maggior contributo alla formazione del suono o in base al modo di articolazione. Le due sorgenti possono essere infine entrambe presenti, e dare luogo a suoni misti (per esempio nella "g" di "viaggio" le corde vocali sono tese e vibrano, ma la lingua e' schiacciata sul palato e forma una costrizione che provoca la sovrapposizione al segnale pseudo-periodico di una componente di tipo rumore). In figura 2 e' riportato un esempio di segnale vocale, in cui si distinguono una prima parte sonora ed una seconda sorda. 1.3 Spettro a breve termine Il segnale vocale non e' un segnale stazionario: le caratteristiche del segnale variano rapidamente nel tempo e si modificano a seconda del particolare suono emesso. All' interno di uno stesso suono, il segnale puo' essere, con buona approssimazione, considerato stazionario per durate di circa 10-30 msec. Su finestre temporali di questa durata ha quindi senso effettuare una analisi spettrale per esaminare come l'energia si distribuisce alle varie frequenze, e si parla di "Spettro di energia a breve termine". E' pero' piu' comodo pensare che il tratto finestrato sia ottenuto da un segnale stazionario su tutto l'asse dei tempi, con caratteristiche statistiche uguali a quelle del tratto finestrato, e considerare lo spettro di densita' di potenza di questo segnale come spettro della finestra. Lo spettro di energia a breve termine si ottiene dalla convoluzione di questo spettro con il modulo quadro della trasformata della finestra. Lo spettro di un segmento di segnale e' determinato dallo spettro del segnale di sorgente e dalla conformazione del tratto vocale. Il tratto vocale agisce sul segnale di sorgente come un filtro, la cui funzione di trasferimento (variabile a seconda della conformazione del tratto) presenta un certo numero di picchi che corrispondono, nel sistema fisico, alle frequenze di risonanza o “formanti” del sistema. Lo spettro del segnale finale e' ottenuto dalla moltiplicazione dello spettro del segnale di sorgente con lo spettro (modulo quadro della funzione di trasferimento) del tratto vocale. L' andamento spettrale e' nettamente diverso a seconda che il suono sia sonoro o sordo. Per suoni sonori, il segnale di sorgente e' periodico (o quasi), quindi il suo spettro e' a righe, ed ha un andamento genericamente passabasso (maggiore energia alle basse frequenze); lo spettro e' riportato in figura 3a assieme al suo inviluppo. La distanza fra due righe e' pari all' inverso del periodo di pitch ed e' detta frequenza di pitch. Lo spettro del segnale finale, dopo il passaggio attraverso il tratto vocale, e’ mostrato in figura 3b assieme al suo inviluppo: si notino i picchi dell' inviluppo in corrispondenza delle frequenze formanti. Lo spettro puo' avere componenti fino ad una ventina di Khz, ma la maggior parte dell' energia e' concentrata nei primi 4 Khz. Per suoni sordi lo spettro del segnale di sorgente non e’ a righe ma continuo, visto che tale segnale non e’ periodico. Di solito i suoni sordi presentano maggiore energia alle alte frequenze rispetto ai suoni sonori. Anche in questo caso caso il tratto vocale puo' esaltare o attenuare alcune frequenze e lo spettro del segnale emesso assume l'andamento mostrato in 3 Codifica del Segnale Vocale figura 3c. Lo spettro puo' avere componenti fino ad una ventina di Khz, ma la maggior parte dell' energia e' concentrata nei primi 4 Khz. Formanti Frequenza di pitch f (Hz) a) f (Hz) b) f (Hz) c) Figura 3: spettri a) del segnale di sorgente sonoro, b) di un suono sonoro, c) di un suono sordo. Come e’ noto, ogni segnale di energia puo' essere ottenuto come somma (integrale) di un certo numero di sinusoidi con ampiezza e fase opportuna. Lo spettro di energia di un segnale da' informazione sulla ampiezza di queste sinusoidi, ma non sulle loro fasi. Le fasi sono descritte dallo spettro di fase, che e' necessario per una ricostruzione esatta della forma d'onda. Una importante proprieta' del sistema di percezione umano e' che l'orecchio, nella distinzione dei diversi suoni, e' poco sensibile allo spettro di fase, mentre e' molto sensibile allo spettro di energia. In altre parole segnali con lo stesso spettro di energia vengono percepiti come appartenenti allo stesso suono, anche se lo spettro di fase e' completamente diverso e quindi le forme d'onda non si assomigliano affatto. Questa proprieta', come vedremo, puo' essere utilmente sfruttata nella compressione del segnale vocale. 4 Codifica del Segnale Vocale 2. Codifica del segnale vocale - Generalita' La compressione del segnale vocale e' resa possibile dalla rappresentazione digitale del segnale. E' noto che un segnale limitato in banda (come e' il segnale vocale) puo' essere rappresentato dalla sequenza dei suoi campioni quantizzati; il numero di bit usati nella quantizzazione di un campione e la frequenza di campionamento determinano il numero di bit al secondo necessari per la rappresentazione. Per compressione del segnale si intende un metodo che permette di passare da una rappresentazione digitale che richiede un certo numero di bit/sec ad una diversa, che ne richiede meno. In linguaggio tecnico, il termine "codifica" e' sinonimo di compressione. Nella teoria dell' informazione si utilizza il termine "codifica di sorgente". Un compressore, dunque, a partire da un segnale originario, rappresentato con un certo numero di bit/sec, ne ottiene una rappresentazione piu' compatta, detta "segnale codificato" o compresso. Il segnale compresso viene trasmesso (o memorizzato) in luogo del segnale originale, ottenendo in questo modo un risparmio sulla banda necessaria alla trasmissione (o sulla quantita' di memoria usata). In ricezione il segnale viene decompresso, per produrre un segnale simile ma non necessariamente identico al segnale originale, che e' detto ancora codificato o "sintetico". La quantita' di bit/sec necessari per rappresentare il segnale compresso viene detta "velocita' di trasmissione" del codificatore, in quanto coincide con la velocita' di trasmissione del sistema, ed e' uno dei principali parametri che lo caratterizzano. Un compressore, come mostrato in figura 4, e' quindi diviso in due parti: il codificatore propriamente detto, al lato trasmissione, ed un decodificatore, al lato ricezione. Nella pratica un compressore e' realizzato tramite un elaboratore numerico che lo implementa; per compressori real-time di solito viene usato un DSP (Digital Signal Processor), un processore specializzato nella elaborazione di segnali. Segnale originale Codificatore Segnale compresso o codificato Decodificatore Segnale sintetico o codificato Canale Trasmissione Ricezione Figura 4: schema di un codificatore. I compressori (per segnali in generale, non solo per segnali vocali) si dividono in due grandi classi: con e senza perdite. Un compressore senza perdite produce una nuova rappresentazione del segnale dalla quale e' possibile ricostruire perfettamente il segnale di partenza; un compressore con perdite invece non permette di ricostruire il segnale di partenza in modo esatto, ma solo approssimato (introduce, dunque, una perdita di 5 Codifica del Segnale Vocale informazione). Naturalmente, accettando delle perdite e' possibile ottenere dei fattori di compressione molto maggiori che nel caso senza perdite. A seconda del tipo di segnale una perdita sara' tollerabile o meno: per esempio se il segnale da trasmettere rappresenta un programma eseguibile da un elaboratore e' chiaro che la codifica dovra' essere senza perdite, infatti anche un solo bit modificato puo' rendere il programma inutilizzabile; viceversa quando il segnale e' vocale o visivo e' tollerabile una differenza fra il segnale originale e quello codificato, infatti l' occhio o l'orecchio umano sono comunque in grado di utilizzare il segnale a patto che la distorsione non sia eccessiva. Un esempio di codifica senza perdite e' il metodo di Huffman, un esempio di codifica con perdite e' lo standard JPEG per la compressione di immagini. Tutti i codificatori di cui ci occuperemo sono con perdite. I codificatori di segnale vocale si dividono in due principali categorie, waveform (di forma d'onda) e model based. Un codificatore waveform (per esempio un codificatore APC) fa in modo che la forma d'onda del segnale sintetico sia il più simile possibile a quella del segnale originale. Un codificatore model based (per esempio un Vocoder LPC) non si interessa affatto della forma d'onda; estrae invece, dal segnale da codificare, i parametri di un modello dell' apparato di produzione che vengono trasmessi e utilizzati in ricezione per pilotare il modello, e riprodurre un segnale che viene percepito dall'orecchio come simile a quello originale, anche se non esiste nessuna garanzia di somiglianza fra le due forme d'onda. I codificatori model based permettono di ottenere fattori di compressione maggiori, a scapito però di una perdita sulla qualita' del segnale sintetico. 2.1 Codificatori e qualita' utilizzate La codifica avviene a partire dalla rappresentazione digitale del segnale vocale. La stessa rappresentazione di partenza puo' in realta' essere piu' o meno fedele, a seconda dell' utilizzo che si intende fare del segnale. Il segnale vocale puo' avere componenti fino ad una ventina di Khz. Per una sua perfetta riproduzione e' dunque necessario campionarlo ad una frequenza di 40 Khz; d' altra parte la maggior parte dell' energia e dell' informazione e' concentrata nei primi 4 Khz: il segnale telefonico, cioe' il segnale che si puo' ascoltare all' uscita di una cornetta telefonica, ha una banda di soli 3.2 Khz e risulta perfettamente comprensibile e di piacevole ascolto. Naturalmente sulla qualita' del segnale influisce, oltre alla frequenza di campionamento, anche il numero di bit usato per la rappresentazione quantizzata dei campioni. E' possibile identificare tre principali livelli di qualita' per il segnale di partenza e cioe' qualita' TELEFONICA, qualita' AUDIO, e qualita' CD come schematizzato in tabella 1. Freq. di campionamento 44 kHz 14 kHz 8 kHz Qualita' CD AUDIO TELEFONICA Caratteristiche riproduzione perfetta riproduzione quasi perfetta riproduzione buona Applicazioni multimedia videoconferenza telefonia Tabella 1: qualita' del segnale di ingresso. Nel seguito, supporremo che il segnale di ingresso al codificatore sia di qualita' telefonica, per esempio un segnale PCM standard. Nel PCM, i campioni sono presi ad una frequenza di 8 Khz, per la rappresentazione quantizzata di ogni campione sono utilizzati 8 bit (a patto di usare una compressione logaritmica del valore del campione prima della 6 Codifica del Segnale Vocale quantizzazione; in caso contrario sono necessari 12 bit) e quindi la velocita' di trasmissione e' di 64 Kbit/sec. Per quanto riguarda la qualita' del segnale di uscita dal codificatore (il segnale sintetico) e' possibile indicare, tenendo presente che queste divisioni sono piuttosto vaghe e autori diversi possono usare divisioni diverse, 4 livelli di qualita', ovvero TOLL (perfetta), NEAR TOLL, DIGITAL CELLULAR, LOW BIT RATE. Nelle qualita' TOLL e NEAR TOLL il segnale e' praticamente perfetto. Nella qualita' DIG. CELL. viene introdotta una certa rumorosita' di fondo ma il parlato e' ancora molto ben ricostruito. Nella qualita' LOW BIT RATE il parlato risulta oltre che rumoroso, artificiale e non naturale, ma comunque comprensibile; le caratteristiche del parlatore possono essere alterate notevolmente. In tabella 2 e' riportato un elenco di codificatori utilizzati in pratica. Codificatore PCM APC, ADPCM LD-CELP Bit Rate (kb/s) 64 32 16 LTP-RPE MP-LPC CELP LPC-10 13 9 5 2.4 Qualità TOLL NEAR TOLL NEAR TOLL/DIG CELL DIGITAL CELLULAR DIG CELL/LOW BIT DIG CELL/LOW BIT LOW BIT RATE Caratteristiche segnale di qualità telefonica segnale di qualità quasi telefonica segnale di qualità telefonica rumoroso segnale di qualità telefonica rumoroso segnale naturale,parlatore riconoscibile segnale naturale,parlatore riconoscibile segnale comprensibile, artificiale Tabella 2: alcuni codificatori e le loro caratteristiche. 2.2 Valutazione delle prestazioni di un codificatore I principali parametri per la valutazione della bonta' di un codificatore sono la qualità del segnale sintetico, la velocità di trasmissione, il ritardo introdotto fra il segnale di ingresso e quello di uscita, la complessità (calcolo/memoria) dell' algoritmo di compressione e la sensibilita' del segnale sintetico agli eventuali errori che si verificano nella trasmissione del segnale compresso (errori di canale). La qualità del segnale sintetico può essere valutata tramite misure oggettive o soggettive. Una misura oggettiva e' una maniera per calcolare un indice di qualita' a partire dalle due forme d'onda originale e sintetica; la misurazione puo' essere effettuata automaticamente e non richiede l'intervento di un ascoltatore (una tipica misura oggettiva e' il SNR). Le misure soggettive sono invece basate su prove d'ascolto: il segnale sintetico viene ascoltato e gli viene assegnato un voto; per limitare la dipendenza della misura dai gusti del singolo, le prove d' ascolto vengono ripetute con piu' ascoltatori e su piu' frasi, seguendo procedure formalizzate che tentano di ridurre l' aleatorieta' dei risultati. Le misure oggettive hanno il vantaggio di poter essere effettuate in modo automatico (e quindi su database molto estesi) e di non dipendere dai gusti dell' ascoltatore. Il principale problema delle misure oggettive e' che, specialmente per codificatori operanti a basse velocita', non sono correlate con la qualita' percepita: se SNR è alto, la qualità è sicuramente buona; ma se SNR è basso, non è detto che la qualità sia cattiva; infatti i segnali possono essere percepiti come simili anche se le forme d'onda sono molto diverse. Sono state proposte molte misure oggettive diverse da SNR che tentano di superare questo problema, ma nessuna vi riesce completamente. 7 Codifica del Segnale Vocale Le misure soggettive hanno il vantaggio di essere correlate con la qualita' percepita, ma sono molto piu' complicate e costose da realizzare, e sono influenzate dai gusti dell' ascoltatore. Un altro problema e' quello della loro bassa sensibilita': supponiamo di effettuare la misurazione per fissare al meglio il valore di un parametro del codificatore; variando il parametro varia la qualita' del segnale sintetico, ma se la variazione e' troppo piccola l' orecchio non la percepisce (per esempio miglioramenti di 1 dB sull' SNR sono quasi impercettibili). 8 Codifica del Segnale Vocale 3. Codifica LPC I codificatori di gran lunga piu' usati sono quelli di tipo LPC (Linear Prediction Coder), basati sulla predizione lineare. Esistono altri tipi di codificatori (per esempio i codificatori sinusoidali o i codificatori multibanda) di cui pero' non ci occuperemo. 3.1 Predizione lineare La predizione lineare e' una tecnica molto efficace per eliminare correlazione e ridondanza da un segnale. Indichiamo con x[n] una sequenza di campioni di segnale vocale. I campioni sono ottenuti finestrando il segnale, e quindi sono diversi da 0 solo in un certo intervallo, diciamo fra 0 ed N-1. La lunghezza della finestra (10-30 msec.) e' scelta in modo che il segnale risulti (grosso modo) stazionario al suo interno. Fra campioni successivi esiste una certa correlazione; e' possibile quindi cercare di predire il valore della sequenza nell' istante n sulla base di un certo numero di campioni precedenti. Per formare il valore predetto si usa una combinazione lineare di P campioni precedenti; P e' detto ordine di predizione. Indicando con x"[n] il valore predetto si ha quindi: P x"[n] = ∑ a[k] x[n-k]. k=1 Gli a[k] sono detti coefficienti di predizione. La differenza fra il segnale e la sua predizione e' detta errore o residuo di predizione, e rappresenta la parte di segnale che non puo' essere predetta dal suo passato: P r[n] = x[n] - x"[n] = x[n] - ∑ a[k] x[n-k]. (1) k=1 Osservando la formula precedente si nota che la sequenza r[n] e' ottenuta dalla sequenza x[n] facendola passare in un filtro FIR, detto "filtro di analisi", dotato di funzione P di trasferimento 1 - A(z) = 1 - ∑ a[k] z-k. I coefficienti di predizione vengono calcolati in k=1 modo che la sequenza predetta x"[n] sia il piu' simile possibile, in senso quadratico, alla sequenza x[n], cioe' in modo che l'energia del segnale differenza sia piu' piccola possibile; analiticamente occorre minimizzare la quantita' E ∞ E= ∑ n = -∞ ∞ r[n]2 = ∑ n = -∞ ∞ ( x[n] - x"[n] )2 = ∑ n = -∞ P ( x[n] - ∑ a[k] x[n-k] )2 . k=1 9 Codifica del Segnale Vocale Per minimizzare E si deriva rispetto ai coefficienti a[k] e si mettono a zero le derivate; ∞ introducendo la sequenza di autocorrelazione di x[n], definita da φx[i] = ∑ x[n] x[n+i], si n = -∞ ottiene: P ∑ a[k] φx[i-k] = φx[i] i = 1, .., P. (2) k=1 Le (2) costituiscono un sistema di P equazioni lineari (dette eq. di Yule-Walker) nelle P incognite a[k], e permettono quindi il calcolo dei coefficienti di predizione che rendono minima l'energia del residuo. E' chiaro che, minore e' l' energia del segnale residuo, maggiore e' l'informazione che e' stata rimossa dal segnale e concentrata nei coefficienti a[k]. Dalla conoscenza dei coefficienti di predizione e del residuo di predizione e' possibile ricostruire il segnale di partenza, invertendo la (1); si ottiene P x[n] = r[n] + ∑ a[k] x[n-k]. (3) k=1 La formula precedente equivale al filtraggio della sequenza residuo di predizione con un filtro IIR dotato di funzione di trasferimento 1 / (1-A(z) ) a soli poli, reciproco del filtro di analisi e detto "filtro di sintesi". Una importante proprieta' del filtro di sintesi e' che il suo spettro (modulo quadro della funzione di trasferimento) segue l'inviluppo dello spettro del segnale x[n]. Se ne deduce che il filtro di analisi avra' uno spettro con andamento pari al reciproco dell' inviluppo dello spettro di x[n]. Lo spettro del segnale residuo, che si ottiene moltiplicando lo spettro di x[n] con lo spettro del filtro di analisi, tendera' dunque ad avere inviluppo piatto e cio' implica che i campioni del residuo sono poco correlati, come ci si poteva aspettare, visto che il residuo e' ottenuto da x[n] cercando di rimuovere la correlazione. La sequenza di analisi e sintesi e' rappresentata in figura 5, assieme agli spettri dei vari segnali coinvolti. Il segnale di ingresso e' supposto sonoro, e dunque il suo spettro e' a righe, ed e' disegnato assieme al suo inviluppo, con i picchi alle frequenze formanti. Lo spettro del filtro di sintesi segue questo inviluppo, mentre il filtro di analisi ha inviluppo con andamento reciproco; lo spettro del segnale residuo e' a righe, ed ha inviluppo piatto. Il metodo che abbiamo appena descritto per il calcolo degli a[k] e' noto col nome di metodo dell' "Autocorrelazione"; esistono diversi altri metodi per il calcolo dei parametri LPC, che si differenziano da questo per i motivi piu' vari. Per esempio, in un secondo metodo, il metodo della "Covarianza", si assume il segnale x[n] non definito al di fuori della finestra e non pari a 0 come nel metodo dell' Autocorrelazione; in altri metodi, ricorsivi, i coefficienti sono calcolati per ogni nuovo campione x[n], usando una finestra che cresce indefinitamente nel tempo. Una importante proprieta' del metodo dell' Autocorrelazione e' che il filtro di sintesi risulta sempre stabile, con poli all' interno del cerchio unitario. Una seconda importante caratteristica e' che la matrice dei coefficienti del sistema lineare (2) e' di Toepliz; per questo tipo di matrici esistono metodi di soluzione del sistema molto efficienti. 10 Codifica del Segnale Vocale x[n] r[n] Analisi x[n] Sintesi 1-A(z) 1/(1-A(z)) Figura 5: analisi e sintesi LPC. 3.2 Schema di un codificatore LPC Lo schema generale di un codificatore LPC e' riportato in figura 6. Il codificatore opera su trame di N campioni, cioe' su brevi tratti di segnale vocale, all’ interno dei quali il segnale stesso puo’ essere considerato stazionario. Per ogni trama, vengono ripetuti i seguenti passi: tramite la predizione lineare, nel blocco LP di analisi LPC, vengono calcolati i coefficienti di predizione a[k], e dunque definiti i filtri di analisi e sintesi. Il segnale viene fatto passare attraverso il filtro di analisi per produrre una trama di residuo. Nel blocco AECC di analisi dell'eccitazione vengono calcolati, a partire dalla trama di segnale originario e/o dalla trama di residuo, usando eventualmente anche i coefficienti a[k], i valori di un certo numero di parametri, indicati genericamente con p[n], che permettono di ricostruire in modo approssimato la trama di residuo nel blocco RECC di ricostruzione dell'eccitazione. Questi parametri vengono trasmessi, assieme ai coefficienti del filtro. In ricezione, la trama di residuo ricostruito r'[n] viene usata per eccitare il filtro di analisi e produrre il segnale sintetico x'[n]. x[n] 1-A(z) AECC p[n] p[n] RECC r'[n] 1/(1-A(z)) x'[n] r[n] Canale a[k] LP a[k] Codificatore a[k] Decodificatore Figura 6: schema di un codificatore LPC. I diversi codificatori LPC si differenziano fra loro principalmente nei blocchi di analisi e ricostruzione dell' eccitazione. E' chiaro che la cosa migliore sarebbe avere r'[n] = r[n], cioe' fornire al filtro di sintesi il residuo originale, ed ottenere in questo modo x'[n] = x[n], cioe' un segnale sintetico identico a quello originale. In questo caso, i blocchi di analisi e ricostruzione dell' eccitazione sarebbero assenti, ed il residuo verrebbe direttamente trasmesso al decodificatore. In questo modo, pero', non si riescono a realizzare guadagni consistenti sulla velocita' di trasmissione; tali guadagni sono invece ottenuti accettando 11 Codifica del Segnale Vocale residui ricostruiti diversi da quello originale; in questo caso il blocco AECC si occupa di calcolare dei parametri che possono essere trasmessi con pochi bit/sec e che, una volta giunti al ricevitore, permettono al blocco RECC di produrre il residuo ricostruito (anche detto "sintetico"); tanto piu' r'[n] e' simile a r[n] tanto migliore e' la qualita' del segnale sintetico, ma per ottenere alti fattori di compressione molti codificatori utilizzano residui sintetici fortemente diversi da quello originale: in generale, si cerca almeno di fare in modo che il residuo sintetico abbia spettro con inviluppo piatto; in questo modo, infatti, l'inviluppo dello spettro del segnale sintetico finale e' determinato dal filtro di sintesi e quindi, per quanto visto in precedenza, risulta simile a quello del segnale di ingresso; visto che l'orecchio e' sensibile sostanzialmente allo spettro (di energia) del segnale che percepisce (e non allo spettro di fase) il parlato sintetico viene percepito come simile a quello originale, anche se le forme d'onda sono molto differenti. Nella pratica, sia i coefficienti del filtro a[k], che i parametri calcolati nel blocco di analisi dell' eccitazione p[n], sono numeri interi o reali, rappresentati con una precisione ed una quantita' di memoria dipendenti dall' elaboratore su cui opera il compressore, per esempio 32 bit. Per trasmettere direttamente una di queste quantita' sarebbe dunque necessario trasmettere 32 bit; di solito, pero', il valore del parametro occupa solo un piccola parte della dinamica consentita dalla rappresentazione (varia per esempio fra +1 e -1) e/o puo' essere rappresentato con una precisione minore senza perdere nella qualita' del segnale sintetico (per esempio 16 valori distrubuiti uniformemente fra +1 e -1); quindi, prima della trasmissione, questi parametri subiscono un processo di quantizzazione, che consente di ridurre sensibilmente il numero di bit usato per la loro rappresentazione e trasmissione (per esempio a 4 bit nel caso in cui si utilizzino 16 valori fra +1 e -1): uno schema piu' preciso per un codificatore LPC e' dunque quello mostrato in figura 7, in cui nel blocco Q di quantizzazione viene effettuata la quantizzazione e la codifica del valore quantizzato in una stringa di bit, e nel blocco di D di dequantizzazione viene decodificata la stringa di bit e restituito il valore quantizzato. Il passo di quantizzazione e' molto importante in un codificatore in quanto ha un impatto diretto sulla velocita' di trasmissione. Ognuno dei parametri da trasmettere deve essere quantizzato al meglio, con il tipo di quantizzazione a lui piu' appropriata ed eventuali correlazioni tra i parametri devono essere sfruttate. Le tecniche di quantizzazione sono state costantemente migliorate nel corso degli anni e sono ormai molto complesse; per esempio nei primi anni 80 occorrevano circa 35-40 bit per la quantizzazione/codifica dei coefficienti di predizione a[k], mentre oggi ne bastano 20-25. La tecnica che ha avuto il maggior impatto sulla velocita' di trasmissione negli ultimi anni e' la Quantizzazione Vettoriale, sulla quale, pero', non entriamo in dettaglio. I coefficienti di predizione a[k] non sono l'unica maniera di specificare il filtro di sintesi (per esempio, il filtro potrebbe essere specificato trasmettendo la posizione dei suoi poli). Nei codificatori usati in pratica i coefficienti di predizione a[k], sono spesso sostituiti con quantita' a loro biunivocamente legate perche' queste risultano piu' facili a calcolarsi, come i coefficienti di Predizione, oppure perche' hanno favorevoli proprieta' per quanto riguarda la quantizzazione, come i coefficienti LAR (Log Area Ratio) o i coefficienti LSF (Line Spectrum Frequencies), ma nel seguito, per semplicita', useremo sempre direttamente i coefficienti di predizione. 12 Codifica del Segnale Vocale x[n] 1-A(z) AECC p[n] Q D p'[n] RECC r'[n] 1/(1-A(z)) r[n] Canale a[k] LP a[k] Codificatore Q D a'[k] Decodificatore Figura 7: schema di un codificatore LPC con quantizzazione dei parametri. 13 x'[n] Codifica del Segnale Vocale 4. Alcuni Codificatori LPC In questo capitolo e nel successivo vedremo diversi esempi di codificatori; la tabella 3 riassume le loro caratteristiche. In questo capitolo non entreremo in dettaglio, ma ci limiteremo a discutere la struttura e i principi di funzionamento di alcuni, importanti codificatori LPC. Nel capitolo successivo affronteremo, andando piu' in profondita', il codificatore LTP-RPE adottato nello standard GSM. Codificatore APC, ADPCM Vocoder LPC ABS LTP-RPE Qualita' Near Toll Low bit rate Dig. Cell. / Low bit Dig. Cell. Velocita'(Kb/sec) 30-40 2-4 5-10 13 Complessita' bassa media alta media Robustezza alta bassa media media Tabella 3: caratteristiche di alcuni codificatori. 4.1 APC (Adaptive Predictive Coder) e ADPCM (Adaptive Differential PCM) Questi codificatori, insieme al vocoder LPC che vedremo nel prossimo paragrafo, sono stati i primi ad essere ideati ed utilizzati. Permettono di ottenere segnali sintetici di qualita' telefonica (TOLL, o NEAR TOLL) con velocita' di trasmissione di 30-40 Kb/sec. In questi codificatori, l' unica approssimazione che subisce il residuo e' una quantizzazione dei campioni, diretta nell' APC, e differenziale (cioe' quantizzando le differenze fra campioni scuccessivi) nell' ADPCM. APC ed ADPCM sfruttano la caratteristica della predizione lineare di minimizzare l'energia del segnale residuo: avendo il residuo minore energia del segnale originale (e quindi minore dinamica) sara' possibile utilizzare meno bit (meno intervalli) per la sua quantizzazione, a parita' di errore di quantizzazione. Quindi, se nel PCM si usano 8 bit per campione quantizzando il segnale originale, in questi metodi si ottiene la stessa qualita' usando 4-5 bit per la quantizzazione di un campione di segnale residuo. Un possibile schema per questi codificatori e' quindi quello di figura 7 senza i blocchi di analisi e ricostruzione dell' eccitazione; nella pratica, pero', la cosa non si puo' realizzare in maniera cosi' semplice; infatti il filtro di sintesi viene eccitato non con il residuo originale, r[n], ma con il residuo quantizzato r'[n] = r[n]+e[n], dove e[n] e' il rumore di quantizzazione; all' uscita del filtro si otterra' quindi x'[n] = x[n] + w[n], dove x[n] e' dovuto al passaggio di r[n] nel filtro e w[n] e' dovuto al passaggio di e[n]; visto che il filtro di 14 Codifica del Segnale Vocale analisi riduce l'energia del segnale che lo attraversa (ed e' quindi un attenuatore) il filtro di sintesi, che e' il suo inverso, risulta un amplificatore: l' errore di quantizzazione presente sul residuo verra' amplificato in uscita, vanificando i vantaggi dello schema. Inoltre, il decodificatore non dispone dei coefficienti a[k], ma solo delle loro versioni quantizzate; di conseguenza il filtro del decodificatore non sara' esattamente inverso a quello del codificatore. Per risolvere il problema e' necessario modificare il metodo di calcolo del residuo; invece della (1) il residuo viene calcolato come P ∑ a'[k] x'[n-k]. r[n] = x[n] - (4) k=1 Nella (4) il residuo viene calcolato utilizzando non i valori di segnale originale ed i coefficienti esatti, ma i valori del segnale sintetico x'[n] e dei coefficienti quantizzati a'[k]; per fare cio' e' necessario che il codificatore realizzi, al suo interno, anche il decodificatore, cioe' calcoli i campioni del segnale x'[n] ed i coefficienti a'[k]. Il residuo prodotto in questo modo non coincide con quello prodotto usando la (1), cioe' con quello ad energia minima, ma non e' molto differente ed ha comunque energia molto piu' bassa del segnale. Invertendo la (4) risulta: P x[n] = r[n] + ∑ a'[k] x'[n-k]. (5) k=1 Il decodificatore produce il segnale sintetico facendo passare r'[n] = r[n] + e[n] nel filtro di sintesi; utilizzando la (5) possiamo scrivere P x'[n] = r'[n] + P ∑ a'[k] x'[n-k] = r[n] + ∑ a'[k] x'[n-k] + e[n] = x[n] + e[n]. (6) k=1 x[n] k=1 r[n] AM Q D x'[n] 1/(1-A(z)) D r'[n] 1/(1-A(z)) x'[n] Canale r'[n] a'[k] D LP Q D a'[k] a[k] Codificatore Decodificatore Figura 8: schema di un codificatore APC. La (6) mostra come in questo modo il rumore di quantizzazione passi attraverso il filtro di sintesi senza essere amplificato, preservando i vantaggi dello schema. In figura 8 riportiamo il diagramma a blocchi del codificatore in cui, nel blocco AM di analisi 15 Codifica del Segnale Vocale modificata, viene utilizzata la (4) per produrre il residuo. L' includere il decodificatore all' interno del codificatore permette di tenere in conto e compensare gli effetti della quantizzazione e delle altre approssimazioni fatte nella decodifica, ed e' un principio generale da seguire nel progetto di un codificatore. 4.2 Vocoder (Voice-Coder) LPC Questo codificatore opera a velocita' di trasmissione molto basse (2-3 Kb/sec), grazie alla forte approssimazione operata sul residuo. In figura 9 e' riportato il suo schema. Data una trama di segnale da codificare il residuo viene ricostruito nel blocco RECC di ricostruzione dell' eccitazione sulla base di tre soli parametri: il tipo di suono (sordo o sonoro), il perido di pitch e il guadagno; questi parametri vengono calcolati dal codificatore nel blocco AECC analizzando la trama da codificare, e sono globalmente indicati con p[k]. Nel blocco RECC, se il suono e' sonoro, il residuo prodotto e' un treno di impulsi unitari, distanziati di un numero di campioni pari al periodo di pitch; se il suono e' sordo viene prodotta un sequenza a potenza unitaria di campioni casuali, scorrelati fra loro (rumore bianco). Il guadagno viene utilizzato per scalare il residuo e portarlo ad un livello di potenza pari a quello del residuo vero, in modo da produrre parlato sintetico allo stesso volume del parlato originale. x[n] AECC p[k] Q D p'[k] RECC 1/(1-A(z)) x'[n] r'[n] Canale LP a[k] Codificatore Q D a'[k] Decodificatore Figura 9: Schema di un vocoder LPC. Il vocoder LPC sfrutta la caratteristica del filtro di sintesi di avere spettro (modulo quadro della funzione di trasferimento) con andamento simile all' inviluppo dello spettro del segnale di ingresso. Entrambi i tipi di residuo utilizzati (rumore bianco e treno di impulsi) hanno spettro con inviluppo piatto: passando questi segnali nel filtro di sintesi si otterra' un segnale con inviluppo spettrale simile a quello originale e che quindi viene percepito come un suono simile a quello originale. Inoltre, nel caso di suoni sonori, il fatto di usare come eccitazione una sequenza di impulsi distanziati del periodo di pitch permette di mantenere la caratteristica a righe dello spettro distanziando le righe esattamente della frequenza di pitch mantenendo cosi' la tonalita' del parlato originale. Il vocoder LPC puo' essere visto come un modello dell' apparato di produzione: l'eccitazione costituisce il segnale di sorgente e le modifiche apportate a questo segnale dal tratto vocale sono riprodotte dal filtro di sintesi. 16 Codifica del Segnale Vocale La qualita' del segnale sintetico prodotto con un vocoder e' molto bassa: il parlato e' comprensibile ma innaturale; e' affetto da ronzii e crepitii e ha un timbro metallico ed artificiale; le caratteristiche del parlatore sono alterate. La bassa qualita' e' dovuta in parte ad un limite intrinseco dato dalla semplicita' del modello, ed in parte alle difficolta' che si incontrano nella analisi del pitch: il problema della determinazione della frequenza di pitch e della discriminazione sonoro/sordo, pur essendo uno dei piu' studiati nel campo della codifica del segnale vocale, non ha trovato ancor oggi una soluzione completamente soddisfacente; i metodi utilizzati presentano sempre qualche problema di robustezza e di precisione, oppure sono troppo complessi per essere realizzati tempo reale. La velocita' di trasmissione e' molto bassa: per avere un' idea dei risparmi che un vocoder permette di realizzare supponiamo che le trame siano da 20 msec. e quindi, se il segnale di ingresso e' campionato ad 8 KHz (qualita' telefonica), siano costituite da 160 campioni, e che occorrano: 1 bit per la trasmissione della decisione sonoro sordo, 7 bit per il periodo di pitch e 6 bit per il guadagno. Si arriva ad un totale di 14 bit da trasmettere per la descrizione del residuo in una trama. Usando un ADPCM a 4 bit sarebbero serviti 4x160 = 640 bit. 4.3 Codificatori ABS (Analysis By Synthesis) Lo schema generale di un codificatore ABS e' riportato in figura 10. Una caratteristica dei codificatori ABS e' quella di avere a disposizione, per produrre una trama di segnale sintetico, un insieme di possibili sequenze di residuo con le quali eccitare il filtro di sintesi. Questo insieme contiene una serie di vettori lunghi quanto una trama ed e' detto "Codebook". Puo' essere realizzato in molte forme diverse, per esempio puo' contenere un numero finito e piccolo di vettori, che quindi sono tutti fisicamente memorizzati, oppure puo' contenere un numero infinito di vettori, che non sono tutti memorizzati, ma solo caratterizzati in qualche modo (per esempio tutti i vettori con 3 componenti diverse da 0 in posizione qualsisi) e vengono prodotti all' occorrenza. Nel seguito della sezione vedremo esempi di entrambi i tipi. Il codebook e' noto sia al codificatore che al decodificatore. Per ogni trama di ingresso1 il codificatore calcola, nel blocco LP, i parametri del filtro di sintesi, li quantizza e li trasmette al decodificatore. I parametri sono inoltre forniti al blocco ABS (dopo quantizzazione e dequantizzazione, per mantenere aderenza con il decodificatore) perche' anche in questo blocco sara' necessario effettuare la sintesi. Nel blocco ABS viene scelto il vettore del codebook che il decodificatore usera' nella sintesi. Per effettuare la scelta, tutti i possibili vettori di residuo contenuti nel codebook vengono fatti passare nel filtro di sintesi, ottenendo per ognuno la trama di residuo sintetico corrispondente x°[n]; la trama prodotta viene confrontata con quella originale da codificare x[n] calcolando un segnale d'errore e[n] = x[n]-x°[n] ed usando l'energia di questo segnale 1Si noti che la lunghezza della trama su cui viene effettuata l'analisi del residuo non deve necessariamente essere coincidente (anzi di solito non lo e') con la lunghezza della trama su cui viene effettuata l' analisi LPC, ma puo' essere un sottomultiplo, cosicche' l'analisi del residuo viene effettuata piu' volte per trama LPC, per avere una rappresentazione piu' precisa del residuo stesso: in questo caso la trama usata nell' analisi del residuo viene detta sottotrama, riservando il termine trama a quella LPC. Per semplicita' in questa sezione assumeremo le due trame coincidenti. 17 Codifica del Segnale Vocale come misura della distanza fra le trame; fra i vettori del codebook si sceglie quello che produce l'errore ad energia minima. I parametri che descrivono questo vettore (dipendenti dal tipo di codebook) vengono quantizzati e trasmessi al decodificatore (sono indicati genericamente con p[k] nello schema), che li usa, nel blocco RABS di ricostruzione ABS, per estrarre dal codebook il vettore scelto. Nel caso in cui il codebook non sia formato da un numero finito di vettori, questo schema rimane valido in linea di principio. Infatti anche se e' impossibile effettuare la sintesi con tutti i vettori del codebook, e' pero' possibile usare procedure di ricerca analitiche che permettono di estrarre dal codebook il vettore migliore (o comunque un buon vettore) senza effettuare realmente la sintesi. Queste procedure dipendono dalla struttura del codebook usato. RECC AECC Codebook x[n] ABS Codebook p[n] Q a'[k] D p'[n] RABS r'[n] 1/(1-A(z)) x'[n] Canale D LP a[k] Q D Codificatore a'[k] Decodificatore Figura 10: schema di un codificatore ABS. Un codificatore ABS puo' disporre di piu' di un codebook. In questo caso, l' analisi procede esattamente come descritto in precedenza per il primo codebook. Il vettore r'[n] scelto da questo primo codebook viene poi fatto passare nel filtro di sintesi per produrre una trama di segnale sintetico x°[n]; questa trama viene sottratta alla trama originale x[n] per ottenere un vettore x°°[n] = x[n] - x°[n] che rappresenta la parte di segnale non ancora approssimata, e il secondo codebook viene usato per approssimare questo vettore invece di quello originale. Si procede in maniera simile per eventuali codebook successivi. I codificatori ABS (Analisi tramite Sintesi) devono il nome (e il successo) alla loro maniera di operare: l' analisi della trama da codificare si basa sulla sintesi di tutte le possibli trame ricostruite. Questo garantisce che venga scelto, fra tutte le possibili trame di residuo a disposizione, quella che rende minimo l'errore dopo il filtraggio di sintesi, cioe' nel dominio del segnale ricostruito. Una soluzione alternativa sarebbe quella di scegliere dal codebook direttamente il vettore piu' simile alla trama di residuo originale, ovvero di operare nel dominio del segnale residuo. In questo modo, pero', non si ha la sicurezza che anche dopo il filtraggio di sintesi il residuo scelto sia quello che rende minima la differenza fra trama 18 Codifica del Segnale Vocale ricostruita e quella originale, cosa che invece e' garantita operando nel dominio del segnale ricostruito. I codificatori ABS utilizzano un secondo importante principio. E' stato notato che l'orecchio umano e' molto piu' sensibile a rumori allocati nelle bande di frequenza in cui il segnale ha basso livello che a rumori allocati nelle bande di frequenza in cui il segnale ha alta energia. Per fare un esempio, dato un segnale vocale x[n] e due disturbi e'[n] ed e"[n], supponiamo che lo spettro di x[n] abbia un picco (frequenza formante) alla frequenza f1, che lo spettro di e'[n] sia concentrato intorno a questa frequenza, mentre lo spettro di e"[n] sia concentrato intorno ad una frequenza f2 dove il livello del segnale e' basso; ebbene, anche se e'[n] ed e"[n] hanno la stessa energia, il segnale x[n]+e'[n] sara' percepito come poco rumoroso, mentre il segnale x[n]+e"[n] sara' percepito come molto rumoroso. Questa osservazione viene utilizzata nei codificatori ABS nella fase di scelta del vettore dal codebook. Prima di calcolare l' energia del segnale d'errore e[n], questo viene fatto passare attraverso un filtro di pesatura che esalta le componenti dell'errore nelle bande di frequenza in cui il segnale da codificare ha poca energia e attenua le componenti dell'errore nelle bande di frequenza in cui il segnale da codificare ha alta energia (questo filtro e' ottenuto ancora a partire dai parametri LPC); in questo modo se la trama ricostruita differisce da quella originale in una banda di frequenze in cui il livello del segnale e' alto, e quindi, per quanto detto sopra, l'errore non viene quasi percepito, l'energia del segnale d'errore filtrato sara' bassa, ed il vettore sara' scelto piu' facilmente; viceversa, se il segnale d' errore ha molta energia nelle bande in cui il livello del segnale e' basso, e quindi e' percepito nitidamente dall' orecchio, l'energia del segnale d'errore filtrato sara' alta, ed il vettore sara' scelto piu' difficilmente. I metodi ABS sono molto costosi dal punto di vista computazionale; infatti il filtraggio di tutti i possibili residui a disposizione e' una operazione molto pesante dal punto di vista della complessita' di calcolo. Un importante codificatore ABS e' il codificatore MP-LPC (Multi-Pulse Linear Prediction Coder), per il quale il codebook e' costituito da tutti i vettori con un certo numero (fisso) di elementi diversi da zero (detti impulsi), in qualsiasi posizione. Se, per esempio, il numero di impulsi e' 3, il codebook sara' costituito da tutti i vettori con un numero di elementi pari alla lunghezza di una trama, di cui solo 3 diversi da 0. Visto che gli impulsi possono avere qualsisi ampiezza, il codebook e' costituito da un numero infinito di vettori, ed e' impossibile provarli effettivamente tutti. Per la ricerca in questo codebook si utilizzano metodi analitici di esplorazione dello spazio dei possibili residui, che consentono di determinare un "buon" vettore di residuo (ma non quello ottimo). Una volta scelto il vettore di residuo, il codificatore quantizza e trasmette al decodificatore la posizione e le ampiezze degli impulsi, in modo che lo stesso vettore possa essere ricreato in ricezione ed usato per eccitare il filtro di sintesi. Il metodo multi-impulso permette di produrre parlato sintetico di buona qualita', anche se rumoroso, con velocita' di trasmissione intorno ai 9 Kb/sec. Un secondo codificatore ABS molto noto e' il codificatore CELP (Code Excited Linear Prediction), per il quale il codebook e' costituito da un numero finito (per es. 1024) di vettori casuali generati da una sorgente aleatoria, ed e' detto codebook stocastico. I campioni sono di solito a distrubuzione gaussiana e sempre indipendenti, in modo da avere residui a spettro piatto. In questo caso, e' effettivamente possibile effettuare il filtraggio di 19 Codifica del Segnale Vocale tutti i vettori del codebook per scegliere quello da utilizzare. Prima della sintesi ogni vettore viene scalato con un guadagno calcolato in modo da rendere minima l'energia del segnale d'errore e[n] prodotto dal vettore. I parametri da trasmettere sono quindi costituiti dalla posizione nel codebook del vettore scelto e dal guadagno. Nei metodi CELP utilizzati in pratica e' sempre presente un secondo codebook, oltre al codebook stocastico. Questo secondo codebook, detto codebook adattativo, non viene qui trattatato perche e' utilizzato, in una forma molto simile, anche nel codificatore LTP-RPE che vedremo in dettaglio nella prossima sezione. Il metodo CELP permette di produrre parlato sintetico di buona qualita', anche se rumoroso, con velocita' di trasmissione intorno ai 5 Kb/sec, ed e' attualmente uno dei metodi di codifica piu' diffusi e studiati. 20 Codifica del Segnale Vocale 5. Il codificatore LTP-RPE Il codificatore LTP-RPE (Long Term Prediction - Regular Pulse Excited) e' adottato nello standard GSM. E' in grado di produrre un segnale sintetico di buona qualita' ad una velocita' di trasmissione di 13 Kbit/sec. Lo schema del codificatore e' riportato in figura 11. Il codificatore e' diviso in tre sezioni: LPC, LTP e RPE. AECC LPC LTP RPE r[n] x[n] PRE x°[n] 1-A(z) a'[k] LP s[n] LTPS LTP s°[n] PB ARPE D G' s^[n] D l[n] D Q a[k] tx3 Q D Q DG tx1 tx2 RPE r'[n] s'[n] Codebook Adattativo Figura 11: schema di un codificatore LTP-RPE. 5.1 Preprocessing e LPC Il segnale analogico di ingresso viene filtrato con un filtro passabsso con frequenza di taglio pari a 3.2 KHz, campionato con una frequenza di 8 KHz, e quantizzato linearmente con 12 bit. Il segnale digitale x[n] viene diviso in trame di 20 msec, corrispondenti a 160 campioni. 21 Codifica del Segnale Vocale Ogni trama viene per prima cosa passata al blocco PRE di preprocessing, dove viene rimossa la componente continua ed effettuata una preenfasi. La preenfasi e' un filtraggio non adattativo che esalta le alte frequenze, allo scopo di rendere piu' stabili numericamente gli algoritmi utilizzati nei blocchi successivi; verra' compensata, in uscita, dalla deenfasi (filtraggio col filtro inverso). La trama viene moltiplicata per una finestra di Hamming, per limitare gli effetti di bordo. Il segnale preprocessato x°[n] viene passato al blocco LP di predizione lineare, nel quale vengono calcolati 8 coefficienti di predizione a[k]. I coefficienti vengono quantizzati (sono necessari 36 bit per gli 8 coefficienti) e trasmessi al decodificatore. La trama di segnale preprocessato viene passata attraverso il filtro di analisi, definito dai coefficienti quantizzati a'[k], e si ottiene in questo modo una trama di residuo r[n]. Per le elaborazioni successive, la trama di residuo viene ulteriormente suddivisa in 4 sottotrame di 40 campioni ciascuna. 5.2 LTP (Long Term Prediction) La sottotrama (40 campioni) di segnale residuo viene passata alla sezione di Long Term Prediction. Questa sezione si basa sulla seguente osservazione: se il suono ha una componente sonora il segnale ha una struttura pseudo-periodica e questa pseudoperiodicita' si conserva anche nel segnale residuo in quanto l'analisi LPC e' in grado di eliminare solo la correlazione a breve termine del segnale, cioe' quella esistente fra campioni con distanza minore o uguale all' ordine di predizione, molto minore del periodo di pitch. Supponiamo ora di voler approssimare una sottotrama di segnale residuo r[n] n = 0, .., 39, e che sia il codificatore che il decodificatore conoscano il segnale residuo ricostruito fino a questo momento: r'[n] n < 0. Essendo il segnale residuo pseudo-periodico, ed a patto che la ricostruzione r'[n] sia buona, e' logico pensare che, retrocedendo di un periodo di pitch nel tempo, sia possibile trovare un tratto di 40 campioni di residuo ricostruito r'[n] molto simile alla sottotrama di residuo r[n] che si sta cercando di approssimare. Indicando con P il periodo di pitch, risultera' r'[n-P] ≈ r[n]. Nel blocco LTPS (LTP Search), la trama di residuo (d' ora in poi, per brevita', useremo trama invece di sottotrama, quando questo non generi confusione) attuale viene confrontata con 128 trame di pari lunghezza estratte dal residuo gia' ricostruito r'[n]. Le trame vengono formate estraendo 40 campioni consecutivi di residuo ricostruito e retrocedendo nel tempo il punto iniziale di estrazione. A questo scopo, nel codebook adattativo sono memorizzati gli ultimi 127+40 campioni di residuo ricostruito r'[n] generati. Le trame vengono confrontate con la trama di residuo da approssimare calcolando la loro correlazione. Fra le 128 disponibili viene scelta la trama che risulta piu' correlata con quella da approssimare. Il decodificatore viene informato di quale trama e' stata scelta tramite la trasmissione del ritardo D a cui si e' avuta la maggior correlazione. Visto che sono 128 le trame (i ritardi) possibili, sono necessari 7 bit per la trasmissione esatta del ritardo. Assieme al ritardo viene calcolato un guadagno G per il quale la trama estratta dal codebook va moltiplicata; G e' calcolato in modo da rendere minima la differenza quadratica fra la trama estratta e quella da approssimare. Il guadagno viene quantizzato con 2 bit (sono sufficienti pochi bit in quanto G e' sempre molto vicino ad 1). 22 Codifica del Segnale Vocale Nel blocco LTP viene calcolata una trama di predizione di lungo termine l[n], ottenuta moltiplicando la trama estratta dal codebook a ritardo D per il guadagno quantizzato G'; questa trama viene sottratta al residuo, e in questa maniera si ottiene una trama di segnale "residuo LTP" s[n] = r[n] - l[n], che rappresenta cio' che ancora il decodificatore non conosce del segnale residuo. 5.3 RPE (Regular Pulse Excitation) La trama di residuo LTP s[n] viene filtrata con un passabasso (blocco PB), in previsione del sottocampionamento che si intende effettuare, e quindi passata al blocco ARPE di analisi RPE, dove viene effettuata una decimazione sulla trama filtrata s°[n] per produrre una trama s^[n] in cui solo 13 campioni sono diversi da 0. A partire dalla trama filtrata s°[n] sono 4 le trame decimate che si possono considerare. Queste si ottengono fissando la posizione del primo campione diverso da zero, che puo' essere il campione 0, 1, 2, o 3. A partire da questo campione la trama decimata si ottiene azzerando due campioni ogni tre. Fra le 4 possibili trame decimate viene scelta quella che ha maggior energia. Sono necessari 2 bit per trasmettere al decodificatore la posizione del primo campione diverso da 0 della trama decimata. I 13 campioni della trama decimata diversi da 0 vengono quantizzati nel blocco Q di quantizzazione e trasmessi. Per effettuare la quantizzazione viene cercato il massimo valore assoluto; questo valore viene compresso logaritmicamente e quantizzato con 6 bit; i 13 campioni vengono poi divisi per il massimo appena trovato in modo da risultare normalizzati fra -1 e 1; i valori normalizzati vengono quantizzati linearmente usando 3 bit. In totale sono necessari 13x3 + 6 = 45 bit per trasmettere le ampiezze dei campioni. Nel blocco RPE viene ricostruita la trama decimata e quantizzata s'[n]. Questa viene sommata alla trama di predizione LTP l[n] in modo da calcolare la trama residuo ricostruito r'[n] che verra’ usata nel decodificatore per eccitare il filtro di sintesi. La trama r'[n] viene usata per aggiornare il codebook adattativo, col fine di mantenere un perfetto allineamento sul residuo ricostruito fra codificatore e decodificatore: l'allineamento e' assolutamente necessario per il corretto funzionamento della parte LTP. 5.4 Decodificatore Lo schema del decodificatore LTP-RPE e' riportato in figura 12. Il decodificatore compie le operazioni inverse del codificatore: il blocco RPE riceve le informazioni (posizione del primo campione e ampiezze dei 13 impulsi) relative alla sottotrama decimata, e calcola una sottotrama decimata ricostruita s'[n]; il blocco LTP ricostruisce, a partire dal codebook e dai valori di ritardo e guadagno ricevuti dal codificatore la trama di predizione LTP l[n]. Sommando le due si ottiene una sottotrama di residuo ricostruito r'[n] = s'[n]+l[n], che viene usata come ingresso per il filtro di sintesi. All' uscita del filtro di sintesi, nel blocco POST di postprocessing, viene effettuata una deenfasi sul segnale per compensare la preenfasi effettuata nel codificatore, ed ottenere cosi' una sottotrama di segnale sintetico x'[n]. Il filtro di sintesi e' calcolato a partire dai parametri LPC ricevuti, e viene aggiornato ad ogni trama (cioe' ogni 4 sottotrame). Il residuo ricostruito r'[n] viene 23 Codifica del Segnale Vocale utilizzato anche per aggiornare il codebook, in modo da mantenere l' allineamento col codebook del codificatore. La velocita' di trasmissione finale e' cosi' calcolabile: essendo le trame da 20 millisecondi vengono analizzate 50 trame/sec. Per ogni trama sono usati: 36 bit per la trasmissione dei coefficienti LPC; 4x(7+2)=36 bit per la trasmissione del guadagno e del ritrdo della sezione LTP; 4x(2+45)=188 bit per la posizione e le ampiezze della trama decimata; ogni trama richiede dunque 260 bit, per un totale di 260x50=13 Kb/sec. RECC RPE LTP LPC s'[n] RPE x'[n] l[n] LTP 1/(1-A(z)) POST a'[k] D G' D D rx3 rx2 D r'[n] rx1 Codebook Adattativo Figura 12: schema di un decodificatore LTP-RPE. 24 Codifica del Segnale Vocale 6. Bibliografia Per una bibliografia di base sulla codifica del segnale vocale segnaliamo innanzi tutto due testi fondamentali, [1,2]; in queste monografie, di carattere generale, sono esposte le basi della elaborazione e rappresentazione del segnale: i sistemi di produzione e percezione, la predizione lineare, i codificatori APC e il Vocoder sono esaurientemente trattati, assieme a numerosi altri argomenti. Un ottimo articolo introduttivo alla predizione lineare e' [3]. Una monografia recente, specifica sulla codifica, in cui sono affrontati anche i codificatori di nuova generazione, e' [4], mentre una sintetica panoramica sullo stato dell' arte puo' essere trovata in [5]. Il codificatore LTP-RPE e' ben descritto in [6] assieme al sistema GSM. Per quanto riguarda le tecniche di quantizzazione, un testo completo e' [7], mentre in [8] e' possibile trovare un' introduzione alla quantizzazione vettoriale. [1] Markel J. D., A.H. Gray: "Linear prediction of speech", Springer-Verlag - 1976 [2] Rabiner L. R., R. V. Shafer: "Digital processing of speech signals", Prenctice Hall 1978 [3] Makhoul J.: "Linear prediction: a tutorial review", IEEE Proc. 63, pp. 561,580 - 1975 [4] Kondoz A. M.: "Digital speech", Wiley - 1994. [5] Gersho A.: "Advances in speech coding", Proceedings of the IEEE, vol. 82, no. 6, pp. 900, 918 - 1994 [6] Hanzo L., R. Steele: "The Pan-European mobile radio system", Europ. Trans. on Telecom. ETT, vol. 5, no. 2, pp. 245, 260 - 1994 [7] Gersho A., R. M. Gray: "Vector quantization and signal compression", Kluwer Academic Publishers - 1992 [8] Makhoul J., S, Roucos, H. Gish: "Vector quantization in speech coding", Proceedings of the IEEE, vol. 72, no. 11, pp. 1551, 1588 - 1985 25