Friday 29 December 2017

C ruchome średnie algorytm


Wiem, że jest to osiągalne z boost jak per. But naprawdę chciałbym uniknąć przyśpieszenia mam googled i nie znalazłem żadnych odpowiednich lub czytelnych przykładów. Zasłalnie chcę śledzić ruchomą średnią ciągłego strumienia strumienia liczb zmiennoprzecinkowych przy użyciu najnowszych 1000 liczb jako próbki danych. Jest to najprostszy sposób to osiągnąć. Jestem eksperymentował z wykorzystaniem okrągłej tablicy, wykładniczej średniej ruchomej i bardziej prostej średniej ruchomej i stwierdził, że wyniki z okrągłej tablicy odpowiadały moim potrzebom najlepiej. zaked 12 czerwca 12 w 4 38. Jeśli 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 z nowa wartość Wybierasz stałą wartość alfa, która wynosi od 0 do 1, i oblicz ją. Wystarczy, że znajdzie się wartość alfa, gdzie efekt danej próbki trwa tylko około 1000 próbek. Hmm, nie jestem pewien, czy to jest nadaje się dla ciebie, teraz t kapelusz I've put it here Problem polega na tym, że 1000 jest dość długie okno dla wykładniczej średniej ruchomej Nie jestem pewien, że istnieje alfa, który rozprzestrzeniałby średnią w ciągu ostatnich 1000 numerów, bez underflow w obliczeń zmiennoprzecinkowych Ale jeśli chciał mniejsze średnie, 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 Mnożona średnia ruchoma może pozwolić alpha na zmienną Więc pozwala to do obliczania średniej podstawy czasu, np. bajtów na sekundę Jeśli czas od ostatniej aktualizacji akumulatora przekracza 1 sekundę, oznacza to, że alfa wynosi 1 0. W przeciwnym razie możesz zezwolić usłudze alpha jako ostatnią aktualizacją 1000000 jxh cze 12 12 w 6 21.Taktycznie chcę śledzić średnią ruchową ciągłego strumienia strumienia liczb zmiennoprzecinkowych przy użyciu najnowszych 1000 numerów jako próbki danych. Zauważ, że poniżej uaktualnia całkowite jako elementy dodawane zastępując, unikając kosztownego przechodzenia ON w celu obliczenia suma - potrzebna na th e średnia - na żądanie. Wszystko jest wykonane z innego parametru od T do wsparcia, np. przy długiej długości, gdy wynosi 1000 długich s, int dla char s lub podwójne do całkowitego float s. This jest nieco błędem, że numsamples could przejdź przez INTMAX - jeśli zależy Ci na długie długie unsigned lub użyć dodatkowych danych bool członka do nagrywania, gdy pojemnik jest po raz pierwszy wypełnione, podczas cyklicznych numsamples wokół tablicy najlepiej, a następnie zmienić nazwę na coś nieszkodliwego jak pos. answered Jun 12 12 at 5 19.net przyjmuje założenie, że próbka operatora pustego T jest faktycznie nieważnym operatorem T próbka oPless 08 czerwca 14 w 11 52. oPhim ahhh dobrze spotted faktycznie miałem na to być nieważne operatora T próbki, ale oczywiście można użyć dowolnej notatce lubisz Naprawić, dzięki Tony D Jun 8 14 w 14 27.Is 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 do pozwalają na przesunięcie bitów zamiast dzieląc, ale nie potrzebując buforu fer byłby miły Czy jest jakiś sposób na wyrażenie nowej średniej ruchomej wyników tylko w wyniku starego wyniku i nowej próbki. Zdefiniuj przykład średniej ruchomej, w oknie z 4 próbkami by dodać. Dodać nową próbkę eA średnią ruchoma być wykonywane rekurencyjnie, ale dla dokładnego obliczenia średniej ruchomej musisz pamiętać najstarsze próbki wejściowe 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 wejściem sygnał 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żna użyć nieskończenie długiego okna wykładniczego, co pozwala na obliczenie wyjścia tylko z poprzedniego wyjścia i bieżącego wejścia. Ale 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 o ciężarze jus t get mniejsze i mniejsze dla próbek daleko w przeszłości. I zaimplementowane średniej ruchomej bez indywidualnej 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 na obecną średnią. 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 mi się dobrym sposobem na to zrobić Założę, że to z kolei żołądek prawdziwego faceta matematyki, ale okazuje się, że jest jednym z dozwolonych sposobów, aby to zrobić I to działa dobrze Pamiętaj tylko, że im większa długość tym wolniej jest po co chcesz śledzić To może nie mieć znaczenia przez większość czasu, ale po śledzeniu satelitów, jeśli jesteś wolny, szlak może być daleki od rzeczywistej pozycji i wygląda źle Możesz mieć przerwę między siadami a końcowymi kropkami Wybrałem długość 15 aktualizowanych 6 razy na minutę, aby uzyskać ade quate wygładzanie i nie za daleko od rzeczywistego pozycji siedziała 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 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 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 zwiększa wpływ każdej nowej próbki wejściowej staje się znikomy mały Hilmar 03 lutego 15 w 13 53. Odpowiedź2017 Stack Exchange, Inc. C algorytm dla zero-latencji wykładniczej średniej ruchome. Last Zmodyfikowany 2017-08-13.I ve been starając się wdrożyć a niskie cięcie częstotliwości w c, które zasadniczo pobiera strumień liczb i wygładza wyjście filtrujące jitter intensywności ruchu, ważne jest jednak, że ważone numery z przodu są uważane za natychmiastowe, ponieważ dane są czasami krytyczne, aby sterować bazą symulacji ruchu za pomocą wyjście z nieco oprogramowania do gier Mam już ważoną ruchliwą średnią algoithm, ale może to zrobić z czymś nieco bardziej wrażliwym na przednim końcu i znalazłem ten pseudo-kod jest jak poniżej. Inputs Price NumericSeries, Period NumericSimple Współczynnik zmienności 0, opóźnienie 0. If CurrentBar 1 następnie zacznij ZLEMA Współczynnik cenowy 2 Okres 1 zwłoki Czas-1 2 koniec inne początek ZLEMA factor 2 Opóźnienie cen 1-współczynnik ZLEMA 1 end. I ve przetłumaczone to na C i mój kod jest następująca. Jednak nie wydaje się zachowywać się tak jak oczekiwałem To wydaje się być prawie tam, ale czasem mam nieco niższą wartość niż wszystkie pozycje w kolejce, gdy są wszystkie wyższe. Mój kolejka i liczba pozycji w tym są przekazywane jako parametry, z ostatnim jest na froncie przez cały czas, również I przechodzić incrementing licznik począwszy od 0, jak wymagane przez function. I nie jestem pewien I ve interpretowane znaczenie ZLEMA 1 poprawnie, jak nie jest jasne w swojej pseudokodie, więc założyłem, że jest to ostatnie zlema, a ja również przy założeniu, że cena rzeczywiście oznacza cenę 0 Być może miałem to złe. A ja miałem kopiować rzeczywiste wartości zlema obliczone z powrotem do mojej pierwotnej kolejki przed następne połączenie Nie zmieniam pierwotnej kolejki na wszystkich innych niż tylko przesuwanie wszystkich wartości do końca i wstawianie najnowszej na początku Kodeks używam do tego jest. Będzie bardzo wdzięczny, jeśli ktoś z lepszym zrozumieniem matematyka mogłaby być zdrowa sprawdzić to dla mnie, czy dostałem coś nieco źle. Dziękuję tyle z wyprzedzeniem, jeśli możesz pomóc. Bardzo dobrze wszystkim podziękowałeś za wkład, bardzo mile widziani. Mam sens, więc przypuszczam, że wtedy najlepsze Mogę mieć nadzieję, że jest po prostu expone średniej ruchomej średniej, zaakceptowanie będzie niewielkie opóźnienie, ale będzie to zminimalizowane przez cięższe ważenie z przodu niż podane w średniej ważonej średniej ruchomej. Mam ten algorytm również, ale podobny problem, ponieważ wartości don t wydają się dość poprawne, chyba że jest charakterem wzoru. Na przykład, powiedz mi, że moja tablica zawiera 16 wartości, wszystkie 0 4775 - wyjście jest 0 4983, ale ja spodziewam się 0 4775. wygląda to dobrze. Wywoływane ruchy średnie float ema float vals, int numVals, int currentSample static float factor 0 statyczny float lastema 0 float ema. if currentSample 1 ema vals 0 factor 2 0 float numVals 1 0 inne ema factor vals 0 1 0 - factor lastema lastema ema. return ema Odwrotnie, czasami wyjście jest niższe niż każdy i każdy z wejść, nawet jeśli wszystkie są wyższe. Jest on nazywany w taki sam sposób, jak zlema powyżej, z licznikiem incrementing Wzór i pseudokodę dla tego jest tutaj - Dzięki znowu, przeprosiny za moje nieporozumienie niektórych podstawowych Podstawowe pozdrowienia, Chris J. As dla kodu wysłałem, masz prawo o wielkości rozmiaru tablicy To powinno być łatwo ustalone Jeśli chodzi o pytania.1 stałej filtru reprezentuje cutoff częstotliwości Użyłem cyfrowego przetwarzania sygnałów DSP dla tej techniki ki Filtr Low-pas jest prostym wyjaśnieniem Chcesz sekcję Realizację Dyskretnego Czasu W moim przypadku A jest RC-Constant, o którym mówią Więc częstotliwość, która się wyciąga, jest powyżej 1 2 pi A Jeśli nie rozumiesz teorii częstotliwości, to może się to skomplikować. W Twoim przypadku, Im wyższy masz A, tym niższa częstotliwość, którą ten filtr pozwoli, co oznacza, że ​​wygładzi krzywiznę więcej i więcej Im niższe, tym większy hałas, który jest dozwolony w systemie Pamiętaj, że musi być większy niż lub równy 1. Skręciłem ponownie XLS, tym razem bez zmieniających się liczb randów. Ustaw stałą A i obserwuj jak wygładza lub filtruje odmiany wysokiej częstotliwości.2 Ostatni punkt tablicy wejściowej ma najnowszą wartość3. To samo dotyczy tablicy wyjściowej Ostatnia wartość jest ostatnią wartością.5 NUMVALS jest dowolny Możesz ciągle dodaj do tablicy wejściowej i wyjściowej tyle razy, ile chcesz i nie będzie miało wpływu na filtr W szczególności użyłem 49 punktów Ale mogę z łatwością usunąć ostatnie 20 i pierwsze 29 wyjść pozostały takie same Funkcja nie jest opierając się na ilu punktach jest używanych. Chciałbym wspomnieć, że opracowałem tę funkcję dla jednorazowej konwersji Jeśli chcesz przeprowadzić konwersję na kolejną wartość w locie, możesz spróbować czegoś prostszego, jak przyłączono ponownie I m zardzewiałe na c Mam nadzieję, że to prawda Jedyne, co chcesz trzeba dostarczyć jest stała wejściowa i filtr. Następnie wiem, czy to pomaga.

No comments:

Post a Comment