Kolejnym filtrem, który chciałbym omówić jest filtr Alpha Beta. Sam algorytm jest nieco bardziej skomplikowany niż filtru FIR ale nadal nie jest to jakieś rocket science. Poniżej zamieszczam jego schemat blokowy:
Filtr Alpha Beta - schemat blokowyW uproszczeniu jego działanie polega na estymowaniu kolejnych próbek na podstawie obserwacji zmian sygnału z przeszłości. Jeśli sygnał chwilę temu narastał to prawdopodobnie zachowa taką tendencję w następnym kroku próbkowania. No ale jak bardzo wartość sygnału wzrośnie? Filtr uwzględnia poprzednią zmianę wartości sygnału, która przypuszczalnie wzrośnie lub zmaleje tak bardzo jak poprzednio.

Powyższe przewidywania są zestawiane z faktycznym pomiarem i na podstawie obu wartości wyliczana jest ta najbardziej prawdopodobna. Jeśli mierzony sygnał zmienił się bardziej niż było to przewidywane filtr naciągnie przewidzianą wartość w górę lub w dół. Poniżej zamieszczam przykład działania filtra na zaszumionym sygnale.
Filtr Alpha Beta - porównanie sygnałów
Nieźle co? Przykład w MATLABie do pobrania tutaj.

Live demo

Zgodnie z ponadczasową myślą, że „nic tak nie zaciemnia sprawy jak dobry przykład” poniżej zamieszczam prezentację działania filtru w formie interaktywnej zabawki, którą stworzyłem na potrzeby tego posta.

Sugeruję sprawdzić sobie ustawienie
$$\alpha=0.3 ; \beta=0.2$$
Według mnie efekt jest oszałamiający!

Kod

Klasa wykonująca obliczenia została skonstruowana analogicznie do tej zastosowanej w filtrze FIR.

Konstruktor inicjuje współczynniki filtra a metoda AddSample przyjmuje najnowszą próbkę i zwraca tę estymowaną przez filtr.

Podsumowanie

Filtr Alpha Beta jest zdumiewająco skuteczny pod warunkiem odpowiedniego dobrania współczynników. Temat ich doboru chciałbym omówić w niedalekiej przyszłości. Tymczasem jeśli macie jakieś pytania lub uwagi zapraszam do komentowania.