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