Monday 6 November 2017

Przeprowadzanie średnio filtrowania


Średnia ruchoma jako filtr Średnia ruchomość jest często wykorzystywana do wygładzania danych w obecności hałasu. 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 pozwala na porównanie go z, na przykład, filtrami windowed-sinc (zob. Artykuły dotyczące filtrów górnoprzepustowych i filtrów pasmowo-odbijających pasek na przykład). Główną różnicą tych filtrów jest to, że średnia ruchoma jest odpowiednia dla sygnałów, dla których przydatne informacje są zawarte w domenie czasowej. z których pomiary wygładzania są uśrednione. Z drugiej strony filtry Windowed-sinc są silnymi wykonawcami w dziedzinie częstotliwości. z wyrównaniem w przetwarzaniu dźwięku jako typowy przykład. Dokładniejsze porównanie obu typów filtrów w domenach czasowych a skuteczność filtrów w domenie częstotliwości. Jeśli masz dane, dla których ważne jest zarówno czas, jak i częstotliwość, możesz zajrzeć do Wariacje na temat Ruchowej Średniej. który przedstawia kilka ważonych wersji ruchomych średnich, które są lepsze w tym. Ruchome średnie długości (N) można zdefiniować tak, jak zazwyczaj jest to możliwe, przy czym aktualna próbka wyjściowa jest średnią z poprzednich (N) próbek. Widoczne jako filtr, średnia ruchoma powoduje splot sekwencji wejściowej (xn) z prostokątnym impulsem o długości (N) i wysokości (1N) (w celu uzyskania obszaru impulsu, a tym samym wzmocnienia filtra , jeden). W praktyce najlepiej jest podjąć (N) nieparzyste. Mimo, że ś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 (N) próbki są dokładnie ((N-1) 2). Średnia ruchoma może być wyrównana dokładnie do oryginalnych danych, przesuwając ją przez liczbę całkowitą próbek. Domena czasu Ponieważ średnia ruchoma jest splotem z prostokątnym impulsem, jej odpowiedź częstotliwościowa jest funkcją sinc. To sprawia, że ​​coś takiego jak podwójny filtr windowed-sinc, ponieważ jest to splot z impemem sinc, który powoduje prostokątną odpowiedź częstotliwościową. To pasuje do odpowiedzi częstotliwościowej, która powoduje, że średnia ruchoma jest słabą wartością w dziedzinie częstotliwości. Jednak w dziedzinie czasu działa bardzo dobrze. Dlatego doskonale nadaje się do wygładzania danych w celu usunięcia zakłóceń, przy jednoczesnym zachowaniu szybkiej reakcji krokowej (rysunek 1). Dla typowego, dodatniego białego szumu Gaussa (AWGN), który często zakłada się, próbki uśredniające (N) skutkują zwiększeniem współczynnika SNR o współczynnik (sqrt N). Ponieważ hałas poszczególnych próbek nie jest ze sobą związany, nie ma powodu, aby traktować każdą próbkę inaczej. W związku z tym średnia ruchoma, która daje każdą próbkę tej samej masie, pozbędzie się maksymalnej ilości hałasu dla danej ostrości odpowiedzi na etapie. Wdrożenie Ponieważ jest to filtr FIR, średnia ruchoma może być realizowana przez splot. Będzie wtedy miał taką samą wydajność (lub jej brak), jak każdy inny filtr FIR. Jednakże, może on być również realizowany rekursywnie, w bardzo skuteczny sposób. Wynika to bezpośrednio z definicji, że ta formuła jest wynikiem wyrażeń dla (yn) i (yn1), tj. Gdy zauważymy, że zmiana pomiędzy (yn1) i (yn) polega na tym, że dodatkowy termin (xn1N) pojawia się na koniec, a termin (xn-N1N) jest usuwany od początku. W praktycznych zastosowaniach często można pominąć podział przez (N) dla każdego terminu, kompensując uzyskane zysk (N) w innym miejscu. Ta rekursywna implementacja będzie znacznie szybsza niż konwertowanie. Każda nowa wartość (y) może być obliczona z tylko dwoma dodatkami, zamiast dodawania (N), które byłyby konieczne do prostej implementacji definicji. Jedną rzeczą, na którą trzeba zwrócić uwagę na rekursywną implementację, są błędy zaokrąglania. Może to być problem z aplikacją, ale sugeruje również, że ta implementacja rekurencyjna będzie działać lepiej w przypadku implementacji całkowitej niż w przypadku liczb zmiennoprzecinkowych. Jest to dość niezwykła, ponieważ implementacja zmiennoprzecinkowa jest zwykle prostsza. Koniec z tym wszystkim musi polegać na tym, że nigdy nie należy lekceważyć użyteczności prostej średniej ruchomości filtra w aplikacjach przetwarzania sygnału. Narzędzie do projektowania filtrów Ten artykuł jest uzupełniony o narzędzie do projektowania filtrów. Eksperymentuj z różnymi wartościami dla (N) i wizualizuj otrzymane filtry. Spróbuj tego teraz Wiem, że to możliwe dzięki zwiększeniu: Ale naprawdę chciałbym uniknąć używania boostera. Mam googled i nie znaleziono żadnych odpowiednich lub czytelnych przykładów. Zasadniczo chcę śledzić ruchomą średnią ciągłego strumienia strumienia liczb zmiennoprzecinkowych przy użyciu najnowszych 1000 numerów jako próbki danych. Jaki jest najłatwiejszy sposób na to, 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. zapytał 12 czerwca 12 w 4:38 Jeśli Twoje potrzeby są proste, możesz spróbować użyć wykładniczej średniej ruchomej. Po prostu wprowadzasz zmienną akumulatora, a kod wygląda na każdą próbkę, kod aktualizuje akumulator o nową wartość. Wybierasz stałą wartość alfa, która wynosi od 0 do 1, i oblicz ją: Wystarczy, że znajdziesz wartość alfa, w której efekt danej próbki trwa tylko około 1000 próbek. Hmm, nie jestem pewien, że to jest dla ciebie odpowiednie, teraz, że to tutaj. Problem polega na tym, że 1000 jest dość długie okno dla wykładniczej średniej ruchomej Im nie wiesz, że istnieje alfa, która rozprzestrzenia się średnią w ciągu ostatnich 1000 numerów, bez underflow w obliczaniu zmiennoprzecinkowych. Ale jeśli chcesz mieć mniejsze średnie, jak 30 liczb, jest to bardzo łatwy i szybki sposób na to. odpowiedziało cze 12 12 w 4:44 1 na Twoim stanowisku. Wyższa średnia ruchoma może pozwolić na zmienną alfa. Pozwala to na obliczanie średnich baz czasu (na przykład bajtów na sekundę). Jeśli czas od ostatniej aktualizacji akumulatora przekracza 1 sekundę, to niech alpha wynosi 1.0. W przeciwnym razie możesz pozwolić alpha be (usecs od ostatniej aktualizacji1000000). ndash jxh Cze 12 12 at 6:21 Zasadniczo chcę śledzić średnią ruchu ciągłego strumienia strumienia liczb zmiennoprzecinkowych przy użyciu najnowszych 1000 numerów jako próbki danych. Należy zauważyć, że poniżej uaktualnia całkowitą wartość jako elementy dodawane, co pozwala uniknąć kosztownego przebiegu O (N) w celu obliczenia sumy potrzebnej na przeciętnie na żądanie. Razem uzyskuje się inny parametr od T do obsługi np. używając długiej długi podczas łączenia 1000 długich s, int dla char s lub double-total float. Jest to nieco błędne, że liczby czcionek mogą przechodzić przez INTMAX - jeśli zależy Ci na długich długach bez podpisu. lub użyj dodatkowego członka danych bool do nagrywania, gdy pojemnik jest najpierw napełniany, podczas cyklicznych numsamples wokół tablicy (najlepiej zamienić coś nieszkodliwego jak pos). odpowiedziało 12 czerwca 12 w 5:19 zakłada się, że operator kwotowania (przykład T) jest w rzeczywistości operatorem cudzysłowów (przykład T). ndash oPless 8 czerwca o godz. 11:52 oPless ahhh. dobrze spotykane. właściwie miałem na myśli operatora void () (przykład T), ale oczywiście można użyć dowolnej notacji, którą lubisz. Naprawdę, dzięki. ndash Tony D Czerwiec 8 14 w 14: 27Inżynierowie i Inżynierowie Przewodnik po przetwarzaniu sygnałów cyfrowych Autor: Steven W. Smith, Ph. D. Jak sama nazwa wskazuje, średni ruchowy filtr działa przez uśrednienie kilku punktów z sygnału wejściowego, aby uzyskać każdy punkt sygnału wyjściowego. W formie równania jest to napisane: Gdzie jest sygnał wejściowy, jest sygnałem wyjściowym, a M jest liczbą punktów przeciętnie. Na przykład w 5-punktowym średnim filtrze, punkt 80 sygnału wyjściowego jest podany przez: Jako alternatywę, grupa punktów z sygnału wejściowego może być wybrana symetrycznie wokół punktu wyjściowego: Odpowiada to zmianie sumy w równaniu . 15-1 z: j0 do M1, do: j - (M-1) 2 do (M-1) 2. Na przykład, w 10-punktowym, średnim filtrze, indeks, j. może działać od 0 do 11 (uśrednianie po jednej stronie) lub od -5 do 5 (symetryczne uśrednianie). Symetryczne uśrednienie wymaga, aby M był nieparzystą liczbą. Programowanie jest nieco łatwiejsze dzięki punktom tylko z jednej strony, co powoduje względną zmianę sygnału wejściowego i wyjściowego. Należy zauważyć, że średni ruchowy filtr jest splotem za pomocą bardzo prostego jądra filtru. Na przykład 5-punktowy filtr ma jądro filtra: 82300, 0, 15, 15, 15, 15, 15, 0, 08230. Oznacza to, że średni ruchowy filtr jest splotem sygnału wejściowego z prostokątnym impulsem mającym obszar jednego. W tabeli 15-1 przedstawiono program do implementacji średniej ruchomej filtru. I istotnie mam tablicę takich wartości: Powyższa tablica jest uproszczona, Im zbiera 1 wartość na milisekundę w moim prawdziwym kodzie i muszę przetworzyć dane wyjściowe na algorytmie Napisałem, aby znaleźć najbliższy szczyt przed punktem czasu. Moja logika nie powiedzie się, bo w moim przykładzie powyżej 0,36 jest prawdziwym szczytem, ​​ale mój algorytm patrzył wstecz i zobaczył ostatnią cyfrę 0,25 jako szczyt, a przed nią spadł do 0,24. Celem jest przyjęcie tych wartości i zastosowanie algorytmu do nich, które sprawi, że będą one bardziej wyrafinowane, więc mam bardziej liniowe wartości. (tj .: Id jak moje wyniki być curvy, a nie jaggedy) Ive powiedziano nam, aby zastosować wykładniczy ruchomy filtr średnich do moich wartości. Jak mogę to zrobić To naprawdę trudne dla mnie do czytania równań matematycznych, ja radzę dużo lepiej z kodu. Jak przetworzyć wartości w mojej tablicy, stosując wykładniczą średnią ruchomą obliczeń, aby je nawet je poprosić 8 lutego w 20:27 Aby obliczyć wykładniczą średnią ruchomą. musisz zachować trochę stanu i potrzebujesz parametru strojenia. To wymaga małej klasy (zakładając, że używasz Javy 5 lub nowszej): natychmiastowe działanie z żądanym parametrem rozkładu (może to odbywać się w zakresie od 0 do 1), a następnie użyj średniej () do filtrowania. Czytając stronę o pewnej matematycznej nawrotności, wszystko, co naprawdę musisz wiedzieć, zmieniając ją w kodzie jest taka, że ​​matematycy lubią zapisywać indeksy w tablicach i sekwencjach z indeksami dolnymi. (Theyve kilka innych notacji, jak również, co doesnt pomocy.) Jednakże, EMA jest dość proste, ponieważ wystarczy pamiętać, że jedna stara wartość nie wymaga skomplikowanych tablic stanów. odpowiedziało lut 8 12 w 20:42 TKKocheran: całkiem dużo. Nie jest to miłe, gdy wszystko może być proste (jeśli zaczynasz nową sekwencją, pobierz nową uśrednioną pamięć). Zauważ, że pierwsze kilka słów w uśrednionej sekwencji przeskoczy trochę z powodu efektów granicznych, ale otrzymasz te z innymi średnimi ruchoma także. Jednak dobrą zaletą jest to, że można zawrzeć średnią ruchliwą logikę w uśredniony i eksperyment bez przeszkadzania reszcie programu za dużo. ndash Donal Fellows 9 lutego 12 w 0:06 Mam trudności ze zrozumieniem twoich pytań, ale mimo to postaram się odpowiedzieć. 1) Jeśli Twój algorytm znalazł 0.25 zamiast 0.36, to jest złe. To źle, ponieważ zakłada monotoniczny wzrost lub spadek (to jest zawsze w górę lub zawsze w dół). Jeśli nie prześledzisz WSZYSTKICH danych, twoje punkty danych --- jak je prezentujesz --- są nieliniowe. Jeśli naprawdę chcesz znaleźć maksymalną wartość między dwoma punktami w czasie, a następnie podziel je z tmin na tmax i znajdź maksimum tej podsieci. 2) Teraz koncepcja przenoszenia średnich jest bardzo prosta: wyobraź sobie, że mam następującą listę: 1,4, 1,5, 1,4, 1,5, 1,5. Mogę to wygładzić, biorąc średnio dwie liczby: 1,45, 1,45, 1,45, 1,5. Zauważ, że pierwsza liczba to średnia 1,5 i 1,4 (druga i pierwsza liczba) druga (nowa lista) to średnia 1,4 i 1,5 (trzecia i druga stara lista) trzecia (nowa lista) średnia 1,5 i 1,4 (czwarta i trzecia), i tak dalej. Mógłbym to zrobić na trzy lub cztery lata, lub n. Zauważ, że dane są dużo płynniejsze. Dobrym sposobem na wyświetlenie średnich ruchów w pracy jest przejście do Google Finance, wybranie zasobów (wypróbuj Tesla Motors volatile (TSLA)) i kliknij Technicals na dole wykresu. Wybierz Moving Average z określonym okresem i Średnia ruchoma wykładnicza, aby porównać ich różnice. Wyższa średnia ruchoma jest kolejnym opracowaniem, ale ważenie starszych danych niższych niż nowe dane jest sposobem na odchylenie wygładzania w kierunku tyłu. Proszę przeczytać wpis Wikipedii. Więc jest to bardziej komentarz niż odpowiedź, ale małe pole komentarza było po prostu małe. Powodzenia. Jeśli masz kłopoty z matematyką, możesz zamiast prostokątnych używać prostej średniej ruchomej. Więc wyjście, które otrzymasz, byłoby ostatnia x wyrażona przez x. Niepoprawna pseudokoda: należy pamiętać, że musisz poradzić sobie z początkiem i końcem części danych, ponieważ jasne jest, że nie można przeanalizować ostatnich 5 terminów, gdy jesteś w Twoim drugim punkcie danych. Istnieją też bardziej efektywne sposoby obliczania tej średniej ruchomej (suma - najstarsze najnowsze), ale jest to pojęcie, co się dzieje. odpowiedziało lut 8 12 w 20:41

No comments:

Post a Comment