Ho la necessità di rilevare due diversi gesti che si verificano guardando i dati dell'accelerometro. Ecco un riassunto (il più breve possibile):
Diciamo che un iPhone viene oscillato avanti e indietro rimanendo a faccia in su. L'utente può eseguire un'oscillazione (una volta in avanti o all'indietro, gesticolarne una) o un'oscillazione continua per qualsiasi periodo di tempo (gesto due).
Attualmente il mio codice mantiene un elenco dei dati dell'accelerometro del dispositivo (asse y) degli ultimi 50 frame. Ogni frame di questi dati viene messo attraverso un algoritmo FFT (questo http://goo.gl/yi3mn ), e quindi provo a interpretare il dominio di frequenza fornito. Ho notato una forte relazione tra la velocità delle oscillazioni e la potenza della gamma medio-bassa dello spazio di frequenza.
Il problema è che ho bisogno di rilevare (in tempo reale mentre il movimento anima qualcosa sullo schermo) se l'oscillazione appena finita è singolare, o quella che continua in un'altra oscillazione nella direzione opposta. Qui dovrei sottolineare che gli accelerometri funzionano con le piastre di pressione. Quando un'oscillazione si arresta, i dati di input mostreranno il valore opposto rispetto a quando l'oscillazione veniva eseguita. Ciò rende difficile vedere l'evidente differenza tra un singolo movimento in avanti e un doppio in avanti, quindi movimento all'indietro (alla fine di ogni prima oscillazione).
Qualcuno può suggerire come potrei fare uso di un FFT per decifrare un valore di magnitudine preciso (o qualcos'altro utile) che posso usare per dire la differenza tra i gesti sopra descritti?
Ho registrato i dati che sto usando su file di testo. Sono i dati grezzi (valori della forza g) lungo l'asse y dell'ingresso dell'accelerometro.
http://pastebin.ca/2108123 mostra i dati per 2 oscillazioni singolari (tengo fermo il dispositivo all'inizio, alla fine e tra le due oscillazioni).

NOTA: sono stati caricati nuovi dati non elaborati con 20 oscillazioni, ma non ancora tracciati. http://pastebin.ca/2108387 mostra i dati per 20 oscillazioni continue (tengo fermo il dispositivo all'inizio e alla fine).
