Filtr FIR jest jednym z prostszych algorytmów do implementacji dlatego wziąłem go na pierwszy ogień. Jego działanie polega na wyliczaniu średniej ważonej z kilku próbek sygnału. Poniżej przedstawiam przykładowy schemat blokowy algorytmu filtru uwzględniającego jedną próbkę wstecz:
Filtr FIR (filtr o skończonej odpowiedzi impulsowej) - schemat blokowyBlok z-1 opóźnia sygnał o jedną próbkę. W tym przypadku wagami dla poszczególnych próbek jest wartość 0.5.

Kod


Powyższa implementacja filtru FIR pozwala na uwzględnienie dowolnej ilości próbek. Przetestowałem jego działanie dla czterech jednakowych współczynników. Schemat blokowy będzie wyglądał w następujący sposób:
Filtr FIR (filtr o skończonej odpowiedzi impulsowej) - schemat blokowy
Warto dodać, że suma współczynników wag musi być równa jeden. Oto efekt działania powyższego algorytmu:

Filtr FIR (filtr o skończonej odpowiedzi impulsowej) - porównanie sygnałów. Sygnał przed i po filtracji.Jak widać estymowany sygnał jest nieznacznie opóźniony względem oryginału ale za to mniej zaszumiony.
Oczywiście stworzyłem również test jednostkowy pokrywający jego działanie:

Całość wydaje się działać poprawnie.

Live demo

Napisałem jeszcze taką prostą zabawkę żeby każdy mógł zobaczyć jaki wpływ na przefiltrowany sygnał ma dobór współczynników. Jest to filtr uwzględniający jedną próbkę wstecz. Łap za suwak i ustaw swoje współczynniki 🙂

Podsumowanie

To moje pierwsze podejście do filtracji sygnałów. Następnym razem na warsztat wezmę filtr Alfa Beta.

Jeśli ktoś jest zainteresowany tematyką projektowania filtrów FIR polecam narzędzie WinFilter.