Мне нужно интегрировать сигнал от акселерометра, чтобы получить скорость и положение во времени.
Я пробую код на некоторых сгенерированных кодом данных ускорения: 1) прямоугольная волна 2) пилообразная 3)sin
Полученная функция скорости в порядке, проблема с полученной функцией положения, интегрирующей скорость.В каждом случае (squarewave, sawtooth, sin) функция с двойной дискретной интеграцией показывает линейный член, наложенный на ожидаемый колебательный.
Я выполнил эту дискретную интеграцию как с функцией diffinv()
, так и с этойПользовательская функция, которую я написал:
#function that, given a function sampled at some time values, calculates its primitive
calculatePrimitive<-function(f_t, time, initialValue){
F_t<-0
F_t[1]<-initialValue
for (i in 2:length(f_t)) {
F_t[i] <- F_t[i-1] + (( (f_t[i]+f_t[i-1])/2 )*(time[i]-time[i-1]) )
}
F_t
}
Результат один и тот же, независимо от того, какую функцию я использую для выполнения дискретного интегрирования, и она показана на прилагаемых графиках для случаев 1) - 3).
Я не понимаю, почему это происходит, когда, независимо от того, что представляют собой данные ускорения, дискретное интегрирование применяется к данным, которые были получены самим дискретным интегрированием.