Moving average vs convolution
29 września 2017 r. Średnia ruchoma przez splot Co oznacza średnia ruchoma i co jest dobre dla Jak przeprowadzić uśrednianie wykonywane przy użyciu splotu? Średnia ruchoma to prosta operacja używana zwykle do tłumienia szumu sygnału: ustawiamy wartość każdego punktu na średnia wartości w okolicy. Według wzoru: Tutaj x jest wejściem, a y jest sygnałem wyjściowym, podczas gdy rozmiar okna jest w, ma być nieparzysty. Powyższa formuła opisuje operację symetryczną: próbki są pobierane z obu stron rzeczywistego punktu. Poniżej jest prawdziwy przykład życia. Punkt, na którym jest okno jest rzeczywiście czerwony. Wartości poza x mają być zerami: bawić się i zobaczyć efekty średniej ruchomej, spójrz na tę interaktywną demonstrację. Jak to zrobić przez splot Jak zauważyłeś, obliczanie prostej średniej ruchomej jest podobne do splotu: w obu przypadkach okno jest przesuwane wzdłuż sygnału, a elementy w oknie są podsumowane. Więc spróbuj tego zrobić, używając splotu. Użyj następujących parametrów: pożądane wyjście to: jako pierwsze podejście, spróbujmy to, co otrzymamy przez przekonanie sygnału x przez następujące k kernel: Wyjście jest dokładnie trzy razy większe niż oczekiwano. Można również zauważyć, że wartością wyjściową są podsumowanie trzech elementów w oknie. To dlatego, że podczas splotowania okna przesuwają się wzdłuż, wszystkie elementy są pomnożone przez jeden, a następnie podsumowane: yk 1 cdot x 1 cdot x 1 cdot x Aby uzyskać pożądane wartości y. wynik zostanie podzielony przez 3: przez wzór obejmujący podział: ale czy nie byłoby to optymalne do podziału podczas splotu Oto pomysł polegający na przekształceniu równania: użyjemy więc następującego jądra: w ten sposób będziemy uzyskać pożądane wyjście: Ogólnie: jeśli chcemy zrobić średnią ruchomej przez splot o wielkości okna w. posłużymy się następującym jądrem: prostą funkcją roboczą średniej ruchomej jest: Przykładem użycia jest: Podręcznik Naukowca i Inżynierowie do Przetwarzania Danych Cyfrowych 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. Tabela 15-1 przedstawia program do realizacji średniej ruchomych filtrów. Ś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. Wypróbuj teraz. Użyj MATLAB, w jaki sposób mogę znaleźć 3-dniową średnią ruchu konkretnej kolumny matrycy i dodać średnią ruchomą do tej matrycy staram się obliczyć 3-dniową średnią ruchu od dołu do góry matrycy. Mam podany mój kod: Biorąc pod uwagę następujące macierzy a i maski: próbowałem wykonania komendy conv, ale otrzymuję błąd. Oto komenda conv, którą próbowałem użyć w drugiej kolumnie macierzy a: Wyjście I pragnienie jest podane w następującej matrycy: Jeśli masz jakieś sugestie, bardzo bym to docenił. Dziękuję W kolumnie 2 matrycy a, obliczam średnią ruchu trzydniowego w następujący sposób i umieszczając wynik w kolumnie 4 matrycy a (zmieniłam nazwę matrycy jako 39desiredOutput39 tylko dla ilustracji). Średnia 3-dniowa z 17, 14, 11 wynosi 14, 3-dniowa średnia z 14, 11, 8 jest 11, 3-dniowa średnia z 11, 8, 5 jest równa 8, a średnia 3-dniowa z 8, 2 to 5. W czwartej kolumnie nie ma wartości w dolnych dwóch wierszach, ponieważ obliczanie dla 3-dniowej średniej ruchomej zaczyna się od dołu. Wyjście 39valid39 nie będzie wyświetlane do co najmniej 17, 14 i 11. Mamy nadzieję, że to ma sens ndash Aaron 12 czerwca 13 w 1:28 Ogólnie pomogłoby, gdybyś wykazał błąd. W tym przypadku robisz dwie rzeczy niewłaściwie: najpierw trzeba podzielić rozdzielczość na trzy (lub długość średniej ruchomej). Zauważ rozmiar c. Nie możesz po prostu zmieścić się w c. Typowym sposobem na uzyskanie średniej ruchomej byłoby użycie tego samego: ale to nie wygląda tak, jak chcesz. Zamiast tego zmuszeni są używać kilku wierszy:
Comments
Post a Comment