Lezione 15
Analisi e risintesi: phase vocoder
Programmazione timbrica - Prof. Luca A. Ludovico
Elaborazione del suono con analisi/risintesi
• Il processo di analisi e risintesi si compone dei seguenti
passi:
1. un file audio viene analizzato tramite un programma per l’analisi. I
risultati vengono posti in un file di analisi;
2. il file di analisi può essere modificato in modo che alcune caratteristiche
del suono non corrispondano più a quelle originali;
3. il file di analisi viene utilizzato come modello per risintetizzare il suono,
tornando dunque alla produzione di un file audio. Le eventuali modifiche
al passo 2 si ripercuoteranno nel risultato.
• Esempi di applicazione:
– allungare o abbreviare la durata di un suono senza modificarne la
frequenza (time stretching)
– cambiare la frequenza di un suono senza alterarne la durata (pitch
shifting)
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Analisi e risintesi in Csound
• Esistono numerosi metodi e algoritmi di analisi e risintesi.
• Csound ne supporta nativamente 3:
– Phase vocoder (basato su FFT)
– Analisi con filtro a eterodina
– Predizione lineare, o LPC
• Per ciascuno di questi metodi, Csound mette a
disposizione un programma di analisi, supporta un tipo di
file di analisi e prevede un metodo di risintesi con specifici
opcode.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Phase vocoder: introduzione
• Un phase vocoder è un tipo di vocoder in grado di riscalare
segnali audio sia nel dominio della frequenza sia in quello
del tempo utilizzando informazione di fase.
– Tipici esempi di modifica sono l’espansione/compressione
temporale e il pitch shifting.
• Il termine vocoder nasce dalla contrazione dei termini
inglesi voice ed encoder, e indica i dispositivi elettronici o
programmi capaci di codificare un qualsiasi segnale audio
attraverso i parametri di un modello matematico.
Originariamente si trattava di codec per l’analisi e la
sintesi di segnale vocale umano.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Phase vocoder: basi matematiche
• Alla base di un phase vocoder si trova la trasformata di Fourier a
tempo breve (short-time Fourier transform, o STFT), utilizzata per
determinare il contenuto frequenziale e la fase delle sinusoidi su
sezioni locali di un segnale variabile nel tempo, e dunque non
stazionario.
• Una STFT converte la rappresentazione di un suono nel dominio del
tempo in una rappresentazione tempo-frequenza durante la fase di
analisi, consentendo modifiche alle ampiezze e fasi di specifiche
componenti frequenziali del suono. La risintesi con il passaggio dal
dominio della frequenza a quello del tempo ha luogo tramite la STFT
inversa. L’evoluzione temporale del suono risintetizzato può essere
modificata tramite la modifica della posizione temporale dei frame
STFT prima della risintesi, consentendo variazioni sulla scala
temporale del suono originario.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Finestre e fotogrammi (windows e frames)
• La STFT consente di dividere un segnale audio in finestre di tempo
(windows) la cui dimensione varia in genere tra 1 ms e 300 ms. Il
segnale viene suddiviso in parti di breve durata che vengono analizzate
separatamente.
L’insieme delle finestre viene analizzato tramite una FFT, generando
così tanti insiemi di dati detti fotogrammi (frames).
• L’obiettivo del programma pvanal è analizzare un file audio e generare
una serie di fotogrammi, salvati in un file di analisi con estensione fft
(in Windows) o pv (in Mac).
• Tipicamente si lavora su file mono, e nel caso di segnali audio
multicanale si sceglie un solo canale.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Il frame size
• Il frame size, ossia il numero di punti (campioni) per fotogramma, è un
fattore chiave per ottenere una buona analisi del suono originale.
Migliore è l’analisi, più vicina all’originale sarà la risintesi.
• Dalla scelta del frame size dipendono:
–
–
la definizione in termini di frequenza (larghezza di banda dei canali di frequenza);
la definizione in termini di tempo (intervallo di tempo)
• Purtroppo si tratta di fare una scelta di compromesso, in quanto ad
una maggiore risoluzione in termini di frequenza corrisponde una
minore risoluzione in termini di tempo, e viceversa (vedi slide
successive)
• Il frame size deve sempre essere una potenza di 2.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Considerazioni sulla frequenza
• L’analisi viene fatta dividendo tutto lo spettro in canali di
frequenza. La larghezza di banda lb dei canali, uguale per
ciascun canale, si ottiene dividendo la frequenza di
campionamento sr per il frame size fs:
lb = sr / fs
• Di conseguenza, maggiore è fs, minore diventa lb. Se la
larghezza di banda diminuisce, lo spettro viene “coperto”
da un numero maggiore di bande strette e quindi l’analisi
si fa più raffinata in termini frequenziali.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Phase vocoder e frequenza: esempio 1
• Si consideri un suono campionato a 44100 Hz e fs = 1024 punti.
lb = sr / fs = 44100 / 1024 = 43,06 Hz
• L’analisi verrà compiuta dividendo il file in canali di circa 43 Hz, da
0 a 22050 Hz (frequenza di Nyquist, sr / 2). Quindi:
primo canale
0 – 43 Hz
secondo canale
43 – 86 Hz
terzo canale
86 – 129 Hz
quarto canale
129 – 172 Hz
quinto canale
172 – 215 Hz
eccetera
• Considerando un suono armonico con fondamentale a 70 Hz, questa
cade nel secondo canale, la seconda armonica a 140 Hz viene
analizzata nel quarto, la terza a 210 Hz nel quinto, ecc. → OK!!!
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Phase vocoder e frequenza: esempio 2
• Si consideri un suono campionato a 44100 Hz e fs = 256 punti.
lb = sr / fs = 44100 / 256 = 172,27 Hz
• L’analisi verrà compiuta dividendo il file in canali di circa 172 Hz, da
0 a 22050 Hz (frequenza di Nyquist, sr / 2). Quindi:
primo canale
0 – 172 Hz
secondo canale
172 – 344 Hz
terzo canale
344 – 516 Hz
eccetera
• Considerando un suono armonico con fondamentale a 70 Hz, sia la
fondamentale sia la seconda armonica a 140 Hz vengono analizzate nel
primo canale, la terza a 210 Hz e la quarta a 280 Hz nel secondo
canale, la quinta e la sesta nel terzo canale, ecc. Poiché nell’analisi
viene fatta una media del contenuto del canale per ogni frame, si avrà
scarsa definizione in termini frequenziali → NO!!!
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Generalizzazione
• Dai semplici esempi precedenti si evince che – almeno dal punto di
vista frequenziale – è bene avere frame size grandi.
• L’individuazione del valore ottimale dipende anche dalle
caratteristiche del suono da analizzare (e risintetizzare). Infatti la
scelta di un frame size grande, che implica larghezze di banda piccole,
è rilevante soprattutto per i suoni gravi:
– nel registro grave, 172 Hz di differenza possono significare più di 2
ottave (ad esempio, A1 = 55 Hz e A3 = 220 Hz, differenza 165 Hz)
– nel registro acuto, 172 Hz di differenza possono essere meno di un
semitono (ad esempio, G7 = 3136 Hz e G#7 = 3322 Hz, differenza
186 Hz)
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Phase vocoder e tempo
• L’analisi viene fatta non solo dividendo lo spettro in canali
di frequenza, ma anche la durata complessiva in porzioni
di tempo dette finestre (windows). Più larghe sono le
finestre, meno ce ne saranno. La FFT analizza un
intervallo di tempo t che si ottiene dividendo il numero di
punti del frame fs per la frequenza di campionamento sr
(inverso del calcolo per lb):
t = fs / sr
• Di conseguenza, più fine è l’analisi in termini di
frequenza, più grossolana risulta quella in termini di
tempo.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Un esempio completo
• Si consideri un suono con sr = 44100 Hz e fs = 8192 punti.
lb = sr / fs = 44100 / 8192 = 5,38 Hz
t = fs / sr = 1 / lb = 0,1858 s
• Se il suono ha un attacco rapido, ad esempio inferiore a
0.1 secondi, esso verrà analizzato in modo poco preciso,
perché la FFT fa la media di qunato succede in ogni canale
di analisi per ogni intervallo di tempo.
• Ne risulterà una buona definizione dal punto di vista della
frequenza, e un’analisi (e una risintesi) grossolana dal
punto di vista del tempo.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Sovrapposizione delle finestre (windows overlap)
• Possibile soluzione: la sovrapposizione delle finestre (windows
overlap).
• Il fattore di sovrapposizione descrive quante finestre di analisi si
coprono a vicenda. Nell’esempio mostrato sopra, il valore del fattore
di sovrapposizione è 5. Analogamente, si può dire che lo spiazzamento
tra frame è pari a (frame size / windows overlap).
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Phase vocoder: altri parametri
• Nei normali phase vocoder, oltre a frame size, window size e window
overlap, esistono altri 2 parametri principali che si possono
controllare:
1. il tipo di finestra (Hamming, Hanning, Gauss, Blackman-Harris,
Kaiser, rettangolare, ecc.);
2. la FFT size, in genere posta a una potenza di 2 che sia almeno il
doppio del frame size.
• In Csound questi parametri possono essere fissati all’atto della
creazione del file di analisi.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Analisi con PVANAL
• PVANAL appartiene alla famiglia di Analysis File Generation, assieme a HETRO
e LPANAL. Questo programma converte un file audio in una serie di frame di
una STFT, creando un file di analisi per l’opcode Csound pvoc.
• Sintassi:
csound -U pvanal [flags] infilename outfilename
pvanal [flags] infilename outfilename
• Principali flag:
-n frmsiz – dimensione dei frame, ossia numero di campioni in ogni frame dell’analisi.
Deve essere potenza di 2 compresa tra 16 e 16384. Per un buon risultato, è consigliabile
che sia maggiore del periodo T più lungo nel campione.
Il valore di default è la più piccola potenza di 2 che corrisponde a più di 20 ms nel
sorgente (ad es. 256 punti con sr = 10 kHz, ossia un frame da 25.6 ms);
-w windfact – fattore di window overlap. L’opcode pvoc interpola tra frame, ma averne
pochi genera distorsione udibile, troppi un file di analisi molto grande. Compromesso (e
valore di default) = 4.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Analisi con PVANAL
• Sintassi:
csound -U pvanal [flags] infilename outfilename
pvanal [flags] infilename outfilename
• Elenco dei flag:
•
-n frmsiz – dimensione dei frame
-w windfact – fattore di window overlap
-s srate – frequenza di campionamento dell’input (se non specificata e non inferibile
dall’header, il default è 10000)
-c channel – canale da analizzare, di default 1
-b begin – istante iniziale in secondi del segment audio da analizzare, di default 0.0
-d duration – durata in secondi del frammento da analizzare, di default 0.0 che in realtà
indica la fine del file
-h hopsize – frame offset dell’STFT, alternativo a -w
-H – uso di finestre di Hamming anziché finestre di von Hann (default)
-K – uso di finestre di Kaiser anziché finestre di von Hann (default) con parametro di
default impostato a 6.8, e reimpostabile attraverso l’ulteriore flag -B beta
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Suggerimenti per l’analisi
• Per un’analisi corretta, il numero di punti deve essere almeno pari al numero
di campioni che definiscono un ciclo della minima frequenza presente (la
fondamentale).
• Esempio: se la fondamentale è a 100 Hz, un suo ciclo dura 0,01 s. Con sr =
44100 Hz, fs non deve essere minore di 441 (si sceglie potenza di 2 da 512 in
su)
• Analisi “percettiva” delle caratteristiche del suono da analizzare:
–
–
–
–
–
Suono grave con attacco lento: f può dare problemi, t no → conviene frame size grande
Suono acuto con attacco rapido: t può dare problemi, f no → conviene frame size piccolo
Suono grave con attacco rapido: sia f sia t sono fattori problematici. Se il suono è armonico, ci
si concentra più sulla definizione temporale, se è inarmonico più su quella frequenziale
(aumentando frame size e windfact)
Suono acuto, armonico, con attacco lento: nessun problema, quindi impostazioni di default o al
limite frame size più alto per migliorare la definizione frequenziale
Suono acuto, inarmonico, con attacco rapido: frame size abbastanza grande e windfact alto
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Opcode pvoc
• L’opcode pvoc implementa la ricostruzione del segnale attraverso un
phase vocoder basato su FFT. E’ la controparte di risintesi, interna
all’orchestra di Csound, dell’analisi condotta precedentemente con
pvanal.
• Sintassi: ares pvoc ktimpnt, kfmod, ifilcod [, ispecwp] \
[, iextractmode] [, ifreqlim] [, igatefn]
ove i principali argomenti sono:
– ktimpnt (da “time pointer) - indicazione, istante per istante, del punto in
cui pvoc legge I dati dal file di analisi. Deve essere sempre positivo, ma
può comportare tanto un avanzamento quanto un arretramento del tempo
e ammette punti di discontinuità;
– kfmod - fattore di trasposizione della frequenza
– Ifilcod – identificativo del file di analisi
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Esempi
• Gli esempi sotto riportati richiedono di estrarre dall’archivio ZIP i file
audio e di collocarli in un’apposita cartella (ad es. C:\test) per poi
invocare il comando di analisi pvanal, con o senza specifici parametri.
• Applicazione del phase vocoder a segnale vocale umano:
→ 15_01_pvoc_speech.csd
• Applicazione del phase vocoder a campioni strumentali con diverse
caratteristiche timbriche e di pitch:
→ 15_02_pvoc_instruments.csd
• Applicazione del phase vocoder a un pizzicato d’archi:
→ 15_03_pvoc_pizzicato.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: phase vocoder
Scarica

Phase vocoder - Luca Andrea Ludovico