# FFT e finestre di analisi

> Spectral leakage, finestre (Hann, Hamming, Blackman, Blackman-Harris, flat-top) e le loro metriche — ENBW, scalloping, lobo principale e side-lobe — come scegliere la finestra giusta per analizzare uno spettro.

Pubblicato: 2026-06-24
Aggiornato: 2026-08-25
Ambito: software
Riferimento normativo: FFT e finestre di analisi <https://en.wikipedia.org/wiki/Window_function>

Pagina: <https://www.stline.it/wiki/fft-window-explorer/>

---

La FFT trasforma un blocco di campioni in uno spettro, ma il risultato dipende tanto dal segnale quanto dalla **finestra** con cui lo si analizza. Capire lo *spectral leakage* e le finestre è la differenza tra leggere uno spettro e fraintenderlo. Questo strumento mostra l'effetto delle finestre su un segnale di test; questa pagina spiega cosa succede e perché.

## La FFT e la risoluzione

La FFT calcola la Trasformata di Fourier Discreta di N campioni e restituisce N/2+1 bin di frequenza equispaziati tra 0 e Fs/2 (Nyquist). La spaziatura dei bin — la **risoluzione in frequenza** — dipende solo da Fs e N:

$$
\Delta f = \dfrac{f_s}{N} \qquad\qquad X[k] = \sum_{n=0}^{N-1} x[n]\,e^{-j 2\pi k n / N}
$$

A parità di Fs, più campioni (N grande) danno bin più fitti e quindi la capacità di distinguere righe più vicine. Ma N campioni a frequenza Fs sono N/Fs secondi di osservazione: la risoluzione si compra con il **tempo di misura**. Non c'è scorciatoia — è una conseguenza diretta della trasformata, non un limite dell'algoritmo.

## Spectral leakage

La FFT tratta gli N campioni come un **periodo** che si ripete all'infinito. Se una sinusoide completa un numero intero di cicli nella finestra, la ripetizione è continua e l'energia cade in un solo bin. Ma se non lo fa — il caso normale — agli estremi del blocco nasce una discontinuità, e questa discontinuità ha contenuto spettrale a tutte le frequenze: l'energia della riga si disperde sui bin vicini. È lo **spectral leakage**.

La conseguenza pratica è seria: una riga forte produce code che possono **seppellire** una riga debole vicina, anche quando la loro distanza in frequenza sarebbe ben oltre la risoluzione Δf. Il leakage non è rumore — è il segnale stesso, mal localizzato.

## Le finestre e i loro trade-off

Una **finestra di analisi** moltiplica gli N campioni per una funzione che va dolcemente a zero agli estremi, cancellando la discontinuità ai bordi. Il prezzo da pagare è un compromesso inevitabile, descritto in modo completo nel lavoro di riferimento del campo — **F. J. Harris, "On the Use of Windows for Harmonic Analysis with the Discrete Fourier Transform" (Proc. IEEE, 1978)** — che tabula e confronta decine di finestre.

Lo spettro di una finestra ha due parti: un **lobo principale** (la riga, allargata) e i **side-lobe** (le code residue). Le due si scambiano:

- una finestra con **lobo stretto** risolve righe vicine ma ha **side-lobe alti** → più leakage;
- una finestra con **side-lobe bassi** sopprime il leakage ma ha **lobo largo** → peggiore risoluzione.

Le finestre classiche sono somme di coseni; ogni termine aggiuntivo abbassa i side-lobe a spese del lobo:

$$
w[n] = \sum_{k=0}^{K} (-1)^k\, a_k \cos\!\left(\dfrac{2\pi k n}{N}\right)
$$

- **Rettangolare** (nessuna finestra) — lobo più stretto in assoluto, ma side-lobe a soli −13 dB.
- **Hann / Hamming** — un termine di coseno: side-lobe a −31 / −43 dB, lobo moderato. Il compromesso generale.
- **Blackman / Blackman-Harris** — due/tre termini: side-lobe fino a −92 dB, lobo decisamente più largo.
- **Flat-top** — **cinque coefficienti** (quattro termini di coseno), ottimizzati per l'ampiezza: lobo larghissimo, ma scalloping quasi nullo. Attenzione a una sua proprietà poco nota: questa finestra **non è non negativa**. Con i coefficienti SRS/Matlab usati qui il minimo vale −0,0706 e il primo campione è −4,2·10⁻⁴, non zero — quindi la descrizione generale «va dolcemente a zero agli estremi», vera per tutte le altre, per la flat-top va corretta in «attraversa lo zero e passa in negativo».

## ENBW e scalloping

Due metriche riassumono il comportamento di una finestra al di là della forma del lobo.

La **Equivalent Noise Bandwidth (ENBW)** è la larghezza, in bin, del filtro rettangolare ideale che lascia passare la stessa potenza di rumore della finestra. Misura quanto rumore raccoglie ogni bin: ENBW alta = peggior rapporto segnale/rumore per una riga. Dipende dai soli coefficienti:

$$
\text{ENBW} = N \cdot \dfrac{\sum_{n} w_n^2}{\left(\sum_{n} w_n\right)^2}
$$

La rettangolare ha ENBW = 1 bin (il minimo possibile); le finestre più "morbide" salgono (Hann ≈ 1.5, flat-top ≈ 3.8). È il prezzo in banda equivalente di rumore della soppressione del leakage.

Lo **scalloping loss** è invece l'errore di ampiezza nel caso peggiore: una riga che cade esattamente a metà strada tra due bin viene letta attenuata (per la rettangolare fino a −3.9 dB). La **flat-top** è progettata proprio per annullarlo (scalloping ≈ 0 dB): per questo è la finestra delle misure di ampiezza calibrate, anche se il suo lobo largo la rende inadatta a risolvere righe vicine.

### Le finestre a confronto

| Finestra | ENBW (bin) | Scalloping | 1° side-lobe | Lobo −3 dB | Lobo −6 dB |
|---|---|---|---|---|---|
| Rettangolare | 1,000 | −3,92 dB | −13,3 dB | 0,88 bin | 1,20 bin |
| Hamming | 1,363 | −1,75 dB | −43,6 dB | 1,30 bin | 1,81 bin |
| Hann | 1,500 | −1,42 dB | −31,5 dB | 1,44 bin | 2,00 bin |
| Blackman | 1,727 | −1,10 dB | −58,1 dB | 1,64 bin | 2,30 bin |
| Blackman-Harris | 2,004 | −0,83 dB | −92,0 dB | 1,90 bin | 2,66 bin |
| Flat-top | 3,770 | −0,01 dB | −94,2 dB | 3,72 bin | 4,58 bin |

Le colonne del lobo sono la larghezza **totale** ai livelli −3 e −6 dB, in bin: è la misura diretta della risoluzione, e va dall'0,88 bin della rettangolare ai 3,72 della flat-top. Il resto della tabella si legge come il compromesso annunciato — side-lobe più bassi pagati con ENBW e lobo crescenti — con **un'eccezione che salta agli occhi**: la Hamming ha side-lobe più bassi *e* ENBW più basso *e* lobo più stretto della Hann. La domina su tutte le metriche in tabella. Allora perché la Hann è il default di mezzo mondo?

### Il paradosso Hann/Hamming: conta il roll-off

Perché il **primo** side-lobe non è la storia completa. Quello che conta, quando bisogna vedere una riga debole, è il livello del leakage **alla distanza a cui sta la riga**, e le due finestre si comportano in modo opposto man mano che ci si allontana:

| Finestra | 1° side-lobe | Oltre 10 bin | Oltre 50 bin | Oltre 200 bin | Pendenza |
|---|---|---|---|---|---|
| Rettangolare | −13,3 dB | −30,4 dB | −44,0 dB | −55,4 dB | 5,9 dB/ott. |
| Hamming | −43,6 dB | −47,4 dB | −60,6 dB | −72,0 dB | 5,9 dB/ott. |
| Hann | −31,5 dB | −71,1 dB | −112,1 dB | −148,2 dB | 17,8 dB/ott. |
| Blackman | −58,1 dB | −78,9 dB | −119,5 dB | −155,5 dB | 17,8 dB/ott. |
| Blackman-Harris | −92,0 dB | −99,2 dB | −121,2 dB | −131,0 dB | 0,9 dB/ott. |
| Flat-top | −94,2 dB | −93,0 dB | −98,6 dB | −109,6 dB | 4,6 dB/ott. |

La Hann parte peggio (−31,5 dB) ma **scende di 17,8 dB per ottava**; la Hamming parte meglio (−43,6) e scende di soli 5,9. Il sorpasso avviene molto presto: **già a 10 bin di distanza la Hann è 24 dB meglio** (−71,1 contro −47,4), e a 200 bin il divario è di 76 dB. La ragione è nei coefficienti: la Hann va esattamente a zero agli estremi con derivata nulla, la Hamming si ferma a 0,08 e quel gradino residuo genera una coda che decade come 1/f.

Quindi il criterio corretto non è «quale ha il primo side-lobe più basso» ma «quanto lontana sta la riga che voglio vedere»: la Hamming vince solo nell'intorno immediato, la Hann in tutto il resto dello spettro. La Blackman-Harris è il terzo caso: primo side-lobe eccellente (−92 dB) ma pendenza quasi nulla (0,9 dB/ottava), perché i suoi quattro coefficienti sono ottimizzati per **minimizzare il picco** dei side-lobe, non per farli decadere. È la scelta giusta quando serve un pavimento uniforme, non quando serve profondità lontano dalla riga.

La flat-top resta il caso estremo per l'ampiezza: scalloping misurato **−0,01 dB** contro i −3,92 della rettangolare, al prezzo di un lobo di 3,72 bin che non risolve nulla di vicino.

## Periodic o symmetric: quale convenzione

C'è un dettaglio da cui nascono differenze fra strumenti diversi. Una finestra di N punti si può costruire con denominatore **N** o **N − 1**:

- **periodic** (denominatore N) — la finestra è un periodo esatto di una funzione periodica: `w[0] = 0` ma `w[N−1] ≠ 0`. È la convenzione giusta per l'**analisi FFT**, perché la DFT assume proprio che il blocco si ripeta;
- **symmetric** (denominatore N − 1) — la finestra è simmetrica attorno al centro: `w[0] = w[N−1] = 0`. È la convenzione giusta per il **progetto di filtri FIR**, dove la simmetria garantisce la fase lineare.

Su una Hann a N = 16 la differenza è visibile a occhio: l'ultimo campione vale **0,0381** nella periodica e **0** nella simmetrica. Questo strumento usa la **periodic**, coerente col suo scopo. Quanto pesa la scelta sulle metriche:

| N | ENBW periodic | ENBW symmetric | Differenza |
|---|---|---|---|
| 8 | 1,50000 | 1,71429 | +14,286 % |
| 16 | 1,50000 | 1,60000 | +6,667 % |
| 64 | 1,50000 | 1,52381 | +1,587 % |
| 256 | 1,50000 | 1,50588 | +0,392 % |
| 1024 | 1,50000 | 1,50147 | +0,098 % |
| 4096 | 1,50000 | 1,50037 | +0,024 % |

A N = 1024 la differenza sull'ENBW è un decimo di punto percentuale: irrilevante. A N = 8 è il 14 %, cioè decisiva. La regola pratica: per blocchi FFT di dimensione normale le due convenzioni sono interscambiabili, per finestre corte (banchi di filtri, analisi a blocchi piccoli, tabelle precalcolate su firmware) no — ed è il caso in cui i risultati di due strumenti diversi non tornano e si perde un pomeriggio a cercare l'errore altrove.

## Quando usare quale finestra

- **Segnale sincrono / transitorio** (numero intero di cicli, o impulso che decade nella finestra): **rettangolare** — niente leakage da correggere, massima risoluzione.
- **Analisi generica**: **Hann** o **Hamming** — il default ragionevole, leakage contenuto senza rinunciare troppo alla risoluzione.
- **Riga debole accanto a una forte** (alto range dinamico): **Blackman-Harris** — side-lobe bassissimi per non far sparire la riga debole sotto le code di quella forte.
- **Misura precisa dell'ampiezza** di una riga: **flat-top** — scalloping nullo, l'ampiezza letta è corretta indipendentemente da dove cade la riga rispetto ai bin.

## Limiti

- FFT radix-2: N deve essere **potenza di 2**.
- Segnale di test sintetico (sinusoidi + rumore gaussiano seedato), non acquisizione reale.
- Spettro single-sided calibrato in ampiezza di picco (correzione di coherent gain); non è una stima di densità spettrale di potenza.
- Strumento dimostrativo, non un analizzatore di spettro di misura.

## Riferimenti

- **F. J. Harris, "On the Use of Windows for Harmonic Analysis with the Discrete Fourier Transform"**, Proceedings of the IEEE 66(1), 1978 — il riferimento classico su finestre, ENBW, scalloping e side-lobe, con le tabelle comparative usate ancora oggi.
- **Strumento correlato** — il [FFT / Window Explorer](/tools/fft-window-explorer/) mette in pratica questa pagina: componi un segnale, scegli la finestra e leggi spettro e metriche.
