Filtr Alfa – Beta od teorii do praktyki – #1

Filtr Alfa – Beta od teorii do praktyki – #1

Zadaniem czujników jest dostarczanie informacji o położeniu robota oraz innych obiektów.

Dane te są przekazywane do algorytmów sterowania. Sygnały z czujników obarczone są błędem. Aby uzyskać dokładniejsze informacje na temat stanu obiektu należy dokonać jego estymacji na podstawie danych pomiarowych.

Następny artykuł z serii »

Wstęp

Popularną metodą radzenia sobie z tym problemem jest filtracja Kalmana. Jest to statystycznie optymalna metoda estymacji stanu. Oznacza to, że dla zadanych parametrów pracy nie istnieje lepsze oszacowanie stanu obiektu. Jego implementacja wymaga jednak znajomości modelu stanowego obiektu oraz macierzy kowariancji błędów pomiarowych i procesowych, a także wykonania obliczeń na macierzach. Dlatego chciał bym zaproponować uproszczoną metodę mogącą jednak dawać bardzo dobre wyniki w praktyce.

O filtrze Alfa - Beta

Filtr Alfa - Beta opiera się na założeniu, że ruch obiektu można wyrazić za pomocą dwóch składowych stanu, gdzie jedna składowa jest pochodną drugiej. Wektor stanu składający się z wartości położenia oraz prędkości spełnia te założenia. Równania filtru mają postać:

wzory

Gdzie \widehat{y} to oszacowanie położenia, \widehat{v} to oszacowanie prędkości, y to zmierzone położenie, a \Delta Tto krok czasowy pomiędzy kolejnymi pomiarami.

Wyrażenie (t|t) oznacza wartość w aktualnej chwili czasu w oparciu o pomiar do aktualnej chwili czasu, (t+1|t) oznacza wartość w kolejnej chwili czasu w oparciu o pomiary do aktualnej chwili czasu, a (t|t-1) oznacza wartość w aktualnej chwili czasu w oparciu o pomiary do poprzedniej chwili czasu.

Algorytm dzieli się na fazę predykcji kolejnego stanu (dwa pierwsze równania) oraz korektę przewidywanej wartości w oparciu o pomiar (kolejne dwa równania). Parametry alfa i beta służą do strojenia filtru. Ich wartości należy zmieniać w zakresie od 0 do 1.

Implementacja

Aby zaprezentować działanie algorytmu w praktyce, napisałem prosty skrypt w Matlabie:

Sygnał mierzony, to sygnał losowy o wartości oczekiwanej 0 i wariancji 10. Po 5 sekundach następuje skok wartości oczekiwanej do 100.

Wyniki symulacji

Symulacja dla alfa = 0.1 i beta = 0.05 dała następujący rezultat:

a=0.1, b=0.05

a=0.1, b=0.05

Widzimy, że w początkowej fazie filtr wskazuje wartości zbliżone do zera, więc odporność na zakłócenia jest dobra. Problem zaczyna się po skoku wartości oczekiwanej. Możemy wtedy zaobserwować duże opóźnienie i przeregulowanie.

Strojenie

Kolejną symulację wykonałem dla wartości alfa = 0.1 i beta = 0.2:

a=0.1 b=0.2

a=0.1 b=0.2

W tym przypadku przeregulowanie jest zdecydowanie większe niż poprzednio. Dodatkowo widzimy, że odporność na duże skokowe zakłócenia w pierwszej fazie jest dużo gorsza niż poprzednio.

W następnej symulacji ustawiłem alfa = 0.7, beta = 0.05:

a=0.7 b=0.05

a=0.7 b=0.05

Widzimy, że wartości po odfiltrowaniu niewiele odbiegają od wartości mierzonych. Filtr ma przez to niewielką odporność na zakłócenia, ale za to szybko reaguje na skokowe zmiany sygnału.

W ostatniej symulacji ustawiłem alfa = 0.35, beta = 0.05:

a=0.35 b=0.05

a=0.35 b=0.05

Tym razem mamy gorszą reakcję na skokową zmianę sygnału niż poprzednio, jednak odporność na zakłócenia jest zdecydowanie lepsza.

Podsumowanie

Jak widać po przeprowadzonych symulacjach, małe wartości parametru alfa zapewniają dużą odporność na zakłócenia czujników kosztem zwolnionej reakcji na skokowe zmiany sygnału. Zwiększanie wartości alfa powoduje poprawienie czasu reakcji i pogorszenie odporności na zakłócenia. Parametrowi beta najlepiej przypisywać małe wartości. Jego zwiększanie powoduje obniżenie stabilności filtru.

W kolejnej części zajmiemy się praktyczną implementacją filtru alpha - beta na układzie z żyroskopem oraz mikrokontrolerem STM32.

Następny artykuł z serii »

alpha-beta, filtr, kalman, regulator