Je fais un programme expérimental. J'ai un smartphone fixé sur le tableau de bord de la voiture avec un support, pendant le voyage je lis d'une application une valeur de capteur inertiel.Accélération au déplacement
J'ai lu précisément, Accéléromètre Data Time (à intervalle fixe) de chaque enregistrement en secondes.
Alors maintenant je voudrais passer de l'accélération verticale au déplacement vertical, pour ce faire je devrais faire une double intégration.
J'ai essayé la méthode d'Euler. De la condition initiale comme:
v0=0.v0=0
c'est la vitesse initiale au temps zéro.
x0=0.x0=0
c'est la position initiale au temps zéro.
définir,
deltaT=registrationinterval.deltaT=registrationinterval
(dans mon cas 0,04s)
puis pour chaque inscription faite, je ferai:
vi=vi−1+ayi∗deltaT.vi=vi−1+ayi∗deltaT
xi=xi−1+vi∗deltaT.xi=xi−1+vi∗deltaT
où i
représente la current, et i-1
précédent.
Mais le graphique que je reçois n'est pas très réaliste, en fait la vitesse et le déplacement ne font qu'augmenter, l'effet que j'ai dû obtenir est que le déplacement vertical est similaire au graphique d'accélération. Étant donné que l'application de cette procédure, je ai aussi une erreur élevée, il est possible que le graphique ne fait que croître, et je ne vois aucune sorte d'oscillation verticale?
J'ai aussi lu le filtre de Kalman peut être appliqué à l'avance pour nettoyer le signal, pourrait être une solution?
Ou devrais-je changer la méthode d'intégration et passer à l'Euler de Runge Kutta? (Le dernier, cependant, je n'ai pas la moindre idée de la façon dont il pourrait être réglé).
Ou quelqu'un connais un algorithme qui peut m'aider?
Ici, il y a une example des données enregistrées peuvent être utiles si: