Van Ideale Respons naar Praktisch Filter
Hamming presenteerde een vierstaps-ontwerpmethode voor FIR-filters met behulp van Fourier-reeksen.
Stap 1: Definieer de Ideale Respons
Definieer H_ideal(f): de exacte frequentierespons die je wilt. Voor een laagdoorlaatfilter: H = 1 voor f < f_c, H = 0 voor f > f_c. Dit is een stapfunctie in het frequentiedomein.
Stap 2: Bereken Fourier-coëfficiënten
Breid H_ideal(f) uit als een Fourier-reeks in de frequentievariabele. De coëfficiënten c_k zijn de ideale impulsresponswaardes van het filter:
c_k = ∫₀¹ H_ideal(f) · e^{i2πfk} df
Voor een laagdoorlaatfilter met afsnijding f_c: c_k = sin(2πf_c·k) / (πk) voor k ≠ 0, c_0 = 2f_c.
Deze impulsrespons is oneindig — de sinc-functie strekt zich eeuwig uit in de tijd. Een praktisch filter heeft een eindig aantal coëfficiënten nodig.
Stap 3: Trunceer naar 2N+1 Termen
Behoud alleen coëfficiënten c_k voor |k| ≤ N. Dit rechthoekig venster van 2N+1 termen is de eenvoudigste truncatie. Het produceert het Gibbs-fenomeen: ≈9% overshoot bij de afsnijding.
Stap 4: Pas een Venster Toe
Vermenigvuldig de afgeknotte coëfficiënten met een vensterfunctie w_k om Gibbs-overshoot te verminderen:
c̃_k = c_k · w_k
De vensterde coëfficiënten c̃_k definiëren het praktische filter.
Fourier-coëfficiënten Berekenen
De Fourier-coëfficientformule c_k = sin(2πf_c·k) / (πk) voor een laagdoorlaatfilter met afsnijding f_c geeft de impulsrespons.
Voor een banddoorlaatfilter met lagere afsnijding f_l en hogere afsnijding f_u, is de Fourier-coëfficiënt van de ideale respons: c_k = [sin(2πf_u·k) − sin(2πf_l·k)] / (πk).
Hoe Vensters Gibbs-Overshoot Verminderen
Een vensterfunctie w_k verzwakt de afgeknotte coëfficientreeks van zijn centrale waarde naar nul aan de randen. De verzwakking verwijdert de scherpe randen die door rechthoekige truncatie worden veroorzaakt.
Waarom Verzwakking Werkt
Gibbs-overshoot ontstaat omdat de Fourier-transformatie van het rechthoekige venster (de sinc-functie) grote zijlobben heeft. Deze zijlobben tellen samen bij de discontinuïteit op om de ≈9% overshoot te produceren.
Een glad venster heeft een Fourier-transformatie met kleinere zijlobben. Vermenigvuldiging van de coëfficiënten met het venster voert convolutie uit van de ideale frequentierespons met de Fourier-transformatie van het venster. Kleinere zijlobben → minder rimpel.
Veelvoorkomende Vensters
Rechthoekig (geen venster): zijlobben ≈ −13 dB, Gibbs ≈ 9%.
Hann (van Hann): w_k = 0.5 + 0.5·cos(πk/N). Zijlobben ≈ −31 dB.
Hamming: w_k = 0.54 + 0.46·cos(πk/N). Zijlobben ≈ −41 dB, eerste zijlob ≈ −43 dB. Gibbs < 0.2%.
Kaiser: w_k = I₀(α·√(1−(k/N)²)) / I₀(α). Instelbaar: α bepaalt het zijlobniveau, waardoor een ontwerp de zijlobhoogte tegen overgangsbandbreedte kan verhandelen.
De Vensterafweging
Elk venster legt een afweging op: het onderdrukken van zijlobben verbreed altijd de hoofdlob.
Een bredere hoofdlob betekent een bredere overgangsband — het bereik van frequenties tussen doorlaatband & stopband.
Hamming formaliseerde dit in termen van Kaisers ontwerpparameters:
- δ: toegelaten rimpel (verticale tolerantie van ideaal — hoeveel de respons kan afwijken van 0 of 1)
- ΔF: overgangsbandbreedte (horizontale tolerantie — hoe smal de overgang van doorlaat naar stop)
Kaisers methode vindt zowel N (aantal coëfficiënten) als α (de venstervormparameter) uit δ en ΔF alleen. Geen gissen naar venstertype.
Van Specificaties naar Coëfficiënten
Kaisers methode neemt twee specificaties — δ (rimpltolerante) en ΔF (overgangsbandbreedte) — en produceert zowel N als de vensterfunctiewaarden zonder trial-and-error.
De Ontwerpvolgorde
1. Bereken A = −20·log₁₀(δ) (demping in dB)
2. Bereken de vormparameter α:
- Als A > 50: α = 0.1102·(A − 8.7)
- Als 21 ≤ A ≤ 50: α = 0.5842·(A − 21)^{0.4} + 0.07886·(A − 21)
- Als A < 21: α = 0 (rechthoekig venster)
3. Bereken N = (A − 8) / (2.285 · 2πΔF)
4. Bereken de Kaiser-vensterwichten: w_k = I₀(α·√(1−(k/N)²)) / I₀(α)
5. Vermenigvuldig de ideale Fourier-coëfficiënten met de vensterwichten
6. Evalueer de resulterende transferfunctie en controleer rimpel tegen δ. Als rimpel δ overschrijdt (randinterferentie), herhaal met een kleinere tolerantie.
Hamming opmerkte: Kaiser kwam op de exponent 0.4 door 0.5 te proberen (te groot) en bevond dat 0.4 goed past. De computer diende als experimenteel gereedschap voor theoretisch onderzoek.
Kaisers Methode Toepassen
De Bessel-functie I₀(x) verschijnt in Kaisers vensterfunctie. Het berekent als een snel convergerende reeks:
I₀(x) = Σ_{m=0}^∞ [(x/2)^m / m!]²
Voor kleine x convergeert de reeks in enkele termen vanwege de m!² in de noemer.