Двойное дискретное интегрирование периодической функции с R: дважды интегрированная функция содержит линейный артефакт - PullRequest
0 голосов
/ 24 ноября 2018

Мне нужно интегрировать сигнал от акселерометра, чтобы получить скорость и положение во времени.

Я пробую код на некоторых сгенерированных кодом данных ускорения: 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).

squarewave

sawtooth

sinusoid

Я не понимаю, почему это происходит, когда, независимо от того, что представляют собой данные ускорения, дискретное интегрирование применяется к данным, которые были получены самим дискретным интегрированием.

...