Mam pytanie dotyczące ciągłego uśredniania wartości ADC Podejście, które używałem to ciągłe uśrednianie przykładów 256 próbek Wartość adtaout pokazana poniżej w poniższym kodzie, które otrzymuję na moim kroku GUI powoli Na przykład, jeśli spodziewam się wartości 100mA, Moje GUI pokazuje 4mA, 8mA, 15mA, a następnie wreszcie po 2 minutach uzyskać stabilną wartość 100mA Chcę zobaczyć 100mA bezpośrednio na moim GUI z adcaout zamiast wartości przyrostowych i ustabilizowania się po jakimś czasie Innym pytaniem jest to, czy mogę jakoś sprawić, że ten proces szybko, więc nie muszę czekać przez 3 minuty na otrzymywanie stabilnych 100 mA z adcaout Zegar clk w cyfrowym design poniżej jest 20 MHz Zegar do odbierania wartości ADC na płycie FPGA wynosi 15 KHz .-- plik jest poniżej . Twój kod został zmodyfikowany w następujący sposób. Korzystanie końcowe, które przeglądam na moim GUI to slvvalue1 i slvvalue2.How o tym przy zresetowaniu lub w dowolnym innym momencie, jeśli chcesz, przypisaj wartość datain do wszystkich elementów w tym etapie array To powinno natychmiast ustawić średnio do aktualnej wartości. Przykład poniżej pokazuje pełny kod dla ruchomych średniej kalkulatora Moja sugestia jest to, że studiujesz go dopóki nie zrozumiesz to Następnie spróbuj użyć go w swoim projekcie Wreszcie, i dopiero po podstawowym obwodzie pracy , można go zmienić, aby spełnić Twoje ograniczenia projektowe szerokość danych, liczba próbek, zakres liczb całkowitych, użycie znaku vs liczbę całkowitą itd. Na koniec, jeśli chcesz używać powyższego kodu, aby zachować dwa oddzielne średnie dla dwóch różnych sygnałów, jednostka uśredniania dwukrotnie. Edytuj Jak rozumiem z Twoich komentarzy, może być potrzebny dodatkowy sygnał wejściowy do ustawienia średniej natychmiastowej do bieżącej wartości wejściowej W takim przypadku można użyć wejścia obciążenia, jak pokazano poniżej..Jest to możliwe do wdrożenia średniej ruchomej w C bez potrzeby okna próbek. Znalazłem, że mogę zoptymalizować nieco, wybierając rozmiar okna, który jest mocą dwóch, aby umożliwić przesunięcie bitów zamiast dzieląc, ale nie potrzebuje buforu byłoby miło Czy jest jakiś sposób na wyrażenie nowego wyniku średniej ruchomej tylko w wyniku starego wyniku i nowej próbki. Zdefiniuj przykładową średnią ruchomej, w oknie z 4 próbkami, które mają być dodawane. Nowa średnia próbki eA może być ale w celu dokładnego obliczenia średniej ruchomej, musisz pamiętać najstarszą próbkę wejściową w sumie tj. a w swoim przykładzie Dla długości N średniej ruchomej obliczysz. gdzie yn jest sygnałem wyjściowym, a xn jest sygnałem wejściowym Eq 1 można zapisać rekurencyjnie jako. Więc zawsze musisz zapamiętać próbkę xnN, aby obliczyć 2. Jak wskazał Conrad Turner, można użyć nieskończenie długiego okna wykładniczego zamiast tego, co pozwala na obliczenie wyjścia tylko z poprzednia produkcja i bieżący input. but nie jest to standardowa nieważona średnia ruchoma, ale średnia geometryczna ważona średnią ruchoma, gdzie próbki w przeszłości uzyskują mniejszą wagę, ale przynajmniej teoretycznie nigdy nie zapomnisz nic ważącego tylko g et mniejsze i mniejsze dla próbek daleko w przeszłości. I realizowane średniej ruchomej bez pojedynczej pamięci pozycji dla programu śledzenia GPS I napisał. Zacznij od 1 próbki i podziel się przez 1, aby uzyskać aktualne avg. I następnie dodać anothe próbki i dziel przez 2 do obecnej średniej. To trwa, aż dojdę do średniej. Każdego czasu później dodam nową próbkę, przeciętnie i usuń tą średnią z sumy. Nie jestem matematykiem, ale to się wydawało jak dobry sposób to zrobić Założę, że to z kolei żołądek prawdziwego faceta matematyki, ale okazuje się, że jest jednym z uznanych sposobów, aby to zrobić I to działa dobrze Pamiętaj tylko, że im większa długość, tym wolniej co chcesz śledzić To może nie mieć znaczenia przez większość czasu, ale gdy masz satelitę, jeśli jesteś wolny, szlak może być daleko od rzeczywistej pozycji i będzie wyglądał źle Możesz mieć przerwę pomiędzy siadami a końcowymi kropkami I wybrał długość 15 aktualizowanych 6 razy na minutę, aby uzyskać odpowiedni poziom te wygładzanie i nie za daleko od rzeczywistej pozycji sutowej z wygładzonym szlakiem dots. int 16 listopada 16 w 23 03.initialize całkowitej 0, licznik 0 za każdym razem, gdy widząc nową wartość. Następnie jeden scanf wejściowy, jeden dodaj całkowitą wartość newValue, jeden licznik przyrostów, jedna dzielna średnia liczba. Jest to średnia ruchoma dla wszystkich wejść. Aby obliczyć średnią z ostatnich ostatnich 4 wejść, to wymagałoby 4 zmiennych wejściowych, być może kopiowanie każdego wejścia do starszej zmiennej wejściowej, a następnie obliczenie nowej średniej ruchomej jako suma 4 zmiennych wejściowych, dzielona przez 4 przesunięcie w prawo2 byłoby dobre, gdyby wszystkie wejścia były pozytywne, aby obliczyć średnią. przy odpowiedzi 3 lutego 15 w 4 06.To faktycznie obliczyć całkowitą średnią, a nie średnia ruchoma wzrasta wpływ każdej nowej próbki wejściowej staje się znikomy Mały Hilmar 3 lutego 15 w 13 53. Twoja odpowiedź.2017 Stack Exchange, Inc. Użycia Średnie przeciętne średnie ruchy Średnie średnie ruchy Jesteś zachęcany do rozwiązania tego zadania zgodnie z opis zadania, przy użyciu dowolnego języka, który można znać przy użyciu prostej średniej ruchomej serii liczb. Stworzyć instancję klasy stanu, która zajmuje pewien okres i zwraca procedurę, która przyjmuje liczbę jako argument i zwraca zwykłą średnią ruchową swoich argumentów . Średnia średnia ruchów to metoda obliczania średniej strumienia liczb, uśredniając tylko ostatnie numery P ze strumienia, gdzie P znany jest jako okres. Może być zaimplementowany poprzez wywołanie procedury inicjowania z P jako jej argumentem , IP, który powinien następnie zwracać procedurę, która po wywołaniu z poszczególnymi kolejnymi członkami strumienia liczb, oblicza średnią do, ostatniego P z nich, pozwala na wywołanie tego SMA. Słowo słowo w opisie zadania odnosi się do potrzeba SMA zapamiętania pewnych informacji między połączeniami do niego. Okres, P. Podstawiony kontener co najmniej ostatnich numerów P z każdego indywidualnego wywołania. Stateful oznacza również, że kolejne połączenia z I, zainicjowanie r powinny zwracać oddzielne procedury, które nie współużytkują zapisanego stanu, dzięki czemu mogą zostać użyte na dwóch niezależnych strumieniach danych. Pseudo-kod implementacji SMA. Ta wersja używa stałej kolejki do przechowywania ostatnich wartości p Każda funkcja zwracana z init-moving-average ma swój stan w atomie posiadającym wartość kolejki. Implementacja ta używa okrągłej listy do przechowywania numerów w oknie na początku każdego wskaźnika iteracji odnosi się do komórki listy, która przechowuje wartość właśnie przenosząc się z okno i być zastąpione wartością just-added. Korzystanie z Closure edit. Currently this sma może być nogc, ponieważ przydzieli zamknięcie na stercie Niektóre analizy ucieczki można usunąć przydziału sterty. Użyj edycji Struct. Ta wersja unika alokacja sterty zamknięcia utrzymującego dane w ramce stosu głównej funkcji Tego samego wyjścia. Aby uniknąć zbliżania się liczby zmiennoprzecinków zachować rosnące i rosnące, kod mógłby wykonać okresową sumę na całym okrągłym kolejka array. This implementacji produkuje dwa obiekty współdzielenia funkcji Idiomatic jest w E oddzielne wejście od wyjścia czytać od zapisu, a nie łącząc je w jeden obiekt. The struktury jest taki sam jak wdrożenie odchylenia standardowego E. Aleksir program poniżej generuje funkcja anonimowa z osadzonym okresem p, używana jako okres prostej średniej ruchomej Funkcja runa odczytuje dane liczbowe i przekazuje ją do nowo utworzonej funkcji anonimowej, a następnie sprawdza wynik na STDOUT. Wyjście jest pokazane poniżej, ze średnią, a następnie przez zgrupowane dane wejściowe, tworząc podstawę każdej średniej ruchomej. Erlang ma zamknięcia, ale zmienne niezmienne Rozwiązaniem jest wtedy użycie procesów i prostego przekazywania opartych na językach API. Matrix, które mają procedury służące do obliczania szybkości poślizgu dla dana sekwencja elementów. Jest mniej efektywna w pętli, jak w następujących komendach. Ciągle informuje o wejściu I, który jest dodawany na końcu listy L1 L1 ca n można znaleźć naciskając 2ND 1, a średnio można znaleźć na liście OPS. Press ON, aby zakończyć program. Funkcję zwracającą listę zawierającą uśrednione dane dostarczonego argumentu. Program, który zwraca wartość prostą przy każdej inwentaryzacji. lista jest uśredniona p oznacza okres 5 zwraca uśrednioną listę. Przykład 2 Użycie programu movinav2 i, 5 - Inicjowanie średniej ruchomej obliczeń i zdefiniowanie okresu 5 movinav2 3, xx - nowe dane w wartości listy 3, a wynik będzie być przechowywana na zmiennej x i wyświetlana movinav2 4, xx - nowa wartość danych 4, a nowy wynik zostanie zapisany na zmiennej x, a wyświetlany 4 3 2. Opis funkcji movinavg variable r - jest wynikiem uśrednionej listy zostanie zwrócona zmienna i - jest zmienną indeksową i wskazuje na koniec podkontury listę będącą uśrednioną zmienną z - zmienną pomocniczą. Funkcja wykorzystuje zmienną i do określenia, które wartości listy zostaną uwzględnione w następna średnia kalkulacja W każdym przypadku i zmienna i wskazuje na ostatnią wartość na liście, która będzie używana w przeciętnym obliczeniu Więc musimy tylko ustalić, która będzie pierwszą wartością na liście Zazwyczaj musimy rozważyć elementy p, więc pierwszy element będzie jest to indeksowane przez ip 1 Jednak w pierwszych iteracjach, że obliczenia będą zwykle ujemne, więc poniższe równanie unika ujemnych indeksów max ip 1,1 lub, układając równanie, max ip, 0 1 Ale liczba elementów na pierwsze iteracje będą również mniejsze, poprawna wartość będzie indeksem końcowym - zacznij indeks 1 lub, układając równanie, i - max ip, 0 1 1, a następnie i-max ip, 0 zmienna z przechowuje wspólną wartość maks ip , 0 więc beginindex będzie z 1, a numberofelements będzie z iz. mid list, z 1, iz zwróci listę wartości, która będzie sumą uśrednioną, suma ich suma rri będzie ich przeciętnie i zapisać wynik w odpowiednim miejsce na liście wyników. fp1 utworzy częściową aplikację w tym przypadku drugie i trzecie parametry.
No comments:
Post a Comment