İdeal Cevapdan Gerçek Filtre'ye
Hamming, Fourier serisi kullanarak FIR filtreler için dört adım tasarım yöntemi sundu.
Adım 1: İdeal Cevabı Belirleyin
H_ideal(f): istediğiniz exact frekans tepkisini tanımlayın. Düşük geçişli bir filtirden: H = 1 için f < f_c, H = 0 için f > f_c. Bu, frekans alanı'nda bir adım fonksiyonudur.
Adım 2: Fourier Katsayılarını Hesapla
H_ideal(f)'i frekans değişkeni üzerinde Fourier serisi olarak genişletin. Katsayılar c_k, filtrin ideal impulse yanıt değerleridir:
c_k = ∫₀¹ H_ideal(f) · e^{i2πfk} df
Düşük geçişli bir filtire için kesirli yanıt: c_k = sin(2πf_c·k) / (πk) için k ≠ 0, c_0 = 2f_c.
Bu impulse yanıt sonsuza kadar uzanır - zaman boyunca sürekli bir sinc fonksiyonu. Gerçek bir filtrenin sınırlı sayıda katsayıya sahip olması gerekiyor.
Adım 3: 2N+1 Terime Kesin
Katsayıları sadece |k| ≤ N için koruyun. Bu, en basit kesinti - dik bir pencere. Bu, Gibb's olasılığına neden olur: geçiş kenarında yaklaşık %9'luk yükseliş.
Adım 4: Bir Pencere Uygula
Kesik katsayıları Gibb's yükselişini azaltmak için bir pencere fonksiyonu w_k ile çarptırın:
c̃_k = c_k · w_k
Yalıtılmış katsayılar c̃_k, gerçek filtreyi tanımlar.
Fourier Katsayılarını Hesapla
Düşük geçişli bir filtire için Fourier katsayı formülü c_k = sin(2πf_c·k) / (πk) veritimsel yanıtın ideal impulse değerlerini verir.
Frekans aralığında alt kesirli f_l ve üst kesirli f_u olan bir bandpass filtire için ideal yanıt katsayısı: c_k = [sin(2πf_u·k) − sin(2πf_l·k)] / (πk).
Nefes Kesintisini Azaltan Pencereler
Bir window function w_k, kesikli katsayı dizisini merkezi değere kadar eğimlendirir ve kenarlarda sıfıra kadar tırmanır. Tırmanma, dik kenar kesintisine neden olan dik kenar kesintisini kaldırır.
Neden Tırmanma Çalışır
Nefes kesintisi, dik pencere'nin Fourier dönüşümünün (sinc fonksiyonunun) büyük yan loblarının bir araya gelmesiyle oluşur. Bu loblar, kesinti noktasında yaklaşık %9 nefes kesintisi oluşturur.
Bir pencereli fonksiyonun Fourier dönüşümü, daha küçük yan loblara sahip olacaktır. Katsayıları pencerle çarptığınızda, ideal frekans tepkimi, pencerin Fourier dönüşümüyle çarpılır. Küçük loblar → az ripple.
Sıklıkla Kullanılan Pencereler
Dikdörtgen (hiçbir pencereleme): yan loblar ≈ -13 dB, nefes ≈ %9.
Hann (von Hann): w_k = 0.5 + 0.5·cos(πk/N). Yan loblar ≈ -31 dB.
Hamming: w_k = 0.54 + 0.46·cos(πk/N). Yan loblar ≈ -41 dB, ilk lob ≈ -43 dB. Nefes < 0.2%.
Kaiser: w_k = I₀(α·√(1−(k/N)²)) / I₀(α). Ayarlanabilir: α, yan lob yüksekliğini ve geçiş bant genişliğini değiştiren bir tasarım sağlar.
Pencere Ticareti
Her pencere, yan lobları bastırmak için bir ticaret gerektirir.
Geniş bir ana lob, geçiş bant genişliğini - stopband'a geçiş için frekans aralığını genişletir.
Hamming, Kaiser'ın tasarım parametrelerini şu şekilde formalize etti:
- δ: Kabul edilebilir ripple (idealden vertikal olarak sapma - ne kadar yanıtın 0 veya 1'den sapabileceği)
- ΔF: geçiş genişliği (horizonal tolerans - geçiş bant genişliği ne kadar dar olmalı)
Kaiser'in yöntemi, δ ve ΔF'dan sadece alone N (katsayı sayısı) ve α (pencere şekli parametresi) bulur. Pencere tipini tahmin etmeden.
Özelliklerden Katsayılarına
Kaiser'in yöntemi, δ (dalgalanma toleransı) ve ΔF (geçiş genişliği) gibi iki özellikten N ve pencereli katsayıları üretmeden deneme yanılma gerektirmez.
Tasarım Dizini
1. A = −20·log₁₀(δ) (düşük frekans tınlaması) hesapla
2. Şekil parametresi α hesapla:
- Eğer A > 50: α = 0.1102·(A − 8.7)
- Eğer 21 ≤ A ≤ 50: α = 0.5842·(A − 21)^{0.4} + 0.07886·(A − 21)
- Eğer A < 21: α = 0 (dikdörtgen pencere)
3. N = (A − 8) / (2.285 · 2πΔF) hesapla
4. Kaiser pencere ağırlıklarını hesapla: w_k = I₀(α·√(1−(k/N)²)) / I₀(α)
5. İdeal Fourier katsayılarını pencereli ağırlıklarla çarptır
6. Sonuç eden transfer işlevini ve δ ile karşılaştırarak dalgalanma kontrol et. Eğer dalgalanma δ'yi (kenar etkileşimi) aşırsa, daha küçük bir toleransla tekrarla
Hamming not etti: Kaiser, 0.5 (çok büyük) denedi ve 0.4 iyi uyuyordu buldu. Bilgisayar teorik araştırmada deneysel araç olarak kullanıldı.
Kaiser'in Yönteminin Uygulanması
Kaiser pencere formülünde Bessel fonksiyonu I₀(x) görünür. İleri şu şekilde hesaplanır:
I₀(x) = Σ_{m=0}^∞ [(x/2)^m / m!]²
Küçük x için dizi, m!² ile olan tabanında hızlı bir şekilde kapanır.