La digitalizzazione dei suoni

    Esistono varie tecniche matematiche per trovare una curva "buona" che passi per certi punti.  Vediamo un esempio per dare un'idea di come sia possibile da delle informazioni digitali (ogni tot x un certo valore di y) ottenere una curva liscia che sia in accordo con esse.  La tecnica che useremo si chiama interpolazione con una spline cubica: essa consiste nel trovare una curva liscia che sia costituita dall'unione dei grafici di tante funzioni polinomiali di 3º grado.
    Ad esempio nel caso di un suono, che suppongo di trasformare in un segnale elettrico, tabulo ogni tot decimillesimi di secondo la tensione elettrica corrispondente  (questo è il periodo di campionamento, detto così in quanto il prelevare i valori di un segnale anlogico ad intervalli di tempo eguali viene detto "campionare il segnale"; è un uso con significato ristretto del concetto di campionamento), e ottengo una sequenza di informazioni che posso rappresentare con i punti del grafico sotto a sinistra. Da queste informazioni digitali posso risalire ad una curva continua che passa per tutti i punti, come quella a destra.
    La tecnica matematica per costruire questa curva non è complicata (è alla portata di uno studente che sta finendo le scuole superiori). Ad ogni modo non ci perdiamo in essa e vediamo come realizzare la curva con del software, e in particolare con R.


↓                 ↑

I comandi che si usano sono i seguenti (prima carico il comando "source ..." per facilitare il tracciamento dei grafici):

source("http://macosa.dima.unige.it/r.R")
HF=4; BF=8  # dimensiono la finestra grafica, circa 16x8 cm (nelle immagini riportate l'ho ridotta)
## Le tensioni raccolte
V = c(-4,0,4,6.7,7,3,0,-1,1,3,4.2,3,-1,-5,-7.5,-7,-4,-1,-0.3,-2,-4.2,-5.3,-4)
length(V)  # le conto (sono 23)
# 23
## anche i tempi devono essere 23 (usiamo come unità l'intervallo tra un segnale e l'altro)
t = 1:23
min(V);max(V)
# V sta tra -7.5 e 7; facco variare le ascisse tra 0 e 24 e le ordinate tra -8 ed 8
Plane(0,24, -8,8)
POINT(t,V, "blue")
# Come ottenere la curva interpolante
graph1( splinefun(t,V), 0,24, "red")
# Ora vediamo solo ques'ultima rappresentazione:
Plane(0,24, -8,8)
graph2( splinefun(t,V), 0,24, "brown")

    In realtà le funzioni che si usano sono più complicate di queste "spline". Il procedimento dà comunque un'idea di come sia possibile ricostruire da una messaggio digitale il corrispondente messaggio analogico.