Wednesday 27 December 2017

C ruchome średnie


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 przejść przez INTMAX - jeśli zależy Ci na długie długie unsigned lub użyć dodatkowych danych bool członka do rejestrowania, gdy pojemnik jest po raz pierwszy wypełnione podczas cyklicznego 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. Jak inni wspomnieli, należy rozważyć filtr nieskończony IIR odpowiedzi impulsowej, a nie filtr FIR impulse odpowiedzi impulsowej, którego używasz teraz Jest więcej, ale na pierwszy rzut oka filtry FIR są realizowane jako wyraźne konwolutio ns i IIR z równań. Szczególny filtr IIR używam wiele w mikrokontrolerach jest jednym biegunowym filtrem dolnoprzepustowym Jest to cyfrowy odpowiednik prostego analogowego filtru RC Dla większości zastosowań mają one lepszą charakterystykę niż filtr pola, który używają Większość zastosowań filtru pudełkowego, który napotkam wynika z tego, że ktoś nie zwracał uwagi na klasę przetwarzania sygnałów cyfrowych, a nie w wyniku potrzeby ich szczególnych cech Jeśli chcesz złagodzić wysokie częstotliwości, które znasz to hałas, Jedyny biegunowy filtr dolnoprzepustowy jest lepszy Najlepszym sposobem na wdrożenie cyfrowo w mikrokontrolerze jest zazwyczaj. FILT - FILT FF NEW - FILT. FILT jest kawałkiem trwalego stanu Jest to jedyna trwała zmienna, którą musisz obliczyć ten filtr NEW nowa wartość, którą filtr jest aktualizowany za pomocą tej iteracji FF jest frakcją filtrującą, która dostosowuje ciężkość filtra Spójrz na ten algorytm i zobaczymy, że dla FF 0 filtr jest infin bardzo ciężkie, ponieważ wyjście nigdy się nie zmienia Dla FF 1, to naprawdę nie ma filtra, ponieważ wynik po prostu następuje na wejściu Wartości użyteczne są w między Na małe systemy wybierzesz FF jest 1 2 N, aby mnożyć przez FF można osiągnąć jako prawo przesunięcia przez N bitów Na przykład, FF może być 1 16 i mnożenie przez FF, a więc prawo przesunięcia 4 bitów W przeciwnym razie ten filtr potrzebuje tylko jednego odejmowania i jeden dodać, chociaż numery zwykle muszą być szersze niż wartość wejściowa bardziej z dokładnością numeryczną w oddzielnej sekcji poniżej. Zwykle odbieram odczyty AD znacznie szybciej niż są potrzebne i zastosować dwa z tych filtrów kaskadowych Jest to cyfrowy odpowiednik dwóch filtrów RC w szeregu, a tłumienie o oktawę o 12 dB powyżej częstotliwości rolloff Jednak w przypadku odczytów AD zazwyczaj bardziej trafne jest przejrzenie filtru w domenie czasowej poprzez rozważenie odpowiedzi krokowej To informuje o tym, jak szybko Twój system będzie widział zmianę, gdy coś mierzysz zmiany. Aby ułatwić używam mojego programu FILTBITS Ty określasz liczbę bitów przesuwnych dla każdego FF w kaskadowej serii filtrów i oblicza odpowiedź krok i inne wartości Właściwie I zwykle uruchamiam to za pomocą mojego skryptu owijania PLOTFILT To działa FILTBITS, które tworzy plik CSV, a następnie rzutuje na plik CSV Na przykład tutaj jest wynikiem PLOTFILT 4 4.Te dwa parametry PLOTFILT oznaczają, że będą dwa filtry kaskadowe typu opisane powyżej Wartości 4 wskazują liczbę bitów przesunięcia, aby zrealizować mnożenie przez FF W tym przypadku dwa wartości FF mają więc wartość 1 16. Czerwony ślad to odpowiedź na jednostkę kroku i jest najważniejszą sprawą, na przykład, to informuje, że jeśli dane wejściowe ulegną zmianie, wyjście filtru połączonego osiądzie się do 90 nowej wartości w 60 iteracjach Jeśli zajdzie potrzeba około 95 czasu osadzania, musisz poczekać około 73 iteracji, a na 50 osadzaniu tylko 26 iteracji. Zielony ślad wskazuje na wyjście z jednego spike'a o pełnej amplitudzie. To daje pewien pomysł na przypadkowe tłumienie szumu. Wygląda na to, że żadna pojedyncza próbka nie spowoduje więcej niż 2 5 zmian na wyjściu. Niebieski ślad ma dać subiektywne odczucia tego, co ten filtr robi z białego szumu To nie jest rygorystyczne testy, ponieważ nie ma gwarancji, co dokładnie zawartość była liczb losowych wybranych jako białe szumy wejściowe dla tego uruchomienia PLOTFILT To tylko dać szorstki poczucie, jak bardzo będzie zgniecione i jak płynnie jest. PLOTFILT, być może FILTBITS i wiele innych użytecznych rzeczy, zwłaszcza w zakresie rozwoju oprogramowania PIC, jest dostępny w publikacji oprogramowania PIC Development Tools na stronie pobierania oprogramowania. Dodano o precyzji numerycznej . Zobaczyłem z komentarzy, a teraz nową odpowiedź, że interesuje się dyskutowaniem o liczbie bitów potrzebnych do wdrożenia tego filtra. Zauważ, że pomnożenie przez FF spowoduje utworzenie nowych bitów FF w FF 2 poniżej punktu binarnego W małych systemach FF jest zazwyczaj wybierany jako 1 2 N, dzięki czemu mnożenie jest faktycznie realizowane przez prawidłowe przesunięcie N bitów. FILT jest więc zwykle liczbą całkowitą stałej Uwaga, że ​​nie zmienia to żadnej matematyki z procesora s punkt widzenia Na przykład, jeśli filtrujesz odczyty 10-bitowe AD i N 4 FF 1 16, potrzebujesz 4 bitów ułamkowych poniżej 10-bitowych odczytów liczb całkowitych Jednym z najbardziej wymagających procesorów należy wykonać 16-bitowe operacje całkowite ze względu na 10 bitowe odczyty AD W tym przypadku można nadal wykonywać dokładnie takie same 16-bitowe operacje całkowite, ale zaczynaj od odczytów AD pozostawionych w lewo, przesuwanych o 4 bity Procesor nie zna różnicy i nie potrzebuje wykonywania matematyki na całych 16-bitowych liczb całkowitych czy uważasz, że są 12 4 punktami stałymi lub prawdziwymi 16 bitowymi liczbami całkowitymi 16 0 punktem stałym. Ogólnie trzeba dodać N bity każdego bieguna filtra, jeśli nie chcesz dodawać hałasu z powodu reprezentacji numerycznej W powyższym przykładzie , drugi filtr dwóch musiałoby mieć 10 4 4 18 bitów, aby nie zgubić informacji W praktyce na 8-bitowej maszynie oznacza to, że używasz 24 bitowych wartości Technicznie tylko drugi biegun dwóch wymagałby szerszej wartości, ale dla uproszczenia oprogramowania zazwyczaj używam tej samej reprezentacji, a tym samym tego samego kod dla wszystkich biegunów filtra. Zawsze piszę podprogram lub makro, aby wykonać jedną operację filtra, a następnie zastosować ją do każdego bieguna. Czy podprogram lub makro zależy od tego, czy cykle czy pamięć programu są ważniejsze w danym projekcie , Używam pewnego stanu, aby przejść NEW do makro podprogramu, który aktualizuje FILT, ale ładuje się do tego samego stanu scratch NEW był w To ułatwia stosowanie wielu biegunów, ponieważ aktualizacja FILT jednego bieguna jest NOWOŚĆ następna strona Jeśli podprogram jest użyteczny, po wejściu do punktu FILT, który zostanie zaktualizowany tuż po FILT w drodze W ten sposób podprogram automatycznie uruchamia kolejne filtry w pamięci, jeśli jest nazywany wielokrotnością razy Z makro nie potrzebujesz wskaźnika, ponieważ przechodzisz w adresie, aby działać na każdym iteracji. Kole przykładowe. Oto przykład makra, jak opisano powyżej dla PIC 18. A oto jest podobne makro dla PIC 24 lub dsPIC 30 lub 33. Te przykłady są implementowane jako makra przy użyciu mojego preprocesora assemblera PIC, który jest bardziej zdolny niż jeden z wbudowanych obiektów makr. clabacchio Inną kwestią, o której powinienem wspomnieć jest wdrożenie oprogramowania układowego Możesz napisać pojedynczy biegun filtra po niskiej przepustowości, a następnie zastosować go wielokrotnie W rzeczywistości zwykle pisać taką podprogram, aby wziąć wskaźnik w pamięci do stanu filtra, a następnie go wyprzedzeniem wskaźnik, dzięki czemu łatwo można było z łatwością zadzwonić do wieloliniowych filtrów Olin Lathrop 20 kwietnia 12 w 15 03.1 bardzo dziękuję za odpowiedzi - wszystkie postanowiłem użyć tego filtru IIR, ale ten filtr nie jest używany jako Filtr standardowy LowPass, ponieważ muszę przeanalizować średnie wartości liczników i porównać je w celu wykrycia zmian w pewnym zakresie, ponieważ te wartości mają bardzo różne wymiary w zależności od sprzętu, który chciałem przeciętnie, aby móc reagować na te urządzenia konkretne zmiany automatycznie sensslen 21 maja 12 w 12 06.Jeśli można żyć z ograniczeniem mocy dwóch liczb pozycji do przeciętnej, tj. 2,4,8,16,32 itd., dzielenie można łatwo i skutecznie zrobić na niskiej wydajności mikro bez poświęconego podziału, ponieważ można to zrobić jako przesunięcie bitowe Każde prawo przesunięcia jest jedna moc dwóch eg. The OP myśli, że miał dwa problemy, dzieląc się PIC16 i pamięci dla jego pierścienia bufor Ta odpowiedź pokazuje, że dzielenie nie jest trudne Wprawdzie nie rozwiązuje problemu pamięci, ale system SE pozwala na częściowe odpowiedzi, a użytkownicy mogą wziąć coś z każdej odpowiedzi na siebie, a nawet edytować i połączyć inne odpowiedzi s Ponieważ niektóre inne odpowiedzi wymagają operacji dzielenia, są podobnie niekompletne, ponieważ nie pokazują, jak skutecznie osiągnąć to na PIC16 Martin 20 kwietnia 12 w 13 01.There jest odpowiedź na prawdziwy przeciętny filtr aka boxcar filtr z mniej wymagań pamięci, jeśli nie t mind downsampling To s nazywany kaskadowym integratorem-filtr grzebieniowy CIC Pomysł polega na tym, że masz integrator, który przyjmujesz różnice w danym okresie czasu, a kluczowym urządzeniem oszczędzającym pamięć jest to, że poprzez downsampling, nie musisz przechowywać wigilii wartość życiowa integratora Może być zaimplementowana za pomocą następującej pseudokodowej. Twoja efektywna średnia długość ruchu to decymacjaStandakturaFaktora, ale musisz zachowywać tylko stany miar Próbkowanie Oczywiście można uzyskać lepszą wydajność, jeśli twój stateize i decimationFactor są uprawnieniami 2, dzielenie i reszta operatorów są zastępowane zmianami i maską - i. Postscript Zgadzam się z Olinem, że należy zawsze rozważyć proste filtry IIR przed średnim ruchem filtra Jeśli nie potrzebujesz częstotliwości-nulls z filtrem bokserskim, 1-biegunowy lub 2-biegunowy filtr dolnoprzepustowy będzie prawdopodobnie działał prawidłowo. Z drugiej strony, jeśli filtruje się do celów decymacji przy wysokim współczynniku próbkowania i uśrednia go do wykorzystania w procesie o niskim współczynniku, to filtr CIC może być tylko tym, czego szukasz, zwłaszcza, jeśli można użyć streszczenia 1 i uniknąć ringbuffer łącznie z tylko jedną poprzednią wartością integratora. Istnieją pewne pogłębione analizy matematyki za pomocą pierwszego ord er IIR, który Olin Lathrop już opisał na temat wymiany stosu przetwarzania sygnałów cyfrowych zawiera wiele ładnych zdjęć Równanie dla tego filtru IIR. Ta możliwość może być zaimplementowana przy użyciu tylko liczb całkowitych i nie podział przy użyciu następującego kodu może potrzebować trochę debugowania, wpisywał z pamięci pamięć. Filtr ten przybliża średnią ruchową ostatnich próbek K, ustawiając wartość alfa na 1 K Zrób to w poprzednim kodzie, określając BITS na LOG2 K, tzn. dla K 16 zestaw BITS na 4, dla K 4 Ustaw BITS na 2, itd. I'll zweryfikować kod tutaj wymienione, jak tylko dostanę zmiany i edytować tę odpowiedź, jeśli potrzebne. jeszcze jedno-biegunowy filtr dolnoprzepustowy średniej ruchome, z Częstotliwość cutoff CutoffFrequency Bardzo prosty, bardzo szybki, działa świetnie i prawie nie ma nad głową pamięci. Upewnij się, że wszystkie zmienne mają zasięg poza funkcją filtru, z wyjątkiem przekazywanych w newInput. Note Jest to filtr pojedynczego etapu Wiele etapów może być połączonych kaskadowo w celu zwiększenia ostrość filtr Jeśli używasz więcej niż jednego etapu, będziesz musiał dostosować DecayFactor w odniesieniu do częstotliwości odcięcia, aby zrekompensować. I oczywiście wszystko czego potrzebujesz to te dwie linie umieszczone w dowolnym miejscu, nie potrzebują własnej funkcji Ten filtr ma czas ramp-up przed średnią ruchu oznacza wartość sygnału wejściowego Jeśli musisz pominąć ten czas rampy, możesz zainicjować MovingAverage tylko do pierwszej wartości newInput zamiast 0 i mam nadzieję, że pierwsza nowa wartość wejściowa nie jest większa. CutoffFrequency SampleRate ma zakres od 0 do 0 5 DecayFactor jest wartością między 0 a 1, zwykle blisko 1.Single-precyzyjne pływaki są wystarczająco dobre dla większości rzeczy, po prostu wolę podwójne Jeśli musisz trzymać się liczb całkowitych, możesz przelicz DecayFactor i Amplitude Factor na ułamkowe liczby całkowite, w których licznik jest zapisany jako liczba całkowita, a mianownik jest liczbą całkowitą 2, dzięki czemu można przesunąć bit w prawo jako mianownik, a nie dzieląc się podczas pętli filtru Dla na przykład, jeśli DecayFactor 0 99 i chcesz używać liczb całkowitych, możesz ustawić wartość DecayFactor 0 99 65536 64881 I wtedy, gdy mnożysz przez DecayFactor w pętli filtru, po prostu przesuń wynik 16. Aby uzyskać więcej informacji na ten temat, s online, rozdział 19 dotyczące filtrów rekurencyjnych. PS Za paradygmat Moving Average, inne podejście do ustawienia DecayFactor i AmplitudeFactor, które mogą być bardziej odpowiednie dla Twoich potrzeb, powiedzmy, że chcesz poprzednio, około 6 pozycji uśrednione tog eter, robi to dyskretnie, dodasz 6 pozycji i podzielisz przez 6, więc możesz ustawić AmplitudeFactor na 1 6 i DecayFactor na 1 0 - AmplitudeFactor. answered 14 maja 12 w wieku 22 55. Każdy inny skomentował dokładnie narzędzie IIR vs FIR, a na mocy dwóch dywizji Chciałbym dać pewne szczegóły implementacji Poniżej działa dobrze na małych mikrokontrolerów bez FPU Nie ma mnożenia, a jeśli zachowasz N moc dwóch, wszystkie podziały jest jednokierunkowe przesunięcie bitowe. Basic FIR ring buffer zachowuje bieżący bufor z ostatnich wartości N, a bieżący SUM wszystkich wartości w buforze Za każdym razem, kiedy pojawia się nowa próbka, odejmij najstarszą wartość w buforze z SUM , wymień ją na nową próbkę, dodaj nową próbkę do SUM i wyjście SUM N. Modified IIR buffer ring zachowuje bieżący SUM z ostatnich wartości N Przy każdej próbie pojawi się nowa próbka SUM - SUM N, dodaj nową próbki i dane wyjściowe SUM N. Odpowiedź 28 sierpnia 13 w 13 45.Jeśli dobrze panu czytam, opisujesz pierwszy porządek IIR filtruje wartość, którą odejmujesz isn t najstarszą wartość, która się wypada, ale zamiast tego średnia z poprzednich wartości Filtry First-Order IIR z pewnością mogą być użyteczne, ale nie wiem co masz na myśli, gdy sugerujesz, że wyjście jest taki sam dla wszystkich sygnałów okresowych Przy częstotliwości próbkowania 10 kHz, podawanie 100 Hz fali prostokątnej w 20-stopniowy filtr pola daje sygnał, który wzrasta równomiernie dla 20 próbek, siedzi wysoko dla 30, kropli jednorodnie dla 20 próbek i siedzi nisko dla 30-go superfekta z filtrem IIR z pierwszego rzędu 28 sierpnia 13 w temperaturze 15 31. będzie powodować falę gwałtownie wzrastającą i stopniowo wyrównywać się w pobliżu, ale nie na maksimum wejściowym, a następnie ostro zacznie opadać i stopniowo wyrównywać blisko, ale nie na wejściu minimum Bardzo różne zachowanie supercat Aug 28 13 w 15 32.Jednym problemem jest to, że prosta średnia ruchoma może być lub nie być użyteczna Z filtrem IIR można uzyskać ładny filtr z stosunkowo niewielką liczbą całkowitą FIR opisujesz może dać Ci tylko prostokąt w czasie - szczerze freq - a ty możesz t zarządzać bocznymi płatami Może być warto wrzucić parę liczb całkowitych, aby uczynić to symetrycznym, dostrojonym FIRem, jeśli możesz oszczędzić zegary Scott Seidman 29 sierpnia 13 w 13 50. ScottSeidman No potrzeba mnożenia, jeśli jeden ma po prostu każdy etap FIR albo wyprowadza średnio wejście na ten etap i jego poprzednią zapisaną wartość, a następnie zapisuje dane wejściowe, jeśli ma zakres numeryczny, można użyć sumy zamiast średniej Czy to s lepiej niż filtr pola zależy od aplikacji odpowiedzi krokowej filtru pudełkowego z całkowitym opóźnieniem 1ms, na przykład będzie miał paskudny d2 dt skok gdy zmiana wejściowa, a znów 1ms później, ale będzie miał minimum możliwe d dt dla filtra z całkowitym opóźnieniem 1ms supercat 29 sierpnia w wieku 15 25. Jak mikeselectricstuff powiedział, jeśli naprawdę potrzebujesz zmniejszyć zapotrzebowanie na pamięć i nie pamiętasz odpowiedzi impulsowej jako wykładniczej zamiast prostokątnego impulsu, ja pójdzie na wykładniczy ruch Filtr gniewu Używam ich w znacznym stopniu Z tego typu filtrem, nie potrzebujesz żadnego buforu Nie musisz przechowywać N próbek z przeszłości Tylko jeden Tak, wymagania pamięci zostały obniżone przez czynnik N. Ponadto nie potrzebujesz żadnych podział na to Tylko multiplikacje Jeśli masz dostęp do arytmetyki zmiennoprzecinkowej, użyj multiplikacji zmiennoprzecinkowych Jeśli nie, wykonaj multiplikacje całkowite i przesunięcia w prawo Jednak jesteśmy w 2017 roku i polecam użycie kompilatorów i MCU, które pozwalają do pracy z numerami zmiennoprzecinkowymi. Poza tym, że pamięć jest wydajniejsza i szybsza, nie musisz aktualizować elementów w dowolnym okrągłym buforze, chciałbym powiedzieć, że jest to również naturalne, ponieważ wykładnicza odpowiedź impulsowa lepiej pasuje do charakteru zachowań, w większości przypadków. Pozdrowienie z 20 kwietnia 12 w 9 59. Jedna kwestia z filtrem IIR prawie dotkniętych przez olin i supercat, ale najwyraźniej zignorowane przez innych jest to, że zaokrąglanie wprowadza pewne nieprawidłowości i potencjalnie stronniczość truncation przy założeniu, że N i sa moc dwóch i tylko używana jest arytmetyka całkowita, prawo przesunięcia systematycznie eliminuje LSB nowej próbki Oznacza to, że jak długo seria mogłaby być, średnia nigdy ich nie uwzględnie. Na przykład załóżmy, że powoli zmniejszając serie 8,8,8 8,7,7,7 7,6,6, a zakładając, że średnia jest rzeczywiście 8 na początku Pięść 7 próbki przyniesie średnio 7, niezależnie od siły filtra Tylko dla jednej próbki Same historia dla 6, itd. Teraz myśl o tym, że odwrotnie serie idzie w górę Średnia pozostanie na 7 na zawsze, dopóki próbka nie jest wystarczająco duża, aby to zmienić. Oczywiście, możesz skorygować za stronniczość, dodając 1 2 N 2, ale że tak naprawdę rozwiązać precyzyjny problem, w tym przypadku malejące serie pozostaną na zawsze na 8, aż próbka wynosi 8-1 2 N 2 Na przykład dla N 4 każda próba powyżej zera będzie utrzymywać średnią niezmienioną. Uważam, że rozwiązanie dla co mogłoby oznaczać posiadanie akumulatora utraconych LSB Ale nie zrobiłem tego na tyle, by mieć gotowy kod, i nie jestem pewien, czy nie zaszkodziłoby to mocy IIR w innych przypadkach serii, na przykład 7,9, 7, 9, 9 średnio na 8 wtedy. Olin, twoja dwustopniowa kaskada również potrzebuje wyjaśnienia Czy chodzi o trzymanie dwóch średnich wartości w wyniku pierwszego podania do drugiej w każdej iteracji Co to jest zaletą tego. Mam 4000 danych ilościowych czas i Tring do obliczania średniej ruchomej dla wszystkich wartości danych, ale ponieważ średnia ruchoma jest oparta na poprzednich danych i nie można obliczyć 15-dniowej SMA przez pierwsze 14 dni, należy pominąć pierwsze 14 dni i obliczyć SMA na pozostałej części danych I to musi być przy użyciu LINQ do osiągnięcia Czy ktoś może podać próbki lub podpowiedź, jak używać LINQ do obliczania średniej ruchomej Wyjście dla średnich wartości to około 500 si naprawdę nie rozumiem, jak to jest możliwe, aby uzyskać tę wysoką wartość. Przeniesienie średniej z sumą tablicową 06 07 2017 562 49 571 72.06 08 2017 565 84 580 32.06 11 2017 568 56 571 17.06 12 2017 569 55 576 16.06 13 2017 570 56 572 16.06 14 2017 570 63 571 53.06 15 2017 571 21 574 13.06 18 2017 572 78 585 78.06 19 2017 573 79 587 41.06 20 2017 574 23 585 74.06 21 2017 574 22 577 67.06 22 2017 575 63 582 10.06 25 2017 576 06 570 77.06 26 2017 576 68 572 03.06 27 2017 576 88 574 50.06 28 2017 576 7 569 05.06 29 2017 576 95 584 00.07 02 2017 578 37 592 52.07 03 2017 579 92 599 41.07 03 2017 581 74 599 41. Nadawca Leemx Piątek, 16 listopada 2017 2 59 AM. Moved by Lisa Zhu Pracownik warunkowy Microsoftu poniedziałek, 19 listopada 2017 7 38 Wizyty linq Z Visual C General. Piątek, 16 listopada 2017 2 42 AM. Aby utworzyć średnią ruchomej, zacznę od utworzenia zakresu od 0 do długości listy danych - długości okresu przemieszczania, a następnie dla każdej z wartości w przedziale wybierz elementy x do x długość ruchomy okres i obliczyć average. All w jednej ładne oświadczenie LINQ. Zauważyć, że nie jest to bardzo wydajne, ponieważ w zasadzie iteracyjne nad listą danych dla każdej wartości w zakresie. Hey, look To system pozwala na podpisy więcej niż 60 cha. Edytowane przez Arno Brouwer Piątek, Listopad 23, 2017 4 42 PM. Oznaczone jako odpowiedź Alexander Sun Friday, Decembe r 07, 2017 2 44 AM. Friday, 23 listopada 2017 4 41 PM. All replies. Aplikacja instrukcji LINQ by pomogła. Premature optimization jest źródłem wszystkich zła - Knuth. To tworzy średnią ruchomą, chciałbym zacząć przez utworzenie zakresu od 0 do długości listy danych - długości okresu ruchomości, a następnie dla każdej wartości z zakresu wybierz elementy x do x długość okresu przemieszczania i oblicz średnią. Wszystko w jednej ładnej deklaracji LINQ. Uważ, że nie jest to bardzo wydajny, ponieważ w zasadzie przeszukiwasz listę danych dla każdej wartości w zakresie. Hey, look System ten pozwala na podpisy ponad 60 cha. Edited by Arno Brouwer Piątek, Listopad 23, 2017 4 42 PM. Marked jako odpowiedź przez Alexander Niedziela, 07 grudnia 2017 2 44. czwartek, 23 listopada 2017 4 41 PM. Microsoft przeprowadza ankietę online w celu zrozumienia swojej opinii na temat witryny sieci Web Msdn. Jeśli zdecydujesz się na udział w ankiecie, zostanie wyświetlona ankieta online po opuszczeniu witryny sieci Web Msdn. Chcesz wziąć udział w tym programie. Pomóż nam poprawić M SDN. Zobacz naszą stronę UserVoice, aby przesłać i głosować na temat pomysłów. W centrum porad. Zasoby edukacyjne.

No comments:

Post a Comment