Från idealt svar till praktiskt filter
Hamming presenterade en fyrstegmetod för FIR-filterdesign med Fourier-serier.
Steg 1: Ange det ideala svaret
Definiera H_ideal(f): det exakta frekvenssvar du vill ha. För ett lågpassfilter: H = 1 för f < f_c, H = 0 för f > f_c. Detta är en stegfunktion i frekvensdomänen.
Steg 2: Beräkna Fourier-koefficienter
Expandera H_ideal(f) som en Fourier-serie i frekvensvariabeln. Koefficienterna c_k är filterets ideala impulssvarvärden:
c_k = ∫₀¹ H_ideal(f) · e^{i2πfk} df
För ett lågpassfilter med avskärning f_c: c_k = sin(2πf_c·k) / (πk) för k ≠ 0, c_0 = 2f_c.
Detta impulsvar är oändligt — sinc-funktionen sträcker sig för alltid i tid. Ett praktiskt filter behöver ett ändligt antal koefficienter.
Steg 3: Trunkera till 2N+1 termer
Behåll bara koefficienter c_k för |k| ≤ N. Detta rektangulära fönster på 2N+1 termer är den enklaste trunkering. Det producerar Gibbs-fenomenet: ≈9% överskridande nära avskärningen.
Steg 4: Använd ett fönster
Multiplicera de trunkerade koefficienterna med en fönsterfunktion w_k för att reducera Gibbs-överskridande:
c̃_k = c_k · w_k
De fönstrade koefficienterna c̃_k definierar det praktiska filtret.
Beräkna Fourier-koefficienter
Fourier-koefficientformeln c_k = sin(2πf_c·k) / (πk) för ett lågpassfilter med avskärning f_c ger impulssvaret.
För ett bandpassfilter med lägre avskärning f_l och högre avskärning f_u är Fourier-koefficienten för det ideala svaret: c_k = [sin(2πf_u·k) − sin(2πf_l·k)] / (πk).
Hur fönster minskar Gibbs-överskridande
En fönsterfunktion w_k avsmalnar den trunkerade koefficientsekvensen från sitt centrala värde ned till noll vid kanterna. Avsmalnandet tar bort de skarpa kanterna som införs av rektangulär trunkering.
Varför avsmalnande fungerar
Gibbs-överskridande uppstår för att det rektangulära fönstrets Fourier-transform (sinc-funktionen) har stora sidolober. Dessa sidolober adderas tillsammans nära diskontinuiteten för att producera överskridandet på ≈9%.
Ett jämnt fönster har en Fourier-transform med mindre sidolober. Multiplicering av koefficienterna med fönstret konvolverar det ideala frekvenssvar med fönstrets Fourier-transform. Mindre sidolober → mindre rippling.
Vanliga fönster
Rektangulärt (inget fönster): sidolober ≈ −13 dB, Gibbs ≈ 9%.
Hann (von Hann): w_k = 0.5 + 0.5·cos(πk/N). Sidolober ≈ −31 dB.
Hamming: w_k = 0.54 + 0.46·cos(πk/N). Sidolober ≈ −41 dB, första sidelob ≈ −43 dB. Gibbs < 0.2%.
Kaiser: w_k = I₀(α·√(1−(k/N)²)) / I₀(α). Justerbar: α styr sidelob-nivån, vilket tillåter en design att göra avvägningar mellan sidelob-höjd vs övergångsbands-bredd.
Fönster-avvägningen
Varje fönster medför en avvägning: att undertrycka sidolober gör alltid huvudloben bredare.
En bredare huvudlob betyder ett bredare övergångsband — området med frekvenser mellan passband & stoppband.
Hamming formaliserade detta i termer av Kaisers designparametrar:
- δ: tillåten rippling (vertikal tolerans från ideal — hur mycket svaret kan avvika från 0 eller 1)
- ΔF: övergångsbreds (horisontell tolerans — hur smal övergången från pass till stopp)
Kaisers metod hittar både N (antal koefficienter) och α (fönstrets formparameter) från bara δ och ΔF. Ingen gissning av fönstertyp.
Från specifikationer till koefficienter
Kaisers metod tar två specifikationer — δ (rippling-tolerans) och ΔF (övergångsbreds) — och producerar både N och fönsterkoefficienterna utan försök och misstag.
Designsekvensen
1. Beräkna A = −20·log₁₀(δ) (dämpning i dB)
2. Beräkna formparametern α:
- Om A > 50: α = 0.1102·(A − 8.7)
- Om 21 ≤ A ≤ 50: α = 0.5842·(A − 21)^{0.4} + 0.07886·(A − 21)
- Om A < 21: α = 0 (rektangulärt fönster)
3. Beräkna N = (A − 8) / (2.285 · 2πΔF)
4. Beräkna Kaiser-fönstrets vikter: w_k = I₀(α·√(1−(k/N)²)) / I₀(α)
5. Multiplicera de ideala Fourier-koefficienterna med fönstrets vikter
6. Evaluera den resulterande överföringsfunktionen och kontrollera rippling mot δ. Om rippling överskrider δ (kantinterferens), upprepa med en mindre tolerans.
Hamming noterade: Kaiser nådde exponenten 0.4 genom att testa 0.5 (för stor) och hitta att 0.4 passade bra. Datorn tjänade som ett experimentellt verktyg för teoretisk forskning.
Tillämpa Kaisers metod
Bessel-funktionen I₀(x) förekommer i Kaisers fönsterformel. Den beräknas som en snabbt konvergerande serie:
I₀(x) = Σ_{m=0}^∞ [(x/2)^m / m!]²
För små x konvergerar serien på några termer på grund av m!² i nämnaren.