Я пытаюсь разработать приложение для обнаружения движения для Android.Приложение должно иметь возможность отслеживать движение телефона в пространстве и отображать его на экране компьютера.Я использую 3-осевой акселерометр, и поскольку данные очень шумные, я использую фильтр Калмана.
Внутреннее состояние - это 6-компонентный вектор [скорость-x, скорость-y, скорость-z, ускорение-x, ускорение-y, accel-z] и измеренным состоянием является трехкомпонентный вектор [accel-x, accel-y, accel-z].
Фильтр очень хорошо работает с измеренными значениями, но скорость все еще очень шумная.
Теперь мне интересно, является ли это нормальным поведением или я делаю что-то не так, так как мое понимание фильтра Калмана очень простое.Я использую библиотеку JKalman и следующую матрицу перехода состояний (dt равно 1/15, что является приблизительной частотой обновления датчика)
double [] [] A = {{1, 0, 0, dt,0, 0}, {0, 1, 0, 0, дт, 0}, {0, 0, 1, 0, 0, дт}, {0, 0, 0, 1, 0, 0}, {0,0, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 1}};
Я также настроил свои собственные ковариационные матрицы с ковариациями, рассчитанными по данным испытаний,Это немного улучшило сигнал ускорения, но не повлияло на скорость.
В настоящее время я могу достичь стандартного значения
[0,0632041857 0,0607274545 0,0886326602] для скорости [x, y, z]
[0,0041689678 0,004423822 0,0074808552] для ускорения [x, y, z].
Я вполне доволен сигналом ускорения и, полагаю, не могу улучшить его намного больше, но я бы хотел улучшить качество сигнала скорости.