Próbuję znaleźć sposób na obliczanie ruchomej przeciętnej bez zapisywania liczby i całkowitych danych, które otrzymałem do tej pory. I wymyślić dwa algorytmy, ale oba muszą przechowywać count. new średnie stare liczyć stare dane następny dane następny licznik średnia ważona następna data - średnia średnia następna. Problem z tymi metodami polega na tym, że liczba ta rośnie i wieksza, co powoduje utratę dokładności w uzyskanej średniej. Pierwsza metoda wykorzystuje starą liczbę i następny licznik, To mnie rozmyślało, że być może jest jakiś sposób na usunięcie liczenia, ale niestety nie znalazłem go jeszcze To trochę mnie przydało, co spowodowało drugą metodę, ale wciąż liczy się obecność. Czy to możliwe, czy ja po prostu poszukiwanie niemożliwego. 28 września w godz. 8 46. Obecnie rozwijam graficzny system LCD, aby wyświetlić temperaturę, przepływy, napięcia, moc i energię w systemie pomp ciepła Użycie graficznego wyświetlacza LCD oznacza, że połowa mojego SRAM i .75 mojego błysku ha Użyłem już buforu ekranowego i strun. Obecnie wyświetlam min. średnie wartości dla energii W północy, gdy liczba dzienna jest zerowana, system sprawdza, czy zużycie na dzień jest powyżej lub poniżej poprzedniego minimalnego lub maksymalnego, a sklepy wartość Średnia jest obliczana poprzez podzielenie skumulowanego zużycia energii przez liczbę dni. Chciałbym wyświetlić średnią dzienną w ciągu ostatniego tygodnia i miesiąca 4 tygodnie dla uproszczenia tj. średniej kroczącej To wymaga utrzymania szeregu wartości dla ostatniego 28 dni i obliczanie średniej w całej tablicy miesięcznych i ostatnich 7 dni dla tygodnika. Początkowo robiłem to przy użyciu tablicy pływaków, ponieważ energia jest w postaci 12 12kWh, ale używano 28 4 bajty 112 bajtów 5 4 z SRAM I don t mind tylko jeden punkt dziesiętny rozdzielczości, więc zmieniłem się na uint16t i pomnożenie rysunku przez 100 Oznacza to, że 12 12 jest reprezentowana jako 1212, a ja dzielę przez 100 dla celów wyświetlania s. Rozmiar tablicy jest teraz do 56 bajtów znacznie lepszy. Nie ma błahych sposobów na zmniejszenie liczby do uint8t, że mogę zobaczyć mógłbym tolerować utratę miejsca dziesiętnego 12 1kWh zamiast 12 12kWh, ale konsumpcja jest często większa niż 25 5kWh 255 jest najwyższą wartością reprezentowaną przez 8-bitową bez znaku liczby całkowitych Zużycie nigdy nie był niższy niż 10 0kWh lub powyżej 35 0kWh, więc możliwe, że mogłem odjąć 10 z przechowywanych danych, ale wiem, że pewnego dnia przekroczy te limity. I następnie przetestował kod do pakowania wartości 9-bitowych do tablicy To daje zakres 0-51 2kWh i wykorzystuje 32 bajtów w całości Jednak dostęp do tablicy takich jak to jest dość powolne, zwłaszcza gdy trzeba iterować nad wszystkimi wartościami do obliczenia średniej. Jak mam pytanie - czy jest bardziej efektywny sposób obliczania średniej ruchomej z trzema oknami - trwałość, 28 dni i 7 dni Wydajność oznacza mniejsze w odniesieniu do użycia SRAM, ale bez kary ogromnego Kod Czy można uniknąć przechowywania wszystkich wartości. zapisanych M ar 7 14 w 8 32. Myślałem i masz rację To, że technicznie sprawia, że moja odpowiedź jest niepoprawna I m inwestuje trochę więcej czasu i cierpliwości w to Może coś z pudełka dam ci znać jeśli wezmę się z czymś robić coś takiego w moim miejscu pracy Poproś mnie o to Przepraszam za zamieszanie Aditya Somani 14 marca w wieku 17 15. jest tam bardziej skuteczny sposób obliczania średniej ruchomej z 28 dniami i 7 dniami, które muszą zapamiętać 27 dni historii. Możesz mieć wystarczająco dużo miejsca, aby zapisać 11 wartości, a nie 28 wartości, być może coś innego. Innymi słowy, a nie przechowywanie każdego szczegółu każdego dnia przez ostatnie 27 dni, przechowywać 7 takich wartości szczegółowych informacji dziennych w ciągu ostatnich 7 czy też w ciągu kilku dni, a także przechowywać 4 lub mniej podsumowanych wartości całkowitej lub średniej informacji w ciągu ostatnich 4 tygodni. Jednym z głównych zastosowań płyty Arduino jest odczytywanie i rejestrowanie danych czujników. Na przykład jeden monitoruje ciśnienie każdego drugi dzień Jak wysoki samp le często generuje skoki na wykresach też chce mieć średnią z pomiarów Ponieważ pomiary nie są statyczne w czasie, czego często potrzebujemy to średnia bieżąca Jest to średnia z pewnego okresu i bardzo cenna podczas analizy trendów. Najprostszą formę średniej bieżącej można wykonać za pomocą kodu, który opiera się na poprzedniej średniej. Jeśli nie chcesz używać matematyki zmiennoprzecinkowej - ponieważ zajmuje ona pamięć i zmniejsza prędkość - można to zrobić całkowicie w domenie całkowitej dzielenie przez 256 w przykładowym kodzie jest przesunięcie-prawo 8, które jest szybsze niż powiedzenie dzielenie przez np. 100 To prawda w przypadku każdej mocy 2 jako dzielnika i tylko trzeba dbać o sumę wegów równą mocy 2 I oczywiście należy zadbać o to, aby nie było przepełnienia pośredniego za pomocą długiego bez znaku. Jeśli potrzebujesz dokładniejszej średniej pracy, w konkretcie z ostatnich 10 pomiarów, potrzebujesz tablicy lub połączonej listy, aby je trzymać. Ta tablica działa jak okólnik bufor i każdy nowy pomiar najstarszy jest usuwany Średnia średnia jest obliczana jako suma wszystkich elementów podzielona przez liczbę elementów w tablicy Kod dla średniej bieżącej będzie podobny do tego. Drawback tego kodu jest taki, że tablica do przechowywania wszystkich wartości może stać się całkiem duża Jeśli masz jeden pomiar na sekundę i chcesz przeciętnie działać na minutę potrzebujesz tablicy 60 średnio na godzinę potrzebujesz tablicy 3600 To nie można zrobić w ten sposób na Arduino ponieważ ma tylko 2K pamięci RAM Jednak przy budowie 2-stopniowej przeciętnej można ją dosyć zlekceważyć nie dla wszystkich pomiarów. W kodzie psuedo. Dla każdej funkcji RunningAverage potrzebna jest nowa wewnętrzna tablica statyczna, która to scena zostanie zaimplementowana jako klasa BibliotekaRunningAverage. Biblioteka RunningAverage czyni klasę powyższej funkcji, dzięki czemu może być wielokrotnie wykorzystywana w szkicu. Decouples add i funkcja avg są nieco bardziej elastyczne, np. Można zadzwonić na av wiele razy bez dodawania rzeczy Należy pamiętać, że każda instancja klasy dodaje własną tablicę do przechowywania pomiarów, a to zwiększa zużycie pamięci Interfejs klasy jest tak mały, jak to możliwe. Zauważ, że wersja 0 2 nazwy metod są wszystkie bardziej opisowe. Mały szkic pokazuje, jak może być używany losowo Generator losowy jest używany do naśladowania czujnika. W ustawieniach myra jest wyczyszczona, dzięki czemu możemy rozpocząć dodawanie nowych danych. In pętli pierwsze liczby losowej generowane i konwertowane do float, które mają być dodane do myRA Następnie uruchomienie napędu jest drukowane do portu szeregowego Można również wyświetlić go na niektórych LCD lub wysłać za pośrednictwem sieci Ethernet itp. Gdy 300 elementów są dodane myRA jest wyczyszczone, aby zacząć od nowa. To korzystać z biblioteki , utworzyć folder w bibliotekach SKETCHBOOKPATH o nazwie RunningAverage i umieścić h i tam Opcjonalnie utworzyć przykładowy podkatalog, aby umieścić próbkę app.2017-01-30 version początkowy 2017-02-28 fixed missing destructor in h plik.2017 -02-28 usunięto wartość domyślną konstruktor.2017- - trimValue Yuval Naveh dodał trimValue znaleziony na web.2017-11-21 refactored 2017-12-30 dodano fillValue refactored for publishing.2017-07-03 dodano kod ochrony pamięci - jeśli wewnętrzna tablica nie może zostać przydzielona rozmiar staje się 0 To jest rozwiązanie problemu opisanego tutaj. Zestuj obszernie. Template class. RunningAverage h. RunningAverage.
No comments:
Post a Comment