00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef KFILTER_IMPL_HPP
00028 #define KFILTER_IMPL_HPP
00029
00032
00033 namespace Kalman {
00034
00035 template<typename T, K_UINT_32 BEG, bool OQ, bool OVR, bool DBG>
00036 KFilter<T, BEG, OQ, OVR, DBG>::~KFilter() {}
00037
00038 template<typename T, K_UINT_32 BEG, bool OQ, bool OVR, bool DBG>
00039 void KFilter<T, BEG, OQ, OVR, DBG>::makeBaseB() {}
00040
00041 template<typename T, K_UINT_32 BEG, bool OQ, bool OVR, bool DBG>
00042 void KFilter<T, BEG, OQ, OVR, DBG>::makeB() {}
00043
00044 template<typename T, K_UINT_32 BEG, bool OQ, bool OVR, bool DBG>
00045 void KFilter<T, BEG, OQ, OVR, DBG>::makeProcess() {
00046
00047
00048 makeB();
00049
00050 K_UINT_32 i, j;
00051 x__.resize(n);
00052
00053 for (i = BEG; i < n + BEG; ++i) {
00054
00055 x__(i) = T(0.0);
00056
00057 for (j = BEG; j < n + BEG; ++j)
00058 x__(i) += A(i,j) * x(j);
00059
00060 for (j = BEG; j < nu + BEG; ++j)
00061 x__(i) += B(i,j) * u(j);
00062
00063 }
00064
00065 x.swap(x__);
00066
00067 }
00068
00069 template<typename T, K_UINT_32 BEG, bool OQ, bool OVR, bool DBG>
00070 void KFilter<T, BEG, OQ, OVR, DBG>::makeMeasure() {
00071
00072
00073 K_UINT_32 i, j;
00074
00075 z.resize(m);
00076 for (i = BEG; i < m + BEG; ++i) {
00077
00078 z(i) = T(0.0);
00079
00080 for (j = BEG; j < n + BEG; ++j)
00081 z(i) += H(i,j) * x(j);
00082
00083 }
00084
00085 }
00086
00087 template<typename T, K_UINT_32 BEG, bool OQ, bool OVR, bool DBG>
00088 void KFilter<T, BEG, OQ, OVR, DBG>::sizeUpdate() {
00089
00090 if (flags & ( KALMAN_N_MODIFIED | KALMAN_NU_MODIFIED ) ) {
00091 B.resize(n, nu);
00092 makeBaseB();
00093 }
00094
00095 EKFilter<T, BEG, OQ, OVR, DBG>::sizeUpdate();
00096 }
00097
00098 }
00099
00100 #endif