Monday 13 November 2017

Matlab moving average array


Muszę obliczyć średnią kroczącą dla serii danych w pętli for. Muszę uzyskać średnią kroczącą powyżej N9 dni. Tablica Im computing in to 4 serie 365 wartości (M), które same są wartościami średnimi innego zestawu danych. Chcę wykreślić średnie wartości moich danych za pomocą średniej ruchomej na jednym wykresie. Wyszukałem trochę informacji o przenoszeniu średnich i komendach conv i znalazłem coś, co próbowałem implementować w swoim kodzie. W zasadzie obliczyłem swoją średnią i narysowałem ją za pomocą (niewłaściwej) średniej kroczącej. Wybrałem wartość wts bezpośrednio na stronie mathworks, więc jest to nieprawidłowe. (źródło: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mój problem polega jednak na tym, że nie rozumiem, co to jest. Ktoś mógłby wyjaśnić, jeśli ma coś wspólnego z wagami wartości: w tym przypadku jest to nieważne. Wszystkie wartości są ważone tak samo. A jeśli robię to całkowicie nie tak, czy mogę uzyskać pomoc w tym zakresie Moje najszczersze podziękowania. pytanie 23 września 14 o 19:05 Korzystanie z conv to doskonały sposób na wprowadzenie średniej kroczącej. W kodzie, którego używasz, wts jest tym, ile ważysz każdej wartości (jak zgadłeś). suma tego wektora powinna zawsze być równa jednej. Jeśli chcesz ważyć równomiernie każdą wartość i wykonać filtr przesuwający o rozmiarze N, to zechcesz. Użycie poprawnego argumentu w conv spowoduje, że masz mniej wartości w Ms niż w M. Użyj tego samego, jeśli nie masz nic przeciwko efektom zero padding. Jeśli masz zestaw narzędzi do przetwarzania sygnałów, możesz użyć cconv, jeśli chcesz wypróbować średnią ruchomą kołową. Coś jak Ty powinieneś przeczytać dokumentację conv i cconv, aby uzyskać więcej informacji, jeśli jeszcze tego nie zrobiłeś 29 września 2017 r. Średnia ruchoma przez splot Co to jest średnia ruchoma i co jest dobre dla Jak poruszające się uśrednianie odbywa się za pomocą splotu Średnia ruchoma to prosta operacja zwykle używane do tłumienia szumu sygnału: ustawiamy wartość każdego punktu na średnią wartości w jego sąsiedztwie. Przez formułę: tutaj x jest wejściem, a y jest sygnałem wyjściowym, natomiast rozmiar okna to w, ma być nieparzysty. Powyższy wzór opisuje operację symetryczną: próbki są pobierane z obu stron rzeczywistego punktu. Poniżej znajduje się przykład życia. Punkt, w którym układane jest okno, jest czerwony. Wartości spoza x mają być zerami: Aby obejść i zobaczyć efekty średniej ruchomej, spójrz na tę interaktywną demonstrację. Jak to zrobić przez splot Jak można zauważyć, obliczenie prostej średniej ruchomej jest podobne do splotu: w obu przypadkach okno przesuwa się wzdłuż sygnału, a elementy w oknie są podsumowywane. Spróbuj więc zrobić to samo, używając splotu. Użyj następujących parametrów: Żądane wyjście: Jako pierwsze podejście, spróbujmy tego, co otrzymamy, zawiązując sygnał x przez następujące k jądro: Wynik jest dokładnie trzy razy większy niż oczekiwany. Można również zauważyć, że wartości wyjściowe są podsumowaniem trzech elementów w oknie. Dzieje się tak, ponieważ podczas splotu okno przesuwa się wzdłuż, wszystkie elementy w nim są mnożone przez jeden, a następnie podsumowywane: yk 1 cdot x 1 cdot x 1 cdot x Aby uzyskać pożądane wartości y. wynik powinien być podzielony przez 3: Przez formułę zawierającą podział: Ale czy nie byłoby optymalnie zrobić podział podczas splotu Oto przychodzi pomysł poprzez zmianę równania: Więc użyjemy następującego k jądra: W ten sposób będziemy uzyskać pożądany wynik: Ogólnie: jeśli chcemy zrobić średnią ruchomą przez splot o wielkości okna w. użyjemy następującego k jądra: Prostą funkcją wykonującą średnią ruchomą jest: Przykład użycia: Ive dostał wektor i chcę obliczyć średnią ruchomą (używając okna o szerokości 5). Na przykład, jeśli dany wektor to 1,2,3,4,5,6,7,8. wtedy pierwszy zapis wynikowego wektora powinien być sumą wszystkich pozycji w 1,2,3,4,5 (tj. 15) drugi wpis wynikowego wektora powinien być sumą wszystkich pozycji w 2,3,4, 5,6 (tj. 20) itd. Na końcu wektor wynikowy powinien wynosić 15,20,25,30. Jak mogę to zrobić Funkcja konwergencji jest tuż za twoją uliczką: Trzy odpowiedzi, trzy różne metody. Oto krótki test porównawczy (różne wielkości wejściowe, stała szerokość okna wynosząca 5), ​​wykorzystując timeit. Zapraszam do umieszczania w nim dziur (w komentarzach), jeśli uważasz, że musi być udoskonalony. konwalia okazują się najszybszym podejściem, około dwukrotnie szybszym niż zbliżanie się monet (za pomocą filtra). i około cztery razy szybciej niż Luis Mendos (używając cumsum). Oto kolejny benchmark (stały rozmiar wejściowy 1e4, różne szerokości okien). Tutaj podejście Luksusem do cumsuma staje się oczywistym zwycięzcą, ponieważ jego złożoność zależy przede wszystkim od długości danych wejściowych i jest niewrażliwa na szerokość okna. Podsumowanie Podsumowując, powinieneś używać metody konwergencji, jeśli twoje okno jest stosunkowo małe, użyj podejścia "sumacja", jeśli twoje okno jest stosunkowo duże. Kod (dla testów porównawczych)

No comments:

Post a Comment