Projekt filtra FIR: Window vs Parks McClellan and Least Squares

21

Czy są jakieś zalety stosowania podejścia okienkowego w stosunku do algorytmów Parks-McClellan (dalej w skrócie PMcC) lub algorytmów najmniejszych kwadratów do projektowania filtrów FIR filtra dolnoprzepustowego? Przyjmijmy przy dzisiejszej mocy obliczeniowej, że złożoność samych algorytmów nie jest czynnikiem.

To pytanie nie porównuje PMcC z najmniejszymi kwadratami, ale konkretnie, czy istnieje jakiś powód, aby użyć dowolnej techniki projektowania okien FIR zamiast tych algorytmów, czy też techniki okienkowania do filtrowania projektu były przestarzałe przez te algorytmy i przeniesione do celów dydaktycznych?

Poniżej znajduje się jedno porównanie, w którym porównałem okno Hamminga do mojego ulubionego podejścia projektowego z Least-Squared, przy użyciu tej samej liczby uderzeń. Poszerzyłem pasmo w podejściu Least Squared, aby ściśle pasować do okna Hamminga, iw tym przypadku było całkiem jasne, że Least-Squared osiągnie lepsze wyniki (oferując znacznie więcej odrzucenia pasma stop). Nie zrobiłem tego ze wszystkimi oknami, co prowadzi mnie do pytania, czy mógłbyś kiedykolwiek przewyższyć PMcC i najmniejsze kwadraty, czy też są inne zastosowania filtra dolnoprzepustowego FIR, w którym preferowane byłoby okienkowanie?

wprowadź opis zdjęcia tutaj

Dan Boschen
źródło
2
Mógłbym zasugerować porównanie sincher-Window z Kaiserem do firpm()i do firls().
Robert Bristol-Johnson

Odpowiedzi:

16

Zgadzam się, że metoda projektowania filtra okienkowego nie jest już jedną z najważniejszych metod projektowania i rzeczywiście może być tak, że jest nadreprezentowana w tradycyjnych podręcznikach, prawdopodobnie z przyczyn historycznych.

Myślę jednak, że jego użycie może być uzasadnione w niektórych sytuacjach. Nie zgadzam się, że złożoność obliczeniowa nie jest już problemem. To zależy od platformy. Siedząc przy komputerze i projektując filtr, naprawdę nie musimy się martwić o złożoność. Jednak na określonych platformach oraz w sytuacjach, w których projektowanie musi być wykonane quasi-w czasie rzeczywistym, problemem jest złożoność obliczeniowa, a prosta, nieoptymalna technika projektowania będzie lepsza niż technika optymalna, która jest znacznie bardziej złożona. Jako przykład kiedyś pracowałem nad systemem do formowania wiązki, w którym filtr (formator wiązki) musiałby zostać przeprojektowany w locie, a więc złożoność obliczeniowa rzeczywiście stanowiła problem.

Jestem również przekonany, że w wielu praktycznych sytuacjach nie musimy martwić się różnicą między optymalnym a nieoptymalnym projektem. Staje się to jeszcze bardziej prawdziwe, jeśli musimy zastosować arytmetykę o stałym punkcie z kwantowanymi współczynnikami i skwantowanymi wynikami operacji arytmetycznych.

Kolejną kwestią jest stabilność numeryczna optymalnych metod projektowania filtrów i ich implementacji. Natknąłem się na kilka przypadków, w których algorytm Parks-McClellan (powinienem powiedzieć, że implementacja, której użyłem) po prostu się nie zbiegał. Stanie się tak, jeśli specyfikacja nie ma większego sensu, ale może się również zdarzyć przy całkowicie rozsądnych specyfikacjach. To samo dotyczy metody projektowania metodą najmniejszych kwadratów, w której należy rozwiązać układ równań liniowych, co może stać się problemem źle uwarunkowanym. W tych okolicznościach metoda okienkowania nigdy Cię nie zawiedzie.

Uwaga na temat porównania metody okna z projektem najmniejszych kwadratów: Nie sądzę, że to porównanie pokazuje jakąkolwiek ogólną wyższość metody najmniejszych kwadratów nad metodą okienkowania. Po pierwsze, wydaje się, że patrzysz na tłumienie pasma zatrzymania, które nie jest celem projektowym dla żadnej z dwóch metod. Metoda okienkowania nie jest w żadnym sensie optymalna, a konstrukcja najmniejszych kwadratów minimalizuje energię pasma zatrzymania i wcale nie dba o wielkość tętnienia pasma zatrzymania. Widać, że krawędź pasma przejścia w projekcie okna jest większa niż krawędź najmniejszego kwadratu, podczas gdy krawędź pasma zatrzymania jest mniejsza. W konsekwencji szerokość pasma przejściowego filtra zaprojektowanego przez okienkowanie jest mniejsza, co spowoduje wyższe tętnienia pasma zatrzymania. Różnica w szerokości pasma przejściowego może być niewielka, ale właściwości filtra są bardzo wrażliwe na ten parametr. Nie ma wątpliwości, że filtr najmniejszych kwadratów przewyższa drugi filtr, jeśli chodzi o zatrzymanie energii pasma, ale nie jest to tak łatwe do zauważenia jak wielkość tętnienia. Pozostaje pytanie, czy ta różnica rzeczywiście miałaby znaczenie w praktycznym zastosowaniu.

Pokażę wam, że takich porównań często można dokonać, aby wyglądały tak, jak byśmy chcieli. Na poniższym rysunku porównuję optymalny filtr dolnoprzepustowy o najmniejszych kwadratach zaprojektowany z funkcją Matlab / Octave firls.m(niebieski) z filtrem dolnoprzepustowym zaprojektowanym metodą okienkową przy użyciu okna Kaiser (czerwony).

wprowadź opis zdjęcia tutaj

Na podstawie rysunku można nawet wyciągnąć wniosek, że filtr zaprojektowany przez okienkowanie jest nieco lepszy niż filtr optymalny najmniejszych kwadratów. Jest to oczywiście bez sensu, ponieważ nie zdefiniowaliśmy nawet „lepszego”, a filtr najmniejszych kwadratów musi mieć mniejszy średni błąd przybliżenia do kwadratu. Jednak nie widać tego bezpośrednio na rysunku. W każdym razie służy to mojemu twierdzeniu, że przy dokonywaniu takich porównań trzeba być bardzo ostrożnym i jasnym.

Podsumowując, poza przydatnością do nauki dla studentów DSP z powodów czysto dydaktycznych, uważam, że pomimo postępu technologicznego od lat 70. stosowanie metody okienkowania może być uzasadnione w niektórych praktycznych scenariuszach i nie sądzę, że to będzie zmień bardzo szybko.

Matt L.
źródło
Dobra odpowiedź Matt- Kilka wyjaśnień / pytań: Jeśli chodzi o złożoność, czy możesz podać prawdziwy przykład? Widzę, że jest to problem z implementacją, ale wymyślając współczynniki, nie mogę wymyślić powodu, dla którego zrobiłbym projekt na gorszej platformie (stąd moje pytanie). Jeśli chodzi o porównanie, najmniejsze kwadraty są wyraźnie lepsze; dla tego samego tętnienia i przejścia uzyskasz lepsze tłumienie pasma zatrzymania. Zwiększyłem szerokość pasma przepustowego, aby dopasować oba; krawędź jest nieco większa, ponieważ w tym miejscu przestałem dopasowywać, ale mogłem dopasować bliżej do końca.
Dan Boschen
2
@ DanBoschen: Oczywiście w większości przypadków projekt jest wykonywany offline, a złożoność nie stanowi problemu. Jednak natknąłem się na aplikacje, w których filtry musiałyby zostać przeprojektowane w quasi-czasie rzeczywistym (była to aplikacja do formowania wiązki), więc masz problem ze złożonością.
Matt L.
1
A jeśli chodzi o rzeczywistą oszczędność liczby uderzeń dzięki optymalnemu projektowi w porównaniu do projektu okna, wyniki, które widziałem, często są rozczarowujące. Często tylko 1 lub 2 dotknięcia, które w przypadku wielu wdrożeń nie miałyby większego znaczenia.
Matt L.
1
OK, w przypadku projektów offline i jeśli stabilność numeryczna nie jest problemem (dla tego konkretnego projektu; ogólnie pozostaje problemem), okienkowanie nie byłoby przydatne. Ale generalnie nie zawsze możemy polegać na projektach offline, a co ważniejsze, nie zawsze możemy uniknąć problemów numerycznych. Myślę więc, że słowo „przestarzałe” jest wciąż zbyt mocne.
Matt L.
3
Bardzo dobrze powiedziane. Należy pamiętać, że inżynieria polega na znalezieniu implementacji, która jest wystarczająco dobra, aby spełnić Twoje wymagania. Metoda okna jest prosta do wdrożenia i zawsze działa. Inne metody mają bardziej skomplikowane implementacje i mogą mieć przypadki, w których trudno jest z nimi pracować. Pracowałem z kilkoma systemami, które muszą projektować filtry „w locie”, a metoda okna jest rozwiązaniem dla takich sytuacji.
Jason R
7

Filtry Window Sinc mogą być adaptacyjnie generowane w locie na procesorach ledwo wystarczających do uruchomienia powiązanego filtra FIR. Filtry Window Sinc mogą być generowane w ograniczonym czasie.

Generowanie prostych filtrów okienkowych Sinc można całkowicie opisać (i sprawdzić pod kątem złośliwego oprogramowania itp.) Za pomocą kilku wierszy kodu , w przeciwieństwie do ślepego użycia nieprzejrzystego zestawu narzędzi.

Do wyjaśnienia okna z filtrem Sinc wymagane jest mniej wymagane tło matematyczne, w porównaniu do tego, które jest wymagane do kodowania generatora filtrów PMcC od zera.

Równe tętnienia w odpowiedzi częstotliwościowej filtra PMcC mogą powodować artefakty w dziedzinie czasu, które są inne (i być może mniej pożądane) niż artefakty wytwarzane przez prosty filtr okienny.

hotpaw2
źródło
1
Tak, dobry punkt @ hotpaw2, tętnienie pasma przepustowego prowadzi do interferencji między symbolami (echa końcowe i wiodące). Dzięki
Dan Boschen,
2
Rozmawialiśmy o Parkach – McClellanie przed i po echu na comp.dsp w 2003 roku . Alexey Lukin opublikował minimalny przykład MATLAB:, f=[0 0.49 0.51 1]; a=[1 1 0 0]; b=remez(300,f,a)który działa również w Octave. Wyjaśnienie jest takie, że przy bardzo stromych filtrach zmarszczki mogą być na tyle regularne, że przypominają cosinus. Odpowiednikiem w dziedzinie czasu cosinusa w dziedzinie częstotliwości byłyby dwa impulsy echa.
Olli Niemitalo
6

Pokażę tutaj jedną zaletę projektu okienkowego i sztuczkę, aby uzyskać tę samą korzyść z parków – McClellana.

Dla filtrów półpasmowych, ćwierćpasmowych itp. Okienkowanie zachowuje zera w dziedzinie czasu skalowanej funkcji sinc, która jest prototypowym idealnym filtrem dolnoprzepustowym. Zera kończą się na współczynnikach, zmniejszając koszt obliczeniowy filtrów. W przypadku filtra półpasmowego konstrukcja okienkowa daje filtr o każdym parzystym współczynniku 0, z wyjątkiem współczynnika środkowego (który jest również uważany za parzysty):

Sinc
Ryc. 1. Funkcja Sinc rozciągnięta poziomo o współczynnik 2 to prototypowy półpasmowy filtr dolnoprzepustowy o wzmocnieniu 2, odpowiedni do próbkowania w górę o współczynnik 2.

Jednak Parks-McClellan / Remez można oszukać, aby dać te same korzyści, projektując z niego filtr z parzystą liczbą uderzeń z zdefiniowanym tylko pasmem wzmocnienia jedności. Uzyskane współczynniki są używane jako nieparzyste współczynniki dłuższego filtra. Środkowy współczynnik dłuższego filtra jest ustawiony na 1, a pozostałe parzyste współczynniki na 0. Ten filtr ma wzmocnienie 2 w paśmie przejścia i symetryczne tętnienie w pasmach przejścia i zatrzymania. W Pythonie:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
c0 = signal.remez(14, [0, 3500.0/8000], [1])
c = np.zeros(c0.size*2-1)
c[0::2] = c0
c[c0.size-1] = 1
freq, response = signal.freqz(c)
plt.semilogy(freq/(2*np.pi), np.abs(response))
plt.show()
plt.plot(range(-c0.size+1, c0.size, 1), c, 'x')
plt.grid(True)
plt.show()

Rysunek 2.
Rysunek 2. Współczynniki filtra półpasmowego zaprojektowanego pośrednio za pomocą Pythona scipy.signal.remez.

Rycina 3.
Ryc. 3. Wykres odpowiedzi częstotliwościowej wielkości filtra półpasmowego zaprojektowanego pośrednio scipy.signal.remez.

Olli Niemitalo
źródło