Tenho a necessidade de detectar dois gestos diferentes que ocorrem ao analisar os dados do acelerômetro. Aqui está um resumo (o mais breve possível):
Digamos que um iPhone esteja sendo oscilado para frente e para trás enquanto permanece com a face para cima. O usuário pode fazer uma oscilação (uma vez para frente ou para trás, gesto um) ou uma oscilação contínua por qualquer período de tempo (gesto dois).
Atualmente, meu código mantém uma lista dos dados do acelerômetro do dispositivo (eixo y) dos últimos 50 quadros. Cada quadro em que esses dados são inseridos em um algoritmo FFT (este http://goo.gl/yi3mn ) e, em seguida, tento interpretar o domínio da frequência fornecido. Percebi uma forte relação entre a velocidade das oscilações e a potência do intervalo médio para o baixo do espaço de frequência.
O problema é que preciso detectar (em tempo real, enquanto o movimento anima alguma coisa na tela) se a oscilação recém-concluída é singular ou se continua em outra oscilação na direção oposta. Aqui, devo salientar que os acelerômetros funcionam com placas de pressão. Quando uma oscilação para, os dados de entrada mostram o valor oposto ao de quando a oscilação estava sendo executada. Isso dificulta a visualização de qualquer diferença óbvia entre um único movimento para frente e um duplo para frente e para trás (no final de cada primeira oscilação).
Alguém pode sugerir como eu poderia usar uma FFT para decifrar um valor exato de magnitude (ou algo mais útil) que eu possa usar para diferenciar os gestos descritos acima?
Eu gravei os dados que estou usando em arquivos de texto. São os dados brutos (valores de força g) ao longo do eixo y da entrada do acelerômetro.
http://pastebin.ca/2108123 mostra dados para duas oscilações singulares (eu seguro o dispositivo ainda no início, no final e entre as duas oscilações).
NOTA: novos dados brutos com 20 oscilações foram carregados, mas ainda não plotados. http://pastebin.ca/2108387 mostra dados de 20 oscilações contínuas (eu seguro o dispositivo ainda no início e no fim).