Monday 13 November 2017

5 punktowy ruchomy średni filtr matlab


Odpowiedź częstotliwościowa filtra działającej średniej Odpowiedź częstotliwościowa układu LTI to DTFT odpowiedzi impulsu, Odpowiedź impulsowa średniej ruchomej L wynosi Od filtra średniej ruchomej jest FIR, odpowiedź częstotliwościowa zmniejsza się do skończonej sumy We może użyć bardzo użytecznej tożsamości, aby napisać odpowiedź częstotliwościową, tak jak wtedy, gdy zostawiliśmy ae minus jomega. N 0, i M L minus 1. Możemy być zainteresowani wielkością tej funkcji, aby określić, które częstotliwości przechodzą przez filtr, a które są tłumione. Poniżej znajduje się wykres wielkości tej funkcji dla L 4 (czerwony), 8 (zielony) i 16 (niebieski). Oś pozioma zawiera się w zakresie od zera do pi radianów na próbkę. Należy zauważyć, że we wszystkich trzech przypadkach charakterystyka częstotliwościowa ma charakter dolnoprzepustowy. Stały komponent (częstotliwość zerowa) na wejściu przechodzi przez filtr nieskorygowany. Niektóre wyższe częstotliwości, takie jak pi 2, są całkowicie eliminowane przez filtr. Jeśli jednak chodzi o zaprojektowanie filtra dolnoprzepustowego, to nie zrobiliśmy tego zbyt dobrze. Niektóre z wyższych częstotliwości są tłumione tylko o współczynnik około 110 (dla średniej ruchomej 16 punktów) lub 13 (dla czteropunktowej średniej ruchomej). Możemy zrobić o wiele lepiej. Powyższy wykres został utworzony przez następujący kod Matlab: omega 0: pi400: pi H4 (14) (1-exp (-iomega4)). (1-exp (-iomega)) H8 (18) (1-exp (- iomega8)). (1-exp (-iomega)) H16 (116) (1-exp (-iomega16)). (1-exp (-iomega)) wykres (omega, abs (H4) abs (H8) abs ( H16)) oś (0, pi, 0, 1) Copyright copy 2000- - University of California, BerkeleyUsing MATLAB, w jaki sposób mogę znaleźć 3-dniową średnią ruchomą danej kolumny macierzy i dołączyć średnią ruchomą do tej macierzy Próbuję obliczyć 3-dniową średnią ruchomą od dołu do góry matrycy. Dostarczyłem mój kod: Biorąc pod uwagę następujące macierzy a i maski: Próbowałem wykonania polecenia conv, ale otrzymuję błąd. Oto polecenie conv, które próbowałem użyć w drugiej kolumnie macierzy a: Dane wyjściowe, które pragnę, są podane w następującej macierzy: Jeśli masz jakieś sugestie, byłbym bardzo wdzięczny. Dziękuję W kolumnie 2 macierzy a, obliczam 3-dniową średnią ruchomą w następujący sposób i umieszczam wynik w kolumnie 4 macierzy a (zmieniłem nazwę macierzy na 39definiowaną3 tylko dla ilustracji). Średnia z 3 dni to 17, 14, 11 to 14, średnia z 3 dni to 14, 11, 8 to 11, średnia z 3 dni to 11, 8, 5 to 8, a średnia z 3 dni to 8, 5, 2 to 5. Nie ma wartości w dolnych 2 wierszach dla czwartej kolumny, ponieważ obliczenia dla 3-dniowej średniej ruchomej rozpoczynają się od dołu. Wynik 39 invalid39 nie zostanie pokazany przed co najmniej 17, 14 i 11. Mam nadzieję, że to ma sens ndash Aaron Jun 12 13 o 1:28 Ogólnie rzecz biorąc, pomógłbyś, gdybyś pokazał błąd. W tym przypadku robisz dwie rzeczy źle: Najpierw splot musi być podzielony przez trzy (lub długość średniej ruchomej) Po drugie, zwróć uwagę na rozmiar c. Nie możesz po prostu dopasować c do a. Typowym sposobem uzyskania średniej ruchomej byłoby użycie tego samego: ale to nie wygląda tak, jak chcesz. Zamiast tego jesteś zmuszony użyć kilku linii: moveaverage v3.1 (mar 2008) MOVINGAVERAGE (X, F) wygładza dane wektorowe X za pomocą okna wagonu o rozmiarze 2F1, tzn. Poprzez uśrednianie każdego elementu z elementami F przy jego prawa i elementy F po jego lewej stronie. Ekstremalne elementy są również uśrednione, ale oczywiście z mniejszą ilością danych. Pozostawienie krawędzi nienaruszone. Metoda jest naprawdę szybka. MOVINGAVERAGE2 (X, M, N) wygładza macierz X za pomocą okna wagonu towarowego o wymiarach (2M1) x (2N1), tj. Za pomocą uśredniania każdego elementu wraz z otaczającymi go elementami, które mieszczą się w wymienionym pudełku, którego środkiem jest środek. Ten jest również bardzo szybki. Elementy na krawędziach również są uśredniane, ale rogi pozostają nienaruszone. NANMOVINGAVERAGE (X, F) lub NANMOVINGAVERAGE (X, F, 1) akceptują elementy NaN w wektorze X, a te ostatnie interpolują również te elementy NaN otoczone elementami numerycznymi. NANMOVINGAVERAGE2 (X, M, N) lub NANMOVINGAVERAGE2 (X, M, N, 1) akceptują elementy NaN w macierzy X, w której te ostatnie interpoluje również te elementy NaN otoczone elementami numerycznymi. Nowe proste wypełnianie GAP: SMOOTHMAVERAGE (X, M, N, IND) powoduje wyrównanie tylko elementów X (IND). ignorując NaN. To może być użyte do elimante GAPS na twoich danych. Każdy plik M ma swój przykład (patrz zrzut ekranu). Sprawdź poniżej, aby zobaczyć ZMIANY w wersji 3.1. Uwaga: Poszukując dwuwymiarowego kodu z MOVINGAVERAGE2.M (i RUNMEAN dla niektórych wskazówek), ktoś może łatwo stworzyć N-wymiarowy MA. Czy chcesz MATLAB 7.5 (R2007b) MATLAB Search Path Tagi dla tego pliku Proszę się zalogować, aby otagować pliki. Zaloguj się, aby dodać komentarz lub ocenę. Komentarze i oceny (31) Chciałbym otrzymać funkcję średniej ruchomej zajmującej się nanowymi wartościami Carlosa, podoba mi się funkcja moveaverage, bardzo łatwa w użyciu. Mam dane, które mają małe lub duże luki czasowe i nie chcę filtrować przez luki. Mogłabym przełamać wektor przy każdej luce, ale to oznaczałoby pracę. Każda sugestia jak sobie z tym poradzić Bardzo przydatna dla mnie (głównie do plotowania) Szanowni Państwo, Ix27m zajmuje się wypełnianiem luk w pomiarach pogodowych, które NaN powinien wypełniać w oparciu o okno czasowe kilku dni. (Tj. dni). Na przykład jedna wartość NaN o godzinie 17:00 zostanie zastąpiona wartością średnią w sąsiedztwie kilku godzin. (letx27s mówią 4, 5 i 6pm sąsiedztwa 5 dni) Oto kość pytań, z którymi lubię sobie radzić: wartości rand (1,1000) x27 fakeNaN floor (rand (1300) x271000) wartości (fakeNaN) NaN for i 1 : długość (wartości) n 24 i (1: 5) mająca indeks ninindex (isnan (wartości)) nowa wartość nanmean (wartości (havingnanindex n-1: havingnanindexn1)):: Coś takiego:: Jeśli masz jakieś rozwiązania lub porady, proszę proszę dać mi znać. Dzięki, Michael hi Carlos, wysłałem Ci e-mail o trudnościach w programowaniu rekursywnego, ruchomego pokrycia, masz jakieś pojęcie o tym problemie, proszę, dziękuję z góry, Edgar Guevara Codina Itx27s odpowiednie porprocessing sygnałów spektroskopowych, całkiem użyteczne. Carlos Adrian Vargas Aguilera Common Aslak, szukasz FLEAS zamiast BŁĘDÓW. Ale, ok, UŻYTKOWNICY: UPRZEJMUJ OUTLIERS i DUŻYCH ŚRODKÓW przy użyciu metody CUMSUM runmean Raczej użyj: NDNANFILTER :) Cześć Carlos. Miałem na myśli to jako konstruktywną krytykę. Chodzi o to, że błąd jest niepotrzebny, łatwy do uniknięcia i nie ma przewagi prędkości. Masz rację, że w tym konkretnym przypadku błąd nie jest zbyt duży (chociaż popełniasz błąd polegający na porównaniu go ze średnią, a nie ze standardowym odchyleniem). Jednak tylko dlatego, że błąd w tym przypadku jest mały, nie oznacza, że ​​dotyczy on wszystkich serii. Spróbuj na przykład: m3 n100000 xrandn (n, 1) x (1) 1e100 Problem polega na tym, że odchylenie powoduje ogromne błędy w całej wygładzonej serii, a nie tylko w oknie. Zapomniałem oceny dla przykładu Aslakx27s (1 gwiazdka): porównuje błędy dokładności 1e-90.000000001 i 1e-13 eps. Tak, 10 000 razy więcej, ale dla wartości z 1000 średniej, która jest 1x27000 000x27000 000 większa niż większy błąd. To świetny mały błąd isnx27t it Nice code, ale. Metoda obliczania średnich kroczących może spowodować nieoczekiwanie duże błędy w określonych warunkach: Średnia jest bardzo różna od zera, a seria jest bardzo długa. Herex27s mały test ilustrujący problem za pomocą 3 różnych metod obliczania średniej ruchomej. Pokazuje on, że metoda x27cumsumx27 ma błędy, które są ponad 10000 razy większe niż błędy z metody filtru. Nie ma rzeczywistej różnicy prędkości. m10 n300000 xrandn (n, 1) 1000 pomyśl np. o ciśnieniu atmosferycznym. tic snan (długość (x) - m1,1) dla ii1: długość (y) s (ii) średnia (x (ii (0: m-1))) koniec slowtimetoc tic c0cumsum (x) c (c (m1: koniec) - c (1: koniec-m)) m cumsumtimetoc cumsumerrorsqrt (średnia ((cs) .2)) tic fltones (m, 1) m ffilter2 (flt, x, x27validx27) filtertimetoc filtererrorsqrt (średnia ((fs). 2)) slowtime 9.4732 cumsumtime 0.041549 cumsumerror 2.6456e-009 czas filtru 0.033685 filtererror 1.4151e-013 Dobrze skomentowane Sprawdź numery IO i błędy wektoryzowane szybko Carlos Adrin Vargas Aguilera Znalazłem nieszkodliwy błąd na MOVINGAVERAGE, linia 75: dodatkowy przecinek w ostrzeżeniu ja RK: W rzeczywistości są to ograniczenia tej średniej ruchomej, ale problem z krawędziami jest powszechny w teorii filtrowania. Autor przedstawia nam pomysł, a ty: WT, że to, czego szukałem, było wypełnieniem GAP. Dzięki Carlos Adrin Vargas Aguilera Hello Sam Dziękujemy za komentarze. Nie miałem problemu z tym przykładem, powinieneś dostać zrzut ekranu powyżej (bez dziur), może to jest twoje wydanie matlab, ale kod jest naprawdę prosty i powinien działać na innych. W przypadku F, aby uzyskać średnią wyśrodkowaną wokół elementu, liczba elementów do uśrednienia powinna być nieparzysta, czyli 2F1, iw ten sposób F jest połówką szerokości okna (sprawdź powyższy opis). Podobne dla m, n w 2D. Cześć Carlos, dziękuję bardzo za twój interesujący kod Matlaba. Mam jedną wątpliwość co do rozmiaru okna w średniej ruchomej 1D. Rozmiar okna to x272F1x27 czy możesz mi powiedzieć, co oznacza x27Fx27? Poza tym próbowałem uzyskać średnią ruchomą 2D, aby pracować z twoim dostarczonym przykładem, i nie mogłem jej uruchomić.

No comments:

Post a Comment