Mam potrzebę wykrycia dwóch różnych gestów, które występują podczas przeglądania danych akcelerometru. Oto podsumowanie (tak krótkie, jak mogę to zrobić):
Powiedzmy, że iPhone jest oscylowany tam iz powrotem, pozostając odkrytym. Użytkownik może wykonać jedną oscylację (raz do przodu lub do tyłu, gest jeden) lub ciągłą oscylację przez dowolny czas (gest drugi).
Obecnie mój kod przechowuje listę danych akcelerometru urządzenia (oś y) z ostatnich 50 klatek. W każdej ramce dane te przechodzą przez algorytm FFT (ten http://goo.gl/yi3mn ), a następnie próbuję zinterpretować podaną domenę częstotliwości. Zauważyłem silny związek między prędkością oscylacji a mocą średniego do niskiego zakresu przestrzeni częstotliwości.
Problem polega na tym, że muszę wykryć (w czasie rzeczywistym, gdy ruch animuje coś na ekranie), czy właśnie zakończona oscylacja jest pojedyncza, czy też przechodzi w inną oscylację w przeciwnym kierunku. W tym miejscu należy podkreślić, że akcelerometry działają z płytami dociskowymi. Kiedy oscylacja ustaje, dane wejściowe pokażą wartość przeciwną do tej, kiedy oscylacja była wykonywana. Utrudnia to dostrzeżenie oczywistej różnicy między pojedynczym ruchem do przodu a podwójnym ruchem do przodu i do tyłu (na końcu każdej pierwszej oscylacji).
Czy ktoś może zasugerować, w jaki sposób mógłbym skorzystać z FFT do rozszyfrowania dokładnej wartości wielkości (lub czegoś innego użytecznego), którego mogę użyć, aby odróżnić gesty opisane powyżej?
Zapisałem dane, których używam do plików tekstowych. Są to nieprzetworzone dane (wartości siły g) wzdłuż osi y wejścia akcelerometru.
http://pastebin.ca/2108123 pokazuje dane dla 2 pojedynczych oscylacji (trzymam urządzenie wciąż na początku, na końcu i pomiędzy dwiema oscylacjami).
UWAGA: nowe nieprzetworzone dane z 20 oscylacjami zostały przesłane, ale nie zostały jeszcze wydrukowane. http://pastebin.ca/2108387 pokazuje dane dla 20 ciągłych oscylacji (trzymam urządzenie wciąż na początku i na końcu).