Buduję aplikację na Androida, która rejestruje dane akcelerometru podczas snu, aby analizować trendy snu i opcjonalnie budzić użytkownika w pobliżu pożądanego czasu podczas snu lekkiego.
Zbudowałem już komponent, który gromadzi i przechowuje dane, a także alarm. Nadal muszę stawić czoła bestii, wyświetlając i zapisując dane dotyczące snu w naprawdę znaczący i przejrzysty sposób, który najlepiej nadaje się również do analizy.
Kilka zdjęć mówi dwa tysiące słów: (Mogę opublikować tylko jeden link z powodu niskiej liczby powtórzeń)
Oto niefiltrowane dane, suma ruchu, zebrane w 30-sekundowych odstępach
I te same dane, wygładzone przez mój własny efekt wygładzania średniej ruchomej
edycja) obie wykresy odzwierciedlają kalibrację - istnieje minimalny filtr szumu i maksymalny filtr odcięcia, a także poziom wyzwalania alarmu (biała linia)
Niestety żadne z tych rozwiązań nie jest optymalne - pierwsze jest trochę trudne do zrozumienia dla przeciętnego użytkownika, a drugie, łatwiejsze do zrozumienia, kryje w sobie wiele z tego, co się naprawdę dzieje. W szczególności uśrednianie usuwa szczegóły skoków w ruchu - i myślę, że mogą one mieć znaczenie.
Dlaczego więc te wykresy są tak ważne? Te szeregi czasowe są wyświetlane przez całą noc jako informacja zwrotna dla użytkownika i będą przechowywane do późniejszego przejrzenia / analizy. Wygładzanie idealnie obniży koszty pamięci (zarówno pamięci RAM, jak i pamięci), a także przyspieszy renderowanie na tych pozbawionych zasobów telefonach / urządzeniach.
Oczywiście istnieje lepszy sposób na wygładzenie danych - mam pewne niejasne pomysły, takie jak regresja liniowa w celu wykrycia „ostrych” zmian ruchu i modyfikowanie odpowiednio wygładzania średniej ruchomej. Naprawdę potrzebuję więcej wskazówek i informacji, zanim zacznę nurkować w coś, co można rozwiązać bardziej optymalnie.
Dzięki!