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