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:
W 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.
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.
Dodaj komentarz