FFT kullanarak FIR filtresi tasarlamanın sorunları nelerdir?


15

Konveksiyonlu bir filtre çekirdeği kullanarak "ilk ilkelerden" tasarlanmış bir FIR filtresi ile FFT kullanarak iki yoldan biriyle tasarlanmış bir filtre arasındaki ilişkiyi anlamaya çalışıyorum (aşağıya bakın).

Anladığım kadarıyla, FIR filtresinin dürtü yanıtı filtrenin evrişim çekirdeğiyle aynı şeydir. (Yanlışsam düzelt.)

Ayrıca, benim anlayışımla, FIR filtresinin dürtü yanıtının bileşen frekansları (yani Fourier dönüşümü), filtrenin frekans tepkisi ile aynı şeydir. Bu nedenle, ters fourier dönüşümü dürtü yanıtını bana geri verecektir. (Yine yanılıyorsam beni düzeltin).

Bu beni iki sonuca götürüyor (faz cevabını göz ardı etmek veya doğrusal faz cevabını varsaymak):

  1. İstediğim frekans yanıtımı "çizerek", dürtü yanıtını almak için bir IFFT alarak ve bunu evrişim çekirdeğim olarak kullanarak bir FIR filtresi keyfi frekans yanıtı tasarlayabilmeliyim.

  2. Alternatif olarak, giriş sinyalinin FFT'sini alarak, frekans alanındaki istenen keyfi frekans cevabımla çarparak ve çıkış sinyalini üretmek için sonucun IFFT'sini alarak bir filtre oluşturabilmeliyim.

Sezgisel olarak, 1 & 2 eşdeğer gibi geliyor, ancak bunu kanıtlayabileceğimden emin değilim.

İnsanlar (ve DSP literatürü), Chebyshev veya Remez gibi karmaşık (bana göre) algoritmalar kullanarak önceden tanımlanmış yanıtlarla FIR çekirdeklerini tasarlamak için büyük çaba harcıyor gibi görünüyor (Okuduğum bazı isimleri gerçekten anlamadan atıyorum) .

  • Olası her FIR çekirdeği için bir FFT / IFFT dönüşümü olduğunda neden bu uzunluklara gidiyoruz?
  • Neden sadece tam olarak istediğiniz frekans cevabını çizmeyin, bir IFFT alın ve FIR çekirdeğiniz var (yukarıdaki yöntem 1)?

İlgi alanım, ilgili olması durumunda dijital ses / dijital müzik.
bryhoyt

Yanıtlar:


13

Doğrudan bir yaklaşım kullanmak yerine (hem 1 hem de 2 gibi) FIR filtreleri tasarlayan insanları görmenizin bir nedeni, doğrudan yaklaşımın genellikle frekans alanındaki periyodikliği ve bir FFT kullanılarak uygulanan evrişimin dairesel evrişim .

Ne anlama geliyor?

x=[1,2,3,4]h=[1,1]

y=x*h[1,3,5,7,4][3,5,7,5]

FFT uzunluğu doğrusal evrişim sonucunun uzunluğundan büyük veya ona eşitse, ikisi aynıdır. Aksi takdirde, ikisi aynı değildir (veriler bir şekilde bunu yapmak için komplo kurmadıkça, örneğin bir sinyal sıfırsa).


Tabii, ama neden FFT / IFFT boyutlarının nihai kıvrım uzunluğuyla orantılı olduğundan emin olamıyorsunuz? Örneğin, evrişim uzunluğu N + M - 1'dir, bu nedenle fourier alanında, M-1 uzunluğunda bir frekans yanıtı 'çizdiğinizden emin olun. Neden işe yaramadı? İlginç şeyler btw. :)
TheGrapeBeyond

1
M-1

2
M-1 uzunluğundaki bir frekans cevabının hala sonsuz uzunlukta bir dürtü yanıtı vardır. Bu, filtrelenmiş sonucunuzu almak için IFFT'yi kullandığınızda, filtrenin dürtü yanıtının kuyruğunun etrafına sarılır (birden çok kez) ve son zaman alanı sonucunuzu sarar. Belki biraz. Belki çok fazla.
hotpaw2

10

Bir sorun, sonlu uzunluklu bir FFT kullanılırken sarılı sonsuz uzunluk dönüşümleriyle uğraşmaktır. Sonlu uzunluk frekans cevabının Fourier dönüşümü sonsuz uzunluk impuls cevabı veya filtre çekirdeğidir. Çoğu insan, ölmeden veya bilgisayar belleğinden kalmadan önce filtrelerinin bitmesini ister, bu nedenle daha kısa FIR filtreleri üretmek için hilelere ihtiyaç duyar. Sadece sonsuz dürtü yanıtının kuyruğunun FFT'nin etrafına sarılmasına veya bir miktar jenerik uzunluğa kısaltılmasına izin vermek, "klasik" filtre prototiplerinden birine kıyasla istenen frekans spesifikasyonu için daha düşük bir FIR filtresi üretebilir.

Başka bir sorun, rastgele bir "çizilmiş" frekans cevabının, herhangi bir sonlu çözünürlükte çizilmiş noktalar arasında çok sık korkunç bir yanıta (vahşi aşma) sahip olmasıdır. Bir FIR filtresine dönüştürün ve deli gibi çalar. Klasik filtre prototipleri, numune noktaları arasında düzgün olan frekans tepki fonksiyonlarına sahip olacak şekilde tasarlanmıştır.

(2) öğenize hızlı evrişim denir ve FFT veri penceresinin uzunluğundan artı birleşik filtre çekirdeğinden daha uzunsa ve her evrişim segmentinin başlangıcına / sonuna bakmak için uygun çakışma ekleme / kaydetme kullanılırsa yaygın olarak kullanılır veya pencere (çünkü FFT'ler genellikle blok uzunluğundadır).


6

Re 1): Evet, frekans tepkisini (hem büyüklük hem de fazda "çizerek" bir FIR filtresi tasarlayabilirsiniz. Ancak, bu çok verimsiz olma eğilimindedir: dürtü tepkisinin uzunluğu (ve filtre sırası) basitçe ön 128 puntoluk bir FFT seçtiyseniz, dürtü yanıtı için 128 musluk ve 4096 puntoluk FFT seçtiyseniz 4096 filtre musluğu elde edersiniz.

Re 2): Evet, frekans alanında çarpma ile filtreleyebilirsiniz ve bu gerçekten büyük dürtü yanıtları için verimli bir şekilde yapmanın tek yoludur. Bununla birlikte, Peter K'ın işaret ettiği gibi, frekans alanındaki çarpma dairesel evrişime karşılık gelir. Doğrusal konvolüsyonu uygulamanın en yaygın yolu "örtüşme ekleme" veya "örtüşme kaydetme" algoritmalarıdır (kolayca googled).


3

Burada söylenen her şeyi anladığımdan emin değilim, ama Fourier Dönüşümü yöntemi için dava açmak istiyorum.

Birincisi, FIR filtreleri tasarlamak için inanılmaz derecede esnek ve basit bir yoldur. Söylediğiniz gibi, yapılması gereken tek şey büyüklük ve faz tepkilerini tanımlamaktır. Ancak, söylendiği gibi, yanıtı nasıl tanımladığınız konusunda biraz dikkatli olmanız gerekir. Rastgele bir yanıt uygulamak ve korkunç bir zaman etki alanı yanıtı vermek için çok fazla sayıda dokunma gerektirebilir. Bu yüzden nasıl tanımladığınıza dikkat edin.

İkincisi, örneğin Parks McClellan yönteminin, bazı özel gereksinimler için Fourier yönteminden daha iyi bir filtre oluşturabilmesi durumudur, ancak musluk sayısını kontrol etmek ve bununla birlikte büyüklüğü, faz ve adım tepkisini tanımlamak kolay değildir. yöntem.

Örneğin, 10 kutuplu IIR Bessel'e benzer özelliklere sahip bir FIR filtresi tasarlamak istediğinizi, ancak geçiş bandını biraz daraltmak istediğinizi varsayalım (adım yanıtı aşımı pahasına). Daha sonra Fourier yöntemi, geçiş bandının ne kadar daraltıldığına bağlı olarak yaklaşık 22 dokunmayla çözülmesi kolay bir problem haline getirir.

Fourier yönteminin neler yapabildiğini görmek istiyorsanız, şu FIR programını deneyin http://www.iowahills.com/5FIRFiltersPage.html (ücretsiz). Örneğin, Gauss, Bessel, Butterworth ve Ters Chebyshev filtrelerine IIR eşdeğerleri tasarlayabilir. Genel olarak, bir filtrenin Fourier yönteminin güçlü noktası olan hemen hemen her şeye tepkisini ayarlamanıza izin verir. Aşağı tarafta, filtreler muhtemelen bazı özel gereksinimler için uygun değildir.


İlginç görünüyor. Gerçekten neler olup bittiğini anlamak için yazılımı denemeliyim - web sayfası yöntemini çok ayrıntılı olarak tanımlamıyor gibi görünüyor. Söyleyebileceğim kadarıyla, daha geleneksel bir şekilde üretilen bir filtre prototipinin frekans yanıtını değiştirdiğiniz bir melez gibi görünüyor. Bu doğru mu? Söylediklerinizin doğru olduğunu düşünüyorum - yanıtı nasıl tanımladığınıza dikkat etmelisiniz, aksi takdirde çok sayıda muslukla karşılaşırsınız. AFAIU, bu sadece frekans yanıtı ile bir filtre tasarlamak için büyük bir sorundur.
bryhoyt

1

AFAIK buna "saf filtreleme yaklaşımı" denir. Spektral içeriği frekans uzayındaki belirli noktalarda etkileyebilirsiniz, ancak bu noktalar arasındaki frekans içeriği için yararlı bir şey yapmazsınız. Uygun FIR filtresi tasarlarsanız, aslında bu ana noktalar arasındaki noktaları da dikkate alırsınız ve bu filtre ilk filtreden çok daha iyidir.

Saygılar, Bul.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.