Funkcja moving average filtr matlab
Pobierz plik movAv. m (zobacz także movAv2 - zaktualizowana wersja umożliwiająca ważenie) Opis Matlab zawiera funkcje movavg i tsmovavg (średnia ruchoma serii czasowej) w programie Financial Toolbox, a program movAv ma na celu skopiowanie podstawowych funkcji tych plików. Kod tutaj zapewnia dobry przykład zarządzania indeksami wewnątrz pętli, które mogą być mylące na początek. Ive celowo przechowywać kod krótkie i proste, aby zachować ten proces jasne. movAv wykonuje prostą średnią ruchową, która może być wykorzystywana do odzyskiwania hałaśliwych danych w niektórych sytuacjach. Działa, przyjmując średnią wejścia (y) w oknie czasu przesuwu, którego wielkość jest określona przez n. Im większy n, tym większa jest ilość efektu wygładzania efektu n względem długości wektora wejściowego y. i skutecznie (dobrze, sortuje) tworzy filtr częstotliwości dolnoprzepustowej - patrz sekcja przykłady i rozważania. Ponieważ ilość wygładzania zapewniona przez każdą wartość n jest względna względem długości wektora wejściowego, zawsze warto testować różne wartości, aby zobaczyć, co jest właściwe. Pamiętaj również, że n punktów są tracone po każdej średniej, jeśli n wynosi 100, pierwsze 99 punktów wektora wejściowego nie zawiera wystarczających danych dla średniej wartości 100pt. Można to uniknąć poprzez ułożenie średnich, na przykład poniższy kod i wykres porównują różne średnie okna długości. Zauważ, że płynność 1010pt jest porównywana z pojedynczą średnią 20pt. W obu przypadkach 20 punktów danych są tracone w całości. Utwórz xaxis x1: 0.01: 5 Wygeneruj hałas hałasuReps 4 reprezacja szumu (randn (1, stłum. (Numel (x) noiseReps)), noiseReps, 1) zmiana szumu (hałas, hałas 1, hałas) Odtworzenie hałasu ydata yexp x) 10noise (1: długość (x)) Średnie perfrom: y2 movAv (y, 10) 10 pkt y3 movAv (y2, 10) 1010 pkt y4 movAv (y, 20) 20 pkt y5 movAv (y, 40) 40 pkt y6 movAv (y, 100) 100 pkt Opis wykresu wykresu (x, y, y2, y3, y4, y5, y6) (dane surowe, średnia ruchoma 10pt, 1010pt, 20pt, 40pt, 100pt) xlabel (x) ylabel y) tytuł (porównanie średnich kroczących) movAv. m kod biegu wyjściowego wyjście movAv (y, n) Pierwsza linia definiuje nazwy funkcji, wejścia i wyjścia. Wejście x powinno być wektorem danych do wykonywania średniej na, n powinno być liczbą punktów do wykonywania średniej nad wyjściem będzie zawierać uśrednione dane zwracane przez funkcję. Prealokacja wyjścia wyjściowegoNaN (1, numel (y)) Znajdź punkt środkowy n midPoint round (n2) Główna praca funkcji jest wykonywana w pętli for, ale zanim rozpoczniesz dwie rzeczy. Po pierwsze, wyjście jest wstępnie alokowane jako NaN, to służyło dwóm celom. Po pierwsze, prealokacja jest ogólnie dobrą praktyką, ponieważ zmniejsza żonglowanie pamięci, co Matlab musi zrobić, po drugie, bardzo łatwo umieścić uśrednione dane jako wyjściowe w takim samym rozmiarze, jak wektora wejściowego. Oznacza to, że ten sam xaxis może być używany później dla obu, co jest wygodne do spisu, alternatywnie NaN można usunąć później w jednej linii kodu (wyjście wyjściowe (Zmienna midPoint będzie używana do wyrównywania danych wektora wyjściowego. n 10, 10 punktów zostanie utracone, ponieważ w pierwszych 9 punktach wektora wejściowego nie ma wystarczająco dużo danych, aby uzyskać średnią z 10 punktów. Jak wyjście będzie krótsze niż wejście, to musi być wyrównane prawidłowo. należy użyć tak, aby na początku i na końcu była zgubna ilość danych na początku i na końcu, a dane wejściowe są ustawione w linii z wyjściami buforów NaN utworzonych podczas wstępnego przypisywania danych wyjściowych dla długości 1: y (y) - n over (a: b) ban Oblicz średnie wyjście (amidPoint) mean (y (a: b)) end W samej pętli for, średnia jest przejęta przez każdy kolejny segment wejścia. Pętla będzie działać na a. zdefiniowane jako 1 do długości wejścia (y), minus dane, które zostaną utracone (n).Jeżeli wejście jest równe 100 punktom ng i n wynosi 10, pętla będzie działać z (a) od 1 do 90. Oznacza to, że pierwszy indeks segmentu ma być uśredniony. Drugi indeks (b) jest po prostu-1. Więc na pierwszej iteracji, a1. n10. więc b 11-1 10. Pierwsza średnia przejęła y (a: b). lub x (1:10). Średnia tego segmentu, która jest pojedynczą wartością, jest przechowywana na wyjściu w indeksie amidPoint. lub 156. Podczas drugiej iteracji, a2. b 210-1 11. więc średnia jest przejęta przez x (2:11) i zapisana na wyjściu (7). Przy ostatniej iteracji pętli dla wejścia o długości 100, a91. b 9010-1 100, więc średnia jest przejęta przez x (91: 100) i zapisana na wyjściu (95). Pozostawia to wyjście z wartością n (10) NaN w indeksie (1: 5) i (96: 100). Przykłady i rozważania Poruszanie się średnimi jest przydatne w niektórych sytuacjach, ale nie zawsze jest najlepszym wyborem. Oto dwa przykłady, w których niekoniecznie są one optymalne. Kalibracja mikrofonu Zestaw danych reprezentuje poziomy każdej częstotliwości generowanej przez głośnik i zarejestrowany przez mikrofon o znanej liniowej odpowiedzi. Wyjście głośnika zmienia się z częstotliwością, ale możemy poprawić tę zmianę za pomocą danych kalibracji - wyjście może być regulowane na poziomie w celu uwzględnienia fluktuacji kalibracji. Zwróć uwagę, że surowe dane są hałaśliwe - oznacza to, że niewielka zmiana częstotliwości wydaje się wymagać dużego, niepoprawnego, zmian poziomu w celu uwzględnienia. Czy jest to realistyczne Lub czy jest to produkt środowiska zapisu W tym przypadku rozsądne jest zastosowanie średniej ruchomej, która wygładzi krzywą poziomu, aby uzyskać krzywą kalibracji, która jest nieco mniej nieregularna. Ale dlaczego nie jest to optymalne w tym przykładzie? Więcej danych byłoby lepiej - wielokrotne kalibracje uśrednione razem zniszczą hałas w systemie (tak długo, jak jego losowo) i zapewniają krzywiznę z mniej subtelnym szczegółem utracone. Średnia ruchoma może tylko przybliżać tę sytuację i może usunąć niektóre z wyższych częstotliwości i szczytów z krzywej, która naprawdę istnieje. Sine waves Wykorzystanie średniej ruchomej na falach sinusoidalnych podkreśla dwa punkty: Ogólny problem polegający na wybraniu rozsądnej liczby punktów do osiągnięcia średniej. To proste, ale istnieją skuteczniejsze metody analizy sygnału niż uśrednione sygnały oscylacyjne w dziedzinie czasowej. Na tym wykresie pierwsza fala sinusoidy jest wykreślana na niebiesko. Hałas jest dodawany i wykreślany jako krzywa pomarańczowa. Średnia ruchoma jest wykonywana w różnych punktach, aby sprawdzić, czy oryginalna fala może zostać odzyskana. 5 i 10 punktów daje rozsądne wyniki, ale nie usuwaj całkowicie szumu, gdzie coraz większe punkty zaczynają tracić szczegóły amplitudy, gdy średnia rozciąga się na różnych fazach (pamiętaj, że fala oscyluje wokół zera, a średnia -1) Alternatywnym podejściem byłoby zbudowanie filtra dolnoprzepustowego niż można go zastosować do sygnału w dziedzinie częstotliwości. Nie będę wchodzić w szczegóły, ponieważ wykraczało poza zakres tego artykułu, ale ponieważ szum jest znacznie wyższy niż częstotliwość podstawowa fal, byłoby w tym przypadku dość łatwo utworzyć filtr dolnoprzepustowy niż usunie wysoką częstotliwość noise. Created w środę, 08 października 2008 20:04 Zaktualizowano w czwartek, 14 marca 2017 01:29 Napisane przez Batuhan Osmanoglu Liczba wyświetleń: 41486 Przeprowadzka Średnia W programie Matlab Często znajduję się w potrzebie uśredniania danych muszę zmniejszyć hałas troszkę. Napisałem kilka funkcji, aby dokładnie to, czego chcę, ale matlab wbudowane w funkcję filtra działa całkiem nieźle. Tu napisać o uśrednieniu danych 1D i 2D. Filtr 1D może być realizowany przy użyciu funkcji filtra. Funkcja filtrująca wymaga co najmniej trzech parametrów wejściowych: współczynnika licznika dla filtra (b), współczynnika mianownika filtra (a) oraz oczywiście oczywiście danych (X). Filtr średniej prędkości można zdefiniować po prostu: W przypadku danych 2D możemy użyć funkcji filtru Matlabs2. Aby uzyskać więcej informacji na temat działania filtru, wpisz: Oto szybka i brudna implementacja filtru średniego 16 na 16. Najpierw musimy zdefiniować filtr. Ponieważ chcemy tylko równego udziału wszystkich sąsiadów, możemy użyć tych funkcji. Dzielimy wszystko 256 (1616), ponieważ nie chcemy zmieniać ogólnego poziomu (amplitudy) sygnału. Aby zastosować filtr, po prostu powiedzmy, że poniżej Poniżej przedstawiono wyniki fazy interferogramu SAR. W tym przypadku zakres znajduje się w osi Y a azymut jest odwzorowywany na osi X. Filtr miał szerokość 4 pikseli w zakresie i 16 pikseli szerokości w Azimuth. Jestem próbuje zakończyć projekt przydziału matlab z następującym pytaniem: Napisz funkcję zwaną movingaverage, która ma skalar o nazwie x jako argument wejściowy i zwraca skalar. Funkcja wykorzystuje bufor do przechowywania poprzednich wejść, a bufor może przechowywać maksymalnie 25 wejść. W szczególności funkcja musi zapisać ostatnie 25 wejść wektora (bufor). Za każdym razem, gdy wywołana jest funkcja, kopiuje argument wejściowy do elementu bufora. Jeśli w buforze jest już 25 wejść, to odrzuca najstarszy element i zapisuje bieżący w buforze. Po zapisaniu danych wejściowych w buforze zwraca średnią wszystkich elementów w buforze. Rozwiązanie, które podaję, jest następujące: Zgodnie z autopoziomarką moja funkcja działa prawidłowo, gdy wartości 1-50 przechodzą kolejno, ale kończą się niepowodzeniem, gdy kolejne hałasy sine przebiegają kolejno (co zostało poinformowane, że może to być spowodowane niektórymi rodzaj błędu okrągły). Byłbym wdzięczny, jeśli którykolwiek z was mógłby podać kilka wskazówek dotyczących ewentualnych kroków błędu w moim kodzie (dołączony powyżej). Dziękuję z wyprzedzeniemMoving Średnia funkcja resultmovingmean (dane, okno, dim, opcja) oblicza środkową średnią ruchliwą danych macierzy danych przy użyciu rozmiaru okna określonego w oknie w wymiarze dim, używając algorytmu określonego w opcji. Dim i opcja są opcjonalnymi wejściami i domyślnie 1. Dim i opcjonalne opcjonalne wejścia mogą być pomijane w całości lub można je zastąpić a. Na przykład movmean (data, window) daje te same wyniki co movingmean (data, window, 1,1) lub movingmean (data, window, 1). Wielkość i rozmiar macierzy danych wejściowych jest ograniczona tylko przez maksymalny rozmiar macierzy dla platformy. Okno musi być liczbą całkowitą i powinno być nieparzyste. Jeśli okno jest nawet wtedy, zaokrąglane jest do następnej niższej liczby nieparzystej. Funkcja oblicza średnią ruchomą zawierającą punkt środkowy i (okno-1) 2 elementy przed i po w określonym wymiarze. Na krawędziach matrycy liczba elementów przed lub po, jest zmniejszona tak, że rzeczywisty rozmiar okna jest mniejszy niż podane okno. Funkcja jest podzielona na dwie części, algorytm 1d-2d i algorytm 3d. Dokonano tego w celu optymalizacji prędkości rozwiązania, zwłaszcza w mniejszych matrycach (tj. 1000 x 1). Ponadto, dostarczane są różne algorytmy dla problemu 1d-2d i 3d, ponieważ w niektórych przypadkach domyślny algorytm nie jest najszybszy. Dzieje się tak zazwyczaj, gdy matryca jest bardzo szeroka (tj. 100 x 100000 lub 10 x 1000 x 1000), a średnia ruchoma jest obliczana w krótszym wymiarze. Rozmiar, w którym domyślny algorytm jest wolniejszy zależy od komputera. MATLAB 7.8 (R2009a) Tagi tego pliku Proszę się zalogować, aby oznaczyć pliki. Zaloguj się, aby dodać komentarz lub ocenę. Komentarze i oceny (8) Funkcja odnosi się do końców, przyciskając końcową lub prowadzącą część okna i przechodząc do głównej lub końcowej średniej ruchomej, zamiast centrowanej. Aby przejść do przykładu podanego w komentarzu, jeśli rozmiar okna wynosi 3, to w środku 1 funkcja średnia danych z punktów 1 i 2 w centrum 2 punkty 1, 2 i 3 jest uśredniona w środku 9 punkty 8, 9 i 10 są uśrednione i znajdują się w centrum 10 (weźmy pod uwagę, że wektor zawiera 10 pozycji) punkty 9 i 10 są uśrednione. Jak porusza się z końcami Czy zaczyna się od rozmiaru okna obejmującego tylko punkt 1 w punkcie 1, a następnie 3 punkty w punkcie 2, a następnie zwiększenie rozmiaru okna, dopóki rozmiar okna nie jest określony na wejściu funkcji. Dzięki. Ładne i proste. Dziękuję Ci. Dobra robota Bardzo użyteczne, jak powiedział Stephan Wolf. To, na co patrzyłem. Wyśrodkowana średnia ruchoma, która może pracować na działce na całej szerokości, bez potrzeby szukać rozmiaru okna filtra i przesuwania początku. Wielka Przyspieszenie tempa inżynierii i nauki MathWorks jest wiodącym deweloperem matematycznego oprogramowania komputerowego dla inżynierów i naukowców.
Comments
Post a Comment