20.05.2013 Views

Capitolo 8 Analisi dei suoni

Capitolo 8 Analisi dei suoni

Capitolo 8 Analisi dei suoni

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Capitolo</strong> 8<br />

<strong>Analisi</strong> <strong>dei</strong> <strong>suoni</strong><br />

versione 2004<br />

8.1 Introduzione<br />

In questo capitolo si descrivono i principali metodi di analisi del suono con lo scopo di estrarre informazione<br />

dal suono. Nei capitoli sui modelli del suono, lo scopo era quello di ottenere delle rappresentazioni<br />

che ne consentissero una auspicabilmente completa ricostruzione, almeno dal punto di<br />

vista percettivo o operativo. Ai modelli erano quindi associati metodi di analisi, per individuare i<br />

parametri <strong>dei</strong> modelli, che ne consentissero questa descrizione senza perdere, per quanto possibile<br />

nessuna caratteristica acustico o timbrica del suono. Spesso infatti i modelli con i parametri individuati,<br />

vengono usati per la sintesi o trasformazione <strong>dei</strong> <strong>suoni</strong>. Ad esempio dalla rappresentazione<br />

mediante modelli spettrale si riesce a ottenere variazioni di durata e altezza molto naturali.<br />

Se lo scopo è invece quello di estrarre informazione dal suono, allora si vuole scartare tutto quello<br />

che non è rilevante al proprio scopo. Si parla allora di estrazione di caratteristiche (feature extraction).<br />

I passi principali per la estrazione di informazione sono pre-elaborazione del suono, selezione <strong>dei</strong><br />

frames mediante finestre, estrazione di caratteristiche, post-elaborazione.<br />

• La prima fase di pre-elaborazione consiste nel modificare il segnale, in modo ad facilitare gli<br />

algoritmi di estrazione delle caratteristiche. Ad esempio, riduzione del rumore, equalizzazione,<br />

filtraggio passa basso. Nei <strong>suoni</strong> vocali si usa spesso la pre-enfasi mediante un filtro passalto<br />

per appiattire lo spettro, cioè per avere una distribuzione più omogenea dell’energia nelle varie<br />

zone dello spettro. Infatti la voce ha un andamento spettrale di tipo passabasso.<br />

• Il secondo passo consiste nel dividere il segnale in blocchi (detti frames) parzialmente sovrapposti<br />

ed applicare una finestra per ogni blocco, come discusso nei modelli spettrali.<br />

• Il terzo passo consiste nel ricavare, per ogni frame un vettore di caratteristiche, con gli algoritmi<br />

descritti nelle prossime sezioni.<br />

• Infine nella fase di post-elaborazione, si scelgono le caratteristiche più significative dal vettore,<br />

eventualmente pesandole diversamente, per dare loro maggiore o minor importanza. Ad esempio<br />

si può pesare meno i primi coefficienti mel-cepstrali, se è presente un rumore a bassa<br />

8.1


8.2 CAPITOLO 8. ANALISI DEI SUONI<br />

frequenza. Infine spesso i vettori delle caratteristiche sono normalizzati rispetto al tempo, in<br />

modo ad avere media nulla. questa normalizzazione costringe i vettori ad essere nello stesso<br />

ordine di grandezza numerica.<br />

I metodi di analisi procedono direttamente dal segnale rappresentato nel tempo oppure derivano una<br />

rappresentazione dello spettro. Nel secondo caso si inizia applicando le tecniche viste, quando sono<br />

stati descritti i modelli spettrali e i loro derivati come parte armonica + parte stocastica, parte armonica<br />

+ rumore + transitori si ottiene una rappresentazione a basso livello, che costituisce la premessa per<br />

la estrazione di parametri e attributi a livello superiore. In questo capitolo verranno prima presentati<br />

alcuni metodi base per la stima di parametri nel dominio temporale, poi verrà discusso l’importante<br />

problema della stima dell’inviluppo spettrale. Verranno quindi presentati vari descrittori di parametri<br />

e attributi a vari livelli ricavabili da queste rappresentazioni e utilizzabili per la descrizione <strong>dei</strong> <strong>suoni</strong> e<br />

per un’ulteriore analisi volta a separare e comprendere i <strong>suoni</strong> e la loro organizzazione. Infine verranno<br />

presentati alcuni algoritmi base per la determinazione dell’inizio (onset) degli eventi musicali,<br />

8.2 Parametri nel dominio del tempo<br />

Nell’ambito dell’elaborazione del segnale è spesso conveniente ricorrere all’uso di parametri che ne<br />

descrivano alcune caratteristiche fondamentali; ciò è importante in molti casi di archiviazione o trattamento<br />

del suono, perchè elimina le ridondanze presenti nel segnale audio e permette di ottenere<br />

una efficiente rappresentazione e quindi una semplificazione nella manipolazione <strong>dei</strong> dati. Un aspetto<br />

importante in molte applicazioni è la variazione <strong>dei</strong> valori di questi parametri nel tempo (per esempio<br />

nella sintesi del parlato); nel seguito, quindi, tratteremo i metodi applicabili al segnale audio nel dominio<br />

del tempo cioè operando direttamente sulla sua forma d’onda. I risultati che otterremo saranno<br />

esemplificati mediante l’uso di procedure specifiche realizzate con MATLAB e applicate a segnali per<br />

lo più vocali, anche se i risultati trovati hanno validità del tutto generale.<br />

Bisogna dire fin d’ora che questi metodi (usati per esempio per discriminare il rumore di fondo<br />

dal parlato, oppure per distinguere i <strong>suoni</strong> vocalizzati da quelli non vocalizzati) non danno risultati<br />

assolutamente certi sull’informazione che il segnale porta con sé e che sovente vengono usati in combinazione.<br />

Il loro vantaggio sta nella facilità di implementazione e nelle modeste capacità di calcolo<br />

richieste.<br />

L’ipotesi che ora facciamo è che le proprietà del segnale audio cambino lentamente nel tempo (almeno<br />

rispetto al periodo di campionamento); questo ci permette di definire una serie di parametri nel<br />

dominio del tempo per cui brevi segmenti di segnale (frames) vengono elaborati come se fossero <strong>suoni</strong><br />

con proprietà costanti all’interno del frame. Se consideriamo per esempio il segnale vocale, questa assunzione<br />

si può giustificare con il fatto che nella generazione delle parole contribuiscono sia le corde<br />

vocali sia tutte le modificazioni dell’apparato fonatorio (laringe, lingua, bocca) che avvengono con<br />

una rapidità non molto elevata tanto da poterle ritenere costanti entro i 100-200ms.<br />

Nel seguito per il calcolo <strong>dei</strong> parametri useremo alcune sequenze di campioni audio che possono<br />

essere importate come vettori in MATLAB direttamente da file audio in formato PCM mono (.WAV)<br />

usando i comandi:<br />

[s,fS]=wavread(’finesunn.wav’);<br />

% s --> vettore <strong>dei</strong> campioni del segnale


8.2. PARAMETRI NEL DOMINIO DEL TEMPO 8.3<br />

% fS --> frequenza di campionamento<br />

% disegna s<br />

s1=s/max(abs(s)); % normalizza al valore massimo<br />

tempi = (1/fS)*[1:max(size(s1))];<br />

plot(tempi,s1); xlabel(’time (s)’); ylabel(’s(t)’);<br />

8.2.0.0.1 Windowing La finestra temporale stabilisce la durata del singolo frame; la sua scelta è<br />

un compromesso tra tre fattori: (1) deve essere abbastanza breve in modo che le proprietà del suono<br />

non cambino significativamente al suo interno; (2) deve essere abbastanza lunga da poter calcolare il<br />

parametro che si vuole stimare (utile anche per ridurre l’effetto di un eventuale rumore sovrapposto<br />

al segnale); (3) il susseguirsi delle finestre dovrebbe coprire interamente il segnale (in questo caso<br />

il frame rate del parametro che andiamo a calcolare deve essere come minimo l’inverso della durata<br />

della finestra).<br />

La finestra più semplice è quella rettangolare:<br />

<br />

1 per 0 ≤ n ≤ N − 1<br />

r(n) =<br />

0 altrimenti<br />

Molte applicazioni usano finestre più lunghe del necessario a soddisfare le ipotesi di stazionarietà,<br />

cambiandone però la forma per enfatizzare i campioni centrali (figura 8.1); per esempio, se un segnale<br />

vocale è approssimativamente stazionario su 10ms, si può usare una finestra da 20ms nella quale<br />

i campioni <strong>dei</strong> 10ms centrali pesano maggiormente rispetto ai primi e ultimi 5ms. La ragione per<br />

pesare di più i campioni centrali è relativa all’effetto che la forma della finestra ha sui parametri di<br />

uscita. Quando la finestra viene spostata nel tempo per analizzare frames successivi di un segnale,<br />

ci possono essere delle grandi oscillazioni <strong>dei</strong> parametri calcolati se si usa una finestra rettangolare<br />

(r(n)); per esempio, una semplice misura dell’energia ottenuta sommando il quadrato <strong>dei</strong> campioni<br />

del segnale è soggetta a grandi fluttuazioni non appena la finestra si sposta per includere o escludere,<br />

all’inizio o alla fine, campioni con grandi ampiezza. Un’alternativa alla finestra rettangolare (8.1) è la<br />

finestra di Hamming:<br />

2πn<br />

0.54 − 0.46 cos(<br />

h(n) =<br />

N−1 ) per 0 ≤ n ≤ N − 1<br />

0 altrimenti<br />

Affusolando gli estremi della finestra evito di avere grandi effetti sui parametri anche se ho repentini<br />

cambi nel segnale.<br />

Alcuni <strong>dei</strong> parametri nel dominio del tempo possono essere rappresentati matematicamente nella<br />

forma:<br />

∞<br />

Q(n) = T [s(m)]w(n − m) = T [s] ∗ w(n) (8.3)<br />

m=−∞<br />

dove T [·] è una trasformazione, anche non lineare, pesata da una finestra w(n). Prima di essere<br />

elaborato, il segnale può venire eventualmente filtrato per isolare la banda di frequenze desiderata.<br />

M-8.1<br />

Write a MATLAB function for a generic time domain processing.<br />

M-8.1 Solution<br />

(8.1)<br />

(8.2)


8.4 CAPITOLO 8. ANALISI DEI SUONI<br />

1<br />

Rettangolare<br />

Hanning<br />

Triangolare<br />

Hamming<br />

0<br />

0 500<br />

campioni (n)<br />

1000<br />

s(n)<br />

1<br />

0<br />

w(2N−n) w(3N−n) w(4N−n)<br />

−1<br />

0 500<br />

campioni (n)<br />

1000<br />

Figura 8.1: a sinistra vari tipi di finestre; a destra tre finestre sovrapposte al segnale s(n), spostate<br />

rispetto all’origine di 2N, 3N e 4N campioni<br />

function [Q,tempi] = st_processing(s,frame,overlap,fs,finestra)<br />

% Q --> convoluzione di s con la finestra w<br />

% tempi --> scala <strong>dei</strong> tempi di Q<br />

%<br />

% s --> segnale da elaborare<br />

% frame --> durata in secondi di un frame<br />

% overlap --> percentuale di sovrapposizione <strong>dei</strong> frames<br />

% fs --> frequenza di campionamento di s<br />

% finestra --> nome della finestra che si vuole usare<br />

Ns = max(size(s)) % numero di campioni di s<br />

Nframe = floor(fs * frame) % numero di campioni per frame<br />

Ndiff = floor(Nframe * (1 - overlap/100)) % numero di campioni tra frames<br />

L = floor((Ns-Nframe)/Ndiff); % numero di finestre<br />

switch lower(finestra)<br />

case ’hamming’<br />

window = hamming(Nframe);<br />

case ’hanning’<br />

window = hanning(Nframe);<br />

case ’bartlett’<br />

window = bartlett(Nframe);<br />

case ’triangolare’<br />

window = triang(Nframe);<br />

case ’rettangolare’<br />

window = ones(Nframe,1)/Nframe;<br />

otherwise<br />

window = ones(Nframe,1)/Nframe;<br />

end;<br />

for n=1:L<br />

inizio = (n-1) * Ndiff + 1; % inizio della finestra


8.2. PARAMETRI NEL DOMINIO DEL TEMPO 8.5<br />

tempi(n,1) = n* Ndiff/fs;<br />

Q(n,1) = sum(s(inizio:inizio+Nframe-1,1) .* window);<br />

end;<br />

Nell’equazione 8.3, w(n) può essere sia un filtro FIR a risposta finita (per es. la finestra rettangolare<br />

o quella di Hamming) che ci permette di ridurre il frame rate risparmiando quindi calcoli, sia un<br />

filtro IIR; un esempio di finestra a risposta infinita è<br />

<br />

an per n ≥ 0<br />

w(n) =<br />

(8.4)<br />

0 per n < 0<br />

con 0 < a < 1; un simile filtro può venire implementato utilizzando una semplice equazione alle<br />

differenze, infatti<br />

Q(n) = aQ(n − 1) + T [s(n)] (8.5)<br />

che deve essere calcolato per ogni campione del segnale di ingresso.<br />

8.2.1 Short-Time Average Energy e Magnitude<br />

Per un segnale discreto la Short-Time Average Energy è definita come:<br />

E(n) = 1<br />

N<br />

n<br />

i=n−N+1<br />

ovvero equivale a Q(n) dell’equazione 8.3 ponendo T [·] = (·) 2 . Nel caso particolare dell’analisi<br />

della voce le sue grandi variazione temporali in ampiezza tra <strong>suoni</strong> vocalizzati e non, come pure tra<br />

fonemi diversi, permette la segmentazione del parlato nei sistemi automatici di riconoscimento vocale:<br />

aiuta per esempio a determinare l’inizio e la fine delle parole isolate (nei sistemi di trasmissione che<br />

multiplexano molte conversazioni, delimitare le parole significa evitare di trasmettere le pause).<br />

Un inconveniente della Short-Time Average Energy così come l’abbiamo precedentemente definita<br />

è la sua sensibilità a grandi ampiezze di segnale (i campioni compaiono elevati al quadrato); un<br />

semplice modo per alleviare questo problema è quello di introdurre la Short-Time Average Magnitude<br />

così definita<br />

M(n) = 1<br />

N<br />

equivalente a porre T [·] = | · | nell’equazione 8.3<br />

n<br />

i=n−N+1<br />

s(i) 2<br />

(8.6)<br />

|s(i)| (8.7)<br />

M-8.2<br />

Write two MATLAB functions to compute Short-Time Average Energy e Magnitude.<br />

M-8.2 Solution<br />

Nframe=100; % numero di campioni per frame<br />

Ns=max(size(s)); % numero di campioni del segnale<br />

for n=1:Ns; % calcola la Short-Time Average Energy<br />

E(n,1)=sum(s(max(1,n-Nframe+1):n).*...


8.6 CAPITOLO 8. ANALISI DEI SUONI<br />

s(t)<br />

E(t)<br />

M(t)<br />

1<br />

0<br />

−1<br />

0 0.2 0.4 0.6 0.8 1 1.2 1.4<br />

1<br />

0.5<br />

0<br />

0 0.2 0.4 0.6 0.8 1 1.2 1.4<br />

1<br />

0.5<br />

0<br />

0 0.2 0.4 0.6 0.8 1 1.2 1.4<br />

time (s)<br />

Figura 8.2: In alto l’espressione (/FINE SUNNY WEATHER/) con sotto le corrispondenti Short-Time<br />

Average Energy e Short-Time Average Magnitude normalizzate al valore massimo, calcolate usando<br />

finestre rettangolari da N=100 campioni e frame rate pari alla frequenza di campionamento del segnale<br />

(8kHz).<br />

end;<br />

s(max(1,n-Nframe+1):n))/Nframe;<br />

for n=1:Ns; % calcola la Short-Time Average Magnitude<br />

M(n,1)=sum(abs(s(max(1,n-Nframe+1):n)))/Nframe;<br />

end;<br />

% disegna E(t) e M(t)<br />

E=E/max(E); % normalizza E(t)<br />

tempi = (1/fS)*[1:max(size(E))]; subplot(2,1,1);<br />

plot(tempi,E); xlabel(’time (s)’); ylabel(’E(t)’);<br />

M=M/max(M); % normalizza M(t)<br />

tempi = (1/fS)*[1:max(size(M))]; subplot(2,1,2);<br />

plot(tempi,M); xlabel(’time (s)’); ylabel(’M(t)’);<br />

La figura 8.2 mostra un esempio di segnale vocale con l’energia corrispondente, calcolata usando<br />

l’algoritmo appena definito, mentre la figura 8.3 mostra come la scelta della finestra influenzi la<br />

Short-Time Average Energy del segnale; nelle figure i grafici sono normalizzati al valore massimo ma


8.2. PARAMETRI NEL DOMINIO DEL TEMPO 8.7<br />

s(t)<br />

Energy(t)<br />

Energy(t)<br />

Energy(t)<br />

1<br />

0<br />

−1<br />

0<br />

1<br />

0.2 0.4 0.6 0.8 1 1.2 1.4<br />

0.5<br />

lunghezza finestra = 5ms<br />

overlap = 50%<br />

0<br />

0<br />

1<br />

0.2 0.4 0.6 0.8 1 1.2 1.4<br />

0.5<br />

0<br />

0<br />

1<br />

0.2 0.4 0.6 0.8 1 1.2 1.4<br />

0.5<br />

lunghezza finestra = 10ms<br />

overlap = 40%<br />

lunghezza finestra = 30ms<br />

overlap = 20%<br />

0<br />

0 0.2 0.4 0.6 0.8 1 1.2 1.4<br />

time (s)<br />

Figura 8.3: In alto l’espressione /FINE SUNNY WEATHER/ con sotto la Short-Time Average<br />

Energy calcolata con finestre di Hamming di diverse lunghezze, usando la funzione<br />

st processing(s,frame,overlap,fs,finestra) ; si noti come diventi smussata per<br />

finestre più lunghe.<br />

bisogna fare attenzione se si vuole confrontare uno stesso parametro applicato a segnali diversi, nel<br />

qual caso l’eventuale normalizzazione va fatta rispetto ad un valore comune.<br />

8.2.2 Short-Time Average Zero-Crossing Rate<br />

Normalmente per ottenere informazioni sul contenuto spettrale della voce si ricorre alla trasformata<br />

di Fourier; per alcune applicazioni un semplice parametro come la Zero-Crossing Rate (ZCR) dà una<br />

adeguata informazione spettrale ad un basso costo elaborativo. La ZCR corrisponde al numero di<br />

passaggi per lo zero del segnale che matematicamente si esprime come il cambiamento di segno di<br />

due campioni successivi. Per segnali a banda stretta (es. sinusoidi o la singola uscita di un banco di<br />

filtri passa-banda), dalla ZCR si ricava la frequenza fondamentale (F0) del segnale:<br />

F 0 =<br />

ZCR ∗ FS<br />

2<br />

(8.8)


8.8 CAPITOLO 8. ANALISI DEI SUONI<br />

s(t)<br />

1<br />

0.5<br />

0<br />

−0.5<br />

ZCR/ms(t)<br />

−1<br />

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8<br />

8<br />

6<br />

4<br />

2<br />

0<br />

0 0.1 0.2 0.3 0.4<br />

time (s)<br />

0.5 0.6 0.7 0.8<br />

Figura 8.4: Zero-Crossing Rate (zero crossing al ms) dell’espressione /SONO/ calcolata con una<br />

finestra rettangolare di N=100 campioni e frame rate pari a quella del segnale (11kHz); si noti come si<br />

riesca a discriminare la /S/ iniziale (suono non vocalizzato) dal resto della parola (suono vocalizzato).<br />

dove FS è la frequenza di campionamento del segnale e ZCR è espressa in zero crossing per campione.<br />

Matematicamente ZCR = Q(n) se nell’equazione 8.3 pongo T [s(n)] = |sign(s(n))−sign(s(n−<br />

1))|/2 e scalo la finestra w(n) di un fattore 1/N; ottengo così:<br />

Z(n) = 1<br />

N<br />

n<br />

m=n−N+1<br />

dove il segno di s(n) è definito come:<br />

sign(s(n)) =<br />

|sign[s(m)] − sign[s(m − 1)]|<br />

w(n − m) (8.9)<br />

2<br />

1 per s(n) ≥ 0<br />

−1 altrimenti<br />

M-8.3<br />

Write a MATLAB function for Zero Crossing Rate computation.<br />

M-8.3 Solution<br />

Nframe = 100; % numero di campioni per frame<br />

Ns = max(size(s));<br />

for n = 1+Nframe:Ns; % calcola la Short-Time Average ZCR<br />

Z(n,1) = sum(abs(sign(s(n-Nframe+1:n))- ...<br />

sign(s(n-Nframe:n-1)))/2)/Nframe;<br />

end;<br />

(8.10)


8.2. PARAMETRI NEL DOMINIO DEL TEMPO 8.9<br />

Z=Z*fS/1000; % Zero-Crossing per ms<br />

% disegna Z(t):<br />

t = (1/fS)*[1:max(size(Z))];<br />

plot(t,Z); xlabel(’time (s)’); ylabel(’ZCR/ms(t)’);<br />

Nell’analisi vocale la ZCR può aiutare a determinare se il suono è vocalizzato oppure no (vedi<br />

figura 8.4); infatti il modello della generazione della voce suggerisce che l’energia della componente<br />

vocalizzata è concentrata al di sotto <strong>dei</strong> 3 kHz mentre quella della componente non vocalizzata si trova<br />

a frequenze più alte. Poichè la ZCR è in stretto rapporto con la distribuzione frequenziale di energia, ad<br />

alte ZCR corrispondono <strong>suoni</strong> non vocalizzati (unvoiced speech) mentre a basse ZCR <strong>suoni</strong> vocalizzati<br />

(voiced speech). Affiancata alla Short-Time Average Energy permette di individuare con precisione<br />

l’inizio e la fine delle parole soprattutto nei casi di <strong>suoni</strong> quali /S/ (vedi l’inizio della parola di figura<br />

8.4), /F/, /N/, /M/, /T/, /P/.<br />

M-8.4<br />

Implement a voiced-unvoiced detector as previously explained. Test it on real speech signals. Does<br />

it also work for voice - music detection? Why?<br />

A differenza della Short-Time Average Energy la ZCR è molto sensibile al rumore (per es. quello<br />

<strong>dei</strong> sistemi digitali, degli ADC ma anche <strong>dei</strong> 60Hz della rete di alimentazione) per cui nel caso di<br />

conversione analogico-digitale diventa utile filtrare il segnale con un filtro passa-banda, invece del<br />

solo filtro anti-aliasing.<br />

M-8.5<br />

Come nel caso della Short-Time Average Energy e della Short-Time Average Magnitude anche<br />

la Zero-Crossing Rate può essere calcolata con una frequenza molto più bassa di quella di campionamento<br />

del segnale (vedi figura 8.5). Calcolare Zero-Crossing Rate ricorrendo alla funzione<br />

st processing vista prima.<br />

M-8.5 Solution<br />

Ns = max(size(s));<br />

finestra = ’hamming’;<br />

% calcola la Short-Time Average Energy<br />

[E,tE]=st_processing(s.ˆ2,0.012,50,fS,finestra);<br />

% calcola la Short-Time Average Magnitude<br />

[M,tM]=st_processing(abs(s),0.012,50,fS,finestra);<br />

% calcola la Short-Time Average ZCR (ZC per campione)<br />

[Z,tZ]=st_processing([0; 0.5*abs(sign(s(2:Ns))-sign(s(1:Ns-1)))],...<br />

0.012,50,fS,’rettangolare’);<br />

% disegna i segnali<br />

E=E/max(E)*0.8; % normalizza<br />

subplot(3,1,1); plot(tE,E); xlabel(’time (s)’); ylabel(’Energy(t)’);<br />

M=M/max(M)*0.8; % normalizza<br />

subplot(3,1,2); plot(tM,M); xlabel(’time (s)’); ylabel(’Magnitude(t)’);<br />

Z=Z*fS/1000; % ZCR per ms<br />

subplot(3,1,3); plot(tZ,Z); xlabel(’time (s)’); ylabel(’ZCR/ms(t)’);


8.10 CAPITOLO 8. ANALISI DEI SUONI<br />

Energy(t)<br />

Magnitude(t)<br />

ZCR/ms(t)<br />

1<br />

0.5<br />

0<br />

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9<br />

1<br />

0.5<br />

0<br />

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9<br />

10<br />

5<br />

0<br />

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9<br />

time (s)<br />

Figura 8.5: Short-Time Average Energy , Short-Time Average Magnitude e Zero-Crossing Rate dell’espressione<br />

/SONO/ campionata a 11kHz ed elaborata con frame di 12.5ms e overlap tra i frames del<br />

50%; riducendo l’overlap e allungando le finestre temporali (frame) i parametri nel dominio del tempo<br />

perdono in risoluzione temporale ma conservano ugualmente le caratteristiche del segnale (vedere per<br />

un confronto la Zero-Crossing Rate della figura 8.4).<br />

8.2.3 Short-Time Autocorrelation Function<br />

Il segnale che corrisponde all’anti-trasformata di Fourier della densità spettrale di energia (Cs(f)) è<br />

l’autocorrelazione del segnale; in formule<br />

Per un segnale discreto è definita come<br />

F[φ(k)] = Cs(f) = |S(f)| 2<br />

φ(k) =<br />

∞<br />

m=−∞<br />

(8.11)<br />

s(m)s(m + k) (8.12)<br />

L’autocorrelazione conserva le informazioni che riguardano le armoniche del segnale, l’ampiezza<br />

delle formanti e la loro frequenza. Dall’equazione 8.12 si vede che φ(k) misura in un certo senso la<br />

somiglianza del segnale con la sua versione traslata; avrà quindi valori più grandi in corrispondenza<br />

<strong>dei</strong> ritardi k per cui s(m) e s(m + k) hanno forme d’onda simili. Alcune importanti proprietà di φ(k)<br />

sono le seguenti:


8.2. PARAMETRI NEL DOMINIO DEL TEMPO 8.11<br />

s(n)<br />

R 0 (k)<br />

1<br />

0.5<br />

0<br />

−0.5<br />

−1<br />

0 100 200 300 400<br />

campioni(n)<br />

500 600 700 800<br />

1<br />

0.5<br />

0<br />

−0.5<br />

0 100 200 300 400<br />

k<br />

500 600 700 800<br />

Figura 8.6: Frame da 800 campioni di suono vocalizzato campionato a 8kHz e sua Short-Time<br />

Autocorrelation Function<br />

1. è una funzione pari: φ(k) = φ(−k)<br />

2. per k = 0 assume il suo massimo valore: φ(0) ≥ |φ(k)|∀k<br />

3. φ(0) corrisponde all’energia del segnale (o alla potenza media se i segnali sono periodici o non<br />

deterministici)<br />

4. se il segnale è periodico con periodo P anche l’autocorrelazione è periodica con lo stesso<br />

periodo: φ(k) = φ(k + P ) (proprietà importante se si vuole stimare la periodicità del segnale)<br />

La Short-Time Autocorrelation Function è ottenuta dall’equazione 8.12 filtrando il segnale con<br />

delle opportune finestre temporali w(n):<br />

Rn(k) =<br />

∞<br />

m=−∞<br />

s(m)w(n − m)s(m + k)w(n − k − m) (8.13)<br />

Con un opportuno cambio di variabili l’equazione precedente può essere riscritta nella forma<br />

Rn(k) =<br />

∞<br />

m=−∞<br />

dove w ′ (n) = w(−n); se ora w ′ (n) ha durata finita N ottengo<br />

Rn(k) =<br />

<br />

[s(n + m)w ′ (m)][s(n + m + k)w ′ (k + m)] (8.14)<br />

N−1−k<br />

[s(n + m)w ′ (m)][s(n + m + k)w ′ (k + m)] (8.15)<br />

m=0<br />

M-8.6<br />

Write a MATLAB function for computing the Short-Time Autocorrelation Function .


8.12 CAPITOLO 8. ANALISI DEI SUONI<br />

s(n)<br />

R 0 (k)<br />

1<br />

0.5<br />

0<br />

−0.5<br />

−1<br />

0 100 200 300 400<br />

campioni(n)<br />

500 600 700 800<br />

1<br />

0.5<br />

0<br />

−0.5<br />

−1<br />

0 100 200 300 400<br />

k<br />

500 600 700 800<br />

Figura 8.7: Frame di suono non vocalizzato /S/ campionato a 11kHz e sua Short-Time Autocorrelation<br />

Function ; si noti come assomigli ad un rumore e come si differenzi da quella di figura 8.6.<br />

M-8.6 Solution<br />

Ns = max(size(s)); % numero di campioni<br />

window = ones(Ns,1); % finestra rettangolare<br />

s_w = s.*window;<br />

for k = 1:Ns-1; % calcola la Short-Time Autocorrelation<br />

R0(k) = sum(s_w(1:Ns-k).* ...<br />

s_w(k+1:Ns));<br />

end;<br />

% disegna R0(k):<br />

R0=R0/max(abs(R0)); % normalizza R0(k)<br />

plot(1:max(size(R0)),R0); xlabel(’k’); ylabel(’R_0(k)’);<br />

La Short-Time Autocorrelation Function trova applicazione nell’estrazione del pitch e nella discriminazione<br />

tra suono vocalizzato (figura 8.6) e non vocalizzato (figura 8.7). Nella determinazione<br />

di F0, Rn(k) deve essere calcolata per diversi valori di k prossimi al numero di campioni del periodo<br />

di pitch (che dura da un minimo di 3ms per la voce femminile a un massimo di 20ms per quella<br />

maschile); se per esempio desidero avere una risoluzione del periodo di pitch di 0.1ms con un segnale<br />

campionato a 10kHz devo calcolare Rn(k) per 170 valori di k. In questi casi la finestra w(n) deve<br />

avere una durata almeno doppia rispetto al periodo del segnale che si vuole stimare.


8.2. PARAMETRI NEL DOMINIO DEL TEMPO 8.13<br />

AMDF(k)<br />

1<br />

0.9<br />

0.8<br />

0.7<br />

0.6<br />

0.5<br />

0.4<br />

0.3<br />

0.2<br />

0.1<br />

0<br />

0 100 200 300 400 500<br />

k<br />

Figura 8.8: Short-time Average Magnitude Difference Function del frame di suono vocalizzato di<br />

figura 8.6.<br />

AMDF(k)<br />

1<br />

0.9<br />

0.8<br />

0.7<br />

0.6<br />

0.5<br />

0.4<br />

0.3<br />

0.2<br />

0.1<br />

0<br />

0 50 100 150 200 250<br />

k<br />

Figura 8.9: Short-Time AMDF del frame /S/ di figura 8.7.<br />

8.2.4 Short-Time Average Magnitude Difference Function<br />

Un’alternativa alla Short-Time Autocorrelation Function per la stima di F0 è la Short-time Average<br />

Magnitude Difference Function (AMDF). Per un segnale periodico di periodo P ho che la successione<br />

d(n) = s(n) − s(n − k) (8.16)<br />

è uguale a zero per k = 0, ±P, ±2P, . . ., quindi invece di moltiplicare s(m) per s(m − k) posso<br />

considerare il valore assoluto della loro differenza:<br />

γn(k) =<br />

∞<br />

m=−∞<br />

|s(n + m)w(m) − s(n + m − k)w(m − k)| (8.17)<br />

dalla quale si può ricavarne una più semplice versione prendendo w(n) rettangolare di durata N:<br />

AMDF (k) =<br />

N−1 <br />

m=k<br />

|s(m) − s(m − k)| (8.18)<br />

M-8.7<br />

Write a MATLAB function for Short-time Average Magnitude Difference Function computing.


8.14 CAPITOLO 8. ANALISI DEI SUONI<br />

s(n)<br />

R 0 (k)<br />

1<br />

0.5<br />

0<br />

−0.5<br />

−1<br />

−1.5<br />

0 50 100 150 200 250 300 350<br />

campioni(n)<br />

1<br />

0.5<br />

0<br />

−0.5<br />

k M =67<br />

−1<br />

0 50 100 150 200 250 300 350<br />

k<br />

Figura 8.10: Frame del fonema /OH/ (350 valori campionati a 8kHz) e sua Short-Time Autocorrelation<br />

Function ; il secondo massimo è posizionato a kM = 67 da cui si può ricavare la periodicità della<br />

frequenza fondamentale del segnale (F0 ≈ 120Hz).<br />

M-8.7 Solution<br />

Ns=max(size(s)); % numero di campioni<br />

window=ones(ceil(Ns/2)+1,1); % finestra rettangolare<br />

for k=1:floor(Ns/2)-1; % calcola la Short-Time AMDF<br />

STAMDF(k) = sum(abs(s(floor(Ns/2):Ns).* window - ...<br />

s(floor(Ns/2)-k:Ns-k).* window));<br />

end;<br />

% disegna STAMDF(t):<br />

STAMDF=STAMDF/max(STAMDF); % normalizza STAMDF(t)<br />

plot(1:max(size(STAMDF)),STAMDF); xlabel(’k’); ylabel(’AMDF(k)’);<br />

Le figure 8.8 e 8.9 mostrano l’andamento tipico della Short-Time AMDF per diversi frame: l’informazione<br />

che la Short-Time Autocorrelation Function dava sulla spaziatura temporale tra i massimi,<br />

corrispondente al reciproco della frequenza fondamentale, può essere ricavata ora considerando<br />

i minimi della Short-Time AMDF. Dal punto di vista computazionale se si usa hardware a virgola<br />

fissa il calcolo della Short-time Average Magnitude Difference Function è più veloce di quello della<br />

Short-Time Autocorrelation Function .


8.2. PARAMETRI NEL DOMINIO DEL TEMPO 8.15<br />

AMDF(k)<br />

1<br />

0.9<br />

0.8<br />

0.7<br />

0.6<br />

0.5<br />

0.4<br />

k m =66<br />

0.3<br />

0 20 40 60 80 100 120 140 160 180<br />

k<br />

Figura 8.11: Short-Time AMDF del frame /OH/ di figura 8.10; qui la periodicità si ricava andando a<br />

cercare il secondo minimo (km = 66).<br />

8.2.5 Stima del pitch (F0)<br />

Determinare la frequenza fondamentale (F0) o il pitch di un segnale è un problema in molte applicazioni.<br />

Il suono vocalizzato viene generato dalla vibrazione delle corde vocali e il pitch si riferisce<br />

alla frequenza fondamentale di questa vibrazione. Dalla Short-Time Autocorrelation Function ricavo<br />

l’informazione sulla periodicità del segnale andando a trovare kM , cioè il primo massimo dopo quello<br />

per k = 0:<br />

F 0 = FS<br />

kM<br />

(8.19)<br />

dove FS è la frequenza di campionamento del segnale (vedi figura 8.10). Utilizzando invece la Short-<br />

Time AMDF devo considerare il primo minimo dopo quello per k = 0 (km nella figura 8.11).<br />

Tipicamente uno stimatore del pitch effettua tre operazioni:<br />

• pre-processing: filtraggio e semplificazione del segnale attraverso la riduzione <strong>dei</strong> dati;<br />

• estrazione del periodo;<br />

• post-procesing: correzione di eventuali errori.<br />

L’estrazione del periodo mediante l’individuazione <strong>dei</strong> massimi dell’autocorrelazione fa uso di trasformazioni<br />

non lineari del segnale (es. center clipping).<br />

M-8.8<br />

Compute the pitch with Short-Time Autocorrelation Function .<br />

M-8.8 Solution<br />

inizio=floor(fS*0.001); % salta il primo massimo<br />

[massimo,kM] = max(R0(inizio:max(size(R0))));<br />

kM=kM + inizio -1;<br />

F0=fS/kM;


8.16 CAPITOLO 8. ANALISI DEI SUONI<br />

M-8.9<br />

Compute the pitch with Short-time Average Magnitude Difference Function .<br />

M-8.9 Solution<br />

inizio=floor(fS*0.001); % salta il primo minimo<br />

[minimo,km] = min(STAMDF(inizio:max(size(STAMDF))));<br />

km=km + inizio -1;<br />

F0=fS/km;<br />

Bisogna tenere presente che talvolta il terzo massimo ha ampiezza maggiore del secondo nel<br />

qual caso, con le funzioni appena definite, sbaglieremmo la stima (che sarebbe quella di un’armonica<br />

della frequenza fondamentale); per questo motivo spesso si affiancano altri metodi per evitare errori<br />

grossolani.<br />

8.3 Stima dell’inviluppo spettrale<br />

L’inviluppo spettrale è considerato un elemento molto significativo nella caratterizzazione <strong>dei</strong> <strong>suoni</strong>,<br />

specie nella voce. Esse infatti sono caratterizzate da uno spettro armonico, cui è sovrapposto un<br />

inviluppo. Le zone in frequenza, in cui si concentra l’energia, sono in corrispondenza con le principali<br />

risonanze del tratto vocale (percorso del suono dalle corde vocali fino all’esterno della bocca). Queste<br />

risonanze, chiamate formanti, sono peculiari per la differenziazione e il riconoscimento delle vocali<br />

stesse (vedi fig. 8.12). Anche le varie famiglie di strumenti musicali sono spesso distinte tra loro da<br />

tipici inviluppi spettrali. Spesso, nelle trasformazioni del suono, si parla, anche se impropriamente, di<br />

cambiamento dell’altezza (pitch shifting) con preservazione del timbro, quando si preserva l’inviluppo<br />

spettrale.<br />

8.3.1 Stima dell’inviluppo spettrale mediante banco di filtri<br />

Una prima maniera consiste nel fare una approssimazione, mediante segmenti, dello spettro in ampiezza.<br />

Si selezionano i massimi e si congiungono con linee rette, oppure si possono prendere punti equispaziati<br />

sull’asse delle frequenze e si congiungono con segmenti. Le ascisse (frequenze) <strong>dei</strong> punti<br />

possono anche essere scelte su una scala logaritmica o altra spaziatura percettivamente significativa.<br />

Questo metodo è abbastanza flessibile, ma non molto preciso. Questi punti si possono ottenere<br />

mediante l’uso di un banco di filtri passabanda equispaziati (a banda costante), o distribuiti logaritmicamente<br />

sull’asse delle frequenze (cosidetti filtri a Q costante, dove Q è il rapporto tra la larghezza<br />

di banda, e la frequenza centrale del filtro). Un esempio sono i cosidetti filtri di ottava o di terza. In<br />

alcuni casi essi sono progettati per riprodurre il comportamento della coclea. dal punto di vista computazionale<br />

i filtri possono essere realizzati mediante FFT, calcolando prima lo spettro (in modulo) e<br />

poi sommando i contributi di ciascun bin frequenziale pesato dalla risposta in frequenza del r-esimo<br />

filtro. Se i filtri sono passabanda rettangolari, basta sommare i contributi <strong>dei</strong> bin appartenenti alla<br />

banda r-esima. Risulta cioè che l’energia Er(j) per il canale r-esimo del j-esimo frame è data da<br />

Er(j) = 1<br />

N<br />

<br />

|Xj(k)| 2<br />

k∈Br


8.3. STIMA DELL’INVILUPPO SPETTRALE 8.17<br />

(a) (b)<br />

Figura 8.12: rappresentazione <strong>dei</strong> baricentri delle vocali nel piano descritto dalla frequenza F 1 e F 2<br />

delle prime due formanti. Esse formano approssimativamente un triangolo (a). Frequenza delle prime<br />

formanti delle vocali inglesi (b).<br />

dove Br indica l’insieme delle componenti spettrali appartenenti al filtro r-esimo e N la dimensione<br />

della FFT. Talvolta il risultato è normalizzato (diviso) per la larghezza di banda; altre volte no. Questo<br />

dipende dall’uso che poi ne viene fatto.<br />

M-8.10<br />

Write a MATLAB function for the spectral envelope computing, with the filterbank approach. Try a<br />

filterbank of frequency linearly spaced filters and logarithmic spaced filters (e.g. third octave filters).<br />

M-8.11<br />

Write a MATLAB function for the spectral envelope computing, with the gamma tone filterbank approach.<br />

Look in the literature or on the web for gammatone filter definition. gamma tone filters<br />

simulate the behaviour of the cochlea.<br />

8.3.2 Stima dell’inviluppo spettrale mediante predizione lineare (LPC)<br />

Un’altro metodo consiste nel fare una approssimazione mediante predizione lineare (LPC) come visto<br />

nel capitolo sulla sintesi. In questo caso si stima un filtro a soli poli che approssima lo spettro. Quando<br />

l’ordine del filtro è basso, viene solo seguito l’inviluppo spettrale, trascurando la struttura fine dello<br />

spettro prodotta dalle periodicità del suono. Nella sezione 8.3.2.1 sono riportati alcuni esempi di<br />

analisi mediante predizione lineare (LPC).<br />

Di seguito sono riportati due metodi non lineari particolarmente efficaci, consistenti nel cosiddetto<br />

cepstrum e nella sua variante mel-cepstrum. Quest’ultimo metodo fornisce la parametrizzazione<br />

dell’inviluppo spettrale più efficace nel riconoscimento del parlato e degli strumenti musicali.


8.18 CAPITOLO 8. ANALISI DEI SUONI<br />

M-8.12<br />

Write a MATLAB function for the spectral envelope computing, with the LPC approach. Experiment<br />

different filter lengths p and compare with the original signal spectrum. Apply your function to<br />

different kinds of sounds: musicals, speech and environmental noises.<br />

M-8.13<br />

In LPC analysis, the position of formants (resonances) is related to the poles of the estimated<br />

transfer function. Factorize the denominator of the transfer function and estimate the frequency of<br />

the formants. Note that if θk is the argument of zk complex conjugate zero of the denominator, then<br />

its corresponding resonant frequency fk derives from θk = 2πfk/Fs; the formant bandwith Bk is<br />

related to the zero modulus by |zk| = exp(−πB/Fs).<br />

8.3.2.1 Esempi di analisi mediante predizione lineare (LPC)<br />

Figura 8.13: <strong>Analisi</strong> LPC della vocale /i/<br />

Nella fig. 8.13 è riportata l’analisi della vocale /i/ mediante predizione lineare (LPC), [tratto da<br />

J. D. Markel, Formant Trajectory Estimation from a Linear Least Squares Inverse Filter Formulation,<br />

Speech Communications Research Lab Monograph #7, Oct. 1971.] In fig. 8.13 (a) il frame del<br />

segnale cui è stata applicata la finestra di Hamming; (b) lo spettro del segnale; (c) lo spettro del filtro<br />

inverso; (d) l’inviluppo spettrale stimato come reciproco dello spettro del filtro inverso; (e) il residuo<br />

(eccitazione); (f) spettro del residuo. La frequenza di campionamento è 10 kHz; lunghezza del frame<br />

N = 320 (32 ms); ordine del filtro LPC p = 14. Nella fig. 8.14 è riportata l’analisi mediante<br />

predizione lineare (LPC) di un suono non vocalizzato (non periodico) costituito dalla consonante<br />

fricativa /s/. Infine nella fig. 8.15 è riportata l’analisi della vocale /ae/ al variare dell’ordine del filtro<br />

LPC di predizione lineare: (a) il frame del segnale cui è stata applicata la finestra di Hamming; (b) lo<br />

spettro del segnale; (c-f) l’inviluppo stimato con p che varia da 6 a 18. La frequenza di campionamento<br />

è 6 kHz.<br />

8.3.3 Stima dell’inviluppo spettrale mediante cepstrum<br />

Il metodo del cepstrum consente la separazione di un segnale y(n) = x(n) ∗ h(n), basato sul modello<br />

sorgente-filtro, in cui la sorgente x(n) passa attraverso un filtro descritto dalla risposta all’impulso


8.3. STIMA DELL’INVILUPPO SPETTRALE 8.19<br />

Figura 8.14: <strong>Analisi</strong> LPC della fricativa /s/<br />

h(n). Lo spettro del segnale y(n) risulta Y (k) = X(k) · H(k), che è il prodotto di due spettri; k è<br />

l’indice per le frequenze discrete. Il primo corrisponde allo spettro della sorgente e il secondo a quello<br />

del filtro. E’ difficile separare questi due spettri; più facile è separare l’inviluppo (reale) del filtro dal<br />

resto dello spettro, attribuendo tutta la fase alla sorgente. L’idea del cesptrum si basa sulla proprietà<br />

del logaritmo log(a · b) = log(a) + log(b).<br />

Se prendiamo il logaritmo del modulo dello spettro Y (k), otteniamo<br />

log |Y (k)| = log(|X(k) · H(k)|) = log |X(k)| + log |H(k)|<br />

Se consideriamo il grafico di log |Y (k)| come un segnale nel tempo (dimenticandoci temporaneamente<br />

che in realtà è in frequenza), si possono distinguere due componenti: una oscillazione veloce, dovuta<br />

alla struttura armonica (righe) dell’eccitazione, e un andamento più lento corrispondente alle risonanze<br />

del filtro (inviluppo spettrale). Si può quindi ottenere una separazione delle due componenti, cioè<br />

componente a variazione veloce e quella a variazione lenta, mediante rispettivamente un filtro passa<br />

alto e passa-basso, del segnale log |Y (k)| sempre interpretato come segnale nel tempo, vedi fig. 8.16<br />

(sopra).<br />

Un metodo per separare le due componenti, consiste nell’usare la trasformata (nel nostro caso<br />

inversa) di Fourier. Pertanto<br />

DFT −1 (log |Y (k)|) = DFT −1 (log |X(k)|) + DFT −1 (log |H(k)|)<br />

La parte di DFT −1 (log |Y (k)|) verso l’origine descrive l’inviluppo spettrale, quella distante l’eccitazione.<br />

In particolare si noterà una specie di riga in corrispondenza della periodicità del log |Y (k)|<br />

e quindi del periodo del suono , vedi fig. 8.16 (sotto). A questo punto si può capire il gioco di parole<br />

che sta alla base del nome cesptrum. Infatti la parola ceps-trum corrisponde a spec-trum con la<br />

prima parte letta all’inverso. Analogamente si chiamiamo quefrency la ascissa di DFT −1 (log |Y (k)|)<br />

invece che frequency. Normalmente infatti la DFT −1 produce un segnale nel tempo, ma qui invece va


8.20 CAPITOLO 8. ANALISI DEI SUONI<br />

Figura 8.15: <strong>Analisi</strong> LPC della vocale /ae/ al variare dell’ordine p del filtro di predizione lineare.<br />

interpretato come frequenza. In definitiva il cesptrum (reale) è dato da<br />

c(n) = DFT −1 (log |Y (k)|) (8.20)<br />

Si noti che il cepstrum è una funzione pari dell indice n, in quanto log |Y (k)| è una funzione reale e<br />

pari. Questa proprietà consente di usare la trasformata coseno inversa per ottenere c(n) da log |Y (k)|.<br />

L’indice n di c(n) è chiamato quefrency, dove ad alta quefrency (variazioni rapide nello spettro in<br />

dB) corrispondono valori di n grandi e viceversa. Pertanto si può assumere che i valori bassi della<br />

quefrency descrivano l’inviluppo spettrale, mentre quelli alti corrispondono all’eccitazione o sorgente.<br />

La separazione è ottenuta moltiplicando il cepstrum per una finestra passa basso wLP (n) nel<br />

dominio del cepstrum. Ad es.<br />

⎧<br />

⎨ 1 |n| < nc<br />

wLP (n) = 0.5 |n| = nc<br />

⎩<br />

0 |n| > nc<br />

dove nc è una opportuna soglia. Ad esempio per i <strong>suoni</strong> vocalizzati possiamo considerare che il<br />

formante più basso F1 di un maschio adulto sia circa F1 = 270 Hz. Le oscillazioni dello spettro<br />

corrispondenti all’inviluppo non devono avere componenti sopra la quefrency qp = 3, 7 ms = 1/270<br />

Hz. In definitiva per <strong>suoni</strong> periodici, nc < np, con np periodo in campioni. Per una frequenza di<br />

campionamento fS = 44.1 kHz, risulta np = fSqp = fS/F1 = 163 campioni. In pratica verrà scelto<br />

come soglia un valore leggermente inferiore. Si noti che per la voce femminile la separazione è più<br />

difficile. Infatti l’altezza media della voce femminile è di circa 256 Hz, mentre il formante più basso<br />

è a 310 Hz. Questi valori sono piuttosto vicini, e quindi meno facilmente separabili.<br />

L’inviluppo spettrale, in una scala proporzionale ai decibel, è dato da<br />

log H(k) = DFT[ wLP · c(n) ] = DFT[wLP (n) · DFT −1 (log |Y (k)|) ] (8.21)<br />

In fig. 8.17 sono riportati esempi di analisi cepstrale per <strong>suoni</strong> vocalizzati e non vocalizzati, tratti da<br />

[Schafer and Rabiner, System for Automatic Formant Analysis of Voiced Speech, JASA, vol. 47,<br />

1970, p. 634] .


8.3. STIMA DELL’INVILUPPO SPETTRALE 8.21<br />

Figura 8.16: Esempio di cepstrum: sopra è rappresentato log |Y (k)| 2 ; sotto il corrispondente cepstrum<br />

c(n) = DFT −1 (log |Y (k)|)<br />

M-8.14<br />

Write a MATLAB function for the spectral envelope computing, with the cepstral approach and experiment<br />

it for different kinds of sounds. Develop a pitch estimate function based on cepstral approach.<br />

Si noti inoltre che i massimi dell’inviluppo spettrale corrispondono alle risonanze (formanti) molto<br />

caratteristiche per differenziare le varie vocali. Essi possono quindi essere individuati dall’inviluppo<br />

spettrale, come mostrato in fig. 8.18.<br />

M-8.15<br />

Estimate the formants of a voice in a song and plot their position on the spectrogram.<br />

8.3.4 <strong>Analisi</strong> mediante mel-cepstrum<br />

Studi di psicoacustica hanno mostrato che la percezione umana del contenuto frequenziale del suono<br />

non segue una scala lineare, ma all’incirca logaritmica. Infatti per ogni tono di f, misurata in Hz,<br />

corrisponde una altezza soggettiva misurata su una scala chiamata scala mel. Come riferimento della<br />

scala mel, si ha che 1000 Hz corrispondono a 1000 mel. Si usa una trasformazione non lineare della<br />

scala della frequenza per ottenere il corrispondente valore in mel (fig. 8.19), data da<br />

<br />

f if f ≤ 1 kHz<br />

mel(f) =<br />

<br />

2595 log10 if f > 1 kHz<br />

<br />

1 + f<br />

700<br />

Per applicare la scala mel al cepstrum, si usa un banco di filtri triangolari passabanda con frequenza<br />

centrale in K valori equispaziati in mel, vedi fig. 8.20. La larghezza di banda di ciascun<br />

filtro è la distanza dalla frequenza centrale del filtro precedente, moltiplicata per due. Il primo filtro


8.22 CAPITOLO 8. ANALISI DEI SUONI<br />

Figura 8.17: Esempio di analisi cepstrale per <strong>suoni</strong> vocalizzati e non vocalizzati<br />

parte da 0. Pertanto la larghezza di banda <strong>dei</strong> filtri sotto 1000 Hz sarà di 200 Hz; poi essa crescerà<br />

esponenzialmente. Pertanto i filtri saranno a banda costante fino a 1000Hz, a Q costante sopra.<br />

Il mel-cesptrum vuole stimare l’inviluppo spettrale dell’uscita di questo banco di filtri. Sia quindi<br />

Yn il logaritmo dell’energia in uscita dal canale n, attraverso la trasformata coseno discreta (DCT)<br />

ottengo i coefficienti mel-cepstrali MFCC (mel frequency cepstral coefficient) mediante l’equazione<br />

ck =<br />

N<br />

n=1<br />

<br />

Yn cos k n − 1<br />

<br />

π<br />

2 N<br />

k = 0, . . . , K<br />

Si ricostruisce un inviluppo spettrale semplificato usando i primi Km coefficienti, con Km < K,<br />

analogamente a quanto visto per la stima dell’inviluppo con il cepstrum<br />

Km <br />

˜C(mel) = ck cos(2πk mel<br />

)<br />

k=1<br />

dove Bm = è la larghezza della banda analizzata, espressa in mel. Un tipico valore di Km usato la<br />

caratterizzazione e classificazione della musica è Km = 20. Si noti che il coefficiente c0 è il valore<br />

medio <strong>dei</strong> valori (in dB) dell’energia <strong>dei</strong> canali del banco di filtri. Pertanto esso è in diretta relazione<br />

con l’energia del suono. Esso può servire per la stima dell’energia. Inoltre normalmente viene trascurato,<br />

quando si vuole fare un confronto della forma dell’inviluppo, normalizzato in energia, di vari<br />

<strong>suoni</strong>, ad esempio nei problemi di riconoscimento.<br />

M-8.16<br />

Write a MATLAB function for the spectral envelope computing, with the mel-cepstral approach and<br />

experiment it for different kinds of sounds. Compare the results obtained with the different spectral<br />

envelope algorithms.<br />

In fig. 8.21 è mostrato un esempio di analisi con mel-cesptrum. In essa sono confrontati spettri<br />

in decibel, rappresentati su una scala frequenziale logaritmica. Nel primo quadrante è rappresentato<br />

Bm


8.4. ATTRIBUTI A MEDIO LIVELLO RICAVABILI DALL’ANALISI SPETTRALE 8.23<br />

Figura 8.18: Automatically formant estimation from cepstrally smooted log Spectra [from Schaefer<br />

Rabiner].<br />

lo spettro del suono. Nel secondo (in alto a destra) l’inviluppo ottenuto mediante mel-cesptrum. Nel<br />

terzo (in basso a sinistra) l’inviluppo ottenuto mediante predizione lineare. Infine nell’ultimo grafico,<br />

lo spettro ottenuto usando tutti i coefficienti spettrali<br />

8.4 Attributi a medio livello ricavabili dall’analisi spettrale<br />

Dall’analisi spettrale del suono vengono ricavati <strong>dei</strong> parametri che danno una descrizione delle caratteristiche<br />

fisiche a basso livello del suono. In particolare si ricava l’ampiezza, fase e frequenza istantanee<br />

di ogni parziale. Nel modello sinusoidale più rumore si puo’ anche ricavare una descrizione<br />

delle caratteristiche spettrali del rumore. A partire da questi parametri a basso livello, è possibile<br />

ricavare una descrizione ad un livello di astrazione più alto, che possa servire sia per una eventuale<br />

trasformazione del suono stesso nella resintesi, sia per riconoscere la sorgente o per ricavare altre<br />

informazioni da essa trasmesse.<br />

Nel caso questi parametri vengano poi usati per la trasformazione, è bene che siano di interpretazione<br />

intuitiva e che facciano riferimento, in qualche modo, agli attributi percettivi del suono. In<br />

altri casi si ricavano dallo spettro ad esempio il grado di armonicità, la rumorisità, la brillantezza;<br />

questi attributi descrivono le caratteristiche del suono e sono utili nei problemi di riconoscimento.<br />

Oltre agli attributi istantanei del suono, spesso sono utili le loro derivate. La derivata prima descrive<br />

la tendenza dell’evoluzione temporale, in quell’istante; talvolta viene presa in considerazione<br />

anche la derivata seconda, che descrive l’accelerazione dell’evoluzione temporale, che risulta spesso<br />

più in relazione con le scelte volontarie. Nei segnali discreti, la derivata viene sostituita dal calcolo<br />

della differenza tra il valore corrente ed il precedente d(n) = p(n) − p(n − 1). Spesso però la stima<br />

della derivata così ottenuta è abbastanza rumorosa ed è opportuno smussarla. A questo scopo per ogni<br />

istante si calcola la parabola che approssima, ai minimi quadrati, il valore del parametro in tre punti<br />

adiacenti. Si usa quindi la derivata (prima o seconda) della parabola nel punto centrale. Dall’analisi di


8.24 CAPITOLO 8. ANALISI DEI SUONI<br />

mel<br />

3500<br />

3000<br />

2500<br />

2000<br />

1500<br />

1000<br />

Transmission<br />

500<br />

0<br />

0 1000 2000 3000 4000 5000<br />

Hz<br />

6000 7000 8000 9000 10000<br />

1<br />

0.9<br />

0.8<br />

0.7<br />

0.6<br />

0.5<br />

0.4<br />

0.3<br />

0.2<br />

0.1<br />

Figura 8.19: Trasformazione da Hz a mel<br />

0<br />

0 1000 2000 3000 4000<br />

Frequency (Hz)<br />

5000 6000 7000 8000<br />

Figura 8.20: Banco di filtri su scala mel<br />

questi parametri e della loro evoluzione, viene aiutata la segmentazione del suono, cioè la separazione<br />

di regioni temporali con andamento omogeneo.<br />

M-8.17<br />

Plot the time evolution of the first mel-cesptral coefficient of the analisis of a music fragment. Is it<br />

useful for detecting the transients and separating the notes?<br />

M-8.18<br />

Compute the first Km mel cepstrum coefficients of a set of notes of different instruments of the<br />

same pitch. Are there similarities among instruments of the same kind? How they vary wth the<br />

different dynamics (lodness) of the notes? Repeat the experiment with the sound of the same<br />

instrument played at different pitches.<br />

8.4.1 Attributi a basso livello<br />

Descriviamo ora più in dettaglio gli attributi più significativi che si ottengono dalla rappresentazione<br />

sinusoidale più rumore (o meglio residuo). Sia il suono x(n) scomposto nelle due componenti xS(n)


8.4. ATTRIBUTI A MEDIO LIVELLO RICAVABILI DALL’ANALISI SPETTRALE 8.25<br />

Level (dB)<br />

Rel. Level (dB)<br />

60<br />

40<br />

20<br />

20<br />

100<br />

0<br />

−20<br />

100<br />

Spectrum<br />

500<br />

1000<br />

Spectral Shape rebuild from LPC<br />

500 1000<br />

Hz<br />

5000<br />

5000<br />

Rel. Level (dB)<br />

Rel. Level (dB)<br />

20<br />

0<br />

−20<br />

20<br />

0<br />

−20<br />

Spectral Shape rebuild from 6 MFCC<br />

100<br />

Spectral Shape rebuild from 26 MFCC<br />

100<br />

500 1000<br />

Hz<br />

500 1000<br />

Hz<br />

Figura 8.21: Esempio di analisi del suono di un clarinetto con mel-cesptrum.<br />

sinusoidale e xR(n) residuo: x(n) = xS(n) + xN(n), con xS(n) = I<br />

i=1 aicos[n2πfi(n)/FS +<br />

φi(n)]. In questa espressione ai rappresenta l’ampiezza, in scala lineare, della i-esima armonica e fi<br />

la sua frequenza. Essi sono parametri che variano nel tempo. Gli attributi qui descritti si intendono<br />

ricavati dall’analisi di un frame e vengono in genere riferiti temporalmente al centro del frame stesso,<br />

oppure alla fine quando l’analisi viene fatta in tempo reale. Essi sono quindi attributi istantanei del<br />

suono in esame. I più usati sono:<br />

• ampiezza totale della componente sinusoidale risultante dalla somma di tutte le parziali di un<br />

frame espresse in decibel<br />

<br />

I<br />

<br />

AStot = 20 log 10<br />

dove ai è l’ampiezza della parziale i-esima;<br />

• ampiezza della componente residuo, ottenuta dalla somma <strong>dei</strong> valori assoluti del residuo nel<br />

frame<br />

<br />

M−1 <br />

N−1 <br />

|xR(n)| = 20 log10 |XR(k)|<br />

ARtot = 20 log 10<br />

• ampiezza totale del suono<br />

Atot = 20 log 10<br />

= 20 log 10<br />

n=0<br />

<br />

M−1 <br />

n=0<br />

I<br />

i=1<br />

|x(n)|<br />

<br />

N−1<br />

ai +<br />

i=1<br />

ai<br />

= 20 log 10<br />

<br />

<br />

|XR(k)|<br />

k=0<br />

k=0<br />

N−1<br />

<br />

k=0<br />

5000<br />

5000<br />

|X(k)|


8.26 CAPITOLO 8. ANALISI DEI SUONI<br />

• peso dell’armonica i-esima rispetto al totale della componente sinusoidale<br />

wi =<br />

ai<br />

I<br />

i=1 ai<br />

• la frequenza fondamentale (pitch), che puo’ essere ottenuta come media pesata delle frequenze<br />

normalizzate di tutte le armoniche,<br />

F 0 =<br />

I<br />

i=1<br />

In un suono esattamente periodico, tutte le parziali sono multiple della fondamentale. Cioè vale<br />

fi = iF 0. Nei <strong>suoni</strong> reali questo vale solo approssimativamente e pertanto la fondamentale<br />

deve essere stimata con espressioni del tipo di quella sopra indicata.<br />

8.4.2 Attributi a livello superiore<br />

Vengono ora presentati attributi a più alto livello che descrivono le caratteristiche spettrali del suono.<br />

Questi attributi sono anch’essi ricavati a livello di frame e sono quindi considerati istantanei, nel senso<br />

precisato sopra. I più usati sono:<br />

• disarmonicità<br />

HD =<br />

fi<br />

i<br />

· wi<br />

I<br />

|fi − iFo| · wi<br />

• rumorosità (noiseness) è il rapporto tra l’energia della parte rumorosa e l’energia totale<br />

i=1<br />

Noisiness =<br />

M−1<br />

n=0 |xR(n)|<br />

M−1<br />

n=0 |x(n)|<br />

In Mpeg7 si chiama AudioHarmonicity ed è un descrittore del segnale.<br />

• brillantezza, determinata come il baricentro dello spettro<br />

BR =<br />

N−1 k=0 k|X(k)|<br />

N−1 k=0 |X(k)|<br />

· FS<br />

N<br />

Nel caso di suono armonici, dotati cioè di altezza, si definisce anche la brillantezza in relazione<br />

alla fondamentale F 0 come<br />

I I<br />

i=1 i ai<br />

BRF 0 = =<br />

I<br />

i=1 ai<br />

i=1<br />

i wi<br />

• pendenza spettrale, ottenuta dalla regressione lineare sui punti (fi, ai)<br />

dove<br />

Stilt =<br />

ti = 1<br />

wi<br />

<br />

1<br />

I<br />

i=1 t2 i<br />

fi −<br />

·<br />

I<br />

i=1<br />

tiai<br />

wi<br />

I i=1 fi/w2 i<br />

I i=1 1/w2 <br />

i


8.4. ATTRIBUTI A MEDIO LIVELLO RICAVABILI DALL’ANALISI SPETTRALE 8.27<br />

• deviazione spettrale delle armoniche (Harmonic Spectral Deviation)<br />

HDEV = 1<br />

I<br />

I<br />

[ ai − spec env(fi) ]<br />

i=1<br />

dove spec env(fi) è l’inviluppo spettrale stimato con un <strong>dei</strong> metodi visti sipra, vautato alla<br />

frequenza fi della i-esima armonica. Questo parametro fa parte <strong>dei</strong> descrittori spettrali del<br />

timbro in Mpeg7.<br />

• rapporto l’energia delle armoniche dispari e pari<br />

OER =<br />

<br />

i=pari a2 i<br />

<br />

i=dispari a2 i<br />

Questo parametro è utile per distinguere i <strong>suoni</strong> tipo clarinetti, che hanno poca energia nelle<br />

armoniche pari, comportandosi come un tubo chiuso ad una estremità, da quelli tipo tromba,<br />

che hanno energia simile nei due tipi di armoniche.<br />

• tristimulus. Questi parametri sono stati pensati per pesare differentemente le armoniche nelle<br />

varie zone: fondamentale (T 1), dalla seconda alla quarta (T 2), le rimanenti (T 3). E’ definito da<br />

T 1 = a1<br />

<br />

i ai<br />

T 2 = a2 + a3 + a4<br />

<br />

i ai<br />

T 3 =<br />

I<br />

i=5 ai<br />

<br />

i ai<br />

= 1 − T 1 − T 2<br />

In fig. 8.22(a) è riportata la tipica rappresentazione del tristimulus dove nellasse x è indicato<br />

(a) (b)<br />

Figura 8.22: (a) Basic layout of the tristimulus diagram: T 3 vs. T 2. (b) Tristimulus diagram showing<br />

the timbral time course of a note played on a clarinet. The numbers alongside the plot represent time<br />

in milliseconds after the onset of the note and the white circle represents the steady state timbre, after<br />

an initial transient. (Pollard and Jansson, 1982)<br />

T 3 e nellasse y è indicato T2. Pertanto i <strong>suoni</strong> con alto T1 (fonadmentale forte) sono vicino


8.28 CAPITOLO 8. ANALISI DEI SUONI<br />

allorigine, con alto T2 (alte armniche medie) sono in alto, con alto T3 (alte armoniche superiori)<br />

sono a destra. Inoltre il fatto che la somma di T 1 + T 2 + T 3 = 1 implica che i <strong>suoni</strong> siano<br />

rappresentati dentro il triangolo con vertici in (0,0), (0,1) e (1,0). In fig. 8.22(b) è rappresentata<br />

levoluzione del tristimulus di una nota di clarinetto.<br />

• bandwidth<br />

BW =<br />

N−1<br />

k=0 |X(k)| · |fk − BR|<br />

N−1<br />

k=0 |X(k)|<br />

• ampiezza (valore efficace del suono)<br />

<br />

<br />

amp = X(k) 2<br />

• spectral rolloff definito come la frequenza Rs sotto la quale è concentrata 85% della distribuzione<br />

di ampiezza<br />

Rs <br />

N−1 <br />

|X(k)| = 0.85 · |X(k)|<br />

k=1<br />

Questa è una altra misura della forma dello spettro.<br />

• flusso spettrale (Spectral Flux) è definito come la distanza euclidea tra due spettri in ampiezza<br />

di frames consecutivi<br />

N−1 <br />

SF = [Nt(k) − Nt−1(k)] 2<br />

k=1<br />

dove Nt(k) e Nt(k) sono rispettivamente le ampiezze spettrale della trasformata di Fourier del<br />

frame all’istant t e t − 1. Il flusso spettrale è una misura della quantità di variazione locale dello<br />

spettro ed è considerato, da alcuni esperimenti, essere correlato alla terza dimensione percettiva<br />

del timbro (vedi la percezione del timbro nel capitolo 2 delle dispense).<br />

M-8.19<br />

Implement the feature descriptors described in this section and compare their effectiveness on<br />

different kinds of sounds. Plot their evolution from the attack to the decay of a instrumental tone.<br />

Plot their evolution on a singing voice (e.g. Tom’s Dinner by Susan Vega<br />

8.4.3 Attributi di segmento sonoro<br />

Quando si considera la successione temporale di un attributo nei frames successivi, si ottiene una funzione<br />

del tempo definita negli istanti di riferimento <strong>dei</strong> vari frames. temporalmente i punti saranno separati<br />

del hop size usato nell’analisi. Essi sono quindi sottocampionati rispetto al segnale. Con forme<br />

di interpolazione o approssimazione, eventualmente smussando l’andamento, si possono ottenere gli<br />

andamenti a frequenza di campionamento.<br />

Come detto sopra, è importante anche caratterizzare l’evoluzione temporale di questi parametri.<br />

Inoltre si possono ricavare degli attributi di segmento. Con il termine segmento si intende una porzione<br />

di suono di caratteristiche omogenee (ad esempio il regime sostenuto) o funzionalmente simili (ad<br />

esempio il transitorio di attacco). L’operazione di segmentazione del suono consiste nel dividerlo in<br />

segmenti e viene fatta esaminando gli attributi a livello di segnale. Le traiettoria degli attributi viene<br />

descritta calcolando per ogni parametro par<br />

k<br />

k=1


8.4. ATTRIBUTI A MEDIO LIVELLO RICAVABILI DALL’ANALISI SPETTRALE 8.29<br />

• la derivata al frame j<br />

par(j) − par(j − 1)<br />

der(j) =<br />

H/FS<br />

dove H è l’hop size e FS è la frequenza di campionamento;<br />

• media pesata del parametro su tutti i frames j<br />

mediapar =<br />

• varianza pesata del parametro su tutti i frames j<br />

varpar =<br />

<br />

j par(j)amp(j)<br />

<br />

j amp(j)<br />

<br />

j [par(j) − mediapar] 2 · amp(j)<br />

<br />

j amp(j)<br />

Ci sono alcuni parametri che descrivono le caratteristiche di una nota. Essi si ottengono una volta<br />

separata la nota dal contesto.<br />

• logaritmo del tempo di attacco (Log-Attack Time)<br />

LAT = log 10(attack time)<br />

dove attack time è la durata del tempo di attacco del suono. Questo parametro è molto importante<br />

per il riconoscimento <strong>dei</strong> timbri. Esso infatti è correlato ad una delle dimensioni percettive<br />

dello spazio timbrico ed è stato inserito tra i descrittori temporali del timbro in MPEG7. Si noti<br />

che la determinazione dell’inizio e fine dell’attacco, è una operazione difficile: spesso la nota è<br />

preceduta da rumore o altro, che rende incerta la determinazione dell’ effettivo inizio. Inoltre<br />

dall’esame dell’inviluppo temporale, non è neppure facile determinare il termine. Spesso si fa<br />

riferimento al massimo dell’inviluppo; questo va bene per <strong>suoni</strong> percussivi, come il pianoforte.<br />

Per <strong>suoni</strong> ad eccitazione sostenuta, come gli archi o i fiati, il massimo può essere trovato ben<br />

in avanti, quando il transitorio di attacco è terminato; il musicista spesso tende a controllare<br />

l’espressività del suono, mediante il controllo dell’inviluppo temporale. Si usa quindi prendere<br />

come soglie vaori percentuali dell’ampiezza massima, ad esempio rispettivamente 10 % e 90 %<br />

percento del massimo.<br />

• rapporto rumore - parte armonica (Noise to Harmonic Ratio - NHR) definito come il rapporto tra<br />

l’energia della parte rumorosa e l’energia della parte armonica per la parte del regime (sustain)<br />

si definisce la modulazione dell’energia e la modulazione della frequenza fondamentale. na<br />

volta separato il regime, si sottrae dall’inviluppo d’energia in dB la sua tendenza (lineare in<br />

dB). Poi si calcola lo spettro dell’inviluppo corretto e si seleziona il picco nell’estensione [1<br />

- 10 Hz]. Con lo stesso procedimento si determina la modulazione del periodo, sottraendo la<br />

tendenza lineare della fondamentale durante il regime, e poi trovando il massimo nello spettro<br />

dell’inviluppo dell’altezza corretto. La frequenza del massimo corrisponderè alla frequenza del<br />

tremolo, normalmente tra 4 e 8 Hz.<br />

• baricentro dell’inviluppo temporale (temporal centroid)<br />

<br />

t inv(t) · t<br />

T C = <br />

t inv(t)


8.30 CAPITOLO 8. ANALISI DEI SUONI<br />

dove inv(t) è l’inviluppo temporale. Questo parametro è molto utile per distinguere i <strong>suoni</strong><br />

percussivi da quelli sostenuti. Anche questo parametro è inserito tra i descrittori temporali del<br />

timbro in Mpeg7.<br />

M-8.20<br />

Implement the feature descriptors described in these sections and compare their effectiveness on<br />

different kinds of sounds<br />

8.4.4 Onset detection<br />

A musical note is considered as composed of a initial attack transient phse, followed by a steadystate<br />

phase and a final decay. Attack transients are zones of short duration and fast variations of the<br />

signal spectral content (non-stationarity), where resonances are still building up. Their perception is<br />

caused by changes in the intensity, pitch or timbre of a sound. Because of the unpredictability of such<br />

changes, they are difficult to model. Attack transients precede the steady state of the signal, when the<br />

signal is stationary, thus easily predictable. Note onset is defined as the beginning of attack transient<br />

of a note.<br />

The boundaries between notes and different types of events are often ill-defined. The performer<br />

can introduce variations and modulations in a given sound without implying the presence of new notes.<br />

This can also occur as a consequence of the processing of the acoustic signal, recording conditions or<br />

just as an expressivity feature in the musical performance (i.e. vibratos in woodwind, brass and string<br />

instruments). Detection of onsets in polyphonic mixtures is difficult even for human listeners. Attack<br />

transients present some typical behaviour: 1<br />

Energy burst: in a note’s energy profile, the highest concentration of energy can be found during<br />

the attack (when a steep increase can be observed). After that, energy progressively decreases<br />

(Fig. 8.23 (a)). The more impulsive the components of the signal are (percussive sounds as<br />

opposed to tonal - more sinusoidal - sounds), the more sudden this increase-decrease energy<br />

characteristic becomes.<br />

Duration: the attack part of a note is usually very short, introducing significant changes to the signal<br />

(Fig. 8.23). This abruptness is a trademark of transients. It is particularly acute for percussive<br />

sounds.<br />

Surprise: this is also related to the abruptness of transients, but from the statistical point of view.<br />

New events are unconnected to previous events, thus cannot be predicted from these. The proliferation<br />

of elements whose values are completely unexpected is more likely during transients.<br />

Chaotic nature: during transients, the signal includes unstable chaotic elements, which quickly stabilise<br />

when entering the steady state (see Fig. 8.23 (b)). These elements are not only highly<br />

uncorrelated with previous and future signal values, but also within different signal elements at<br />

a given time.<br />

Steady-state: although obvious, an important characteristic of transients is that they are followed by<br />

the steady-state of the note. Chaotic components followed by chaotic components can account<br />

for noise, while a stable follow-up hints at the possible presence of a note.<br />

1 from PhD dissertation of J. Bello 2003


8.4. ATTRIBUTI A MEDIO LIVELLO RICAVABILI DALL’ANALISI SPETTRALE 8.31<br />

Figura 8.23: A sequence of two piano notes (a) and the corresponding spectrogram (b). The energy<br />

increase, short duration and instability related to transients can be observed as well as the stability of<br />

the steady-state part [from Bello 2003].<br />

8.4.4.1 Onset detection by Local energy<br />

Despite the number of variants, practically all of them are based on the calculation of a first order<br />

difference function of the signal amplitude envelopes and taking the maximum rising slope as an<br />

onset or an onset component. An example is the algorithm based on the surfboard method of Schloss<br />

(1985), which involves smoothing the signal to produce an amplitude envelope and finding peaks in<br />

its slope using linear regression. In fig. 8.24 the effect of a simple onset detector based on Local<br />

energy is shown. In fig. 8.24(a) the time-domain audio signal; in fig. 8.24(b) its smoothed amplitude<br />

envelope drawn in bold over it, computed by a 40ms windowed RMS smoothing with 75% overlap<br />

and in fig. 8.24(c) peaks in slope shown by dotted lines tangential to the envelope. This method is<br />

lossy, in that it fails to detect the onsets of many notes which are masked by simultaneously sounding<br />

notes. Occasional false onsets are detected, such as those caused by amplitude modulation in the<br />

signal.<br />

The first order difference function reflects well the loudness of an onsetting sound, but its maximum<br />

values fail to precisely mark the time of an onset. This is due to two reasons. First, especially<br />

low sounds may take some time to come to the point where their amplitude is maximally rising, and<br />

thus that point is crucially late from the physical onset of a sound and leads to an incorrect cross-band<br />

association with the higher frequencies. Second, the onset track of a sound is most often not monotonically<br />

increasing, and thus we would have several local maxima in the first order difference function


8.32 CAPITOLO 8. ANALISI DEI SUONI<br />

(a) (b) (c)<br />

Figura 8.24: Example of onset detector based on local energy: time-domain audio signal (a), 40ms<br />

windowed RMS smoothing with 75% overlap (b), peaks in slope of envelope (c).<br />

near the physical onset.<br />

It is possible to handles both of these problems by using the relative difference function. Let E(t)<br />

the Short time energy as defined in sec. 8.2.1. The relative difference function is defined as<br />

Dr(t) = 1 d d<br />

E(t) = log E(t)<br />

E(t) dt dt<br />

This function computes the amount of change in relation to the signal level. This is the same as differentiating<br />

the logarithm of the energy envelope. This is psycho-acoustically relevant, since perceived<br />

increase in signal amplitude is in relation to its level, the same amount of increase being more prominent<br />

in a quiet signal. Indeed the just detectable change in intensity is approximately proportional to<br />

the intensity of the signal, i.e. δI/I, the Weber fraction, is a constant. This relationship holds for<br />

intensities from about 20 dB to about 100 dB above the absolute threshold. Onset components are<br />

detected by a simple peak picking operation, which looks for peaks above a global threshold in the<br />

relative difference function Dr(t).<br />

The relative difference function effectively solves the above mentioned problems by detecting<br />

the onset times of low sounds earlier and, more importantly, by handling complicated onset tracks,<br />

since oscillations in the onset track of a sound do not matter in relative terms after its amplitude has<br />

started rising. In fig. 8.25 the absolute and relative difference functions of the onset of a piano sound,<br />

on six different frequency band ,are plotted. Both of the benefits discussed can be seen clearly. To<br />

improve the performance of the onset detector, first the overall loudness of the signal is normalized to<br />

a reference level using a psychoacoustics model of loudness. Then a filterbank divides the signal into<br />

many non-overlapping bands (often critical band are used). At each band, we detect onset components<br />

and determine their time and intensity. In final phase, the onset components are combined to yield<br />

onsets.<br />

Energy-based algorithms are fast and easy to implement, however their effectiveness decreases<br />

when dealing with non-percussive signals and when transient energy overlaps in complex mixtures.<br />

Energy bursts related to transient information are more noticeable at higher frequencies as the tonal<br />

energy is usually concentrated at lower frequencies, masking the effect of these variations on the<br />

signal content. More advanced models utilize band-wise processing and a psychoacoustic model of<br />

intensity coding to combine the results from the separate frequency bands.


8.4. ATTRIBUTI A MEDIO LIVELLO RICAVABILI DALL’ANALISI SPETTRALE 8.33<br />

Figura 8.25: Onset of a piano sound. First order absolute (dashed) and relative (solid) difference<br />

functions of the amplitude envelopes of six different frequency bands [from Klapuri 1999].<br />

8.4.4.2 Onset detection in frequency domain<br />

This attack transient noise is particularly noticeable at high frequency locations, since at low frequencies,<br />

high concentrations of energy (in the bins corresponding to the first few harmonics of the played<br />

note) mask this effect.<br />

The High Frequency Content (HFC) function, is defined, for the jth frame, as<br />

DH(j) = <br />

k|Xj(k)|<br />

k<br />

where |Xj(.)| is the spectral magnitude of the jth frame. Aim of this function is to emphasize the<br />

high frequency content of the sound and it works well for identifying percussive sounds. If compared<br />

with energy, this HFC function has greater amplitude during the transient/attack time.<br />

8.4.4.3 Onset detection by complex domain approach<br />

The HFC precisely identifies percussive onsets, but is less responsive to non-percussive components.<br />

In the complex domain approach, to cope with harmonic changes of low transient timbres, a target<br />

STFT value ˆ Xk is generated as<br />

ˆXk[n] = | ˆ Xk[n]|e j ˆ φk[n]<br />

ˆφk[n] = princarg(2φk[n − 1] − φk[n − 2])<br />

where φk[n] is the estimated phase deviation. The measure of the Euclidean distance, in the complex<br />

domain, between the target STFT value ˆ Xk and the observed STFT Xk allows the definition of a


8.34 CAPITOLO 8. ANALISI DEI SUONI<br />

Figura 8.26: Piano signal (a), its high frequency content (b), the profile of High Frequency Content<br />

function [from Bello 2003].<br />

detection function<br />

DC[n] = 1<br />

N<br />

<br />

|| ˆ Xk[n] − Xk[n]|| 2<br />

k<br />

The detection function still contains spurious peaks and some pre-processing and low pass filtering is<br />

required before peak picking.<br />

M-8.21<br />

Implement the onset detectors described in these sections and compare their performance on<br />

different kinds of music<br />

8.4.5 Meter extimation algorithms<br />

As a part of a larger project of modeling the cognition of basic musical structures, Temperley and<br />

Sleator proposed a meter estimation algorithm for arbitrary MIDI files [Temperley99: D. Temperley<br />

and D. Sleator, Modeling Meter and Harmony: A Preference-Rule Approach, Computer Music<br />

Journal, 23(1), 1027, Spring 1999]. The algorithm was based on implementing the preference rules<br />

verbally described in [Lerdahl 1983], and produced the whole metrical hierarchy as output.<br />

Dixon proposed a rule-based system to track the tactus pulse of expressive MIDI performances<br />

[S. Dixon, Automatic Extraction of Tempo and Beat from Expressive Performances, J. New Music<br />

Research 30 (1), 39-58, 2001]. The method works quite well for MIDI files of all types but has<br />

problems with audio files which do not contain sharp attacks. The source codes of both Temperley’s<br />

and Dixon’s systems are publicly available for testing. See<br />

http://www.link.cs.cmu.edu/music-analysis<br />

and<br />

http://www.oefai.at/˜simon/beatroot<br />

M-8.22<br />

The source codes of both Temperley’s and Dixon’s systems are publicly available for testing. Test<br />

and compare their performance on different kinds of music.


Indice<br />

8 <strong>Analisi</strong> <strong>dei</strong> <strong>suoni</strong> 8.1<br />

8.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1<br />

8.2 Parametri nel dominio del tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2<br />

8.2.1 Short-Time Average Energy e Magnitude . . . . . . . . . . . . . . . . . . . 8.5<br />

8.2.2 Short-Time Average Zero-Crossing Rate . . . . . . . . . . . . . . . . . . . . 8.7<br />

8.2.3 Short-Time Autocorrelation Function . . . . . . . . . . . . . . . . . . . . . 8.10<br />

8.2.4 Short-Time Average Magnitude Difference Function . . . . . . . . . . . . . 8.13<br />

8.2.5 Stima del pitch (F0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.15<br />

8.3 Stima dell’inviluppo spettrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.16<br />

8.3.1 Stima dell’inviluppo spettrale mediante banco di filtri . . . . . . . . . . . . . 8.16<br />

8.3.2 Stima dell’inviluppo spettrale mediante predizione lineare (LPC) . . . . . . . 8.17<br />

8.3.2.1 Esempi di analisi mediante predizione lineare (LPC) . . . . . . . . 8.18<br />

8.3.3 Stima dell’inviluppo spettrale mediante cepstrum . . . . . . . . . . . . . . . 8.18<br />

8.3.4 <strong>Analisi</strong> mediante mel-cepstrum . . . . . . . . . . . . . . . . . . . . . . . . 8.21<br />

8.4 Attributi a medio livello ricavabili dall’analisi spettrale . . . . . . . . . . . . . . . . 8.23<br />

8.4.1 Attributi a basso livello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.24<br />

8.4.2 Attributi a livello superiore . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.26<br />

8.4.3 Attributi di segmento sonoro . . . . . . . . . . . . . . . . . . . . . . . . . . 8.28<br />

8.4.4 Onset detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.30<br />

8.4.4.1 Onset detection by Local energy . . . . . . . . . . . . . . . . . . 8.31<br />

8.4.4.2 Onset detection in frequency domain . . . . . . . . . . . . . . . . 8.33<br />

8.4.4.3 Onset detection by complex domain approach . . . . . . . . . . . 8.33<br />

8.4.5 Meter extimation algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . 8.34<br />

8.35

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!