Lezione 16
Analisi a eterodina e predizione lineare
Programmazione timbrica - Prof. Luca A. Ludovico
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
• L’analisi con PVANAL è adatta per qualsiasi tipo di suono,
a spettro armonico o inarmonico, ma è lenta nella risintesi
con pvoc.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Analisi con filtro a eterodina
• L’analisi con filtro a eterodina ricerca un certo numero di componenti
armoniche, stabilito dall’utente, e per ogni armonica misura
l’ampiezza e la frequenza con un intervallo di tempo anch’esso
stabilito dall’utente.
• Misurando anche la frequenza, l’analisi è in grado di seguire anche le
componenti non perfettamente armoniche, come spesso accade nella
fase iniziale di emissione di un suono.
• Al contrario della sintesi e risintesi con phase vocoder, in questo caso
l’analisi con HETRO è adatta solo a spettri armonici o quasi armonici
ma la risintesi con adsyn è molto rapida.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Analisi con HETRO
• Anche HETRO, come PVANAL e LPANAL, appartiene alla famiglia di
Analysis File Generation di Csound.
• Il suo obiettivo è decomporre un file audio in ingresso in componenti
sinusoidali. Il file generato servirà poi come argomento dell’opcode
Csound di generazione del suono chiamato adsyn.
• Sintassi:
csound -U hetro [flags] infilename outfilename
hetro [flags] infilename outfilename
• Tra identificatori dei flag e valori loro assegnati lo spazio è sempre
opzionale, per tutti i comandi della famiglia di Analysis File
Generation.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Flag per HETRO
-s srate – frequenza di campionamento dell’input (sovrascrive header, se assenti
entrambe le indicazioni default = 10000 Hz). Non è richiesto che questo valore sia
allineato con l’sr specificato nell’orchestra
-c channel – canale analizzato (default = canale 1)
-b begin – istante iniziale in secondi del segmento da analizzare (default = 0.00)
-d duration – durata in secondi del segmento, di default 0.0 che significa l’intero
file, valore massimo 32.766 secondi
-f begfreq – frequenza iniziale stimata per la fondamentale (default = 100 Hz)
-h partials – numero di armoniche ricercato (default = 10)
-M maxamp – ampiezza di picco sommando tutte le tracce concorrenti (default =
32767)
-m minamp – soglia minima al di sotto della quale una coppia ampiezze/frequenza
viene ignorata nella somma risultante. Valori tipici: 128 (-48dB), 64 (-54 dB), 32
(-60dB), 0 (nessuna soglia). Default = 64.
-n brkpts – numero iniziale di punti di analisi equidistribuiti per ciascuna traccia di
ampiezza/frequenza, prima dell’applicazione delle soglie (default = 256)
-l cutfreq – usa passabasso Butterworth di 3o ordine con freq. di taglio cutfreq (in
Hz) anziché il filtro a pettine (default = 0, ossia non usare)
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Esempio 1
• Si consideri il comando:
hetro -s44100 -b.5 -d2.5 -h16 -M24000 audiofile.test adsynfile7
• Questo comando analizzerà 2.5 secondi del canale 1 di un file chiamato
"audiofile.test", registrato a 44.1 kHz, partendo a 0.5 secondi dall’inizio.
Nell’analisi si chiede di valutare l’andamento delle prime 16 armoniche del
suono. L’ampiezza di picco per la somma è pari a 24000.
• Il risultato sarà salvato in un file chiamato "adsynfile7".
• I restanti valori, non specificati e quindi impostati al default, sono:
– 256 punti di analisi per traccia di frequenza/ampiezza
– stima della fondamentale a 100 Hz
– soglia minima di ampiezza a -54dB
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Esempio 2
• E’ molto importante stabilire un
numero congruo di punti di analisi
(breakpoint), soprattutto quando i
suoni hanno attacco rapido o
complesso: un numero troppo
piccolo di breakpoint potrebbe
semplificare troppo l’analisi,
perdendo dati significativi per la
risintesi.
• Ad esempio, si consideri
l’inviluppo d’ampiezza della
fondamentale a 430 Hz di un
pizzicato di viola, rispettivamente
analizzata con –n30 e –n200
(a lato: l’originale, la prima e la
seconda analisi)
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
n = 30, eccessiva semplificazione
Il file di analisi prodotto
• Il file di output contiene serie temporali di valori di ampiezza e
frequenza per ciascuna parziale.
• L’informazione è codificata come serie di punti (detti breakpoint)
nella forma (time, value, time, value, ....) usando interi a 16 bit
nell’intervallo [0..32767].
• Gli istanti temporali sono espressi in millisecondi e le frequenze in
Hertz (cps). I dati dei breakpoint sono sempre non negativi, e i valori
-1 e -2 implicano l’inizio di una nuova traccia di ampiezza e di
frequenza. Una traccia viene sempre conclusa dal valore 32767. Prima
di essere scritta, ogni traccia subisce il calcolo delle soglie.
• Ciascuna componente parziale viene definita da due insiemi di
breakpoint, uno per le ampiezze e uno per le frequenze.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Il file di analisi prodotto
Un file di analisi può presentarsi come segue:
-1
-2
-1
-2
-2
-2
-1
-1
time1
time1
time1
time1
time1
time1
time1
time1
value1
value1
value1
value1
value1
value1
value1
value1
... timeK valueK 32767
... timeL valueL 32767
... timeM valueM 32767
... timeN valueN 32767
..........
..........
..........
..........
;
;
;
;
amplitude breakpoints for partial 1
frequency breakpoints for partial 1
amplitude breakpoints for partial 2
frequency breakpoints for partial 2
; pairable tracks for partials 3 and 4
Si noti come si possono interpolare le sequenze di breakpoint, alternando
ampiezze e frequenze per ciascuna traccia e/o elencando tutte le frequenze
seguite da tutte le ampiezze o viceversa (se sono in ugual numero, come previsto,
si possono ricostruire gli accoppiamenti).
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Opcode adsyn
• L’opcode adsyn è la controparte di risintesi, interna all’orchestra di
Csound, dell’analisi condotta precedentemente con HETRO. La
risintesi ha luogo come un insieme additivo di sinusoidi controllate
singolarmente, usando un banco di oscillatori.
• Sintassi: ares adsyn kamod, kfmod, ksmod, ifilcod
ove
– kamod è il coefficiente di ampiezza delle parziali
– kfmod è il moltiplicatore di frequenza, ricalcolato a k-rate (ad es.
1 = nessuna traspozionione, 1.5 = una quinta sopra, ecc.)
– ksmod è il moltiplicatore della velocità di lettura del file di analisi
(ad es. 1 = nessuna modifica, 2 = velocità di lettura doppia)
– ifilcod è l’identificatore del file di analisi (stringa o numero)
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
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 HETRO, con o senza specifici parametri.
• Analisi e risintesi con parametri di default (file .het incluso nello ZIP):
→ 16_01_eterodina_kick.csd
• Fine tuning dell’analisi con il commando HETRO, con impostazione
esplicita di una frequenza fondamentale all’incirca alla metà di quella
reale:
"C:\Program Files (x86)\Csound6\bin\hetro" -f420 -n4096 bell.wav bell.het
→ 16_02_eterodina_campana.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Codifica per predizione lineare
• La codifica per predizione lineare (linear predictive coding, LPC) viene
utilizzata principalmente per la sintesi della voce parlata, ma anche
per la voce cantata e per altri suoni.
• L’approccio è simile alla sintesi per modelli fisici: si tenta di
riprodurre il comportamento del tratto vocale umano partendo da due
possibili fonti di eccitazione:
–
–
Eccitazione armonica, prodotta dalle corde vocali e corrispondente ai suoni
vocalizzati
Eccitazione inarmonica, tipicamente rumore bianco, dato dal flusso d’aria in uscita
dai polmoni e corrispondente ai suoni consonantici
• In questo caso l’analisi avviene con LPANAL. Il file di analisi ottenuto
contiene i dati per guidare un banco di filtri per la risintesi, che ha
luogo in Csound attraverso la coppia di opcode lpread/lpreson.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Risultati dell’analisi LPC
• Durante la fase di analisi del suono originario, vengono estrapolate per
ciascuna finestra di analisi le seguenti caratteristiche:
– ampiezza efficace (o RMS) del segnale
– individuazione della frequenza fondamentale
– errore commesso nel calcolo della frequenza, utile per
discriminare tra suoni vocalizzati (errore piccolo) e suoni non
vocalizzati (errore grande)
– ampiezza efficace dei residui dell’analisi, ossia la misura
dell’imprecisione della risintesi effettuata con eccitazione
armonica
• Anticipazione: queste 4 sequenze di valori verranno riportate a k-rate
in uscita dall’opcode lpread, effettuando interpolazione tra i frame
letti dal file di analisi.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Analisi con LPANAL
• L’analisi con LPANAL effettua sia pitch tracking sia predizione lineare a
n poli sullo spettro, producendo in uscita una sequenza di frame
ordinati nel tempo con informazioni di controllo per la risintesi Csound.
• Sintassi:
csound -U lpanal [flags] infilename outfilename
lpanal [flags] infilename outfilename
• Principali flag:
-s srate – frequenza di campionamento dei file audio
-c channel – numero del canale da analizzare
-b begin, -d duration – inizio e durata in secondi del segmento da analizzare
-p npoles – numero di poli per l’analisi (default = 34, max = 50)
-h hopsize – num. punti tra frame consecutivi (default = 200, max = 500)
-P mincps, -Q maxcps – frequenza minima e massima (in Hz) del pitch tracking.
-P0 implica nessun pitch tracking. Più è stretto l’intervallo di pitch, più è
accurata la stima. I valori di default sono -P70, -Q200.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Esempi di analisi con LPANAL
lpanal -p26 -d2.5 -P100 -Q400 audiofile.test lpfil22
analizza i primi 2.5 secondi di un file audio chiamato "audiofile.test“.
Vengono prodotti (sr/200) frame al secondo, essendo 200 l’hopsize di
default. Il valore di sr, non essendo specificato, viene letto dall’header
del file audio e, in assenza di questo, impostato al valore di default di
10000 Hz.
Ogni frame di analisi contiene coefficienti di filtri a 26 poli, e il pitch
viene stimato tra i 100 e i 400 Hz.
Il file derivante dall’analisi viene salvato come "lpfil22" nella cartella
corrente.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Risintesi LPC: opcode lpread
• Per la risintesi di file ottenuti con LPANAL sono necessari due opcode
Csound: lpread, che legge il file di analisi, e lpreson, che implementa
il banco di filtri. Il segnale di eccitazione va fornito dall’esterno.
• Sintassi di lpread:
krmsr, krmso, kerr, kcps lpread ktimpnt, ifilcod [, inpoles] [, ifrmrate]
• Argomenti in ingresso:
– ktimpnt – istante di lettura del file di analisi (puntatore), necessariamente
positivo ma con possibilità di muoversi avanti e indietro;
– ifilcod – identificatore del file di analisi;
– inpoles (opzionale, default = 0) – numero di poli nell’analisi. Necessario
solo se il file di analisi non ha header, in caso contrario ignorato;
– ifrmrate (opzionale, default = 0) – frame rate al secondo nell’analisi.
Necessario solo se il file di analisi non ha header, in caso contrario
ignorato.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Risintesi LPC: opcode lpread
• Sintassi di lpread:
krmsr, krmso, kerr, kcps lpread ktimpnt, ifilcod [, inpoles] [, ifrmrate]
• Uscite:
– krmsr – root mean square (rms) del residuo di analisi
– krmso - rms del segnale originale
– kerr – segnale di errore normalizzato (tra 0 e 1) derivato durante l’analisi
predittiva, basso per materiali intonati (periodici) e alto per rumori
– kcps - pitch in Hz
• Ad ogni periodo di controllo, lpread interpola i frame adiacenti
per determinare in modo più accurato i valori in uscita e
l’impostazione dei coefficienti dei filtri passati internamente a
lpreson.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
Risintesi LPC: opcode lpreson
• L’opcode lpreson risintetizza un segnale partendo dai dati passati
internamente da un precedente opcode lpread. In generale, lpreson permette
di controllare contenuto tempo-variante e modellazione spettrale di un
segnale composto attraverso il contenuto spettrale dinamico di un altro
segnale.
• Ci può essere un numero arbitrario di coppie lpread/lpreson in uno strumento
o in un’orchestra, e questi opcode possono leggere dallo stesso file di analisi o
da file diversi in modo indipendente.
• Sintassi: ares lpreson asig
• Nella risintesi vocale, l’ingresso intonato di lpreson è un segnale periodico a
banda ampia o un treno di impulse ottenuto tramite buzz, mentre la sorgente
non intonata viene prodotta con rand.
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare
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 LPANAL, con o senza specifici
parametri.
• Orchestra “parlante”: un’orchestra “legge” un messaggio vocale. Il
segnale di eccitazione cui si applica il risultato dell’analisi è fornito da
un file audio ricco di frequenze).
→ 16_03_talking_orchestra.csd
• Esempio con eccitazione di tipo armonico e non armonico. Richiede
l’uso di salti condizionati e incondizionati (vedi prossime lezioni).
→ 16_04_lpc_vocale.csd
Programmazione timbrica - Prof. Luca A. Ludovico
Analisi e risintesi: analisi a eterodina e predizione lineare