Tuesday 5 December 2017

Przenoszenie średnio matlab nan


Korzystając z MATLAB, w jaki sposób mogę znaleźć 3-dniową średnią ruchomą konkretnej kolumny macierzy i dołączyć średnią ruchomą do tej macierzy, próbuję obliczyć 3-dniową średnią ruchomą od dołu do góry macierzy. 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 musisz użyć kilku linii: Pobierz movAv. m (zobacz także movAv2 - zaktualizowana wersja umożliwiająca ważenie) Opis Matlab zawiera funkcje nazwane movavg i tsmovavg (średnia ruchoma w serii czasowej) w Zestawie narzędzi finansowych, movAv ma na celu powtórz podstawowe funkcje tych. 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ść noise. Documentation M movmean (A, k) zwraca tablicę lokalnych średnich wartości punktów k, gdzie każda średnia jest obliczana na przesuwnym oknie o długości k z sąsiednich elementów A. Kiedy k jest nieparzyste, okno jest wyśrodkowane element w bieżącej pozycji. Gdy k jest równe, okno jest wyśrodkowane na bieżącym i poprzednich elementach. Rozmiar okna jest automatycznie przycinany w punktach końcowych, gdy nie ma wystarczającej liczby elementów do wypełnienia okna. Kiedy okno jest obcięte, średnia jest pobierana tylko z elementów wypełniających okno. M ma taki sam rozmiar jak A. Jeśli A jest wektorem, movmean działa wzdłuż długości wektora. Jeśli A jest tablicą wielowymiarową, wówczas movmean działa wzdłuż pierwszego wymiaru tablicy, którego rozmiar nie jest równy 1. M movmean (A, kb kf) oblicza średnią z oknem o długości kbkf1, która zawiera element w bieżącej pozycji, elementy kb do tyłu, a elementy kf do przodu. M movmean (, dim) zwraca tablicę ruchomych średnich wzdłuż dim dim dla każdej z poprzednich składni. Na przykład, jeśli A jest macierzą, wówczas movmean (A, k, 2) działa wzdłuż kolumn A. obliczając średnią przesuwną k-elementu dla każdego rzędu. M movmean (, nanflag) określa, czy uwzględnić lub pominąć wartości NaN z obliczeń dla dowolnej z poprzednich składni. movmean (A, k, includenan) zawiera wszystkie wartości NaN w obliczeniach, podczas gdy movmean (A, k, omitnan) ignoruje je i oblicza średnią w mniejszej liczbie punktów. M movmean (, Endpoints, endptmethod) określa metodę obsługi punktów końcowych, używając punktów końcowych i jednego z nich. odrzucać. wypełniać. lub wartość skalarna lub logiczna. Na przykład movmean (A, k, Endpoints, discard) wyprowadza tylko wartości średnie obliczone z dokładnie k różnych elementów A. odrzucając zredukowane obliczenia punktów końcowych. Wybierz swój kraj

No comments:

Post a Comment