Monday 25 December 2017

Ruch średnia implementacja c


Czy jest 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 siłą dwóch, aby umożliwić przesunięcie bitów zamiast dzieląc, ale nie potrzebujesz 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ład średniej ruchomej, w oknie z 4 próbkami, które mają być. Następna próbka eA średnia ruchoma może być realizowana rekurencyjnie, ale dokładne obliczanie średniej ruchomej należy pamiętać o najstarszej próbce wejściowej w sumie tj. a w swoim przykładzie Dla długości N średniej ruchomej obliczysz. gdzie yn jest sygnałem wyjściowym i xn to sygnał wejściowy Eq 1 może być zapisany rekurencyjnie. Dlatego zawsze musisz zapamiętać próbkę xnN w celu obliczenia 2. Jak wskazał Conrad Turner, zamiast tego możesz użyć nieskończenie długiego okna wykładniczego, co pozwala obliczyć wyjście tylko z przeszłości put i current 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 o gramaturze mniejszej i mniejszej próbki daleko w przeszłości. I zaimplementowane ś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 podziel się przez 2 do bieżącej ś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 wydawało się dobrym sposobem na że to zwróci żołądek prawdziwego faceta matematyki, ale okazuje się, że jest jednym z dozwolonych sposobów na to i działa dobrze Pamiętaj tylko, że im większa długość tym wolniej jest to, co chcesz podążać To nie ma znaczenia czas, ale po śledzeniu satelitów, jeśli jesteś wolny, szlak może być daleko od aktualnej pozycji i będzie wyglądał źle Możesz mieć przerwę między siadami a końcowymi kropkami Wybrałem długość 15 aktualizowanych 6 razy na minutę do uzyskać odpowiednią wygładzanie i nie za daleko od rzeczywistej pozycji sutowej z wygładzonym szlakiem dots. doc 16 listopada 16 w 23 03.initialize całkowity 0, licznik 0 za każdym razem, gdy widząc nową wartość. Ten jeden scanf wejściowy, jeden dodać całkowity newValue, jedna liczba przyrostów, jedna dzielna średnia liczba. Jest to średnia ruchoma na wszystkich wejściach. Aby obliczyć średnią z ostatnich ostatnich 4 wejść, wymagałoby 4 zmiennych wejściowych, być może kopiowanie każdego wejścia do starszych zmiennych wejściowych, a następnie obliczenie nowego ruchu średnia jako suma 4 zmiennych wejściowych, podzielona przez 4 przesunięcie w prawo2 byłaby dobra, gdyby wszystkie wejścia były pozytywne, aby obliczyć średnie obliczenia. przy odpowiedzi 3 lutego 15 w 4 06.To faktycznie obliczy całkowitą średnią, a nie średnią ruchoma liczyć się s większy wpływ każdej nowej próbki wejściowej staje się znikomy Mały Hilmar 03 lutego 15 w 13 53. Odpowiedź 20.17 Stack Exchange, Inc. Średnia ruchoma jako filtr Średnia średnia ruchoma jest często wykorzystywana do wygładzania danych w obecności szumu Zwykła średnia ruchoma nie zawsze jest rozpoznawana jako filtr Finite Impulse Response FIR, chociaż jest to jeden z najpopularniejszych filtrów w przetwarzaniu sygnału. Traktowanie go jako filtra umożliwia porównanie go z na przykład filtrami windowed-sinc artykuły dotyczące filtrów górnoprzepustowych i pasm przenoszących pasma górnoprzepustowego i niskoprzepustowych na przykładach tych Najważniejszą różnicą między tymi filtrami jest to, że średnia ruchoma jest odpowiednia dla sygnałów, dla których użyteczne informacje są zawarte w domenie czasowej, wygładzanie pomiarów przez uśrednienie jest głównym przykładem Filtry Windowed-sinc są z jednej strony silne w dziedzinie częstotliwości, z wyrównywaniem w przetwarzaniu dźwięku jako typowy przykład Jest bardziej szczegółowy porównanie ison obu typów filtrów w domenie czasu i skuteczność filtrów w domenie częstotliwości Jeśli masz dane, dla których zarówno czas, jak i dziedzina częstotliwości są ważne, możesz zajrzeć do Wariacje na temat średniej ruchomej, która prezentuje wiele ważone wersje średniej ruchomej, które są lepsze. Średnia ruchoma długości N może być zdefiniowana jako. pisywana, ponieważ jest ona zazwyczaj implementowana, przy czym aktualna próbka wyjściowa jest średnią z poprzednich N próbek Widziana jako filtr, ruch średnia wykonuje splot sekwencji wejściowej xn z prostokątnym impulsem o długości N i wysokości 1 N, aby utworzyć obszar impulsu, a tym samym zysk filtra, jeden W praktyce najlepiej jest wziąć N nieparzysty średnia ruchoma może być obliczona przy użyciu parzystej liczby próbek, przy nieparzystej wartości dla N ma tę zaletę, że opóźnienie filtru będzie liczbą całkowitą próbek, ponieważ opóźnienie filtru z N próbkami jest dokładnie N - 1 2 Ruchome średnia może być wyrównana dokładnie do pierwotnych danych przez przesunięcie go przez liczbę całkowitą próbek. Time Domeny. Ponieważ średnia ruchoma jest splotem z prostokątnym impulsem, jego odpowiedź częstotliwościowa jest funkcją sinc To sprawia, że ​​coś takiego jak podwójny filtr windowed-sinc, ponieważ jest splotem z pulsem impulsowym, który powoduje prostokątną odpowiedź częstotliwościową. To jest to pasmo przenoszenia odpowiedzi, które sprawia, że ​​średnia ruchoma jest słabym wykonaniem w dziedzinie częstotliwości. Jednak działa bardzo dobrze w tym czasie domena Dlatego doskonale nadaje się do wygładzania danych w celu usunięcia zakłóceń, przy jednoczesnym utrzymywaniu szybkiej odpowiedzi krokowej Rysunek 1.Faktura 1 Wygładzanie za pomocą filtra średniej ruchomej. Zazwyczaj zakłada się typowy dodatek białego szumu Gaussa AWGN, uśredniając N próbki mają wpływ zwiększania współczynnika SNR przez współczynnik sqrt N Ponieważ hałas poszczególnych próbek nie jest ze sobą skorelowany, nie ma powodu, aby traktować każdą próbkę inaczej średnia, która daje każdą próbkę taką samą wagę, pozbędzie się maksymalnej ilości hałasu dla danej ostrości. Ponieważ jest to filtr FIR, średnia ruchoma może zostać zaimplementowana przez splot. Ma wtedy taką samą wydajność lub brak jak każdy inny filtr FIR Jednak może on być również implementowany rekurencyjnie, w sposób bardzo efektywny Wynika to bezpośrednio z definicji, która jest wynikiem wyrażeń dla yn i yn 1 i i. gdzie zauważamy zmiana między yn 1 i yn polega na tym, że na końcu znajduje się dodatkowy termin xn 1 N, podczas gdy termin x nN 1 N jest usuwany od początku W praktycznych zastosowaniach często można pominąć podział przez N dla każdego terminu przez kompensację powstałego zysku N w innym miejscu To rekursywne wdrożenie będzie znacznie szybsze niż splot Każda nowa wartość y może być obliczona tylko z dwoma dodatkami, zamiast N dodatków, które byłyby konieczne dla prostego przykładu intacja definicji Jedyną rzeczą, na którą trzeba zwrócić uwagę na implementację rekurencyjną, jest gromadzenie się błędów zaokrąglania To może być problemem w Twoim wniosku, ale sugeruje również, że ta implementacja rekursywna będzie działać lepiej z implementacją integer niż z liczby zmiennoprzecinkowe Jest to dość nietypowe, ponieważ implementacja zmiennoprzecinkowa jest zazwyczaj prostsza. Komunikacja musi polegać na tym, że nigdy nie należy lekceważyć użyteczności prostego ruchomego filtra w aplikacjach przetwarzania sygnałów. Filter Design Tool. Ten artykuł jest uzupełnione narzędziem do projektowania filtrów Eksperymentuj z różnymi wartościami dla N i wizualizuj uzyskane filtry Wypróbuj teraz. Ja wiem, że to jest osiągalne dzięki zwiększeniu na per. But naprawdę chciałbym uniknąć użycia boost mam googled i nie znalazłem żadnych odpowiednich lub czytelnych przykłady. Chcę śledzić ruchomą średnią ciągłego strumienia strumienia liczb zmiennoprzecinkowych przy użyciu najnowszego 1 000 liczb jako próbki danych. Jest to najłatwiejszy sposób na osiągnięcie tego. Eksperymentowałem z użyciem okrągłej tablicy, wykładniczej średniej ruchomej i bardziej prostej średniej ruchomej i stwierdziła, że ​​wyniki okrągłej tablicy odpowiadały moim potrzebom najlepiej. 12 w 4 38.Jeżeli Twoje potrzeby są proste, możesz spróbować użyć wykładniczej średniej ruchomej. Wystarczy, że zmienisz akumulator, a kod wygląda na każdą próbkę, kod aktualizuje akumulator o nową wartość, którą wybierzesz stały alfa, który wynosi od 0 do 1 i obliczyć to. Wystarczy, że znajdzie się wartość alfa, gdzie efekt danej próbki trwa tylko około 1000 próbek. Hmm, nie jestem pewien, czy jest to dla ciebie odpowiednie, teraz, że ja to położyłem tutaj Problem polega na tym, że 1000 to dość długie okno dla wykładniczej średniej ruchomej Nie wiem, czy istnieje alfa, która rozprzestrzenia się średniej w ciągu ostatnich 1000 numerów, bez underflow w obliczaniu zmiennoprzecinkowego Ale jeśli Chcesz mniejsze średnie e, jak 30 numerów lub tak, jest to bardzo łatwy i szybki sposób to zrobić. jak 12 czerwca 12 w 4 44. 1 na swoim punkcie Wykładniczej średniej ruchomej może pozwolić alpha na zmienną Więc pozwala to przyzwyczaić się obliczyć średnią czasu bazowego, np. bajtów na sekundę Jeśli czas od ostatniej aktualizacji akumulatora przekracza 1 sekundę, należy pozwolić alpha być równe 1 0 W przeciwnym razie możesz zezwolić usłudze alpha jako ostatnią aktualizacją 1000000 jxh cze 12 12 na 6 21. Zwykle chcesz śledzić ruchomą średnią bieżącego strumienia liczb zmiennoprzecinkowych przy użyciu najnowszych 1000 numerów jako próbki danych. Należy zauważyć, że poniżej uaktualnia całkowite jako elementy dodawane zastępując, unikając kosztownych przejazdów ON w celu obliczenia sumy - potrzebna na średnią - na żądanie. Całkowity parametr różni się od T do obsługi, np. długotrwałe przy łączeniu 1000 długich s, int dla char s lub double-total float s. Jest to nieco błędne w tym numsamples mogłoby minąć INTMAX - jeśli zależy Ci na długich unsigned long długi lub użyj dodatkowego członka danych bool do nagrywania, gdy pojemnik jest po raz pierwszy wypełnione podczas cyklicznych numsamples wokół tablicy najlepiej zamienione na coś nieszkodliwego jak pos. answered Jun 12 12 at 5 19.one zakłada, że ​​operator void T próbki jest faktycznie nieważne operatora T próbka oPless 8 czerwca 14 w 11 52. oPless ahhh dobrze spotted faktycznie miałem na to być nieważne operatora T próbka, ale oczywiście można użyć dowolnej notacji, którą lubisz Naprawę, dzięki Tony D Jun 8 14 w 14 27.

No comments:

Post a Comment