Zadałem to pytanie na StackOverflow i polecono mi zadać je tutaj.
Mam dwie serie czasowe danych akcelerometru 3D, które mają różne podstawy czasu (zegary uruchamiane w różnych momentach, z bardzo niewielkim pełzaniem w czasie próbkowania), a także zawierające wiele przerw o różnych rozmiarach (z powodu opóźnień związanych z pisaniem do oddzielenia urządzenia flash).
Akcelerometry, których używam, to niedrogie GCDC X250-2 . Korzystam z przyspieszeniomierzy przy ich największym wzmocnieniu, więc dane mają znaczny poziom szumu.
Szeregi czasowe zawierają około 2 miliony punktów danych (ponad godzinę przy 512 próbkach / s) i zawierają około 500 interesujących zdarzeń, przy czym typowe zdarzenie obejmuje 100-150 próbek (każda 200–300 ms). Na wiele z tych zdarzeń mają wpływ awarie danych podczas zapisywania w trybie flash.
Tak więc dane nie są nieskazitelne i nawet nie są bardzo ładne. Ale moja inspekcja gałki ocznej pokazuje, że wyraźnie zawiera informacje, którymi jestem zainteresowany. (W razie potrzeby mogę publikować wykresy).
Akcelerometry znajdują się w podobnych środowiskach, ale są tylko w niewielkim stopniu sprzężone, co oznacza, że mogę wzrokowo stwierdzić, które zdarzenia pasują do każdego akcelerometru, ale jak dotąd nie udało mi się tego zrobić w oprogramowaniu. Ze względu na ograniczenia fizyczne urządzenia są również montowane w różnych orientacjach, w których osie nie pasują, ale są tak blisko ortogonalne, jak to tylko możliwe. Na przykład dla 3-osiowych akcelerometrów A i B, mapy + Ax do -By (góra-dół), mapy + Az do -Bx (lewa strona prawa), a mapy + Ay do -Bz (przód-tył) .
Moim początkowym celem jest skorelowanie zdarzeń uderzenia na osi pionowej, chociaż w końcu chciałbym a) automatycznie odkryć mapowanie osi, b) skorelować aktywność na mapowanych asach, c) wyodrębnić różnice w zachowaniu między dwoma akcelerometrami (takie jak skręcanie lub zginanie).
Charakter danych szeregów czasowych sprawia, że numpy.correlate () Pythona nie nadaje się do użytku. Przyjrzałem się również pakietowi R Zoo, ale nie zrobiłem z nim żadnych postępów. Szukałem pomocy w różnych obszarach analizy sygnałów, ale nie zrobiłem żadnego postępu.
Czy ktoś ma jakieś wskazówki na temat tego, co mogę zrobić, lub podejść, które powinienem zbadać?
Aktualizacja 28 lutego 2011 r .: Dodano tutaj kilka wykresów pokazujących przykłady danych.
Odpowiedzi:
Pytanie dotyczy obliczenia korelacji między dwoma szeregami nieregularnymi próbkami czasowymi (jednowymiarowe procesy stochastyczne) i wykorzystania tego do znalezienia przesunięcia czasowego tam, gdzie są one maksymalnie skorelowane (ich „różnica faz”).
Problem ten zwykle nie jest rozwiązany w analizie szeregów czasowych, ponieważ zakłada się, że dane szeregów czasowych są systematycznie gromadzone (w regularnych odstępach czasu). Jest to raczej prowincja geostatystyki , która dotyczy wielowymiarowych uogólnień szeregów czasowych. Archetypowy zbiór danych geostatystycznych obejmuje pomiary próbek geologicznych w nieregularnie rozmieszczonych miejscach.
Z dwoma milionami punktów powinieneś być w stanie wykryć małe odchylenia od stacjonarności. Możliwe, że różnica faz między dwiema seriami czasowymi może się zmieniać w czasie. Poradzić sobie z tym, obliczając osobno wariogram krzyżowy dla różnych okien rozmieszczonych w danym okresie.
źródło