Friday 17 November 2017

Przenoszenie średnia filtr funkcja matlab


Utworzono w środę, 08 października 2008 20:04 Ostatnia aktualizacja w czwartek, 14 marca 2017 01:29 Napisane przez Batuhan Osmanoglu Wyświetleń: 41412 Średnia ruchoma w programie Matlab Często potrzebuję uśredniania danych, które muszę zmniejszyć trochę hałasu kawałek. Napisałem kilka funkcji, aby zrobić dokładnie to, co chcę, ale matlabs wbudowany w funkcję filtru działa również całkiem dobrze. Tutaj piszę o uśrednianiu danych 1D i 2D. Filtr 1D może być realizowany za pomocą funkcji filtra. Funkcja filtra wymaga co najmniej trzech parametrów wejściowych: współczynnika licznika dla filtra (b), współczynnika mianownika dla filtra (a) i danych (X) oczywiście. Filtr średniej bieżącej można zdefiniować po prostu przez: Dla danych 2D możemy użyć funkcji filtra Matlabs2. Aby uzyskać więcej informacji na temat działania filtru, możesz wpisać: Oto szybka i brudna implementacja filtra 16 x 16 zmiennych ruchomych. Najpierw musimy zdefiniować filtr. Ponieważ wszystko, czego chcemy, to równy wkład wszystkich sąsiadów, możemy po prostu użyć tej funkcji. Dzielimy wszystko za pomocą 256 (1616), ponieważ nie chcemy zmieniać ogólnego poziomu (amplitudy) sygnału. Aby zastosować filtr, możemy po prostu powiedzieć: Poniżej znajdują się wyniki dla fazy interferogramu SAR. W tym przypadku zakres jest w osi Y, a azymut jest odwzorowany na osi X. Filtr miał 4 piksele szerokości w zakresie i 16 szerokości szerokości w azymucie. Częstotliwość odpowiedzi filtra średniej bieżącej Odpowiedź częstotliwościowa systemu LTI to DTFT odpowiedzi impulsowej, odpowiedź impulsowa średniej ruchomej L jest od filtr średniej ruchomej to FIR, odpowiedź częstotliwościowa sprowadza się do sumy skończonej. Możemy 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)) axis (0, pi, 0, 1) Copyright copy 2000- - University of California, Berkeley Pobierz plik movAv. m (patrz także movAv2 - zaktualizowana wersja umożliwiająca ważenie) Opis Matlab zawiera funkcje o nazwie movavg i tsmovavg (seria czasowa w ruchu średnia) w przyborniku finansowym, movAv ma na celu odtworzenie podstawowej funkcjonalności tych narzędzi. Kod tutaj stanowi dobry przykład zarządzania indeksami wewnątrz pętli, co może być mylące na początek. Rozmyślnie trzymałem kod krótki i prosty, aby ten proces był jasny. movAv wykonuje prostą średnią ruchomą, która może być używana do odzyskiwania hałaśliwych danych w niektórych sytuacjach. Działa poprzez przyjmowanie średniej wartości wejściowej (y) na przesuwanym oknie czasowym, którego rozmiar jest określony przez n. Im większe n, tym większa ilość wygładzania efektu n jest zależna od długości wektora wejściowego y. i skutecznie (no, w pewnym sensie) tworzy filtr dolnoprzepustowy - patrz rozdział Przykłady i zagadnienia. Ponieważ wielkość wygładzania zapewniona przez każdą wartość n jest zależna od długości wektora wejściowego, zawsze warto przetestować różne wartości, aby zobaczyć, co jest właściwe. Pamiętaj także, że n punktów jest traconych na każdej średniej, jeśli n wynosi 100, pierwsze 99 punktów wektora wejściowego nie zawiera wystarczającej ilości danych dla średniej 100pt. Można tego w pewnym stopniu uniknąć, układając średnie wartości, na przykład poniższy kod i wykres porównują różne długości okien o różnych długościach. Zwróć uwagę, jak gładki 1010pt jest porównywany z pojedynczą średnią 20pt. W obu przypadkach łącznie traci się 20 punktów danych. Utwórz xaxis x1: 0.01: 5 Wygeneruj szum hałasuReps 4 repmat szumu (randn (1, ceil (numel (x) noiseReps)), noiseReps, 1) noise shape (noise, 1, length (noise) noiseReps) Generuj ydata noise yexp ( x) 10noza (1: długość (x)) Od średnich: 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 pt Legenda wydruku wykresu (x, y, y2, y3, y4, y5, y6) (surowe dane, 10pt średnia ruchoma, 1010pt, 20pt, 40pt, 100pt) xlabel (x) ylabel ( y) tytuł (Porównanie średnich kroczących) wartość wyjściowa funkcji movAv. m movAv (y, n) Pierwsza linia definiuje nazwę funkcji, wejścia i wyjścia. Wejście x powinno być wektorem danych do wykonania średniej na, n powinna być liczbą punktów do wykonania średniej ponad wyjście będzie zawierać uśrednione dane zwracane przez funkcję. Prealocate output output NaN (1, numel (y)) Znajdź punkt środkowy rundy midpoint (n2) Główna praca funkcji odbywa się w pętli for, ale przed rozpoczęciem przygotowuje się dwie rzeczy. Po pierwsze, dane wyjściowe są wstępnie przydzielane jako NaN, co służy dwóm celom. Po pierwsze, wstępna alokacja jest ogólnie dobrą praktyką, ponieważ redukuje ona żonglowanie pamięcią Matlaba, a po drugie bardzo ułatwia umieszczanie uśrednionych danych na wyjściu o takim samym rozmiarze jak wektor wejściowy. Oznacza to, że te same xaxis mogą być później użyte dla obu, co jest wygodne do wykreślania, alternatywnie NaN można później usunąć w jednym wierszu kodu (wyjście wyjściowe (Zmienna midPoint będzie używana do wyrównania danych w wektorze wyjściowym. n 10, 10 punktów zostanie utraconych, ponieważ dla pierwszych 9 punktów wektora wejściowego nie ma wystarczającej ilości danych, aby uzyskać średnią z 10 punktów, ponieważ dane wyjściowe będą krótsze niż dane wejściowe, muszą być odpowiednio wyrównane. być użyte, aby na początku i na końcu utracić taką samą ilość danych, a dane wejściowe są utrzymywane w wyrównaniu z danymi wyjściowymi przez bufory NaN utworzone podczas wstępnego przydzielania danych wyjściowych dla 1: length (y) - n Znajdź zakres indeksów, aby uzyskać średnią over (a: b) bana Obliczyć średnią wartość wyjściową (amidPoint) średnia (y (a: b)) koniec W pętli for, średnia jest brana na każdy kolejny segment wejścia. Pętla będzie działać dla a., która jest zdefiniowane jako 1 do długości wejścia (y) minus dane, które zostaną utracone (n).Jeśli wejście wynosi 100 punktów ng in wynosi 10, pętla będzie przebiegać od (a) od 1 do 90. Oznacza to, że zapewnia pierwszy indeks segmentu, który ma być uśredniony. Drugi indeks (b) jest po prostu an-1. Tak więc w pierwszej iteracji, a1. n10. więc b 11-1 10. Pierwsza średnia jest pobierana przez y (a: b). lub x (1:10). Średnia tego segmentu, który jest pojedynczą wartością, jest przechowywana w wynikach w indeksie amidPoint. lub 156. W drugiej iteracji, a2. b 210-1 11. więc średnia jest brana pod x (2:11) i zapisywana na wyjściu (7). W ostatniej iteracji pętli dla wejścia o długości 100, a91. b 9010-1 100, więc średnia jest brana na x (91: 100) i zapisywana na wyjściu (95). Pozostawia to wynik w sumie n (10) wartości NaN na indeksie (1: 5) i (96: 100). Przykłady i rozważania Średnie kroczące są przydatne w niektórych sytuacjach, ale nie zawsze są najlepszym wyborem. Oto dwa przykłady, które niekoniecznie są optymalne. Kalibracja mikrofonu Ten zestaw danych reprezentuje poziomy każdej częstotliwości wytwarzanej przez głośnik i rejestrowane przez mikrofon ze znaną reakcją liniową. Moc wyjściowa głośnika zmienia się z częstotliwością, ale możemy skorygować tę zmianę za pomocą danych kalibracyjnych - moc wyjściową można regulować w poziomie, aby uwzględnić fluktuacje w kalibracji. Zauważ, że surowe dane są hałaśliwe - oznacza to, że niewielka zmiana częstotliwości wymaga dużej, nieobliczalnej zmiany poziomu. Czy jest to realistyczne? Czy jest to produkt środowiska nagrywającego? Rozsądne w tym przypadku jest zastosowanie średniej ruchomej, która wygładza krzywą częstotliwości, aby uzyskać krzywą kalibracji, która jest nieco mniej błędna. Ale dlaczego nie jest to optymalne w tym przykładzie? Więcej danych byłoby lepsze - uśrednione wielokrotne kalibracje zniszczyłyby hałas w systemie (tak długo, jak jego losowe wartości) i zapewnią krzywiznę z mniejszą ilością subtelnych szczegółów. Średnia ruchoma może jedynie przybliżać to, i może usunąć niektóre spadki i piki wyższej częstotliwości z krzywej, która naprawdę istnieje. Fale sinusoidalne Używanie średniej ruchomej na falach sinusoidalnych podkreśla dwa punkty: Ogólny problem wyboru rozsądnej liczby punktów do wykonania średniej. Jest to proste, ale istnieją skuteczniejsze metody analizy sygnałów niż uśrednianie sygnałów oscylujących w dziedzinie czasu. Na tym wykresie oryginalna fala sinusoidalna jest naniesiona na niebiesko. Hałas jest dodawany i wykreślany jako pomarańczowa krzywa. Średnia ruchoma jest wykonywana z różną liczbą punktów, aby sprawdzić, czy można odzyskać oryginalną falę. 5 i 10 punktów daje rozsądne wyniki, ale nie usuwaj hałasu w całości, gdzie jako większa liczba punktów zaczynają tracić szczegóły amplitudy, ponieważ średnia rozciąga się na różne fazy (pamiętaj, że fala oscyluje wokół zera, a średnia (-1 1) 0) . Alternatywnym podejściem byłoby skonstruowanie filtra dolnoprzepustowego, niż można zastosować do sygnału w dziedzinie częstotliwości. Nie będę wchodził w szczegóły, ponieważ wykracza poza zakres tego artykułu, ale ponieważ szum jest znacznie większą częstotliwością niż częstotliwość podstawowa fal, w tym przypadku byłoby dość łatwo skonstruować filtr dolnoprzepustowy, niż usunąć wysoką częstotliwość hałas.

No comments:

Post a Comment