Arduino przenoszenie średnia biblioteka
Pracuję nad robotem mobilnym sterowanym za pomocą bezprzewodowego łącza 2,4 GHz. Odbiornik jest podłączony do Arduino Uno, który służy jako główny kontroler na pokładzie. Najbardziej krytyczny (i główny) kanał wejściowy pochodzący z odbiornika wytwarza bardzo głośny sygnał, który prowadzi do wielu drobnych zmian w wyjściu siłowników, nawet jeśli nie są one potrzebne. Szukam bibliotek, które mogą wydajnie wygładzać. Czy są jakieś biblioteki wygładzające sygnał dostępne dla Arduino (Uno) zapytane 16 lutego 14 o 13:57 Myślę, że widzę dużo pojedynczych próbnych szumów w hałaśliwym sygnale. Filtr medianowy lepiej eliminuje impulsy szumowe pojedynczej próbki niż jakikolwiek filtr liniowy. (Jest lepszy niż jakikolwiek filtr dolnoprzepustowy, średnia ruchoma, ważona średnia ruchoma itp. Pod względem czasu reakcji i jego zdolności do zignorowania takich pojedynczych zniekształceń sparowanych pojedynczej próbki). W rzeczywistości istnieje wiele bibliotek wygładzających sygnał dla Arduino, z których wiele zawiera filtr medianowy. wygładzanie sygnałów w bibliotekach arduino. cc: wygładzanie sygnału w github: Czy coś takiego działa w twoim robocie (Mediana-3 wymaga bardzo niewielkiej mocy procesora, a więc szybko): Możesz filtrować to cyfrowo przy użyciu niskiego poziomu pass filter: Zmień 0.99, aby zmienić częstotliwość odcięcia (bliższa 1,0 to niższa częstotliwość). Rzeczywistym wyrażeniem dla tej wartości jest exp (-2piffs), gdzie f jest żądaną częstotliwością odcięcia, a fs jest częstotliwością, z której próbkowane są dane. Innym rodzajem filtru cyfrowego jest filtr zdarzeń. Działa dobrze na danych, które mają wartości odstające, np. 9,9,8,10,9,29,25,9. Filtr zdarzeń zwraca najczęściej występującą wartość. Statystycznie jest to tryb. Średnie statystyczne, takie jak Mean, Mode itd. Można obliczyć za pomocą średniej biblioteki Arduino. Oto przykład zaczerpnięty ze strony Arduino Library: Jednym z głównych zastosowań tablicy Arduino jest odczytywanie i rejestrowanie danych z czujników. Na przykład monitoruje ciśnienie co drugi dzień. Ponieważ wysokie częstotliwości próbkowania często generują skoki na wykresach, chcemy również mieć średnią z pomiarów. Ponieważ pomiary nie są statyczne w czasie, często potrzebujemy bieżącej średniej. Jest to średnia z pewnego okresu i bardzo cenna przy analizie trendów. Najprostszą formę średniej bieżącej można wykonać za pomocą kodu, który opiera się na poprzedniej średniej: Jeśli nie chcemy używać matematyki zmiennoprzecinkowej - ponieważ zajmuje to pamięć i zmniejsza prędkość - można zrobić to samo całkowicie w domenie całkowitej. Podział o 256 w przykładowym kodzie to przesunięcie w prawo 8, które jest szybsze niż np. Dzielenie przez np. 100. Odnosi się to do każdej potęgi 2 jako dzielnika i trzeba się tylko zatroszczyć, aby suma wag równała się sile 2. I oczywiście należy uważać, aby nie było pośredniego przelewu (rozważ użycie niepodpisanego długiego) Jeśli potrzebujesz dokładniejsza średnia podczas biegu, w sumie z ostatnich 10 pomiarów, potrzebujesz tablicy (lub listy połączonej), aby je zatrzymać. Ta tablica działa jak bufor cykliczny i przy każdym nowym pomiarze usuwany jest najstarszy. Bieżąca średnia jest obliczana jako suma wszystkich elementów podzielona przez liczbę elementów w tablicy. Kod średniej bieżącej będzie mniej więcej taki: Wadą tego kodu jest to, że tablica do przechowywania wszystkich wartości może stać się dość duża. Jeśli masz jeden pomiar na sekundę i chcesz średniej bieżącej na minutę potrzebujesz tablicy 60, średnia na godzinę będzie wymagać tablicy 3600. Nie można tego zrobić na Arduino, ponieważ ma tylko 2K pamięci RAM. Jednak budując dwustopniową średnią można do niej dość dobrze podejść (zrzeczenie się: nie dla wszystkich pomiarów). W kodzie pseudo: Ponieważ nowa wewnętrzna macierz statyczna jest potrzebna dla każdej funkcji runningAverage, to krzyczy być zaimplementowaną jako klasa. Biblioteka RunningAverage Biblioteka runningAverage tworzy klasę powyższej funkcji, dzięki czemu może być wielokrotnie używana w szkicu. Oddziela funkcje add () i avg (), aby były nieco bardziej elastyczne, np. można wiele razy wywołać średnią bez dodawania czegoś. Zwróć uwagę, że każda instancja klasy dodaje swoją własną tablicę do przechowywania pomiarów, co zwiększa zużycie pamięci. Interfejs klasy jest tak mały, jak to tylko możliwe. Uwaga: w wersji 0.2 wszystkie metody są bardziej opisowe. Mały szkic pokazuje, jak można go użyć. Generator losowy służy do naśladowania czujnika. W setup () myRA jest wyczyszczona, dzięki czemu możemy rozpocząć dodawanie nowych danych. W pętli () najpierw generowana jest liczba losowa i konwertowana na zmienną, która zostanie dodana do myRA. Następnie runningAverage zostanie wydrukowany na porcie szeregowym. Można również wyświetlić go na ekranie LCD lub wysłać przez Ethernet itp. Po dodaniu 300 elementów, myRA zostaje wyczyszczone, aby rozpocząć od nowa. Aby korzystać z biblioteki, utwórz folder w SKETCHBOOKPATHlibrach o nazwie RunningAverage i umieść tam. h i. cpp. Opcjonalnie utwórz podkatalog przykładów, aby umieścić przykładową aplikację. 2017-01-30: wersja początkowa 2017-02-28: naprawiono brakujący destruktor w pliku. h 2017-02-28: usunięto domyślny konstruktor 2017--. trimValue () Yuval Naveh dodał trimValue (znalezione w Internecie) 2017-11-21: refaktoryzacja 2017-12-30: dodane fillValue () refaktoryzowane do publikacji 2017-07-03: dodany kod ochrony pamięci - jeśli wewnętrzna tablica nie może być przydzielona rozmiar staje się 0. Jest to rozwiązanie problemu opisanego tutaj - forum. arduino. ccindex. phptopic50473.msg1790086msg1790086 - Testuj obszernie. Klasa szablonu RunningAverage. h RunningAverage. cppThis to zbiór procedur do wykonywania analizy matematycznej tablic liczb. Bieżąca obsługa funkcji: Wszystkie funkcje są w pełni przeciążone, aby obsługiwać następujące typy danych: Z wyjątkiem stddev () wszystkie zwracają ten sam typ danych co tablica. Tablica wartości int zwraca pojedynczą int. stddev () zawsze zwraca float. Wszystkie funkcje oprócz rollingAverage () przyjmują dwa argumenty. Pierwszą jest tablica do pracy. Druga to liczba wpisów w tablicy. rollingAverage () pobiera trzeci argument - nowy wpis do dodania do tablicy. Średnia krocząca Format: średnia rollingAverage (historyarray, slicecount, value) Dodaje wartość do tablicy historii tablic, przesuwając wszystkie wartości w dół o jedno miejsce. Średnia średnia jest następnie zwracana. Format: średnia średnia (tablica, liczba slicecount) Oblicza średnią średnią wartości w tablicy. slicecount to liczba wpisów w tablicy. Format: tryb średni (tablica, slicecount) Znajduje najpopularniejszy numer w tablicy. Format: max maximum (tablica, slicecount) Znajduje największą wartość w tablicy. Format: min minimum (tablica, slicecount) Wyszukuje najmniejszą wartość w tablicy. Format odchylenia standardowego: odchylenie stddev (tablica, slicecount) Odchylenie standardowe jest pierwiastkiem kwadratowym średniej sumy kwadratów różnicy między każdym punktem danych a średnią arytmetyczną. Jest to jedyna funkcja, która nie zwraca tego samego typu danych co tablica. Odchylenie standardowe jest zawsze zwracane jako wartość zmiennoprzecinkowa.
Comments
Post a Comment