-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathkalmanFilter.cpp
44 lines (39 loc) · 1.39 KB
/
kalmanFilter.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "kalmanFilter.h"
#include "consts.h"
KalmanFilter::KalmanFilter(QList<int> state)
{
mState = state;
for (int i = 0; i < GloveConsts::numberOfSensors; i++)
{
mMeasurementNoise.prepend(KalmanConsts::measuredNoise);
mEnviromentNoise.prepend(KalmanConsts::enviromentNoise);
mPrevValueFactor.prepend(KalmanConsts::prevValueFactor);
mMeasuredValueFactor.prepend(KalmanConsts::measuredValueFactor);
mCovariance.prepend(KalmanConsts::covariance);
}
}
void KalmanFilter::correct(QList<int> data)
{
for (int i = 0; i < GloveConsts::numberOfSensors; i++)
{
//prediction
mPredicateState.removeAt(i);
mPredicateState.insert(i, mPrevValueFactor.at(i) * mState.at(i));
mPredicateCovaiance.removeAt(i);
mPredicateCovaiance.insert(i, mPrevValueFactor.at(i) * mCovariance.at(i) * mPrevValueFactor.at(i)
+ mMeasurementNoise.at(i));
//data correction
qreal kalmanCoeff = mMeasuredValueFactor.at(i) * mPredicateCovaiance.at(i) /
(mMeasuredValueFactor.at(i) * mPredicateCovaiance.at(i) * mMeasuredValueFactor.at(i)
+ mEnviromentNoise.at(i));
mState.removeAt(i);
mState.insert(i, (int)(mPredicateState.at(i) + kalmanCoeff * (data.at(i)
- mMeasuredValueFactor.at(i) * mPredicateState.at(i))));
mCovariance.removeAt(i);
mCovariance.insert(i, (1 - kalmanCoeff * mMeasuredValueFactor.at(i)) * mPredicateCovaiance.at(i));
}
}
QList<int> KalmanFilter::getState()
{
return mState;
}