Skip to content Skip to navigation

OpenStax_CNX

You are here: Home » Content » Signal Processing in Processing: Campionamento e Quantizzazione

Navigation

Recently Viewed

This feature requires Javascript to be enabled.
 

Signal Processing in Processing: Campionamento e Quantizzazione

Module by: Davide Rocchesso, Pietro Polotti. E-mail the authors

Summary: Elementi di campionamento, ricostruzione, e quantizzazione di segnali 1D (suoni) e 2D (immagini), con riferimento al linguaggio Processing.

Campionamento

I suoni e le immagini possono essere considerati segnali, rispettivamente a una e due dimensioni. Il suono si può pensare come una fluttuazione di pressione acustica nel tempo, mentre le immagini si possono pensare come distribuzioni nello spazio di valori di luminanza o di colore, quest'ultimo nelle sue componenti RGB o HSB. I segnali, per poter essere trattati da dispositivi numerici di calcolo, debbono essere ridotti a sequenze di campioni discreti, e ciascun campione deve essere rappresentato da un numero finito di bit. La prima operazione si chiama campionamento, mentre la seconda rappresenta una quantizzazione del dominio dei numeri reali.

1-D: Suoni

Il campionamento, per i segnali mono-dimensionali è l'operazione che trasforma un segnale a tempo continuo (quale è ad esempio la fluttuazione di pressione atmosferica all'ingresso del nostro padiglione auricolare) in un segnale a tempo discreto, cioè in una sequenza di numeri. Esso restituisce i valori del segnale a tempo continuo letti a intervalli di T T secondi. Il reciproco dell'intervallo di campionamento è detto frequenza di campionamento F s =1T F s 1 T . In questa sede non esponiamo la teoria del campionamento ma cerchiamo solo di descriverne le manifestazioni. Per una trattazione più estesa, ma ancora accessibile, si rimanda a Introduction to Sound Processing. Per i nostri scopi, il campionamento di segnali 1-D può essere ridotto a tre fatti e un teorema.

  • Fatto 1: La Trasformata di Fourier di un segnale a tempo discreto è una funzione (detta spettro) di variabile continua ω ω, periodica di periodo 2π 2 π . Per un dato valore di ω ω, la trasformata di Fourier restituisce un numero complesso che si può interpretare come ampiezza e fase (traslazione nel tempo) della componente di segnale sinusoidale a tale frequenza.
  • Fatto 2: Il campionamento di un segnale a tempo continuo xt x t con intervallo T T produce il segnale a tempo discreto xn=xnT x n x n T , funzione della variabile discreta n n.
  • Fatto 3: Il campionamento con frequenza F s F s di un segnale a tempo continuo produce un segnale a tempo discreto il cui spettro è la ripetizione periodica con periodo F s F s dello spettro del segnale originale. La variabile di Fourier ω ω corrisponde alla frequenza in Hertz (o cicli al secondo) rappresentata dalla variabile f=ω2πT f ω 2 π T .

La Figura 1 mostra un esempio di spettro di segnale campionato con frequenza F s F s . Nell'esempio, il segnale a tempo continuo aveva tutte e sole le componenti in frequenza comprese tra F b F b e F b F b . Le repliche dello spettro originale sono a volte chiamate immagini.

Figura 1
Spettro di un segnale campionato
Spettro di un segnale campionato (repeti.png)

Premessi i fatti, si può avere una comprensione intuitiva del Teorema del Campionamento, storicamente legato ai nomi degli scienziati Nyquist e Shannon.

Theorem 1: Teorema del Campionamento

Un segnale a tempo continuo xt x t , il cui contenuto spettrale è limitato a frequenze inferiori a F b F b (cioè limitato in banda a F b F b ) si può ricostruire a partire dalla sua versione campionata xn x n se la frequenza di campionamento è superiore a due volte la banda (cioè se F s >2 F b F s 2 F b )

La ricostruzione non può che avvenire mediante un filtro che elimini le immagini spettrali diverse da quella direttamente proveniente dal segnale a tempo continuo originale, cioè le immagini le cui componenti in frequenza siano in valore assoluto superiori alla frequenza di Nyquist definita come F s 2 F s 2 . La condizione imposta dal teorema del campionamento equivale a richiedere che non ci siano sovrapposizioni tra le immagini spettrali. Se sovrapposizioni ci fossero, non sarebbe possibile realizzare un filtro atto a eliminare le copie dello spettro del segnale originale. Un filtro che tagliasse tutte le frequenze superiori alla frequenza di Nyquist produrrebbe un segnale che, rispetto al segnale originale, risulta affetto da aliasing. Il concetto di aliasing è ben illustrato nella Aliasing Applet, dove una sinusoide a tempo continuo è soggetta a campionamento. Se la frequenza della sinusoide è troppo alta rispetto alla frequenza di campionamento, si vede che che la sinusoide ricostruita a partire dai campioni è ben diversa, e di frequenza bassa. Abbiamo tutti familiarità con l'aliasing per come esso si manifesta nelle immagini in movimento, ad esempio quando le ruote della diligenza nei film western sembrano girare al contrario. In quel caso la frequenza di campionamento è il frame rate, o numero di immagini al secondo, e va messa in relazione alla velocità di rotazione delle ruote. Questo si inquadra tra i fenomeni stroboscopici .

Nel caso del suono, per rendersi conto di quali siano le conseguenze del fatto che lo spettro di un segnale discreto sia periodico di periodo 2π 2 π (vedi Figura 1) e di cosa avvenga nel caso di violazione del teorema del campionamento, esaminiamo un caso semplice. Consideriamo un suono generato da una somma di sinusoidi in rapporto armonico tra loro (ovvero, le cui frequenze sono multiple intere della frequenza più bassa, detta fondamentale). Lo spettro del suono così ottenuto sarà costituito da picchi in corrispondenza della frequenza fondamentale e dei suoi multipli interi. Tanto per fissare le idee, poniamo di lavorare ad una frequenza di campionamento di 44100 Hz e di voler sommare 10 sinusoidi. Dal teorema di campionamento sappiamo che, nel nostro caso, potremmo rappresentare correttamente (senza incorrere nel fenomeno dell'aliasing) tutte le frequenze fino a 22050 Hz. Quindi, onde evitare l'aliasing, la fondamentale del suono sintetico prodotto dovrà essere inferiore o uguale a 2205 Hz. Il codice Processing (con la libreria Beads) riportato nella tabella Tabella 1 realizza un generatore di suoni costituiti da 10 sinusoidi in rapporto armonico tra loro. Per produrre i suoni è sufficiente cliccare con il mouse in un punto qualsiasi della schermata. L'ascissa del punto corrisponderà alla frequenza della fondamentale e sulla schermata compariranno i picchi spettrali corrispondenti alle sinusoidi generate e sommate. Quando clicchiamo su di un punto approssimativamente di ascissa maggiore di 1/10 della larghezza della finestra, continuiamo a vedere dieci picchi spettrali. Abbiamo violato il teorema del campionamento e l'aliasing ha fatto capolino nella nostra rappresentazione.

Tabella 1
Aliasing test: Applet che permette di verificare l'effetto dell'aliasing su suoni ottenuti mediante somma di 10 sinusoidi con frequenze in rapporto armonico
 
import beads.*; // import the beads library
import beads.Buffer;
import beads.BufferFactory;

AudioContext ac; 
PowerSpectrum ps;

WavePlayer wavetableSynthesizer;
Glide frequencyGlide;
Envelope gainEnvelope;
Gain synthGain;

int L = 16384; // buffer size
int H = 10; //number of harmonics
float freq = 10.00; // fundamental frequency [Hz]
Buffer dSB;

void setup() {
  size(1024,200);

  frameRate(20);

  ac = new AudioContext();  // initialize AudioContext and create buffer
 
  frequencyGlide = new Glide(ac, 200, 10); // initial freq, and transition time
  dSB = new DiscreteSummationBuffer().generateBuffer(L, H, 0.5);
  wavetableSynthesizer = new WavePlayer(ac, frequencyGlide, dSB);
  
  gainEnvelope = new Envelope(ac, 0.0); // standard gain control of AudioContext
  synthGain = new Gain(ac, 1, gainEnvelope); 
  synthGain.addInput(wavetableSynthesizer); 
  ac.out.addInput(synthGain);
   
  // Short-Time Fourier Analysis
  ShortFrameSegmenter sfs = new ShortFrameSegmenter(ac);
  sfs.addInput(ac.out);
  FFT fft = new FFT();
  sfs.addListener(fft);
  ps = new PowerSpectrum();
  fft.addListener(ps);
  ac.out.addDependent(sfs);

  ac.start(); // start audio processing
  gainEnvelope.addSegment(0.8, 50); // attack envelope
}

void mouseReleased(){
  println("mouseX = " + mouseX);
}

void draw()
{
  background(0); 
  
  text("click and move the pointer", 800, 20); 
  frequencyGlide.setValue(float(mouseX)/width*22050/10); // set the fundamental frequency
                                                         // the 10 factor is empirically found
  float[] features = ps.getFeatures(); // from Beads analysis library  
  // It will contain the PowerSpectrum: 
  // array with the power of 256 spectral bands.
  if (features != null) { // if any features are returned
    for (int x = 0; x < width; x++){
      int featureIndex = (x * features.length) / width;
      int barHeight = Math.min((int)(features[featureIndex] * 0.05 *
        height), height - 1);
      stroke(255);
      line(x, height, x, height - barHeight);
    }
  }
}

public class DiscreteSummationBuffer extends BufferFactory {
  public Buffer generateBuffer(int bufferSize) { //Beads generic buffer
    return generateBuffer(bufferSize, 10, 0.9f); //default values
  }
  public Buffer generateBuffer(int bufferSize, int numberOfHarmonics, float amplitude)
  {
    Buffer b = new Buffer(bufferSize);

    double amplitudeCoefficient = amplitude / (2.0 * (double)numberOfHarmonics);
    double theta = 0.0;
    for (int k = 0; k <= numberOfHarmonics; k++) { //additive synthesis
      for (int i = 0; i < b.buf.length; i++) {
        b.buf[i] = b.buf[i] + (float)Math.sin(i*2*Math.PI*freq*k/b.buf.length)/20;
      }
    }
    return b;
  }
  public String getName() { //mandatory method implementation
    return "DiscreteSummation";
  }
}
 

2-D: Immagini

Supponiamo di avere una distribuzione continua, su un piano, di valori di luminanza cioè, più semplicemente, una immagine. Per poterla trattare con un calcolatore dobbiamo ridurla ad una sequenza di numeri, mediante campionamento. Ci sono molti modi per campionare una immagine, cioè per leggerne i valori di luminanza in punti discreti. Il più semplice dei modi è la lettura dei valori secondo una griglia regolare, con maglie di larghezza X X e Y Y. In modo analogo a quanto fatto per i suoni, si definiscono le frequenza spaziali di campionamento F X =1X F X 1 X e F Y =1Y F Y 1 Y . Come nel caso monodimensionale, anche per i segnali bidimensionali, o immagini, il campionamento può essere descritto mediante tre fatti e un teorema.

  • Fatto 1: La Trasformata di Fourier di un segnale a spazio discreto è una funzione (detta spettro) di due variabili continue ω X ω X e ω Y ω Y , periodica in due dimensioni con periodi 2π 2 π . Per una data coppia di valori ω X ω X e ω Y ω Y , la trasformata di Fourier restituisce un numero complesso che si può interpretare come ampiezza e fase (traslazione nello spazio) della componente di segnale sinusoidale a tali frequenze spaziali.
  • Fatto 2: Il campionamento di un segnale a spazio continuo sxy s x y con griglia di maglia X X, Y Y, produce il segnale a spazio discreto smn=smXnY s m n s m X n Y , funzione delle variabili discrete m m e n n.
  • Fatto 3: Il campionamento con frequenze spaziali F X F X e F Y F Y di un segnale a spazio continuo produce un segnale a spazio discreto il cui spettro è la ripetizione periodica secondo la griglia di maglia F X F X per F Y F Y dello spettro del segnale originale. Le variabili di Fourier ω X ω X e ω Y ω Y corrispondono alle frequenze in cicli per metro rappresentate dalle variabili f X = ω X 2πX f X ω X 2 π X e f Y = ω Y 2πY f Y ω Y 2 π Y .

La Figura 2 mostra un esempio di spettro di segnale bidimensionale campionato. Nell'esempio, il segnale a spazio continuo aveva tutte e sole le componenti in frequenza comprese nell'esagono centrato sullo zero. La forma esagonale del supporto spettrale (regione con energia spettrale non nulla) è meramente esemplificativa. Le repliche dello spettro originale sono a volte chiamate immagini spettrali.

Figura 2
Spettro di una immagine campionata
Spettro di una immagine campionata (repeti2D.png)

Premessi i fatti, si può avere una comprensione intuitiva del Teorema del Campionamento.

Theorem 2: Teorema del Campionamento (in 2D)

Un segnale a spazio continuo sxy s x y , il cui contenuto spettrale è limitato a frequenze spaziali contenute nel rettangolo di semilati F bX F bX e F bY F bY (cioè limitato in banda) si può ricostruire a partire dalla sua versione campionata smn s m n se le frequenze di campionamento spaziale sono superiori a due volte le rispettive bande (cioè se F X >2 F bX F X 2 F bX e F Y >2 F bY F Y 2 F bY )

In pratica, la maglia di campionamento non può essere più larga di un semi-periodo della più fine frequenza spaziale (cioè del più fine dettaglio) che è rappresentato nell'immagine. La ricostruzione non può che avvenire mediante un filtro che elimini le immagini spettrali diverse da quella direttamente proveniente dal segnale a spazio continuo originale, cioè le immagini le cui componenti in frequenza siano in valore assoluto superiori alla frequenza di Nyquist definita come F X 2 F X 2 e F Y 2 F Y 2 lungo le due direzioni. La condizione imposta dal teorema del campionamento equivale a richiedere che non ci siano sovrapposizioni tra le immagini spettrali. Se sovrapposizioni ci fossero, non sarebbe possibile realizzare un filtro atto a eliminare le copie dello spettro del segnale originale. Un filtro che tagliasse tutte le frequenze superiori alla frequenza di Nyquist produrrebbe un segnale che, rispetto al segnale originale, risulta affetto da aliasing.

Si fa notare come si possa produrre aliasing per sotto-campionamento (o decimazione) di una immagine campionata. Cioè, a partire da una immagine a spazio discreto, utilizzare solo una parte dei campioni selezionati secondo una griglia regolare corrisponde a creare ripetizioni periodiche delle immagini spettrali, che quindi possono finire con il sovrapporsi.

Per esplorare in maniera visuale i concetti di campionamento, sotto-campionamento, e aliasing, si consideri la applet che disegna ellissi . Con le frecce si possono raddoppiare o dimezzare i passi di sotto-campionamento orizzontale e verticale.

Una semplicissima introduzione a concetti elementari di elaborazione di immagini si trova in Digital Image Processing Basics.

Quantizzazione

Con gli aggettivi "numerico" ovvero "digitale" indichiamo sistemi che lavorano su segnali rappresentati mediante numeri, con la precisione (finita) consentita dai sistemi di calcolo. Fino ad ora abbiamo considerato i segnali a tempo discreto o spazio discreto come se fossero collezioni di numeri a precisione infinita, o numeri reali. Purtroppo, con i calcolatori si possono rappresentare al più sottoinsiemi finiti dei numeri razionali. Ciò significa che i nostri segnali vengono quantizzati.

Per i nostri scopi, la quantizzazione più interessante è quella lineare che si verifica, ad esempio, nel processo di conversione di un segnale analogico in segnale digitale. Se la parola di memoria che rappresenta un numero è fatta di b b bit, allora il campo di variazione di tale numero può essere discretizzato in 2b 2 b livelli di quantizzazione. Ogni valore compreso tra due livelli di quantizzazione può essere approssimato per troncamento o arrotondamento al livello più vicino. La Figura 3 mostra un esempio di quantizzazione con rappresentazione su 3 3 bit in complemento a due.

Figura 3
Campionamento e quantizzazione di un segnale analogico
Campionamento e quantizzazione di un segnale analogico (quant.png)

L'approssimazione introdotta dalla quantizzazione si manifesta in forma di rumore, detto appunto rumore di quantizzazione. Spesso, per l'analisi dei circuiti di elaborazione del suono, tale rumore si assume essere bianco e non correlato al segnale, ma nella realtà fenomenica esso è percettivamente assai legato al segnale stesso, tanto che la quantizzazione può essere percepita come un effetto.

Per esplorare in maniera visuale e uditiva il fenomeno della quantizzazione, si consideri la applet che consente di variare tra 1 1 e 8 8 il numero di bit dedicati alla rappresentazione di ciascuno dei tre canali RGB con cui si rappresenta il colore. Lo stesso numero di bit è anche dedicato alla rappresentazione di un segnale audio abbinato all'immagine. L'effetto visuale che si ottiene riducendo il numero dei bit è simile a una solarizzazione.

Exercise 1

Si estenda il codice dell'applet Tabella 1, in modo da aggiungere alcune modalità interattive:

  • Si renda la generazione dei suoni automatica variando ad ogni frame la frequenza fondamentale in modo casuale (si veda la random()).
  • Si renda dipendente dalla posizione orizzontale del mouse (mouseX) il frame rate (e quindi il metronomo con cui vengono generate le note).
  • Si renda dipendente dalla posizione verticale del mouse (mouseY) il numero delle armoniche presenti nel suono (e quindi la ricchezza spettrale, ovvero la brillantezza, delle note generate).
  • Si colori la finestra di background in modo che, da sinistra a destra, si passi progressivamente dal blu al rosso. In questo modo al colore blu corrisponderà un metronomo lento e al colore rosso un metronomo veloce.
  • Si renda il valore di saturazione dei colori della finestra dipendente dalla posizione verticale del mouse. In questo modo ad un suono con poche armoniche (timbro poco brillante) corrisponderà un colore tendente al grigio, mentre ad un timbro ricco di armoniche (timbro brillante) corrisponderà una colore intenso.
  • Si aggiunga un controllo per interrompere il calcolo dello spettro e creare un effetto di fermo immagine, mentre il suono continua ad essere generato (per esempio un click tenuto del mouse).
  • Si aggiunga un controllo tale che, in caso di fermo immagine (mouse premuto) si interrompa anche la generazione di nuove note e si abbia un effetto di "fermo nota", ovvero di nota tenuta (per esempio la pressione di un tasto preciso della tastiera).

Solution

Le estensioni proposte sono realizzate nel codice Processing.

References

  1. Davide Rocchesso. (2003). Introduction to Sound Processing. [http://profs.sci.univr.it/~rocchess/SP/sp.pdf]. Mondo Estremo.

Content actions

Download module as:

PDF | EPUB (?)

What is an EPUB file?

EPUB is an electronic book format that can be read on a variety of mobile devices.

Downloading to a reading device

For detailed instructions on how to download this content's EPUB to your specific device, click the "(?)" link.

| More downloads ...

Add module to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks