Posso usar a FFT para interpretar os gestos do acelerômetro?

10

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).

insira a descrição da imagem aqui

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).

insira a descrição da imagem aqui

rykardo
fonte
Não tendo visto os dados, minha primeira impressão é que isso não parece ser uma boa aplicação para uma FFT. Você tem alguns dados capturados que você pode postar, no formato bruto ou como um gráfico?
Jason R
Oi, obrigado pelo feedback. Apenas um arquivo mostrando cada valor cronologicamente seria aceitável, com um delimitador ','? Estou recebendo aproximadamente 60 valores por segundo. Eu suspeito que isso pode não ser uma boa aplicação também. Talvez possamos trabalhar com alguns dos dados.
Rykardo 31/01
2
Se você postar os dados brutos, é provável que alguém possa transformá-los em um gráfico e editar sua postagem com eles.
Jason R
OK ótimo. Carregará alguns em breve.
Rykardo 31/01
Isso levou muito mais tempo do que eu esperava. Estou executando o projeto com o Unity, que só pode receber os dados de entrada do dispositivo a 60 quadros / segundo. Isso significa que não posso ter uma alta taxa de amostragem, mas mesmo assim. É isso que você quis dizer com sua sugestão?
Rykardo 31/01 '13

Respostas:

2

Observando os dados, não vejo por que você desejaria usar a FFT para esse fim (embora possa estar errado). Digamos que você deseja detectar movimentos únicos ou múltiplos com base nesse conjunto de dados (ao qual você anexou) os métodos que eu estaria analisando

  1. Algo nas linhas de taxa de variação de valores absolutos. Primeiro derivado faria bem, eu acho.
  2. Wavelet transformar talvez? Não posso elaborar mais sobre sua utilidade até saber se você deseja saber a posição dos picos ou não.

Se a única coisa que você deseja detectar é a oscilação simples versus múltipla, a FFT não é, na minha opinião, uma escolha muito boa para análise.

anasimtiaz
fonte
Obrigado pelo feedback! Um amigo sugeriu que a FFT poderia ser o caminho a percorrer, antes que eu nunca tivesse usado uma antes. O que preciso detectar é se uma nova oscilação está começando no final de cada oscilação ou não. Os gráficos acima devem expor por que é difícil. Eu pensei que poderia usar um algoritmo de magnitude, mas isso é complicado porque a potência / velocidade das oscilações será diferente por usuário.
Rykardo