Pracuję nad robotem mobilnym sterowanym za pomocą bezprzewodowego łącza 2,4 GHz. Odbiornik jest podłączony do Arduino Uno, który służy na pokładzie jako główny kontroler. Najbardziej krytyczny (i główny) kanał wejściowy pochodzący z odbiornika wytwarza bardzo głośny sygnał, co prowadzi do wielu drobnych zmian na wyjściu siłowników, nawet jeśli nie są one potrzebne.
Rysuj dane wejściowe Arduino w odstępie 30 sekund.
Szukam bibliotek, które mogą wykonywać wydajne wygładzanie. Czy są dostępne biblioteki wygładzania sygnału dla Arduino (Uno)?
library
signal-processing
asheeshr
źródło
źródło
Odpowiedzi:
Microsmooth to lekka biblioteka wygładzania sygnałów, którą obecnie opracowuję.
Nadal nad tym pracujemy, a jego celem jest uczynienie go lekkim pod względem pamięci i szybkości. Biblioteka zawiera wiele filtrów do wygładzania:
Aby skorzystać z biblioteki, pobierz ją i dodaj do katalogu źródłowego. Dodaj również następujący wiersz do pliku źródłowego:
źródło
Wydaje mi się, że w twoim hałaśliwym sygnale widzę wiele skoków hałasu pojedynczej próbki.
Filtr środkowy lepiej pozbywa się skoków hałasu pojedynczej próbki niż jakikolwiek filtr liniowy. (Jest lepszy niż jakikolwiek filtr dolnoprzepustowy, średnia ruchoma, ważona średnia ruchoma itp. Pod względem czasu odpowiedzi i zdolności do ignorowania takich pojedynczych próbek wartości szczytowych hałasu).
W rzeczywistości istnieje wiele bibliotek wygładzających sygnał dla Arduino, z których wiele zawiera filtr mediany.
biblioteki wygładzające sygnał na arduino.cc:
biblioteki wygładzające sygnał w github:
Czy coś takiego działałoby w twoim robocie? (Mediana z 3 wymaga bardzo małej mocy procesora, a zatem szybkiego):
źródło
Czy próbowałeś filtra dolnoprzepustowego? Znalazłem tutaj inny przykład tutaj .
Obie biblioteki mają listę danych odczytywanych z wybranego czujnika analogowego, który jest uśredniany. Każda nowa wartość czujnika jest dodawana do listy, a ostatnia jest wyrzucana w następujący sposób:
źródło
Możesz to filtrować cyfrowo za pomocą filtra dolnoprzepustowego:
Zmień 0,99, aby zmienić częstotliwość odcięcia (bliższa 1.0 to niższa częstotliwość). Rzeczywistym wyrażeniem tej wartości jest exp (-2 * pi * f / fs), gdzie f jest pożądaną częstotliwością odcięcia, a fs jest częstotliwością, z której próbkowane są dane.
Innym rodzajem „filtra cyfrowego” jest filtr zdarzeń. Działa dobrze na danych, które mają wartości odstające; np. 9,9,8,10,9,25,9. Filtr zdarzeń zwraca najczęstszą wartość. Statystycznie jest to tryb.
Średnie statystyczne, takie jak średnia, tryb itp. Można obliczyć za pomocą Biblioteki średniej Arduino .
Przykład wzięty ze strony Arduino Library, o którym mowa:
źródło