Salta ai contenuti

Segnali continui, discreti, sistemi lineari

Il vocabolario di base per parlare di tutto ciò che varia e porta informazione: cos’è un segnale, cos’è un sistema, e perché questi concetti nati nelle telecomunicazioni sono sotto il cofano di audio, immagini e reti convoluzionali.

Apri un file audio con un editor: vedi una forma d’onda, una linea che oscilla nel tempo. Apri un’immagine con un programma di disegno e ingrandisci finché vedi i singoli pixel: una griglia di numeri. Logga la latenza di un servizio per una settimana e plotti il risultato: una curva che sale e scende.

Queste tre cose sembrano scollegate, ma hanno la stessa natura matematica. Sono tutte segnali: grandezze che variano e portano informazione. E le operazioni che ci facciamo sopra — amplificare, ripulire dal rumore, comprimere, far passare attraverso un layer di una rete neurale — sono tutte sistemi: trasformazioni da un segnale a un altro.

La teoria dei segnali e dei sistemi è il linguaggio nato nell’ingegneria delle telecomunicazioni per descrivere come l’informazione viaggia, si trasforma e si degrada. Non è un argomento esoterico riservato agli ingegneri elettronici: una fetta enorme di ciò che i modelli di AI moderni elaborano — audio, immagini, video, serie temporali — è, sotto il cofano, un segnale campionato.

E alcuni degli strumenti che oggi diamo per scontati in deep learning hanno radici dirette in questo campo: la convoluzione delle reti convoluzionali, lo spettrogramma che alimenta i modelli speech, l’idea stessa di togliere rumore da un dato.

Chi usa questi strumenti senza conoscerne le fondamenta li tratta come scatole nere. Lo spettrogramma diventa un’immagine magica che funziona; la convoluzione un’operazione misteriosa che “estrae features”. Questo capitolo dà il vocabolario per leggere quelle connessioni senza confonderle — e distinguere quando c’è una vera discendenza storica da quando c’è solo un’analogia comoda. È il capitolo che apre la Parte XII: tutti i concetti che qui solo nomineremo (Fourier, campionamento, filtri, rumore) hanno un capitolo dedicato più avanti.

Il campo nasce da un problema pratico e antico: far viaggiare l’informazione su lunghe distanze. Telegrafo a metà ‘800, poi telefono, poi radio. Ogni nuovo mezzo costringe gli ingegneri a chiedersi le stesse cose: quanta informazione posso spingere attraverso questo canale? Come la proteggo dal rumore che la corrompe lungo il cammino? Come la ricostruisco all’arrivo?

Tre nomi e tre date fissano l’impalcatura concettuale. Harry Nyquist (ingegnere svedese-americano ai Bell Laboratories), nel 1928, studiando la trasmissione telegrafica nel paper “Certain Topics in Telegraph Transmission Theory”, capisce che esiste un legame stretto tra quanto velocemente puoi cambiare un segnale e quanta banda ti serve: per evitare distorsione, il numero di impulsi al secondo non può superare il doppio della banda del canale. È la radice del teorema che porterà il suo nome, anche se Nyquist non affronta ancora il problema di campionare e ricostruire un segnale continuo.

Claude Shannon (matematico e ingegnere americano dei Bell Labs, 1916-2001) raccoglie quel filo. Nel 1948, con “A Mathematical Theory of Communication” (Bell System Technical Journal), fonda la teoria dell’informazione: introduce il termine “bit”, il concetto di capacità di canale, e il modello che useremo in questo capitolo — il segnale ricevuto come somma del segnale trasmesso e di un rumore inevitabile.

L’anno dopo, nel 1949, con “Communication in the Presence of Noise” (Proceedings of the IRE), formalizza e dimostra il teorema che dice quanto spesso bisogna “fotografare” un segnale continuo per poterlo ricostruire senza perdite. Curiosità storica: il manoscritto di quel secondo lavoro era stato consegnato nel 1940, ma la pubblicazione slittò di nove anni a causa della Seconda guerra mondiale.

Fino a qui il campo vive nel mondo analogico: filtri fatti di resistenze, condensatori e bobine, segnali che sono tensioni vere su fili veri. Lo spostamento verso il digitale arriva con i computer. Il punto di svolta è il 1965, quando James Cooley e John Tukey pubblicano “An Algorithm for the Machine Calculation of Complex Fourier Series” (Mathematics of Computation): la Fast Fourier Transform riduce il costo di calcolo della trasformata da un ordine proporzionale a N2N^2 a uno proporzionale a NlogNN \log N. Con NN grande la differenza è enorme, e improvvisamente analizzare un segnale in frequenza diventa praticabile su una macchina, anche in tempo reale. Da lì nasce il DSP, l’elaborazione numerica dei segnali, e il campo si trasferisce in larga parte dentro il software.

Nella mappa di questa wiki, questo capitolo siede a monte di tutta la Parte XII e si appoggia su due idee viste altrove: l’idea di sistema come oggetto con ingresso, uscita e stato (Parte IX, Stato, transizione, traiettoria) e l’idea di informazione come riduzione di incertezza (Parte XIII, informazione-shannon, in preparazione). Verso valle, prepara il terreno per Fourier, il campionamento e i filtri.

Essendo il capitolo d’apertura della Parte, vale la pena anticiparne la mappa. Da qui in poi: il campionamento e il teorema di Nyquist-Shannon (come passare dal continuo al discreto senza perdere nulla); i filtri e la convoluzione (come trasformare un segnale in modo controllato); Fourier (come vedere un segnale in termini di frequenze invece che di tempo) e gli spettrogrammi (la versione tempo-frequenza usata in input ai modelli speech); il rumore e l’SNR (come distinguere il segnale dal disturbo); la sensor fusion (come combinare misure imperfette); le serie temporali; e infine un ponte esplicito verso audio, vision e multimodale. Questo capitolo fornisce le definizioni e il filo conduttore; gli altri scavano in ciascun pezzo.

Primo angolo: un segnale è una funzione, un sistema è ciò che la trasforma

Sezione intitolata “Primo angolo: un segnale è una funzione, un sistema è ciò che la trasforma”

Pensa a un segnale come a una registrazione di qualcosa che varia. Un microfono trasforma la pressione dell’aria in una tensione elettrica che oscilla: a ogni istante di tempo corrisponde un valore.

Questo è esattamente cosa fa una funzione matematica: associa a ogni valore di una variabile indipendente (qui il tempo tt) un valore di uscita. Scriviamo x(t)x(t), “il valore del segnale all’istante tt”.

La variabile indipendente non deve essere per forza il tempo. Un’immagine in bianco e nero associa a ogni posizione sullo schermo, individuata da due coordinate xx e yy, un livello di grigio: è una funzione I(x,y)I(x, y) di due variabili spaziali. Un video aggiunge il tempo: V(x,y,t)V(x, y, t). La struttura concettuale è sempre la stessa: una grandezza che varia in funzione di una o più variabili e che porta informazione.

L’aggettivo “porta informazione” non è decorativo. Una grandezza costante, che non cambia mai, è un segnale degenere: non dice nulla. Ciò che informa è la variazione. È lo stesso principio della teoria dell’informazione (Parte XIII): l’informazione è riduzione di incertezza, e qualcosa di perfettamente prevedibile non riduce alcuna incertezza. Questo legame non è casuale: il campo dei segnali e quello dell’informazione nascono dalle stesse mani (Shannon) negli stessi anni.

Un sistema, in questo linguaggio, è qualunque cosa prenda un segnale in ingresso e ne produca uno in uscita. Un amplificatore prende una tensione debole e la restituisce più forte. Un equalizzatore prende un suono e ne enfatizza i bassi. L’orecchio prende la pressione sonora e produce impulsi nervosi. Un layer convoluzionale prende un’immagine e produce una mappa di attivazioni.

Scriviamo y(t)=T{x(t)}y(t) = T\{x(t)\}: l’uscita yy è il risultato di applicare l’operatore TT (il sistema) all’ingresso xx. Il sistema si caratterizza non dai valori che produce su un singolo ingresso, ma dal suo comportamento generale, e sono le proprietà che vedremo a classificarlo.

Secondo angolo: lo stesso segnale, due punti di vista

Sezione intitolata “Secondo angolo: lo stesso segnale, due punti di vista”

C’è un secondo modo di guardare un segnale, e questo cambia il modo di pensare. Prendi un accordo musicale: tre note suonate insieme. Nel dominio del tempo è una forma d’onda complicata, un groviglio di oscillazioni che si sommano. Difficile dire qualcosa guardandola.

Ora cambia prospettiva. Quell’accordo è fatto, fisicamente, di tre frequenze pure (le tre note) che vibrano insieme. Se invece di chiederti “cosa succede istante per istante” ti chiedi “di quali frequenze è fatto questo suono”, la risposta è semplice: tre picchi netti, alle frequenze delle tre note.

Questo è il dominio della frequenza: descrivi il segnale non con la sua evoluzione temporale, ma con la ricetta delle oscillazioni che lo compongono.

L’idea profonda, che renderemo formale nel capitolo su Fourier (fourier-intuizione, in preparazione), è che qualunque segnale ragionevole si può scrivere come somma di sinusoidi di diverse frequenze, ampiezze e fasi. Tempo e frequenza sono due descrizioni equivalenti dello stesso oggetto: nessuna informazione si perde passando dall’una all’altra, ma certe operazioni diventano enormemente più semplici in uno dei due domini. Filtrare — cioè lasciar passare alcune frequenze e attenuarne altre — è complicato nel tempo e banale in frequenza. È il motivo per cui questo secondo punto di vista pervade tutto il campo.

C’è un terzo modo di pensare, che fa da ponte tra segnali e sistemi e prepara la convoluzione. L’idea è scomporre un segnale in mattoncini elementari, capire cosa fa il sistema a un singolo mattoncino, e ricomporre.

Quale mattoncino? Il più semplice possibile: un singolo campione isolato, un picco che vale qualcosa in un istante e zero ovunque altro. Qualunque segnale a tempo discreto è, banalmente, una somma di questi picchi: un campione qui, un campione lì, ciascuno con la propria altezza.

Se il sistema è lineare e tempo-invariante, conoscere la sua risposta a un solo picco basta: per linearità sommi le risposte ai singoli picchi, per tempo-invarianza la risposta a un picco ritardato è la risposta al picco originale, ritardata uguale.

Questa è l’intera magia degli LTI in una frase: scomponi l’ingresso in picchi, sai cosa fa il sistema a un picco (la risposta all’impulso), sommi le risposte spostate e scalate. La somma che ne esce è esattamente la convoluzione.

È lo stesso movimento mentale della sovrapposizione, applicato fino in fondo: un sistema lineare e tempo-invariante è completamente determinato da come reagisce a un singolo colpo.

Prima di trasformare un segnale conviene sapere che tipo di segnale è. Le classificazioni sono assi indipendenti: un segnale ha una posizione su ciascuno.

Continuo vs discreto — riguarda la variabile indipendente (il tempo).

Un segnale a tempo continuo è definito per ogni valore reale di tt. Lo scriviamo con le parentesi tonde, x(t)x(t). Il mondo fisico è continuo: la pressione sonora esiste in ogni istante, non solo in alcuni.

Un segnale a tempo discreto è definito solo su un insieme numerabile di istanti, di solito equispaziati. Lo scriviamo con le parentesi quadre e un indice intero, x[n]x[n], dove n=,1,0,1,2,n = \ldots, -1, 0, 1, 2, \ldots. Nasce o dal campionamento di un segnale continuo (leggerlo a intervalli regolari), oppure da fenomeni intrinsecamente discreti (il numero di richieste arrivate a un server ogni minuto).

Analogico vs digitale — riguarda l’ampiezza (i valori che il segnale assume). È un asse diverso dal precedente, ed è la fonte di confusione numero uno del campo.

Un segnale analogico può assumere qualunque valore reale in un intervallo: l’ampiezza è continua.

Un segnale digitale ha ampiezza quantizzata, cioè limitata a un insieme finito di livelli. Audio a 16 bit significa che ogni campione può assumere uno di 216=655362^{16} = 65536 valori discreti, non un valore qualsiasi.

Mettendo insieme i due assi: un segnale digitale è discreto nel tempo e quantizzato in ampiezza. Il passaggio dal mondo analogico a quello digitale richiede quindi due operazioni distinte — campionamento (discretizza il tempo) e quantizzazione (discretizza l’ampiezza).

Confondere “discreto” con “digitale” è l’errore classico: discreto parla del tempo, digitale aggiunge anche la quantizzazione dei valori. Ci torneremo nella sezione “Dove si rompe”.

Deterministico vs stocastico — riguarda la prevedibilità.

Un segnale deterministico è descrivibile con una formula esplicita: ne conosci il valore a ogni istante. Una sinusoide x(t)=sin(2πft)x(t) = \sin(2\pi f t) è deterministica.

Un segnale stocastico (o aleatorio) è invece imprevedibile nel dettaglio: ogni realizzazione è diversa, e lo descrivi con proprietà statistiche — media, varianza, come la potenza si distribuisce sulle frequenze. Il rumore termico in un circuito è stocastico. Le serie storiche dei prezzi vengono trattate come stocastiche. Questo asse collega ai processi stocastici (Parte VI) e alla statistica (Parte V).

Periodico vs aperiodico — riguarda la ripetizione.

Un segnale è periodico se si ripete identico dopo un intervallo TT, il periodo: x(t)=x(t+T)x(t) = x(t + T) per ogni tt. Il più piccolo TT che funziona è il periodo fondamentale, e f=1/Tf = 1/T è la frequenza fondamentale.

Un segnale aperiodico non si ripete: un singolo impulso, un transitorio, un suono che inizia e finisce. I segnali periodici sono il ponte naturale verso Fourier, perché si scompongono in sinusoidi a frequenze multiple della fondamentale.

A energia vs a potenza — riguarda come misurare “quanto è grande” il segnale.

L’energia di un segnale è l’integrale del suo modulo al quadrato, E=x(t)2dtE = \int_{-\infty}^{\infty} |x(t)|^2 \, dt. La potenza media è l’energia diluita sul tempo, P=limT12TTTx(t)2dtP = \lim_{T\to\infty} \frac{1}{2T}\int_{-T}^{T} |x(t)|^2 \, dt.

Un segnale a energia ha energia finita e potenza media nulla: tipicamente un transitorio che si spegne. Un segnale a potenza ha energia infinita ma potenza media finita: tipicamente un segnale periodico o stocastico che dura indefinitamente (una sinusoide eterna ha energia infinita, ma potenza ben definita). La distinzione serve a scegliere la metrica giusta quando confronti segnali o definisci il rapporto segnale-rumore.

Cinque proprietà classificano i sistemi in base al loro comportamento — cosa fanno dato qualunque ingresso, non solo dato un ingresso particolare.

Linearità. Un sistema è lineare se rispetta la sovrapposizione. Detto a parole: se scali l’ingresso, l’uscita scala dello stesso fattore; se sommi due ingressi, l’uscita è la somma delle due uscite separate. In simboli, se l’ingresso x1x_1 produce y1y_1 e l’ingresso x2x_2 produce y2y_2, allora

ax1(t)+bx2(t)    ay1(t)+by2(t)a\, x_1(t) + b\, x_2(t) \;\longrightarrow\; a\, y_1(t) + b\, y_2(t)

per qualunque coppia di costanti a,ba, b. La sovrapposizione è una proprietà fortissima: significa che puoi capire come un sistema risponde a un ingresso complicato spezzandolo in pezzi semplici, vedendo come risponde a ciascun pezzo, e sommando. La maggior parte dei sistemi reali è in realtà non-lineare, ma la linearità è un’approssimazione potente — spesso ottima per piccoli segnali.

Per fissare l’idea, due controesempi. Il sistema y(t)=3x(t)y(t) = 3\,x(t) (triplica l’ingresso) è lineare: triplica anche le somme e le scalature. Il sistema y(t)=x(t)2y(t) = x(t)^2 (eleva al quadrato) non lo è: raddoppia l’ingresso e l’uscita quadruplica, non raddoppia; somma due ingressi e compaiono termini incrociati che non c’erano nelle uscite separate.

Anche y(t)=x(t)+5y(t) = x(t) + 5 — apparentemente innocuo — non è lineare nel senso tecnico, perché aggiunge una costante che rompe la scalatura (raddoppia l’ingresso e il “+5” non raddoppia). Questi sistemi con un offset si dicono affini, non lineari; la distinzione conta quando si usano i teoremi sugli LTI.

Tempo-invarianza. Un sistema è tempo-invariante se le sue regole non cambiano nel tempo: ritardare l’ingresso ritarda l’uscita della stessa quantità, senza alterarla in altro modo. Se x(t)y(t)x(t) \to y(t), allora

x(tt0)    y(tt0)x(t - t_0) \;\longrightarrow\; y(t - t_0)

In parole povere, il sistema si comporta uguale oggi e domani. Un filtro audio è tempo-invariante; un sistema le cui caratteristiche derivano nel tempo (un componente che si scalda e cambia comportamento) non lo è.

Sistemi LTI. I sistemi che sono insieme lineari e tempo-invarianti — gli LTI (Linear Time-Invariant) — sono la classe fondamentale di tutto il campo. Sono speciali per una ragione precisa: un sistema LTI è completamente descritto da una sola funzione, la sua risposta all’impulso h(t)h(t).

La risposta all’impulso è ciò che esce quando in ingresso metti un impulso ideale, un picco infinitamente stretto e di area unitaria chiamato delta di Dirac δ(t)\delta(t). È come dare un colpo secco al sistema e registrare come “risuona”. L’idea che un singolo colpo basti a caratterizzare tutto il sistema è il terzo angolo dell’intuizione, reso operativo.

Una volta nota hh, l’uscita per qualunque ingresso è data dalla convoluzione di ingresso e risposta all’impulso:

y(t)=(xh)(t)=x(τ)h(tτ)dτy(t) = (x * h)(t) = \int_{-\infty}^{\infty} x(\tau)\, h(t - \tau)\, d\tau

Nella versione a tempo discreto, l’integrale diventa una somma:

y[n]=k=x[k]h[nk]y[n] = \sum_{k=-\infty}^{\infty} x[k]\, h[n-k]

Leggiamo la formula discreta a parole, perché è il risultato cardine del campo. Per calcolare l’uscita all’istante nn, prendi l’intero ingresso x[k]x[k], lo moltiplichi punto per punto per la risposta all’impulso ribaltata e traslata h[nk]h[n-k], e sommi tutto. Il ribaltamento (k-k) e la traslazione (nn) sono ciò che rende l’operazione una convoluzione e non una semplice moltiplicazione. Intuitivamente: l’uscita ora è una media pesata del passato dell’ingresso, dove i pesi sono dettati dalla forma di hh. Questo è il filo diretto verso la convoluzione delle reti convoluzionali, che vedremo nelle applicazioni.

Vediamola con numeri minuscoli, per togliere ogni mistero. Prendi un ingresso fatto di due soli campioni non nulli e una risposta all’impulso anch’essa corta:

x=[2,  3],h=[1,  1]x = [\,2,\; 3\,], \qquad h = [\,1,\; 1\,]

La convoluzione produce un risultato lungo quanto la somma delle lunghezze meno uno, qui tre valori, calcolati così:

y[0]=x[0]h[0]=21=2y[0] = x[0]\,h[0] = 2 \cdot 1 = 2 y[1]=x[0]h[1]+x[1]h[0]=21+31=5y[1] = x[0]\,h[1] + x[1]\,h[0] = 2 \cdot 1 + 3 \cdot 1 = 5 y[2]=x[1]h[1]=31=3y[2] = x[1]\,h[1] = 3 \cdot 1 = 3

Il risultato è y=[2,  5,  3]y = [\,2,\; 5,\; 3\,]. Nota cosa è successo: con h=[1,1]h = [1,1] il sistema somma ogni campione con il precedente, e infatti il valore centrale (5) è la somma dei due ingressi sovrapposti.

È lo stesso meccanismo “ribalta, trasla, moltiplica, somma”, su una scala dove puoi seguirlo a mano. Lo stesso conto, ripetuto su un kernel di nove pesi che scorre su un’immagine di milioni di pixel, è ciò che fa un layer convoluzionale.

Causalità. Un sistema è causale se l’uscita all’istante tt dipende solo dal presente e dal passato dell’ingresso, mai dal futuro. Ogni sistema fisico che opera in tempo reale è causale: non può rispondere a un suono prima che il suono arrivi.

Un sistema non-causale, che “guarda avanti” nell’ingresso, è realizzabile solo offline, quando hai già registrato tutto il segnale — esattamente la situazione in cui applichi un filtro a un file audio completo o a un’immagine intera. Questo è il motivo per cui un effetto applicato in studio può fare cose impossibili dal vivo.

Stabilità BIBO. Un sistema è stabile in senso BIBO (Bounded-Input Bounded-Output) se ogni ingresso limitato produce un’uscita limitata: dai in pasto qualcosa che non esplode, e l’uscita non esplode. Per un sistema LTI la condizione è precisa: la risposta all’impulso deve essere assolutamente sommabile (o integrabile), nh[n]<\sum_n |h[n]| < \infty.

Un sistema instabile può divergere all’infinito per ingressi perfettamente innocui — il fischio acuto che cresce quando avvicini un microfono al suo altoparlante è proprio questo. La stabilità collega all’idea di equilibrio e stabilità (Parte IX) e a tutta la control theory (Parte XI).

Memoria. Un sistema è senza memoria se l’uscita all’istante tt dipende solo dall’ingresso allo stesso istante: y(t)=2x(t)y(t) = 2\,x(t) raddoppia il valore corrente e basta. Un sistema con memoria dipende anche da valori passati (o futuri): un filtro che restituisce la media degli ultimi cinque campioni ha memoria, perché per produrre l’uscita di ora deve ricordare gli ingressi precedenti. La memoria è l’altro nome di ciò che in teoria dei sistemi si chiama stato (Parte IX, Stato, transizione, traiettoria).

C’è un fatto che lega il dominio della frequenza (secondo angolo dell’intuizione) ai sistemi LTI, e che spiega perché tutto il campo ama lavorare in frequenza. La convoluzione nel tempo corrisponde a una semplice moltiplicazione in frequenza.

Detto a parole: invece di far scorrere la risposta all’impulso lungo il segnale e sommare prodotti (operazione laboriosa), passi entrambi nel dominio della frequenza, moltiplichi frequenza per frequenza, e torni indietro. È anche, storicamente, il motivo per cui la FFT di Cooley e Tukey fu così dirompente: rese quel passaggio avanti e indietro abbastanza veloce da usarlo in pratica.

La conseguenza pratica è enorme. Un sistema LTI, in frequenza, è descritto da una risposta in frequenza H(f)H(f): un numero per ogni frequenza, che dice di quanto quella frequenza viene amplificata o attenuata passando per il sistema.

Filtrare un segnale significa esattamente scegliere H(f)H(f). Da qui i nomi dei filtri:

  • passa-basso: H(f)H(f) vale circa 1 per le frequenze basse e cala a 0 per quelle alte. Lascia passare l’andamento lento, taglia le variazioni rapide. La media mobile dell’esempio 1 è un passa-basso grezzo, ed è ciò che fa lo smoothing di una curva rumorosa.
  • passa-alto: l’opposto. Taglia il lento, lascia il rapido. L’edge detection dell’esempio 2 è imparentata con un passa-alto: i bordi sono variazioni rapide.
  • passa-banda: lascia passare solo una finestra di frequenze intermedie. È il principio della sintonia di una radio: isolare la banda di una stazione.

Questa idea — un filtro è una scelta di quali frequenze tenere — è il cuore del capitolo filtri-convoluzione (in preparazione, questa Parte), e il motivo per cui Fourier non è un tecnicismo ma il linguaggio naturale dei sistemi.

Un computer non può immagazzinare infiniti valori, e il mondo fisico è continuo. Il ponte tra i due è il campionamento: leggere il segnale continuo a intervalli regolari di tempo TsT_s, il periodo di campionamento, ottenendo la sequenza x[n]=x(nTs)x[n] = x(n\,T_s).

Il numero di letture al secondo è la frequenza di campionamento fs=1/Tsf_s = 1/T_s. Campionare a 1 kHz significa leggere il segnale mille volte al secondo.

La domanda da un milione di dollari: quanto spesso devo campionare per non perdere informazione? La risposta è il teorema del campionamento di Nyquist-Shannon. In forma sintetica: se il segnale ha una frequenza massima fmaxf_{max} (è “a banda limitata”), allora campionando a una frequenza di almeno 2fmax2\,f_{max} puoi ricostruirlo perfettamente, senza perdita.

L’intuizione dietro il fattore due: per inseguire un’oscillazione devi catturarne almeno la cresta e la valle in ogni ciclo. Con meno di due campioni per ciclo, la stessa sequenza di punti potrebbe appartenere a infinite oscillazioni diverse, e non hai modo di sapere quale fosse l’originale.

Sotto quella soglia compare l’aliasing: le frequenze troppo alte per essere catturate si “travestono” da frequenze basse e diventano indistinguibili da esse, corrompendo il segnale in modo irreversibile.

È l’effetto per cui in un film le ruote di un carro sembrano girare all’indietro: la telecamera campiona (24 fotogrammi al secondo) troppo lentamente rispetto alla rotazione, e il movimento reale si traveste da movimento più lento o invertito.

Questo è il motivo per cui i CD audio campionano a 44.1 kHz: l’orecchio umano arriva a circa 20 kHz, e 44100>2×2000044100 > 2 \times 20000.

Il margine oltre il doppio serve a lasciare spazio al filtro anti-aliasing, che taglia le frequenze sopra la soglia prima del campionamento, perché — come vedremo in “Dove si rompe” — l’aliasing non si può rimuovere dopo. I dettagli, la dimostrazione e le insidie dell’aliasing vivono nel capitolo dedicato campionamento-nyquist (in preparazione, questa Parte).

Nessuna misura reale è pulita. Ogni segnale che acquisisci porta con sé del rumore: una componente indesiderata, di solito stocastica, sovrapposta al contenuto utile.

Il modello base è una somma:

ricevuto(t)=segnale(t)+rumore(t)\text{ricevuto}(t) = \text{segnale}(t) + \text{rumore}(t)

Questo è esattamente il modello di canale di Shannon: nel suo paper del 1948 il segnale ricevuto è descritto come la somma del segnale trasmesso e di un rumore inevitabile.

Per quantificare quanto il segnale domini sul rumore si usa il rapporto segnale-rumore (SNR, Signal-to-Noise Ratio), il rapporto tra la potenza del segnale e quella del rumore. Di solito si esprime in decibel:

SNRdB=10log10 ⁣(PsegnalePrumore)\text{SNR}_{dB} = 10 \log_{10}\!\left(\frac{P_{segnale}}{P_{rumore}}\right)

La scala in decibel comprime numeri che spaziano su molti ordini di grandezza in un intervallo maneggevole. Qualche valore di riferimento per costruirsi l’intuito: un rapporto di potenze di 1 (segnale e rumore uguali) corrisponde a 0 dB; un rapporto di 10 a 10 dB; un rapporto di 100 a 20 dB; un rapporto di 1000 a 30 dB. Ogni 10 dB è un fattore dieci nella potenza.

SNR alto significa segnale pulito, rumore trascurabile; SNR basso significa segnale sepolto nel rumore, difficile da recuperare.

Sotto un certo SNR il segnale diventa irrecuperabile: è esattamente il tipo di limite che Shannon formalizza con la capacità di canale (Parte XIII), che lega la quantità di informazione trasmissibile in modo affidabile al rapporto segnale-rumore del canale.

Il filtraggio cerca di alzare l’SNR rimuovendo le componenti attribuibili al rumore senza intaccare il segnale utile. L’operazione è possibile quando segnale e rumore vivono in regioni diverse dello spettro: se il segnale utile è a bassa frequenza e il rumore è sparso su tutte le frequenze, un filtro passa-basso butta via la parte di rumore alle alte frequenze e tiene il segnale.

Ma è delicata: se le bande si sovrappongono, ripulire il rumore cancella anche pezzi di segnale. Il capitolo rumore-snr (in preparazione, questa Parte) sviluppa il tema.

Esempio 1 — numerico: una media mobile è un sistema LTI

Sezione intitolata “Esempio 1 — numerico: una media mobile è un sistema LTI”

Considera il sistema a tempo discreto che restituisce la media degli ultimi tre campioni:

y[n]=13(x[n]+x[n1]+x[n2])y[n] = \frac{1}{3}\big(x[n] + x[n-1] + x[n-2]\big)

Verifichiamo che è LTI e troviamone la risposta all’impulso. È lineare: se raddoppi tutti gli xx, raddoppia yy; se sommi due ingressi, le medie si sommano. È tempo-invariante: la regola “media degli ultimi tre” non dipende da quando la applichi. Quindi è LTI.

La sua risposta all’impulso h[n]h[n] è l’uscita quando l’ingresso è l’impulso discreto δ[n]\delta[n] (vale 1 in n=0n=0 e 0 altrove). Sostituendo: h[0]=1/3h[0] = 1/3, h[1]=1/3h[1] = 1/3, h[2]=1/3h[2] = 1/3, e zero altrove. Tre valori. La convoluzione y[n]=kx[k]h[nk]y[n] = \sum_k x[k]\,h[n-k] con questa hh riproduce esattamente la formula della media.

È anche causale (usa solo presente e passato) e stabile BIBO (la somma 1/3+1/3+1/3=1|1/3| + |1/3| + |1/3| = 1 è finita). E ha memoria, perché per l’uscita di ora servono due campioni passati.

Questa media mobile è, dal punto di vista del dominio della frequenza, un filtro passa-basso elementare: attenua le variazioni rapide (il rumore ad alta frequenza) e lascia passare l’andamento lento. È lo stesso smoothing che applichi a una serie di metriche rumorose per vederne il trend.

Esempio 2 — in codice: un’immagine è un segnale, un kernel è una risposta all’impulso

Sezione intitolata “Esempio 2 — in codice: un’immagine è un segnale, un kernel è una risposta all’impulso”
import numpy as np
# Un'immagine in scala di grigi è un segnale I[x, y]: una griglia di numeri.
immagine = np.array([
[10, 10, 10, 200, 200],
[10, 10, 10, 200, 200],
[10, 10, 10, 200, 200],
]) # un bordo verticale netto tra zona scura (10) e chiara (200)
# Un kernel di edge detection: risponde ai cambiamenti orizzontali.
# Funge da "risposta all'impulso" 1D di un sistema LTI applicato per righe.
kernel = np.array([-1, 0, 1])
# Convoluzione (qui in pratica cross-correlazione) lungo le righe.
for riga in immagine:
risposta = np.convolve(riga, kernel, mode="valid")
print(risposta)
# Output per ogni riga: [0, 190, 190]
# Zero dove l'immagine resta piatta, grande dove cade il bordo.

Il kernel [-1, 0, 1] è la risposta all’impulso di un sistema che misura la differenza tra il pixel a destra e quello a sinistra: risponde poco dove l’immagine è uniforme e molto dove c’è un bordo. È edge detection, e nasce dritto dall’elaborazione dei segnali.

Nelle reti convoluzionali, kernel come questo non vengono progettati a mano ma appresi dai dati — ma l’operazione di base è la stessa.

Esempio 3 — scenario reale: la pipeline audio di un modello speech

Sezione intitolata “Esempio 3 — scenario reale: la pipeline audio di un modello speech”

Un assistente vocale riceve la tua voce e deve trascriverla. La catena attraversa quasi ogni concetto di questo capitolo.

Il microfono produce un segnale analogico (pressione sonora). Una scheda audio lo campiona (di solito a 16 kHz per il parlato) e lo quantizza, ottenendo un segnale digitale: una sequenza x[n]x[n]. A questo punto il segnale è quasi sempre sporco di rumore ambientale, con un certo SNR.

Il passo successivo non dà il waveform grezzo alla rete: lo trasforma nel dominio della frequenza a finestre, producendo uno spettrogramma (più precisamente un mel-spettrogramma) — una rappresentazione tempo-frequenza che mostra come l’energia si distribuisce sulle frequenze nel tempo. È esattamente il “secondo punto di vista” dell’intuizione, calcolato a pezzetti.

Solo allora il modello (per esempio un sistema di riconoscimento vocale) riceve l’input. Ogni stadio di questa pipeline è elaborazione dei segnali; il modello neurale è l’ultimo anello.

Esempio 4 — deterministico più stocastico: una metrica di servizio nel tempo

Sezione intitolata “Esempio 4 — deterministico più stocastico: una metrica di servizio nel tempo”

La latenza di un endpoint, misurata ogni minuto, è un segnale a tempo discreto x[n]x[n]. Conviene scomporlo nei termini di questo capitolo per capire cosa stai guardando.

C’è una componente deterministica: un ciclo giorno/notte prevedibile (più traffico di giorno), magari un picco a inizio di ogni ora quando parte un job schedulato. Questa parte è quasi-periodica e modellabile.

C’è poi una componente stocastica: il jitter casuale dovuto a contesa di risorse, garbage collection, vicini rumorosi sull’infrastruttura. Questa parte si descrive solo statisticamente — media, varianza, come si distribuisce.

Il modello è di nuovo x[n]=segnale[n]+rumore[n]x[n] = \text{segnale}[n] + \text{rumore}[n]: l’andamento che ti interessa più il jitter che non ti interessa. Se vuoi vedere il trend, applichi uno smoothing — una media mobile, cioè un filtro passa-basso, che attenua le oscillazioni rapide del rumore e lascia emergere la componente lenta.

Se invece vuoi rilevare anomalie, ti interessa proprio ciò che il passa-basso scarta: gli scostamenti improvvisi dalla norma. Lo stesso segnale, due obiettivi opposti, due filtri diversi. È la dimostrazione operativa che “filtrare” non è ripulire in assoluto, ma scegliere cosa tenere in funzione della domanda.

Pre-processing audio per modelli speech. Sistemi di riconoscimento vocale e modelli speech raramente lavorano sul waveform grezzo: l’input è quasi sempre uno spettrogramma o mel-spettrogramma.

Conoscere campionamento, banda e finestratura ti fa capire perché un input registrato male (sotto-campionato, clippato, rumoroso) degrada le trascrizioni, e dove intervenire.

Reti convoluzionali in computer vision. I primi layer di una CNN sono, di fatto, banchi di filtri convoluzionali. L’intuizione del filtro che risponde ai bordi (esempio 2) viene dritta dall’elaborazione dell’immagine. Capire la convoluzione come operazione LTI rende cnn-base (Parte XVIII, in preparazione) molto meno misterioso.

Serie temporali nell’osservabilità dei sistemi AI. Latenza, throughput, costo-per-token loggati nel tempo sono segnali a tempo discreto. Lo smoothing (la media mobile dell’esempio 1 è un filtro passa-basso), il rilevamento di anomalie, l’estrazione di trend e stagionalità sono tutte tecniche di segnali applicate al monitoring di servizi e agenti. Il tema ha un capitolo dedicato in time-series-base (in preparazione, questa Parte).

Encoding posizionali nei transformer. Gli encoding posizionali sinusoidali originali, e il più recente RoPE, codificano la posizione di un token usando sinusoidi a frequenze geometricamente spaziate. Qui il signal processing entra dentro l’architettura del modello, non solo nel pre-processing.

Sensor fusion per agenti embodied e robotica. Combinare misure rumorose provenienti da sensori diversi (sensor-fusion, in preparazione, questa Parte; e filtro di Kalman in Parte XI) è elaborazione di più segnali sotto incertezza. Il modello segnale+rumore di questo capitolo è il punto di partenza.

Perché i segnali contano per chi lavora con l’AI

Sezione intitolata “Perché i segnali contano per chi lavora con l’AI”

Questa Parte non è un’appendice ingegneristica per completezza enciclopedica. È un prerequisito reale per capire come i modelli moderni vedono il mondo.

Vale la pena enumerare i legami, perché sono di classi diverse e confonderli porta a intuizioni sbagliate: alcuni sono discendenze storiche documentate, altri sono usi diretti, altri ancora sono solo analogie comode.

Il primo legame non è nemmeno un’analogia: è un’identità. Audio, immagini e video che un modello riceve in input sono segnali campionati, nel senso letterale di questo capitolo. Un file audio è la sequenza x[n]x[n] di campioni di pressione sonora; un’immagine è I[x,y]I[x,y] campionata su una griglia di pixel.

Quando dai un’immagine a un modello vision o una clip a un modello speech, gli stai dando segnali. Le scelte fatte a monte — frequenza di campionamento, risoluzione, compressione — determinano cosa il modello può e non può vedere. Capire campionamento e aliasing spiega perché un audio sotto-campionato perde le consonanti sibilanti, o perché ridimensionare male un’immagine introduce artefatti.

Il secondo legame è la filiazione più importante per il deep learning: la convoluzione. L’operazione al cuore delle reti convoluzionali (le CNN che dominano la computer vision per un decennio) è la stessa convoluzione dei sistemi LTI, con lo stesso nome e la stessa struttura matematica.

Storicamente non è un caso: l’elaborazione dell’immagine classica usava da decenni filtri convoluzionali per fare smoothing, sharpening, edge detection, e le CNN ereditano quella macchina rendendo il kernel apprendibile invece che progettato. Quando vedrai cnn-base (Parte XVIII, in preparazione), riconoscerai la convoluzione di questo capitolo. La differenza chiave — il kernel appreso, e l’aggiunta di non-linearità — è ciò che separa un filtro fisso da un layer di rete; la radice è comune.

Il terzo legame è l’uso diretto: lo spettrogramma come front-end. Modelli speech come quelli di trascrizione automatica raramente lavorano sul waveform grezzo. Lo convertono prima in una rappresentazione tempo-frequenza — il mel-spettrogramma — che è esattamente il dominio della frequenza di questo capitolo, calcolato a finestre scorrevoli. Tutta la catena di pre-processing è elaborazione dei segnali; la rete neurale entra in gioco solo dopo.

Lo stesso vale, in forma più sottile, per gli encoding posizionali nei transformer: gli encoding sinusoidali originali e il più recente RoPE codificano la posizione di un token con sinusoidi a frequenze diverse, importando il vocabolario dei segnali dentro l’architettura del modello.

Il quarto legame è un’analogia, e va trattato come tale per non farsi ingannare. I diffusion model — la famiglia dietro molti generatori di immagini — funzionano imparando a togliere rumore aggiunto progressivamente a un dato. “Togliere rumore da un segnale” suona identico al filtraggio classico, ed è una buona porta d’ingresso intuitiva.

Ma è solo un’analogia: il filtro classico è un sistema LTI fisso e spettrale, il diffusion model è un denoiser appreso, iterativo, non-lineare, condizionato. La sezione “Dove si rompe” torna su questo punto perché è la confusione più frequente di tutte.

La morale per chi costruisce sistemi AI è semplice: ogni volta che un dato continuo del mondo entra in un modello, è passato per il campionamento, la quantizzazione, spesso una trasformazione in frequenza e un filtraggio.

Conoscere quei passaggi significa saper diagnosticare un input degradato, capire perché un modello multimodale ha la risoluzione che ha, e leggere senza mistificazioni la parentela tra operazioni classiche e moderne. Questa Parte fornisce quel vocabolario; il capitolo di chiusura ponte-segnali-audio-vision (in preparazione, questa Parte) lo lega esplicitamente al mondo dei modelli.

I concetti di questo capitolo sono solidi, ma le intuizioni scivolano facilmente in errori che vale la pena disinnescare subito.

Discreto non è digitale. Discreto riguarda il tempo (campioni a istanti separati); digitale aggiunge la quantizzazione dell’ampiezza. Esiste, almeno concettualmente, un segnale a tempo discreto ma ampiezza continua: è l’oggetto che si studia prima di introdurre la quantizzazione. Digitale = discreto nel tempo più quantizzato nei valori. Tenere separati i due assi evita una quantità sorprendente di confusione quando si parla di conversione analogico-digitale.

Continuo non è sinonimo di analogico. Nel parlato comune si usano in modo intercambiabile, ma rigorosamente “continuo/discreto” è l’asse del tempo e “analogico/digitale” è l’asse dell’ampiezza. Sono ortogonali: un segnale ha una posizione su ciascuno dei due.

La convoluzione delle CNN: filiazione, con due caveat. L’operazione di convoluzione nelle reti convoluzionali porta lo stesso nome e ha la stessa struttura matematica della convoluzione dei sistemi LTI. Il legame è di filiazione: l’elaborazione dei segnali e dell’immagine (filtri convoluzionali, edge detection) precede storicamente e ispira le CNN.

Ma attenzione a due dettagli, per non scivolare in un’equivalenza che non c’è. Primo: nelle CNN il kernel non è progettato a mano, è appreso dai dati durante il training. Secondo: molte librerie di deep learning implementano tecnicamente una cross-correlazione (senza il ribaltamento del kernel) pur chiamandola convoluzione. Stessa famiglia e stessa radice, non identità operativa pixel-per-pixel.

Il sistema LTI come antenato della convoluzione nelle reti. Un layer convoluzionale che applica un kernel a un input è, per la sua parte lineare, un sistema LTI. Le reti aggiungono poi non-linearità (le funzioni di attivazione) e l’apprendimento del kernel, ma l’operazione lineare di base è quella del campo dei segnali. Anche qui: filiazione documentata, non equivalenza completa.

Embedding come “segnali”: analogia, non identità. Capita di sentir dire che un vettore di embedding è “un segnale ad alta dimensione”. Come analogia didattica può aiutare a visualizzarlo come una sequenza di valori indicizzati dalla dimensione.

Ma un embedding non è un segnale temporale e non vive nel tempo: l’analogia non porta con sé la macchina di tempo, frequenza e campionamento. L’unico punto in cui c’è un legame reale è negli encoding posizionali sinusoidali, che usano davvero sinusoidi. Tieni distinte le due cose.

“Un diffusion model è un filtro che toglie rumore”: analogia, non meccanica. Questa è la confusione più seducente e più sbagliata. I diffusion model (la famiglia di generative model dietro molti generatori di immagini) imparano a rimuovere rumore aggiunto progressivamente a un dato. L’idea “togliere rumore da un segnale” ricorda il filtraggio classico, ed è una buona analogia per intuire cosa succede.

Ma i meccanismi sono profondamente diversi: il filtro classico è un sistema LTI fisso, definito da proprietà spettrali note in anticipo; il diffusion model è un denoiser appreso, iterativo, non-lineare, condizionato su un contesto, che opera in uno spazio di rappresentazione imparato. È un’analogia, non una filiazione e tantomeno un’equivalenza. Chi confonde i due livelli costruisce intuizioni che si rompono appena prova a ragionare sui dettagli.

L’aliasing non è “un po’ di rumore”. Il rumore è una componente additiva, di solito casuale, che si può attenuare a valle. L’aliasing è invece una distorsione strutturale e irreversibile: una volta che, campionando troppo lentamente, hai lasciato che le frequenze alte si travestissero da basse, non c’è più modo di separarle dal segnale vero. Va prevenuto a monte (con un filtro anti-aliasing prima del campionamento), non rimosso dopo.

La quantizzazione introduce il suo rumore. Convertire un segnale a un numero finito di livelli (digitalizzarlo in ampiezza) non è gratis: l’arrotondamento di ogni campione al livello più vicino aggiunge un errore, il rumore di quantizzazione. Più bit usi, più livelli hai, più piccolo è l’errore: ecco perché audio a 24 bit suona più pulito di audio a 8 bit.

È un secondo canale di degrado, distinto dall’aliasing (che riguarda il campionamento nel tempo) e dal rumore ambientale (che è già nel segnale prima della conversione). Tre fonti di errore diverse, da non mescolare quando si diagnostica un input scadente.

SNR più alto non è gratis. Alzare il rapporto segnale-rumore filtrando suona sempre desiderabile, ma l’SNR è definito rispetto a un segnale e a un rumore specifici. Se la banda del filtro è scelta male, “ripulire” il rumore cancella anche componenti utili del segnale. Il guadagno in pulizia si paga in fedeltà.

Non tutti i sistemi reali sono LTI. Gli LTI sono la classe che sappiamo trattare con eleganza completa, e questo li rende il punto di partenza di ogni corso. Ma la stragrande maggioranza dei sistemi fisici è non-lineare e/o tempo-variante.

L’LTI è un’idealizzazione potente — spesso un’ottima approssimazione locale, per piccoli segnali e tempi brevi — non la norma della fisica. Trattare un sistema fortemente non-lineare come se fosse LTI è un modo collaudato di sbagliare previsioni.

  • campionamento-nyquist (in preparazione, questa Parte) — il passo immediatamente successivo: come e quanto campionare, l’aliasing in dettaglio, la dimostrazione del teorema di Nyquist-Shannon che qui abbiamo solo enunciato.
  • fourier-intuizione (in preparazione, questa Parte) — rende formale il “secondo punto di vista” del dominio della frequenza: come si scompone un segnale in sinusoidi.
  • filtri-convoluzione (in preparazione, questa Parte) — la convoluzione come operazione cardine dei sistemi LTI, lo smoothing, l’edge detection, e il ponte verso le CNN.
  • rumore-snr (in preparazione, questa Parte) — sviluppa il modello segnale+rumore e l’SNR introdotti qui, con tecniche di filtraggio del rumore.
  • ponte-segnali-audio-vision (in preparazione, questa Parte) — chiude la Parte XII spiegando perché segnali e filtri sono il front-end di audio, vision e modelli multimodali.
  • informazione-shannon (Parte XIII, in preparazione) — perché un segnale che non varia non porta informazione: la teoria di Shannon dietro l’intuizione.
  • cnn-base (Parte XVIII, in preparazione) — la convoluzione dentro le reti neurali, in filiazione diretta dal sistema LTI di questo capitolo.
  • Stato, transizione, traiettoria (Parte IX) — il concetto di stato di un sistema, che qui appare come “memoria”.
  • Equilibrio, stabilità, attrattori (Parte IX) — la stabilità di un sistema, che qui incontriamo nella forma BIBO.
  • Stimare stato nascosto con modello e misure rumorose (Parte XI) — il filtro di Kalman come incrocio tra elaborazione di segnali rumorosi e controllo.
  • Processi stocastici e dinamiche casuali (Parte VI) — i segnali stocastici visti come processi aleatori nel tempo.
  • Alan V. Oppenheim, Alan S. Willsky, S. Hamid Nawab — Signals and Systems (2nd ed., Prentice Hall, 1996). Il testo classico universitario. Il capitolo 2 costruisce la rappresentazione per convoluzione dei sistemi LTI a partire da linearità, tempo-invarianza e proprietà di setaccio dell’impulso: la fonte canonica per quasi tutto questo capitolo.
  • Claude E. Shannon — A Mathematical Theory of Communication (Bell System Technical Journal, 1948). Il paper fondante della teoria dell’informazione, dove compaiono il termine “bit” e il modello di canale con il segnale ricevuto come somma di trasmesso e rumore. Leggibile anche oggi.
  • Claude E. Shannon — Communication in the Presence of Noise (Proceedings of the IRE, 1949). Il paper che formalizza e dimostra il teorema del campionamento. Manoscritto del 1940, pubblicato con nove anni di ritardo per via della guerra.
  • James W. Cooley, John W. Tukey — An Algorithm for the Machine Calculation of Complex Fourier Series (Mathematics of Computation, 1965). La FFT: l’algoritmo che, riducendo il calcolo della trasformata da ordine N2N^2 a NlogNN \log N, ha reso l’elaborazione numerica dei segnali una pratica diffusa.
  • Alan V. Oppenheim, Ronald W. Schafer — Discrete-Time Signal Processing (Prentice Hall). Il riferimento per il versante digitale: campionamento, trasformata discreta, filtri, finestratura — la base per i capitoli successivi della Parte.

← Torna all’indice della Parte XII