Могу ли я использовать FFT для интерпретации жестов акселерометра?

10

Мне нужно обнаружить два разных жеста, которые возникают при просмотре данных акселерометра. Вот краткий обзор (насколько я могу это сделать):

Допустим, iPhone колеблется взад-вперед, оставаясь лицом вверх. Пользователь может сделать одно колебание (один раз вперед или назад, жест один) или непрерывное колебание в течение любого периода времени (жест два).

В настоящее время мой код поддерживает список данных акселерометра устройства (ось Y) за последние 50 кадров. В каждом кадре эти данные вводятся с помощью алгоритма FFT (этот http://goo.gl/yi3mn ), а затем я пытаюсь интерпретировать данную частотную область. Я заметил сильную связь между скоростью колебаний и мощностью среднего и нижнего диапазона частотного пространства.

Проблема в том, что мне нужно определить (в режиме реального времени, когда движение оживляет что-то на экране), является ли только что законченное колебание единичным, или оно продолжается в другое колебание в противоположном направлении. Здесь я должен отметить, что акселерометры работают с нажимными пластинами. Когда колебание останавливается, входные данные будут показывать значение, противоположное тому, когда выполнялось колебание. Это затрудняет понимание какой-либо очевидной разницы между одним движением вперед и двойным движением вперед и назад (в конце каждого первого колебания).

Может кто-нибудь предложить, как я мог бы использовать FFT, чтобы расшифровать точное значение величины (или что-то еще полезное), которое я могу использовать, чтобы определить разницу между жестами, описанными выше?

Я записал данные, которые я использую для текстовых файлов. Это необработанные данные (значения g-силы) вдоль оси Y на входе акселерометра.

http://pastebin.ca/2108123 показывает данные для 2 особых колебаний (я держу устройство в начале, в конце и между двумя колебаниями).

введите описание изображения здесь

ПРИМЕЧАНИЕ: новые необработанные данные с 20 колебаниями были загружены, но еще не нанесены на график. http://pastebin.ca/2108387 показывает данные для 20 непрерывных колебаний (я держу устройство все еще в начале и в конце).

введите описание изображения здесь

rykardo
источник
Не видя данных сам, мое первое впечатление, что это не очень хорошее приложение для БПФ. Есть ли у вас какие-либо захваченные данные, которые вы могли бы опубликовать, либо в необработанном формате, либо в виде графика?
Джейсон Р
Привет, спасибо за отзыв. Будет ли приемлемым только файл, показывающий каждое значение в хронологическом порядке, с разделителем ','? Я получаю примерно 60 значений в секунду. Я подозреваю, что это может быть не очень хорошее приложение. Возможно, мы сможем работать с некоторыми данными, хотя.
rykardo
2
Если вы публикуете необработанные данные, вполне вероятно, что кто-то может преобразовать их в сюжет и отредактировать с ним ваш пост.
Джейсон Р
Ок, отлично. Выложу немного в ближайшее время.
rykardo
Это заняло намного больше времени, чем я ожидал. Я запускаю проект с Unity, который может получать входные данные только с устройства со скоростью 60 кадров в секунду. Это означает, что у меня не может быть высокой частоты дискретизации, но тем не менее. Это то, что вы имели в виду с вашим предложением?
rykardo

Ответы:

2

Глядя на данные, я не понимаю, почему вы хотите использовать FFT для этой цели (хотя я могу ошибаться). Допустим, вы хотите обнаружить одно или несколько движений на основе этого набора данных (который вы прикрепили), методы, на которые я смотрю, будут

  1. Что-то на линиях скорости изменения абсолютных значений. Первая производная будет хорошо, я думаю.
  2. Вейвлет-преобразование может быть? Я не могу более подробно остановиться на его полезности, пока не узнаю, хотите ли вы узнать положение пиков или нет.

Если единственное, что вы хотите обнаружить - это одиночное или множественное колебание, то, по моему мнению, БПФ не очень хороший выбор для анализа.

anasimtiaz
источник
Спасибо за ответ! Друг предположил, что FFT может быть способом, до которого я никогда не использовал его раньше. Что мне нужно обнаружить, так это то, начинается ли новое колебание в конце каждого колебания или нет. Графики выше должны раскрыть, почему это трудно. Я думал, что мог бы использовать алгоритм величины, но это сложно, потому что мощность / скорость колебаний будет отличаться для каждого пользователя.
rykardo