Transcript Appunti

LABORATORIO DI
INFORMATICA MUSICALE
MODULO 1: MANIPOLAZI ONE DEL SEGNALE AUDI O
G . P R E S TI - 1 3 / 0 3 / 2 0 1 4 - L E Z I O N E 2
1. CONVERSIONE DA ANALOGICO A DIGITALE
Convertire un segnale da analogico a digitale significa descrivere un onda come sequenza di numeri,
che rappresentano il valore assunto dal segnale ad intervalli regolari di tempo.
Figura 1: A - Segnale da convertire; B - Segnale campionato; C - Segnale
quantizzato; D - Segnale ricostruito (si noti l'errore di quantizzazione) .
Il teorema del campionamento di Nyquist/Shannon dice che è possibile campionare esattamente un
saegnale a patto che la frequenza con cui campioniamo sia superiore al doppio della frequenza
massima presente nel segnale; in caso contrario si introduce aliasing: gli armonici oltre
creano
note fantasma nello spettro campionato.
La quantizzazione introduce sempre del rumore, causato dalla periodicità degli arrotondamenti
dovuti alla riduzione del numero di bit. Il rumore di quantizzazione può essere solo mascherato
attraverso l'introduzione di dithering, che rende aperiodici gli errori di arrotondamento.
In linea di massima si consiglia di lavorare ad una fs coerente con il formato finale ed una profondità di
24 bit. Se dovesse essee necessario ricampionare il segnale scegliete il software adatto all'operazione
aiutandovi con le comparazioni disponibili all'indirizzo: http://src.infinitewave.ca/
In allegato a questo pdf potete trovare degli esempi di aliasing e rumore di quantizzazione (con e senza
dither).
2. DECIBEL E DINAMICA
Un segnale può essere definito come la variazione di una grandezza nel tempo. Nel caso di segnali
audio questa grandezza è la pressione del mezzo attraverso cui si propaga il suono. Più le variazioni
sono ampie, più il suono sarà intenso. La pressione sonora si misura in dBspl, relativi alla pressione Pref
(il minimo suono mediamente percepibile):
Tabella 1: Diversi valori di dB spl
In realtà la soglia di udibilità dipende dalla frequenza del segnale. Attraverso lo studio delle curve
isofoniche è possibile avere un'idea del range dinamico e del range di frequenze realmente udibili nel
caso di udito sano.
Figura 2: Area sensibile dello spazio "pressione sonora - frequenza". Si noti
l'intervallo dinamico di fruizione della musica.
Nel dominio digitale risulta più utile esprimere il livello sonoro in relazione al range massimo reso
disponibile dal numero di bit utilizzati per la conversione (n). Questa misura prende il nome di dB full
scale (dBfs) e la sua estensione (DR) corrisponde al rapporto tra il massimo valore codificabile 2n (oltre
il quale si distorce il segnale) e il livello minimo del rumore di quantizzazione.
Ad esempio, nel caso di n=16 bit, si ottiene una scala che va da -98.09 dBfs a 0 dBfs. Ampiezze inferiori di
-98dBfs non possono essere codificate, mentre ampiezze maggiori di 0dBfs causano distorsione (o clip)
digitale.
Figura 3: Level meter che mostra picco e RMS in dB fs .
Figura 4: Segnale sinusoidale. L'asse verticale può essere espresso in valori decimali ,
percentuali o logaritmici (dB fs ). L'asse temporale può essere espresso in byte occupati
dal segnale, campioni audio o frazioni di secondo.
Figura 5: Forma d'onda, inviluppo e RMS di un segnale audio.
Il profilo del valore assoluto del segnale viene chiamato inviluppo, e rappresenta il valore di picco del
suono raggiunto nell'intorno di un dato istante. Sebbene l'inviluppo aiuti ad avere un idea
dell'escursione dinamica di un suono, è l'RMS (root mean square) a rappresentare una stima della
potenza di un segnale x in una certa finestra temporale n:
Il rapporto tra l'inviluppo e l'RMS viene chiamato crest factor e rappresenta una stima della dinamica
del materiale analizzato. In base alla dimensione della finestra temporale su cui viene calcolato l'RMS
si può parlare di dinamica a breve termine (finestre più piccole di una battuta musicale) o a lungo
termine (finestre di alcune battute). Per avere un idea di quanto è dinamico un brano si può utilizzare
il plugin gratuito: http://www.dynamicrange.de/es/es/download
La dinamica a breve termine può essere riconosciuta come una caratteristica del suono, mentre la
dinamica a lungo termine (o macrodinamica) viene riconosciuta come una caratteristica strutturale
del brano (ad esempio dal piano della strofa al forte del ritornello).
3. RAPPRESENTAZIONE DELLA STEREOFONIA
In presenza di un segnale stereofonico, le informazioni possono essere codificate su due canali come
coppia di segnali da destinare agli altoparlanti (L e R) o come somma e differenza di L e R (codifica
MS). Nel secondo caso M rappresenta la componente centrale dell'immagine stereo (Mid), mentre S
rappresenta la componente laterale dell'immagine stereo (Side).
All'indirizzo http://www.voxengo.com/product/msed/ è possibile scaricare un plugin gratuito per la
codifica e decodifica MS. Ad ogni modo le operazioni necessarie per la codifica sono:
Codifica:
Decodifica:
L, R, M e S possono essere rappresentati nel medesimo grafico disegnando per ogni istante un punto
che ha coordinate x = S e y = M. In questo modo tutti i punti che risiedono sulle diagonali
rappresentano i camponi audio che assumono il valore 0 su L o su R (i suoni completamente a destra o
a sinistra); i punti sull'asse verticale sono campioni per cui L=R (segnali in fase) e i punti sull'asse
orizzontale sono campioni in controfase (L = -R). Analogamente se una nuvola di punti è schiacciata
sull'asse verticale significa che L e R sono principalmente in fase, mentre una nuvola schiacciata
sull'asse orizzontale indica che L e R sono in controfase (possibilmente da evitare: il materiale perde la
mono-compatibilità). Più la nuvola è larga più il suono sarà diffuso nell'immagine stereo.
Figura 6: Phase scope. Ogni punto corrisponde a campioni simultanei
provenienti dai due canali, a cui sono assegnate le coordinate x=S e y=M.
All'indirizzo http://www.bluecataudio.com/Products/Product_TripleEQ/ è possibile reperire un
plugin gratuito per equalizzare un segnale stereo nel dominio MS (effettua internamente la codifica e
decodifica MS, in questo caso non è necessario il plugin citato in precedenza)
4. RAPPRESENTAZIONE DELLO SPETTRO
All'inizio del diciannovesimo secolo Fourier ha dimostrato come ogni segnale che si sviluppa nel
tempo possa essere rappresentato come somma di infinite sinusoidi.
Suoni periodici sono composti da sinusoidi la cui frequenza è un multiplo intero di una frequenza
fondamentale (la nota suonata) mentre suoni aperiodici, come il rumore, sono composti da un
continuo di sinusoidi a diverse frequenze.
Figura 7: Segnali nel dominio del tempo (a sinistra) e nel dominio della
frequenza (a destra). Nel primo caso è visibile la forma d'o nda, nel secondo
lo spettro.
Figura 8: Spettro di un'onda a dente di sega. Un segnale di queso tipo è composto da tutte le sinusoidi con
frequenza uguale ai multipli interi della fondamentale. In questo grafico l'asse orizzontale è rappresentato in
scala lineare: ogni armonico è equidistante dagli altri .
Figura 9: Lo stesso segnale della figura 8. In questo caso l'asse delle frequenze è in scala logaritmica, questo
significa che le ottave (o le note) sono equidistanti tra loro. Questo stile di visualizzazione è il più comune, in
quanto generalmente si ha necessità di controllare le basse freq uenze con una precisione maggiore rispetto
alle alte frequenze (che vengono schiacciate nella parte a destra del grafico).
Figura 10: Analizzatore di spettro a terzi d'ottava. Utile per tenere sotto
controllo la dinamica di ogni banda di frequenze (in b ianco l'RMS e in
giallo il picco)
Figura 2: Sonogramma. Sull'asse orizzontale c'è sempre la frequenza, ma
sull'asse verticale risiede il tempo (l'ampiezza è data dal colore). Utile per
analizzare le variazioni timbriche nel tempo.
5. APPENDICE SULLO SPETTRO
Se foste interessati ad effettuare esperimenti nel dominio della frequenza ecco un piccolo esempio di
codice Matlab per la conversione di un segnale monofonico tramite l'utilizzo di FFT (trasformata
veloce di Fourier):
01
02
03
04
05
06
08
09
10
11
12
%% Codice Matlab per calcolo della FFT
input
= wavread ('Test.wav');
framesize
= 1024;
bin_utili
= floor(framesize/2) + 1;
frames
= buffer(input, framesize);
window
= hanning(framesize);
frames
= bsxfun(@times,frames,window);
complex
= fft(frames)/framesize;
magnitudine = abs(complex(1:bin_utili,:));
image (magnitudine,'CDataMapping','scaled');
axis xy
01
02
03
04
05
06
08
09
10
11
12
%%
%
%
%
%
%
%
%
%
%
%
Commento al codice
Carico un file nel vettore 'input'
Decido la risoluzione temporale (in campioni)
Calcolo il numero di quanti con cui verrà camponato lo spettro
Divido il segnale di input in segmenti
Creo una maschera per portare a zero la testa e la coda dei segmenti
Moltiplio ogni segmento con la maschera
Calcolo la FFT e scalo il risultato (un side-effect dell'algoritmo)
Metto in 'magnitudine' il livello di ogni sinusoidale del segnale
Visualizzo come colore la potenza delle sinusoidi nel tempo
Oriento gli assi in modo da avere x=frequenza e y=tempo
Nel grafico ottenuto l'asse orizzontale rappresenta il tempo espresso in numero di segmenti (ogni
colonna è la FFT di un segmento di audio). L'asse verticale rappresenta la frequenza in scala lineare
(alla base c'è lo 0 e al vertice fs/2, diviso in n intervalli con n = bin_utili). Il colore rappresenta il
valore di ampiezza dello spettro del segnale.
Per avere le ampiezze espresse in dBfs si può trasformare magnitudine in: 20*log(magnitudine).