| | 272 | * \brief Extended Kalman Filter with UD matrices in fixed point16 arithmetic |
| | 273 | * |
| | 274 | * An approximation of the exact Bayesian filter with Gaussian noices and non-linear evolutions of their mean. |
| | 275 | */ |
| | 276 | class EKFfixedUD3 : public BM { |
| | 277 | public: |
| | 278 | LOG_LEVEL(EKFfixedUD3,logU, logG, logD, logA, logC, logP); |
| | 279 | |
| | 280 | void init_ekf3(double Tv); |
| | 281 | void ekf3(double ux, double uy, double isxd, double isyd); |
| | 282 | |
| | 283 | /* Constants - definovat jako konstanty ?? ?kde je vyhodnejsi aby v pameti byli?*/ |
| | 284 | int16 Q[9]; /* matrix [4,4] */ |
| | 285 | int16 R[4]; /* matrix [2,2] */ |
| | 286 | |
| | 287 | int16 x_est[3]; /* estimate and prediction */ |
| | 288 | int16 y_est[2]; /* estimate and prediction */ |
| | 289 | int16 y_old[2]; /* estimate and prediction */ |
| | 290 | |
| | 291 | int16 PSI[9]; /* matrix [4,4] */ |
| | 292 | int16 PSIU[9]; /* matrix PIS*U, [4,4] */ |
| | 293 | int16 C[6]; /* matrix [4,4] */ |
| | 294 | |
| | 295 | int16 Uf[9]; // upper triangular of covariance (inplace) |
| | 296 | int16 Df[3]; // diagonal covariance |
| | 297 | int16 Dfold[3]; // temp of D |
| | 298 | int16 G[9]; // temp for bierman |
| | 299 | |
| | 300 | int16 cA, cB, cC, cG, cF, cH; // cD, cE, cF, cI ... nepouzivane |
| | 301 | |
| | 302 | enorm<fsqmat> E; |
| | 303 | mat Ry; |
| | 304 | |
| | 305 | public: |
| | 306 | //! Default constructor |
| | 307 | EKFfixedUD3 ():BM(),E(),Ry(2,2){ |
| | 308 | int16 i; |
| | 309 | for(i=0;i<9;i++){Q[i]=0;} |
| | 310 | for(i=0;i<4;i++){R[i]=0;} |
| | 311 | |
| | 312 | for(i=0;i<3;i++){x_est[i]=0;} |
| | 313 | for(i=0;i<2;i++){y_est[i]=0;} |
| | 314 | for(i=0;i<2;i++){y_old[i]=0;} |
| | 315 | for(i=0;i<9;i++){Uf[i]=0;} |
| | 316 | for(i=0;i<3;i++){Df[i]=0;} |
| | 317 | for(i=0;i<4;i++){G[i]=0;} |
| | 318 | for(i=0;i<3;i++){Dfold[i]=0;} |
| | 319 | |
| | 320 | for(i=0;i<9;i++){PSI[i]=0;} |
| | 321 | for(i=0;i<6;i++){C[i]=0;} |
| | 322 | |
| | 323 | set_dim(3); |
| | 324 | dimc = 2; |
| | 325 | dimy = 2; |
| | 326 | E._mu()=zeros(3); |
| | 327 | E._R()=zeros(3,3); |
| | 328 | init_ekf3(0.000125); |
| | 329 | }; |
| | 330 | //! Here dt = [yt;ut] of appropriate dimensions |
| | 331 | void bayes ( const vec &yt, const vec &ut ); |
| | 332 | //!dummy! |
| | 333 | const epdf& posterior() const {return E;}; |
| | 334 | void log_register(logger &L, const string &prefix){ |
| | 335 | BM::log_register ( L, prefix ); |
| | 336 | }; |
| | 337 | //void from_setting(); |
| | 338 | }; |
| | 339 | |
| | 340 | UIREGISTER(EKFfixedUD3); |
| | 341 | |
| | 342 | /*! |