Filtrowanie średnio w matlabu


Przeprowadzka Średnia W programie Matlab Często zastanę się nad potrzebą uśrednienia danych, że muszę zredukować hałas trochę kawałek. 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. Moving Average Filter (filtr MA) Ładowanie. Filtr średniej ruchomości to prosty filtr FIR (Finite Impulse Response Low Pass) stosowany powszechnie do wygładzania tablicy próbek danych. Pobiera M próbek danych wejściowych jednocześnie i przyjmuje średnią z tych próbek M i tworzy pojedynczy punkt wyjściowy. Jest to bardzo prosta struktura filtrów LPF (filtr dolnoprzepustowy), przydatny dla naukowców i inżynierów w celu filtrowania niechcianego hałaśliwego składnika z zamierzonych danych. Gdy długość filtra wzrasta (parametr M), gładkość wyjścia wzrasta, podczas gdy ostre przejścia w danych są coraz bardziej stępione. Oznacza to, że ten filtr ma doskonałą odpowiedź na domenę czasową, ale słabą odpowiedź częstotliwościową. Filtr MA wykonuje trzy ważne funkcje: 1) zajmuje M punktów wejściowych, oblicza średnią tych punktów M i wytwarza pojedynczy punkt wyjściowy 2) z powodu obliczonych obliczeń obliczeniowych. Filtr wprowadza określoną ilość opóźnień 3) Filtr działa jak filtr dolnoprzepustowy (z niską odpowiedzią na domenę częstotliwości i dobrą odpowiedzią na domenę czasową). Kod Matlaba: Kod matlab symuluje odpowiedź domeny czasu na filtr średniej ruchomej punktu M, a także generuje odpowiedź częstotliwościową dla różnych długości filtra. Odpowiedź na domenę czasu: na pierwszej wykresie mamy dane, które wchodzą do filtru średniej ruchomej. Wejście jest hałaśliwe i naszym celem jest zmniejszenie hałasu. Kolejną figurą jest odpowiedź wyjściowa 3-punktowego filtru Moving Average. Z rysunku wynika, że ​​filtr 3-punktowy Moving Average nie wyrządził zbyt wiele zakłóceń. Zwiększymy czubki filtru do 51 punktów i widzimy, że szum na wyjściu zmniejszył się znacznie, co przedstawiono na następnej ilustracji. Zwiększamy kraniki na 101 i 501 i możemy zauważyć, że nawet, choć hałas jest prawie zerowy, przejścia są stłumione drastycznie (obserwuj nachylenie po obu stronach sygnału i porównaj je z idealnym przejściem na ceglany mur nasze dane wejściowe). Pasmo przenoszenia: Z częstotliwości odpowiedzi można stwierdzić, że zwijanie jest bardzo powolne, a tłumienie paska zatrzymania nie jest dobre. Biorąc pod uwagę to tłumienie pasma, wyraźnie, średni ruchowy filtr nie może oddzielić jednej częstotliwości pasma od drugiej. Jak wiemy, że dobre wyniki w dziedzinie czasu powodują słabe wyniki w dziedzinie częstotliwości i vice versa. Krótko mówiąc, średnia ruchoma jest wyjątkowo dobrym filtrem wygładzania (działaniem w dziedzinie czasowej), ale wyjątkowo złym filtrem dolnoprzepustowym (działaniem w dziedzinie częstotliwości). Linki zewnętrzne: Zalecane książki: Podstawowe boczne przeciąganie MATLAB, jak mogę znaleźć 3-dniową średnią ruchu konkretnej kolumny macierzy i dodać średnią ruchomą do tej matrycy staram się obliczyć 3-dniową średnią ruchoma 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 musisz zmusić się do użycia kilku wierszy: Używając MATLAB, jak mogę znaleźć 3-dniową średnią ruchu konkretnej kolumny matrycy i dodać średnią ruchomą do tej matrycy staram się obliczyć 3-dniową średnią ruchoma 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