<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5 plus MathML//EN" "http://cnx.rice.edu/cnxml/0.5/DTD/cnxml_mathml.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="None">
  <name>Signal Processing in Processing: Campionamento e Quantizzazione</name>
  <metadata>
  <md:version>1.13</md:version>
  <md:created>2005/03/09 08:43:14 US/Central</md:created>
  <md:revised>2007/01/22 10:48:13.789 US/Central</md:revised>
  <md:authorlist>
      <md:author id="drocchesso">
      <md:firstname>Davide</md:firstname>
      
      <md:surname>Rocchesso</md:surname>
      <md:email>Davide.Rocchesso@univr.it</md:email>
    </md:author>
      <md:author id="ppolotti">
      <md:firstname>Pietro</md:firstname>
      
      <md:surname>Polotti</md:surname>
      <md:email>polotti@sci.univr.it</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="drocchesso">
      <md:firstname>Davide</md:firstname>
      
      <md:surname>Rocchesso</md:surname>
      <md:email>Davide.Rocchesso@univr.it</md:email>
    </md:maintainer>
    <md:maintainer id="ppolotti">
      <md:firstname>Pietro</md:firstname>
      
      <md:surname>Polotti</md:surname>
      <md:email>polotti@sci.univr.it</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>Quantization of sounds and images</md:keyword>
    <md:keyword>Sampling of 1D and 2D signals</md:keyword>
  </md:keywordlist>

  <md:abstract>Elementi di campionamento, ricostruzione, e quantizzazione di segnali 1D (suoni) e 2D (immagini), con riferimento al linguaggio Processing.</md:abstract>
</metadata>

  <content>
    <section id="campionamento">
      <name>Campionamento</name>
      <para id="intro_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 <emphasis>campioni</emphasis> discreti, e ciascun
	campione deve essere rappresentato da un numero finito di
	bit. La prima operazione si chiama <term>campionamento</term>,
	mentre la seconda rappresenta una <term>quantizzazione</term>
	del dominio dei numeri reali.
      </para>
      <section id="campionamento1D">
	<name>1-D: Suoni</name>
	<para id="campionamento1Dp">
	  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 <m:math> <m:ci>T</m:ci> </m:math> secondi. Il
	  reciproco dell'intervallo di campionamento è detto
	  <term>frequenza di campionamento</term> <m:math>
	    <m:apply>
	      <m:eq/>
	      <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>s</m:mn>
		</m:msub>
	      </m:ci>
	    <m:apply>
	      <m:divide/>
	      <m:cn>1</m:cn>
	      <m:ci>T</m:ci>
	    </m:apply>
	    </m:apply>
	  </m:math>. 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 <cite src="#rocISP">Introduction
	  to Sound Processing</cite>.  Per i nostri scopi, il
	  campionamento di segnali 1-D può essere ridotto a tre fatti
	  e un teorema.
	</para>
	<list id="fatti">
	  <item><name>Fatto 1</name> La <cnxn document="m0046">Trasformata di Fourier</cnxn> di un
	      segnale a tempo discreto è una funzione (detta
	      <term>spettro</term>) di variabile continua <m:math>
	      <m:ci>ω</m:ci> </m:math>, periodica di periodo
	      <m:math>
	      <m:apply>
		<m:times/>
		<m:cn>2</m:cn>
		<m:ci>π</m:ci>
	      </m:apply>
 	      </m:math>. Per un dato valore di
	      <m:math><m:ci>ω</m:ci> </m:math>, 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. 
	  </item>
	  <item><name>Fatto 2</name>Il campionamento di un segnale a
	  tempo continuo <m:math>
	      <m:apply>
		<m:ci type="fn">x</m:ci>
		<m:ci>t</m:ci>
	      </m:apply>
	    </m:math>
	    con intervallo <m:math>
	      <m:ci>T</m:ci> 
	    </m:math> produce il segnale a tempo discreto <m:math>
	      <m:apply>
		<m:eq/>
	      <m:apply>
		<m:ci type="fn">x</m:ci>
		<m:ci>n</m:ci>
	      </m:apply>
	      <m:apply>
		<m:ci type="fn">x</m:ci>
		  <m:apply>
		    <m:times/>
		    <m:ci>n</m:ci>
		    <m:ci>T</m:ci>
		  </m:apply>
	      </m:apply>		
	      </m:apply>
	    </m:math>, funzione della variabile discreta <m:math>
	      <m:ci>n</m:ci>
	    </m:math>.
	  </item>
	  <item><name>Fatto 3</name> Il campionamento con frequenza
	  <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>s</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math> di un segnale a tempo continuo produce un
segnale a tempo discreto il cui spettro è la ripetizione periodica con
periodo <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>s</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math> dello spettro del segnale originale. La
	    variabile di Fourier <m:math> <m:ci>ω</m:ci>
	    </m:math> corrisponde alla frequenza in Hertz (o cicli al
	    secondo) rappresentata dalla variabile <m:math>
	      <m:apply>
		<m:eq/>
		<m:ci>f</m:ci>
		<m:apply>
		  <m:divide/>
		  <m:ci>ω</m:ci>
		  <m:apply>
		    <m:times/>
		    <m:cn>2</m:cn>
		    <m:ci>π</m:ci>
		    <m:ci>T</m:ci>
		  </m:apply>
		</m:apply>
	      </m:apply>
	    </m:math>.
	  </item>
	</list>
	<para id="spettro_esp">
	  La <cnxn target="repeti"/> mostra un esempio di spettro di segnale campionato con frequenza <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>s</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math>. Nell'esempio, il segnale a tempo continuo aveva tutte e sole le componenti in frequenza comprese tra <m:math>
	    <m:apply>
	      <m:minus/>
	      <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>b</m:mn>
		</m:msub>
	      </m:ci> </m:apply> </m:math> e <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>b</m:mn>
		</m:msub>
	      </m:ci>
	  </m:math>. Le repliche dello spettro originale sono a volte
	  chiamate <emphasis>immagini</emphasis>.
	</para>
	<figure id="repeti">
	  <name>Spettro di un segnale campionato</name>
	  <media type="image/png" src="repeti.png">
	  </media>
	</figure>
	<para id="teorema_campp">
	  Premessi i <cnxn target="fatti">fatti</cnxn>, si può avere
	  una comprensione intuitiva del Teorema del Campionamento,
	  storicamente legato ai nomi degli scienziati Nyquist e
	  Shannon.
	</para>
	<rule id="teorema_campionamento" type="theorem">
	  <name>Teorema del Campionamento</name>
	  <statement>
	    <para id="campiona_statement">
	    Un segnale a tempo continuo <m:math>
	      <m:apply>
		<m:ci type="fn">x</m:ci>
		<m:ci>t</m:ci>
	      </m:apply>
	    </m:math>, il cui contenuto spettrale è limitato a
	    frequenze inferiori a <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>b</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math> (cioè limitato in banda a <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>b</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math>) si può ricostruire a partire dalla sua versione
		campionata <m:math> <m:apply> <m:ci type="fn">x</m:ci>
		<m:ci>n</m:ci>
	      </m:apply>
	    </m:math> se la frequenza di campionamento è superiore a
	      due volte la banda (cioè se <m:math>
		<m:apply>
		  <m:gt/>
		  <m:ci>
		    <m:msub>
		      <m:mi>F</m:mi>
		      <m:mn>s</m:mn>
		    </m:msub>
		  </m:ci>
		  <m:apply>
		    <m:times/>
		    <m:cn>2</m:cn>
		  <m:ci>
		    <m:msub>
		      <m:mi>F</m:mi>
		      <m:mn>b</m:mn>
		    </m:msub>
		  </m:ci>
		  </m:apply>
		</m:apply>
	      </m:math>)
	    </para>
	  </statement>
	</rule>
	<para id="camp_rico">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 <term>frequenza di Nyquist</term>
	  definita come <m:math>
	    <m:apply>
	      <m:divide/>
	      <m:ci><m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>s</m:mn>
		</m:msub>
	      </m:ci>
	      <m:cn>2</m:cn>
	    </m:apply>
	  </m:math>. La condizione imposta dal <cnxn target="teorema_campionamento">teorema del campionamento</cnxn>
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
<term>aliasing</term>. Il concetto di aliasing è ben illustrato nella
<cnxn document="m11448"> Aliasing Applet</cnxn>, 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
<term>frame rate</term>, o numero di immagini al secondo, e va messa
in relazione alla velocità di rotazione delle ruote. Questo si inquadra tra i fenomeni  <link src="http://www.michaelbach.de/ot/mot_strob/">stroboscopici
</link>.
	</para>



<para id="applet_aliasing">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
 
<m:math>
	      <m:apply>
		<m:times/>
		<m:cn>2</m:cn>
		<m:ci>π</m:ci>
	      </m:apply>
 	      </m:math> 

(vedi <cnxn target="repeti"/>) 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 (+ Sonia) riportato nella
tabella <cnxn target="aliasingTab"/> 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.
</para>


<table id="aliasingTab" frame="all">
	      <tgroup cols="2" align="left" colsep="1" rowsep="1">
		<colspec colname="col1" colnum="1" colwidth="60"/> 
		<colspec colname="col2" colnum="2" colwidth="340"/>
		<tbody>
		  <row>
		    <entry>
		      <link src="./aliasingDP.html"> Aliasing test: Applet che
permette di verificare l'effetto dell'aliasing su suoni ottenuti mediante somma di 10 sinusoidi con frequenze in rapporto armonico </link>
		    </entry> 
		    <entry>
	    <code type="block">
          <![CDATA[       
import pitaru.sonia_v2_9.*;

int L = 1024; // lunghezza della FFT (frequenze positive)
int L2 = int(L*4); // lunghezza della tabella
int sr = 44100;
int H = 10; //numero delle armoniche
int ampiezza;
float[] Data;
float freq = 10.00; // frequenza fondamentale [Hz]
Sample mySample;
float oneCycle = TWO_PI/L; 

void setup() {
  size(1024,200);
  framerate(1);
  colorMode(HSB, 360, height, height);
  Sonia.start(this);
  mySample = new Sample(L2); // empty sample with L2 frames.
  Data = new float[L2]; // array with as many frames as samples.
  //populate the array with sample data, i.e. a sine wave 
  for(int k = 1; k <=H; k++){      // SINTESI ADDITIVA
    for(int i = 0; i < L2; i++){
      Data[i] = Data[i] + sin(i*oneCycle*freq*k)/10;
    }
  }
  mySample.write(Data); // write from 'Data' array into sample
  mySample.getSpectrum(L); // initial steps
  mouseReleased();
}

void draw()
{
  background(0,20,0);
  strokeWeight(0);
  stroke(0,230,0);
  mySample.getSpectrum(L);  // FFT
  stroke(255); //println();
  for ( int i = 1; i < L; i++){
    ampiezza = int(mySample.spectrum[i]*L);
    line(i, height, i, height - 2*ampiezza/(0.003*i));
  }
}

void mouseReleased()
{
  freq = (float)(mouseX/2);  // per cambiare la fondamentale
  println(freq + " Hz");
  for (int i = 0; i < L2; i++) Data[i] = 0;
  for(int k = 1; k <=H; k++){      // SINTESI ADDITIVA
    for(int i = 0; i < L2; i++){
      Data[i] = Data[i] + sin(i*oneCycle*freq*k)/20;
    }
  }
  mySample.write(Data); // write from 'Data' array into sample
  mySample.repeat(); // loop the sample
}

// safely stop the Sonia engine upon shutdown.
public void stop(){
  Sonia.stop();
  super.stop();
}

           ]]>	      
	    </code>
		    </entry>
		  </row>
		</tbody>
	      </tgroup>
	    </table>


      </section>

      <section id="campionaimmagini">
	<name>2-D: Immagini</name>
	<para id="campionamento2Dp">
	  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
	    <m:math> <m:ci>X</m:ci> </m:math> e <m:math>
	    <m:ci>Y</m:ci> </m:math>. In modo analogo a quanto fatto per i suoni, si definiscono le frequenza spaziali di campionamento  <m:math>
	    <m:apply>
	      <m:eq/>
	      <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>X</m:mn>
		</m:msub>
	      </m:ci>
	    <m:apply>
	      <m:divide/>
	      <m:cn>1</m:cn>
	      <m:ci>X</m:ci>
	    </m:apply>
	    </m:apply>
	  </m:math> e  <m:math>
	    <m:apply>
	      <m:eq/>
	      <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>Y</m:mn>
		</m:msub>
	      </m:ci>
	    <m:apply>
	      <m:divide/>
	      <m:cn>1</m:cn>
	      <m:ci>Y</m:ci>
	    </m:apply>
	    </m:apply>
	  </m:math>.  Come nel caso monodimensionale, anche per i
segnali bidimensionali, o immagini, il campionamento può essere
descritto mediante tre fatti e un teorema.
	</para>
	<list id="fatti2D">
	  <item><name>Fatto 1</name> La Trasformata di Fourier di un
	      segnale a spazio discreto è una funzione (detta
	      <term>spettro</term>) di due variabili continue <m:math>
	      <m:ci>		<m:msub>
		  <m:mi>ω</m:mi>
		  <m:mn>X</m:mn>
		</m:msub>
	      </m:ci> </m:math> e <m:math>
	      <m:ci>		<m:msub>
		  <m:mi>ω</m:mi>
		  <m:mn>Y</m:mn>
		</m:msub>
	      </m:ci> </m:math>, periodica in due dimensioni con periodi
	      <m:math>
	      <m:apply>
		<m:times/>
		<m:cn>2</m:cn>
		<m:ci>π</m:ci>
	      </m:apply>
 	      </m:math>. Per una data coppia di valori <m:math>
	      <m:ci>		<m:msub>
		  <m:mi>ω</m:mi>
		  <m:mn>X</m:mn>
		</m:msub>
	      </m:ci> </m:math> e <m:math>
	      <m:ci>		<m:msub>
		  <m:mi>ω</m:mi>
		  <m:mn>Y</m:mn>
		</m:msub>
	      </m:ci> </m:math>, 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.
	  </item>
	  <item><name>Fatto 2</name>Il campionamento di un segnale a
	  spazio continuo <m:math>
	      <m:apply>
		<m:ci type="fn">s</m:ci>
		<m:ci>x</m:ci>
		<m:ci>y</m:ci>
	      </m:apply>
	    </m:math>
	    con griglia di maglia <m:math>
	      <m:ci>X</m:ci> 
	    </m:math>, <m:math>
	      <m:ci>Y</m:ci> 
	    </m:math>, produce il segnale a spazio discreto <m:math>
	      <m:apply>
		<m:eq/>
	      <m:apply>
		<m:ci type="fn">s</m:ci>
		<m:ci>m</m:ci>
		<m:ci>n</m:ci>
	      </m:apply>
	      <m:apply>
		<m:ci type="fn">s</m:ci>
		  <m:apply>
		    <m:times/>
		    <m:ci>m</m:ci>
		    <m:ci>X</m:ci>
		  </m:apply>
		  <m:apply>
		    <m:times/>
		    <m:ci>n</m:ci>
		    <m:ci>Y</m:ci>
		  </m:apply>
	      </m:apply>		
	      </m:apply>
	    </m:math>, funzione delle variabili discrete <m:math>
	      <m:ci>m</m:ci>
	    </m:math> e <m:math>
	      <m:ci>n</m:ci>
	    </m:math>.
	  </item>
	  <item><name>Fatto 3</name> Il campionamento con frequenze spaziali
	  <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>X</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math> e <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>Y</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math> di un segnale a spazio continuo produce un
segnale a spazio discreto il cui spettro è la ripetizione periodica secondo la griglia di maglia  <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>X</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math> per <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>Y</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math> dello spettro del segnale originale. Le
	    variabili di Fourier <m:math>
	      <m:ci>		<m:msub>
		  <m:mi>ω</m:mi>
		  <m:mn>X</m:mn>
		</m:msub>
	      </m:ci> </m:math> e <m:math>
	      <m:ci>		<m:msub>
		  <m:mi>ω</m:mi>
		  <m:mn>Y</m:mn>
		</m:msub>
	      </m:ci> </m:math>  corrispondono alle frequenze in cicli per metro rappresentate dalle variabili <m:math>
	      <m:apply>
		<m:eq/>
		<m:ci><m:msub>
		    <m:mi>f</m:mi>
		    <m:mn>X</m:mn>
		  </m:msub> </m:ci>
		<m:apply>
		  <m:divide/>
		  <m:ci><m:msub>
		  <m:mi>ω</m:mi>
		  <m:mn>X</m:mn>
		</m:msub></m:ci>
		  <m:apply>
		    <m:times/>
		    <m:cn>2</m:cn>
		    <m:ci>π</m:ci>
		    <m:ci>X</m:ci>
		  </m:apply>
		</m:apply>
	      </m:apply>
	    </m:math> e <m:math>
	      <m:apply>
		<m:eq/>
		<m:ci><m:msub>
		    <m:mi>f</m:mi>
		    <m:mn>Y</m:mn>
		  </m:msub> </m:ci>
		<m:apply>
		  <m:divide/>
		  <m:ci><m:msub>
		  <m:mi>ω</m:mi>
		  <m:mn>Y</m:mn>
		</m:msub></m:ci>
		  <m:apply>
		    <m:times/>
		    <m:cn>2</m:cn>
		    <m:ci>π</m:ci>
		    <m:ci>Y</m:ci>
		  </m:apply>
		</m:apply>
	      </m:apply>
	    </m:math>.
	  </item>
	</list>
	<para id="spettro_es2Dp">
	  La <cnxn target="repeti2D"/> 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
	  <emphasis>immagini</emphasis> spettrali.
	</para>
      <figure id="repeti2D">
	  <name>Spettro di una immagine campionata</name>
	  <media type="image/png" src="repeti2D.png">
	  </media>
	</figure>
	<para id="teorema_campp2D">
	  Premessi i <cnxn target="fatti2D">fatti</cnxn>, si può avere
	  una comprensione intuitiva del Teorema del Campionamento.
	</para>
	<rule id="teorema_campionamento2D" type="theorem">
	  <name>Teorema del Campionamento (in 2D)</name>
	  <statement>
	    <para id="campiona_statement2D">
	    Un segnale a spazio continuo <m:math>
	      <m:apply>
		<m:ci type="fn">s</m:ci>
		<m:ci>x</m:ci>
		<m:ci>y</m:ci>
	      </m:apply>
	    </m:math>, il cui contenuto spettrale è limitato a
	    frequenze spaziali contenute nel rettangolo di semilati <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>bX</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math> e <m:math> <m:ci>
		<m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>bY</m:mn>
		</m:msub>
	      </m:ci>
	    </m:math> (cioè limitato in banda) si può ricostruire a
		partire dalla sua versione campionata <m:math>
		<m:apply> <m:ci type="fn">s</m:ci> <m:ci>m</m:ci>
		<m:ci>n</m:ci>
	      </m:apply>
	    </m:math> se le frequenze di campionamento spaziale sono superiori a
	      due volte le rispettive bande (cioè se <m:math>
		<m:apply>
		  <m:gt/>
		  <m:ci>
		    <m:msub>
		      <m:mi>F</m:mi>
		      <m:mn>X</m:mn>
		    </m:msub>
		  </m:ci>
		  <m:apply>
		    <m:times/>
		    <m:cn>2</m:cn>
		  <m:ci>
		    <m:msub>
		      <m:mi>F</m:mi>
		      <m:mn>bX</m:mn>
		    </m:msub>
		  </m:ci>
		  </m:apply>
		</m:apply>
	      </m:math> e <m:math>
		<m:apply>
		  <m:gt/>
		  <m:ci>
		    <m:msub>
		      <m:mi>F</m:mi>
		      <m:mn>Y</m:mn>
		    </m:msub>
		  </m:ci>
		  <m:apply>
		    <m:times/>
		    <m:cn>2</m:cn>
		  <m:ci>
		    <m:msub>
		      <m:mi>F</m:mi>
		      <m:mn>bY</m:mn>
		    </m:msub>
		  </m:ci>
		  </m:apply>
		</m:apply>
	      </m:math>)
	    </para>
	  </statement>
	</rule>
	<para id="camp_rico2D">
	  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
	  <term>frequenza di Nyquist</term> definita come <m:math>
	    <m:apply>
	      <m:divide/>
	      <m:ci><m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>X</m:mn>
		</m:msub>
	      </m:ci>
	      <m:cn>2</m:cn>
	    </m:apply>
	  </m:math> e <m:math>
	    <m:apply>
	      <m:divide/>
	      <m:ci><m:msub>
		  <m:mi>F</m:mi>
		  <m:mn>Y</m:mn>
		</m:msub>
	      </m:ci>
	      <m:cn>2</m:cn>
	    </m:apply>
	  </m:math> lungo le due direzioni. La condizione imposta dal
	  <cnxn target="teorema_campionamento2D">teorema del
	  campionamento</cnxn> 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. 
	</para>
	<para id="resampling2D">
	  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.
	</para>
	<para id="applet_samplingp">
	  Per esplorare in maniera visuale i concetti di
	  campionamento, sotto-campionamento, e aliasing, si consideri
	  la <link src="resampling_ellipse.html">applet che disegna ellissi
	  </link>. Con le frecce si possono raddoppiare o dimezzare i
	  passi di sotto-campionamento orizzontale e verticale.
	</para>
      </section>

      <para id="image_proc_basics">Una semplicissima introduzione a
concetti elementari di elaborazione di immagini si trova in <cnxn document="m10973"> Digital Image Processing Basics</cnxn>. </para>
    </section>
    <section id="quantizzazione">
      <name>Quantizzazione</name>
      <para id="quantizzazionep">
	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.
      </para>
      <para id="quantlinp">
	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
	  <m:math> <m:ci>b</m:ci> </m:math> bit, allora il campo di
	  variazione di tale numero può essere discretizzato in
	  <m:math>
	  <m:apply>
	    <m:power/>
	    <m:mn>2</m:mn>
	    <m:ci>b</m:ci>
	  </m:apply>
	</m:math> livelli di quantizzazione. Ogni valore compreso tra
	  due livelli di quantizzazione può essere approssimato per
	  troncamento o arrotondamento al livello più vicino. La <cnxn target="ottoquanti"/> mostra un esempio di quantizzazione con
	  rappresentazione su <m:math> <m:cn>3</m:cn> </m:math> bit in
	  <cnxn document="m10808"> complemento a due</cnxn>.
      </para>
	<figure id="ottoquanti">
	  <name>Campionamento e quantizzazione di un segnale analogico</name>
	  <media type="image/png" src="quant.png">
	  </media>
	</figure>
      <para id="quanterrorp">
	L'approssimazione introdotta dalla quantizzazione si manifesta
	in forma di rumore, detto appunto <term>rumore di
	quantizzazione</term>. 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.
      </para>
      <para id="applet_quant">
	  Per esplorare in maniera visuale e uditiva il fenomeno della
	quantizzazione, si consideri la <link src="quantagondole.html"> applet </link> che consente di
	variare tra <m:math> <m:cn>1</m:cn> </m:math> e <m:math>
	<m:cn>8</m:cn> </m:math> 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 <term>solarizzazione</term>.
	</para>
    </section>
    <exercise id="estensioni_aliasing">
      <problem>
	<para id="estensionip">
	  Si estenda il codice dell'applet <cnxn target="aliasingTab"/>, in modo da aggiungere alcune modalità interattive:
	  <list id="estensionil">
	    <item>Si renda la generazione dei suoni automatica
	    variando ad ogni frame la frequenza fondamentale in modo
	    casuale (si veda la <link src="http://www.processing.org/reference/random_.html"><code>random()</code></link>).</item>

	    <item>Si renda dipendente dalla posizione orizzontale del
	    mouse (<code>mouseX</code>) il framerate (e quindi il
	    metronomo con cui vengono generate le note). </item>

	    <item>Si renda dipendente dalla posizione verticale del
	    mouse (<code>mouseY</code>) il numero delle armoniche
	    presenti nel suono (e quindi la ricchezza spettrale,
	    ovvero la brillantezza, delle note generate).</item>

	    <item>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.</item> 

	    <item>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.</item>

	    <item>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).</item> 

	    <item>Si aggiunga un controllo per poter annullare la
	    dipendenza dalla posizione del mouse del metronomo, della
	    ricchezza spettrale e della variazione della saturazione
	    del colore (per esempio la pressione di un qualsiasi tasto
	    della tastiera). </item>

	    <item>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). </item>
 
	    <item>Infine, si aggiunga un controllo tale che, in caso
	    di fermo immagine (mouse premuto) si interrompa del tutto
	    la riproduzione del suono e si abbia silenzio (per esempio
	    la pressione di un altro tasto della tastiera).</item>
	  </list>
	</para>
      </problem>
      <solution>
	<para id="estensionis">
	  Le estensioni proposte sono realizzate nel <link src="./aliasingFermoSemplice.pde"> codice Processing</link>.
	</para>
      </solution>
    </exercise>
  </content>
  
<bib:file>
<bib:entry id="rocISP">
<bib:book>
<bib:author>Davide Rocchesso</bib:author> <bib:title>Introduction to
Sound Processing</bib:title> <bib:publisher>Mondo
Estremo</bib:publisher> <bib:year>2003</bib:year>
<bib:note>http://www.mondo-estremo.com</bib:note>
</bib:book>
</bib:entry>
</bib:file>

</document>
