Я делаю экспериментальную программу.
У меня смартфон закреплен на приборной панели автомобиля с подставкой, во время движения я считываю из приложения какое-то значение с инерциального датчика,
Точно читаю,
Данные акселерометра Время (с фиксированным интервалом) каждой регистрации в секундах.
Итак, теперь я хотел бы перейти от вертикального ускорения к вертикальному перемещению, для этого я должен сделать двойное интегрирование,
Я пробовал, метод Эйлера. Из начального состояния как
это начальная скорость в нулевой момент времени.
это исходное положение в нулевое время.
определять,
интервал регистрации. (в моем случае 0,04с)
затем для каждой сделанной регистрации я делаю:
где я представляю текущий и i-1 прецедент.
Но график, который я получаю, не очень реалистичен, на самом деле и скорость, и смещение только растут, вместо этого эффект, который я должен был получить, заключается в том, что вертикальное смещение получилось чем-то похожим на график ускорения.
Учитывая, что применяя эту процедуру, я также допускаю высокую ошибку, возможно, график только растет, и я не вижу каких-либо вертикальных колебаний?
Я также читал, что фильтр Калмана можно применить заранее для очистки сигнала, может ли это быть решением?
Или мне изменить метод интегрирования и перейти к Эйлеру от Рунге Кутты? (Последняя, правда, не имею ни малейшего представления, как ее можно было поставить)
Вот пример зарегистрированных данных . Это может быть полезно
Несколько советов, которые у меня есть для вас:
1) Обязательно конвертируйте значения времени из миллисекунд в секунды. 2) Не полагайтесь на постоянный интервал времени. Рассчитайте его как разницу между каждым последовательным измерением времени. 3) Примите значения ускорения как разницу между показаниями акселерометра и столбцом «Гравитация Y». Таким образом, вы увидите фактические колебания вместо постоянного ускорения в одном направлении.