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:
Blok 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:
Warto dodać, że suma współczynników wag musi być równa jeden. Oto efekt działania powyższego algorytmu:
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.
Dodaj komentarz