Mercurial > hg > beaglert
diff core/Kalman.cpp @ 149:134bff10e561 ClockSync
Added simple one-variable one-measurement Kalman filter, Pid controller(which output is not used). Virtual clock is now much more precise and reactive for period. Still it is lagging behind a bit on the overall offset.
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Mon, 21 Sep 2015 03:12:21 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/Kalman.cpp Mon Sep 21 03:12:21 2015 +0100 @@ -0,0 +1,24 @@ +/* + * Kalman.cpp + * + * Created on: 20 Sep 2015 + * Author: giulio + */ +#include "Kalman.h" +void KalmanOne::init(double newQ, double newR, double newX){ + A = 1; + H = 1; + Q = newQ; // covariance of the error on the prediction + R = newR; // covariance of the measurement error + x = newX; // 5805.09230769231; % predicted x + P = 6; // predicted covariance + return; +} +double KalmanOne:: process(double z){ + double xp = A*x; // I. Prediction of the estimate + double Pp = A*P*A + Q; // Prediction of the error covariance + double K = Pp*H/(H*Pp*H + R); // II. Computation of Kalman gain + x = xp + K*(z - H*xp); // III. Computation of the estimate + P = Pp - K*H*Pp; // IV. Computation of the error covariance + return x; +}