Jakie są problemy z projektowaniem filtra FIR za pomocą FFT?

15

Próbuję zrozumieć związek między filtrem FIR zaprojektowanym na podstawie „pierwszych zasad” za pomocą jądra filtra z splotem a filtrem zaprojektowanym na jeden z dwóch sposobów za pomocą FFT (patrz poniżej).

O ile rozumiem, odpowiedź impulsowa filtra FIR jest taka sama jak jądro splotu filtra. (Popraw mnie, jeśli się mylę.)

Moim zdaniem częstotliwości składowe (tj. Transformata Fouriera) odpowiedzi impulsowej filtra FIR są tym samym co odpowiedź częstotliwościowa filtra. I dlatego odwrotna transformata Fouriera da mi odpowiedź impulsową (ponownie, poprawcie mnie, jeśli się mylę).

To prowadzi mnie do dwóch wniosków (ignorowanie odpowiedzi fazowej lub przyjęcie liniowej odpowiedzi fazowej):

  1. Powinienem być w stanie zaprojektować filtr FIR o dowolnej odpowiedzi częstotliwościowej poprzez „narysowanie” pożądanej odpowiedzi częstotliwościowej, pobranie IFFT w celu uzyskania odpowiedzi impulsowej i wykorzystanie go jako jądra splotu.

  2. Alternatywnie, powinienem być w stanie stworzyć filtr, biorąc FFT sygnału wejściowego, mnożąc przez moją pożądaną dowolną odpowiedź częstotliwościową w dziedzinie częstotliwości i biorąc IFFT wyniku w celu wytworzenia sygnału wyjściowego.

Intuicyjnie wydaje się, że 1 i 2 są równoważne, ale nie jestem pewien, czy mógłbym to udowodnić.

Wygląda na to, że ludzie (i literatura DSP) dokładają wszelkich starań, aby projektować jądra FIR ze wstępnie zdefiniowanymi odpowiedziami, używając skomplikowanych (dla mnie) algorytmów takich jak Czebyszew lub Remez (wyrzucam niektóre nazwiska, które przeczytałem, ale tak naprawdę ich nie rozumiem) .

  • Po co sięgać do tych długości, skoro dla każdego możliwego jądra FIR istnieje transformacja FFT / IFFT?
  • Dlaczego nie po prostu narysować dokładnie pożądaną odpowiedź częstotliwościową, wziąć IFFT, a jest twoje jądro FIR (metoda 1 powyżej)?
bryhoyt
źródło
Moim zainteresowaniem jest cyfrowe audio / cyfrowa muzyka, na wypadek, gdyby było to istotne.
bryhoyt

Odpowiedzi:

13

Jednym z powodów, dla których widzisz ludzi projektujących filtry FIR, zamiast bezpośredniego podejścia (takiego jak 1 i 2) jest to, że bezpośrednie podejście zwykle nie bierze pod uwagę okresowości w dziedzinie częstotliwości, a fakt, że splot zaimplementowany za pomocą FFT jest splot kołowy .

Co to znaczy?

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

y=xh[1,3),5,7,4][3),5,7,5]

Jeśli długość FFT jest większa lub równa długości wyniku splotu liniowego, wówczas oba są takie same. W przeciwnym razie dwa nie są takie same (chyba że dane w jakiś sposób spiskują, aby to zrobić, np. Jeśli jeden sygnał był równy zero).

Peter K.
źródło
Jasne, ale dlaczego ktoś nie mógł po prostu upewnić się, że rozmiary FFT / IFFT są proporcjonalne do końcowej długości splotu? Na przykład długość splotu wynosi N + M - 1, więc po prostu „narysuj” odpowiedź częstotliwościową w dziedzinie Fouriera o długości M-1. Dlaczego to nie zadziała? Ciekawe rzeczy przy okazji. :)
TheGrapeBeyond
1
M.-1
2
Odpowiedź częstotliwościowa o długości M-1 wciąż ma nieskończoną długość odpowiedzi impulsowej. Co oznacza, że ​​jeśli zrobisz IFFT, aby uzyskać odfiltrowany wynik, ogon odpowiedzi impulsowej filtra zawinie się (wiele razy) i zagniedzi wynik końcowy w dziedzinie czasu. Może trochę. Być może dużo.
hotpaw2
10

Jednym problemem jest radzenie sobie z transformacjami o nieskończonej długości, które owijają się przy użyciu FFT o skończonej długości. Transformacja Fouriera odpowiedzi częstotliwościowej o skończonej długości jest odpowiedzią impulsową o nieskończonej długości lub jądrem filtra. Większość ludzi chciałaby, aby ich filtr skończył się przed śmiercią lub brakiem pamięci komputera, dlatego potrzebne są sztuczki, aby uzyskać krótsze filtry FIR. Samo pozwolenie, by ogon nieskończonej odpowiedzi impulsowej owijał się wokół FFT lub skracając go do pewnej ogólnej długości, może wytworzyć gorszy filtr FIR dla pożądanej specyfikacji częstotliwości w porównaniu z jednym z „klasycznych” prototypów filtrów.

Innym problemem jest to, że losowa „narysowana” odpowiedź częstotliwościowa bardzo często ma okropną odpowiedź (dzikie przekroczenia) między narysowanymi punktami przy dowolnej skończonej rozdzielczości. Konwertuj na filtr FIR, a dzwoni jak szalony. Klasyczne prototypy filtrów zostały zaprojektowane tak, aby miały funkcje odpowiedzi częstotliwościowej, które są gładkie między punktami próbki.

Twój (2) nazywa się szybkim splotem i jest powszechnie używany, jeśli FFT jest dłuższy niż długość okna danych plus jądro filtru połączone, a odpowiednie wstawianie / dodawanie nakładki służy do dbania o początek / koniec każdego segmentu splotu lub okno (ponieważ FFT są zwykle blokowe).

hotpaw2
źródło
6

Re 1): Tak, możesz zaprojektować filtr FIR, „rysując” charakterystykę częstotliwościową (zarówno pod względem wielkości, jak i fazy. Jest to jednak zwykle bardzo nieefektywne: długość odpowiedzi impulsowej (i kolejności filtrów) jest po prostu wstępnie -określona przez długość FFT Jeśli wybierzesz 128-punktowy FFT, otrzymasz 128 uderzeń dla odpowiedzi impulsowej, a jeśli wybierzesz 4096-punktowy FFT, otrzymasz 4096 uderzeń filtra.

Re 2): Tak, możesz filtrować według mnożenia w dziedzinie częstotliwości i to rzeczywiście jedyny sposób, aby zrobić to skutecznie w przypadku dużych odpowiedzi impulsowych. Jednak, jak zauważył Peter K, mnożenie w dziedzinie częstotliwości odpowiada splotowi kołowemu. Najczęstszym sposobem implementacji splotu liniowego są algorytmy „nakładania dodawania” lub „nakładania zapisywania” (łatwo googlowane).

Hilmar
źródło
3

Nie jestem pewien, czy rozumiem wszystko, co zostało tutaj powiedziane, ale chciałbym przedstawić argumenty przemawiające za metodą transformacji Fouriera.

Po pierwsze, jest to niezwykle elastyczny i prosty sposób projektowania filtrów FIR. Jak powiedziałeś, wszystko, co musisz zrobić, to zdefiniować wielkość i reakcje fazowe. Jednak, jak już powiedziano, trzeba nieco ostrożnie zdefiniować odpowiedź. Dowolna reakcja może wymagać niezwykle dużej liczby dotknięć w celu wdrożenia i udzielenia strasznej odpowiedzi w dziedzinie czasu. Uważaj więc, jak to zdefiniujesz.

Po drugie, naprawdę jest tak, że na przykład metoda Parks McClellana może wygenerować lepszy filtr niż metoda Fouriera dla niektórych konkretnych wymagań, ale nie jest łatwo kontrolować liczbę dotknięć, a także określić przy tym wielkość, fazę i odpowiedź krokową metoda.

Załóżmy na przykład, że chcesz zaprojektować filtr FIR o charakterystyce podobnej do 10-biegunowego IIR Bessela, ale chcesz nieco zawęzić pasmo przejściowe (kosztem przekroczenia reakcji krokowej). Następnie metoda Fouriera czyni ten problem łatwym do rozwiązania za pomocą około 22 uderzeń, w zależności od tego, jak bardzo wąskie jest pasmo przejściowe.

Jeśli chcesz zobaczyć, co potrafi metoda Fouriera, wypróbuj ten program FIR http://www.iowahills.com/5FIRFiltersPage.html (jest bezpłatny). Może na przykład zaprojektować ekwiwalenty IIR filtrów Gaussa, Bessela, Butterwortha i odwrotnego Czebyszewa. Ogólnie rzecz biorąc, pozwala dostosować odpowiedź filtra na prawie wszystko, co jest mocną stroną metody Fouriera. Z drugiej strony filtry prawdopodobnie nie są optymalne dla określonych wymagań.

user5108_Dan
źródło
To wygląda interesująco. Będę musiał wypróbować oprogramowanie, aby naprawdę skupić się na tym, co się dzieje - strona internetowa nie wydaje się zbyt szczegółowo opisywać tej metody. Z tego, co mogę powiedzieć, wygląda to na rodzaj hybrydy, w której manipulujesz odpowiedzią częstotliwościową prototypu filtra generowanego w bardziej tradycyjny sposób. Czy to jest poprawne? Myślę, że to, co mówisz, jest słuszne - musisz uważać, jak zdefiniujesz odpowiedź, w przeciwnym razie skończysz z ogromną liczbą dotknięć. AFAIU, to jest duży problem z projektowaniem filtra wyłącznie z pasmem przenoszenia.
bryhoyt,
1

AFAIK jest to tak zwane „naiwne podejście do filtrowania”. Możesz wpływać na zawartość spektralną w określonych punktach w przestrzeni częstotliwości, ale nie robisz nic użytecznego dla zawartości częstotliwości między tymi punktami. Jeśli projektujesz odpowiedni filtr FIR, bierzesz pod uwagę także punkty pomiędzy tymi głównymi punktami, a taki filtr jest znacznie lepszy niż pierwszy.

Pozdrawiam, Bul.

user2064070
źródło