Dalla Risposta Ideale al Filtro Pratico
Hamming ha presentato un metodo di progettazione a quattro fasi per i filtri FIR utilizzando la serie di Fourier.
Fase 1: Specificare la Risposta Ideale
Definire H_ideal(f): la risposta in frequenza esatta che desideri. Per un filtro passa-basso: H = 1 per f < f_c, H = 0 per f > f_c. Questa è una funzione a gradino nel dominio della frequenza.
Fase 2: Calcolare i Coefficienti di Fourier
Espandere H_ideal(f) come una serie di Fourier nella variabile di frequenza. I coefficienti c_k sono i valori della risposta impulsiva ideale del filtro:
c_k = ∫₀¹ H_ideal(f) · e^{i2πfk} df
Per un filtro passa-basso con frequenza di taglio f_c: c_k = sin(2πf_c·k) / (πk) per k ≠ 0, c_0 = 2f_c.
Questa risposta impulsiva è infinita — la funzione sinc si estende all'infinito nel tempo. Un filtro pratico ha bisogno di un numero finito di coefficienti.
Fase 3: Troncare a 2N+1 Termini
Mantenere solo i coefficienti c_k per |k| ≤ N. Questa finestra rettangolare di 2N+1 termini è la troncatura più semplice. Produce il fenomeno di Gibbs: ≈9% di overshoot vicino al taglio.
Fase 4: Applicare una Finestra
Moltiplicare i coefficienti troncati per una funzione finestra w_k per ridurre l'overshoot di Gibbs:
c̃_k = c_k · w_k
I coefficienti finestrrati c̃_k definiscono il filtro pratico.
Calcolo dei Coefficienti di Fourier
La formula del coefficiente di Fourier c_k = sin(2πf_c·k) / (πk) per un filtro passa-basso con frequenza di taglio f_c dà la risposta impulsiva.
Per un filtro passa-banda con frequenza di taglio inferiore f_l e frequenza di taglio superiore f_u, il coefficiente di Fourier per la risposta ideale è: c_k = [sin(2πf_u·k) − sin(2πf_l·k)] / (πk).
Come le Finestre Riducono l'Overshoot di Gibbs
Una funzione finestra w_k assottiglia la sequenza di coefficienti troncati dal suo valore centrale verso zero ai bordi. L'assottigliamento rimuove i bordi netti introdotti dalla troncatura rettangolare.
Perché l'Assottigliamento Funziona
L'overshoot di Gibbs nasce perché la trasformata di Fourier della finestra rettangolare (la funzione sinc) ha grandi lobi laterali. Questi lobi laterali si sommano insieme vicino alla discontinuità per produrre l'overshoot di ≈9%.
Una finestra liscia ha una trasformata di Fourier con lobi laterali più piccoli. Moltiplicare i coefficienti per la finestra convolve la risposta in frequenza ideale con la trasformata di Fourier della finestra. Lobi laterali più piccoli → meno ripple.
Finestre Comuni
Rettangolare (nessuna finestra): lobi laterali ≈ −13 dB, Gibbs ≈ 9%.
Hann (von Hann): w_k = 0.5 + 0.5·cos(πk/N). Lobi laterali ≈ −31 dB.
Hamming: w_k = 0.54 + 0.46·cos(πk/N). Lobi laterali ≈ −41 dB, primo lobo laterale ≈ −43 dB. Gibbs < 0.2%.
Kaiser: w_k = I₀(α·√(1−(k/N)²)) / I₀(α). Sintonizzabile: α controlla il livello del lobo laterale, permettendo a una progettazione di scambiare l'altezza del lobo laterale con la larghezza della banda di transizione.
Lo Scambio della Finestra
Ogni finestra impone uno scambio: sopprimere i lobi laterali allarga sempre il lobo principale.
Un lobo principale più ampio significa una banda di transizione più ampia — l'intervallo di frequenze tra la banda passante & la banda di arresto.
Hamming ha formalizzato questo in termini dei parametri di progettazione di Kaiser:
- δ: ripple consentito (tolleranza verticale dall'ideale — quanto la risposta può deviare da 0 o 1)
- ΔF: larghezza di transizione (tolleranza orizzontale — quanto stretta la transizione da passa a arresto)
Il metodo di Kaiser trova sia N (numero di coefficienti) che α (il parametro della forma della finestra) da δ e ΔF soli. Nessuna indovinare il tipo di finestra.
Dalle Specifiche ai Coefficienti
Il metodo di Kaiser prende due specifiche — δ (tolleranza di ripple) e ΔF (larghezza di transizione) — e produce sia N che i coefficienti della finestra senza prove ed errori.
La Sequenza di Progettazione
1. Calcolare A = −20·log₁₀(δ) (attenuazione in dB)
2. Calcolare il parametro di forma α:
- Se A > 50: α = 0.1102·(A − 8.7)
- Se 21 ≤ A ≤ 50: α = 0.5842·(A − 21)^{0.4} + 0.07886·(A − 21)
- Se A < 21: α = 0 (finestra rettangolare)
3. Calcolare N = (A − 8) / (2.285 · 2πΔF)
4. Calcolare i pesi della finestra di Kaiser: w_k = I₀(α·√(1−(k/N)²)) / I₀(α)
5. Moltiplicare i coefficienti ideali di Fourier per i pesi della finestra
6. Valutare la funzione di trasferimento risultante e controllare il ripple rispetto a δ. Se il ripple supera δ (interferenza del bordo), ripetere con una tolleranza più piccola.
Hamming ha notato: Kaiser è arrivato all'esponente 0.4 provando 0.5 (troppo grande) e trovando che 0.4 si adattava bene. Il computer ha servito come strumento sperimentale per la ricerca teorica.
Applicazione del Metodo di Kaiser
La funzione di Bessel I₀(x) appare nella formula della finestra di Kaiser. Si calcola come una serie che converge rapidamente:
I₀(x) = Σ_{m=0}^∞ [(x/2)^m / m!]²
Per piccoli x la serie converge in pochi termini a causa di m!² nel denominatore.