easykf-2.04
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros Pages
ukf_types.h
Go to the documentation of this file.
1 /* ukf_types.h
2  *
3  * Copyright (C) 2011-2014 Jeremy Fix
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or (at
8  * your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  */
19 
20 #ifndef UKF_TYPES_H
21 #define UKF_TYPES_H
22 
23 #include <gsl/gsl_vector.h>
24 #include <gsl/gsl_matrix.h>
25 #include <gsl/gsl_blas.h>
26 #include <gsl/gsl_math.h>
27 #include <gsl/gsl_linalg.h>
28 #include "ukf_math.h"
29 
30 namespace ukf
31 {
32 
36  typedef enum
37  {
46  } ProcessNoise;
47 
48  namespace parameter
49  {
50  class EvolutionNoise;
55  typedef struct
56  {
60  double kpa;
61 
65  double alpha;
66 
70  double beta;
71 
75  double lambda;
76 
80  double gamma;
81 
85  //double evolution_noise_parameter;
86 
90  //double evolution_noise;
91 
95  //EvolutionNoise evolution_noise_type;
97 
102 
106  double prior_pi;
107 
111  int n;
112 
117 
121  int no;
122 
123  } ukf_param;
124 
129  //typedef double (*ukf_function_scalar) (gsl_vector * param, gsl_vector * input);
130 
136  typedef struct
137  {
141  gsl_vector * Kk;
142 
146  gsl_matrix * Kk_mat;
147 
151  gsl_matrix * Kk_mat_T;
152 
156  gsl_vector * Pwdk;
157 
161  gsl_matrix * Prrk;
162 
166  double Peek;
167 
171  double Pddk;
172 
176  gsl_vector * w;
177 
181  gsl_vector * wk;
182 
186  gsl_matrix * Pk;
187 
191  gsl_matrix * Sk;
192 
196  gsl_vector * cSk;
197 
203  gsl_vector * wm;
204 
210  gsl_vector * wc;
211 
215  gsl_vector * dk;
216 
220  double ino_dk;
221 
225  double d_mean;
226 
230  gsl_matrix * sigmaPoints;
231 
235  gsl_vector * temp_n;
236 
240  gsl_matrix * temp_n_n;
241 
243 
249  typedef struct
250  {
254  gsl_matrix * Kk;
255 
259  gsl_matrix * Kk_T;
260 
264  gsl_matrix * Pwdk;
265 
269  gsl_matrix * Pddk;
270 
274  gsl_matrix * Peek;
275 
279  gsl_matrix * Prrk;
280 
284  gsl_vector * w;
285 
289  gsl_vector * wk;
290 
294  gsl_matrix * Pk;
295 
299  gsl_matrix * Sk;
300 
304  gsl_vector * cSk;
305 
311  gsl_vector * wm;
312 
318  gsl_vector * wc;
319 
323  gsl_matrix * dk;
324 
328  gsl_vector * d_mean;
329 
333  gsl_vector * ino_dk;
334 
338  gsl_matrix * sigmaPoints;
339 
343  gsl_vector * vec_temp_n;
344 
348  gsl_vector * vec_temp_output;
349 
353  gsl_matrix * mat_temp_n_1;
354 
358  gsl_matrix * mat_temp_n_output;
359 
363  gsl_matrix * mat_temp_output_n;
364 
368  gsl_matrix * mat_temp_1_output;
369 
373  gsl_matrix * mat_temp_output_1;
374 
379 
383  gsl_matrix * mat_temp_n_n;
384  } ukf_state;
385 
390  {
391  protected:
393  public:
394  EvolutionNoise(double initial_value) : _initial_value(initial_value) {};
395  void init(ukf_param &p, ukf_state &s)
396  {
397  gsl_matrix_set_identity(s.Prrk);
398  gsl_matrix_scale(s.Prrk, _initial_value);
399  }
401  {
402  gsl_matrix_set_identity(s.Prrk);
403  gsl_matrix_scale(s.Prrk, _initial_value);
404  }
405 
406  virtual void updateEvolutionNoise(ukf_param &p, ukf_state &s) = 0;
407  virtual void updateEvolutionNoise(ukf_param &p, ukf_scalar_state &s) = 0;
408  };
409 
414  {
415  double _decay, _lower_bound;
416  public:
417  EvolutionAnneal(double initial_value, double decay, double lower_bound) : EvolutionNoise(initial_value),
418  _decay(decay),
419  _lower_bound(lower_bound)
420  { };
421 
423  {
424  for(int i = 0 ; i < p.n ; ++i)
425  {
426  for(int j = 0 ; j < p.n ; ++j)
427  {
428  if(i == j)
429  gsl_matrix_set(s.Prrk, i, i, ukf::math::max(_decay * gsl_matrix_get(s.Prrk,i,i),_lower_bound));
430  else
431  gsl_matrix_set(s.Prrk, i, j, 0.0);
432  }
433  }
434  }
436  {
437  for(int i = 0 ; i < p.n ; ++i)
438  {
439  for(int j = 0 ; j < p.n ; ++j)
440  {
441  if(i == j)
442  gsl_matrix_set(s.Prrk, i, i, ukf::math::max(_decay * gsl_matrix_get(s.Prrk,i,i),_lower_bound));
443  else
444  gsl_matrix_set(s.Prrk, i, j, 0.0);
445  }
446  }
447  }
448  };
449 
454  {
455  double _decay;
456  public:
457  EvolutionRLS(double initial_value, double decay) : EvolutionNoise(initial_value), _decay(decay)
458  {
459  if(ukf::math::cmp_equal(_decay, 0.0))
460  printf("Forgetting factor should not be null !!\n");
461  };
462 
464  {
465  gsl_matrix_memcpy(s.Prrk, s.Pk);
466  gsl_matrix_scale(s.Prrk, 1.0 / _decay - 1.0);
467  }
469  {
470  gsl_matrix_memcpy(s.Prrk, s.Pk);
471  gsl_matrix_scale(s.Prrk, 1.0 / _decay - 1.0);
472  }
473  };
474 
479  {
480  double _alpha;
481  public:
482  EvolutionRobbinsMonro(double initial_value, double alpha) : EvolutionNoise(initial_value),
483  _alpha(alpha)
484  { };
485 
487  {
488  // Compute Kk * ino_yk
489  gsl_matrix_view mat_view = gsl_matrix_view_array(s.ino_dk->data, p.no, 1);
490  gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, s.Kk, &mat_view.matrix, 0.0, s.mat_temp_n_1);
491  // Compute : Prrk = (1 - alpha) Prrk + alpha . (Kk * ino_dk) * (Kk * ino_dk)^T
492  gsl_blas_dgemm(CblasNoTrans, CblasTrans, _alpha, s.mat_temp_n_1, s.mat_temp_n_1, (1.0 - _alpha),s.Prrk);
493  }
495  {
496  // Compute Prrk = (1 - alpha) Prrk + alpha . ino_dk^2 Kk Kk^T
497  gsl_matrix_view mat_view = gsl_matrix_view_array(s.Kk->data,p.n,1);
498  gsl_blas_dgemm(CblasNoTrans, CblasTrans, gsl_pow_2(s.ino_dk) * _alpha, &mat_view.matrix, &mat_view.matrix, 1.0 - _alpha, s.Prrk);
499  }
500  };
501 
502 
503  } // parameter
504 
505  namespace state
506  {
507 
508  class EvolutionNoise;
513  typedef struct
514  {
518  double kpa;
519 
523  double alpha;
524 
528  double beta;
529 
533  double lambda;
534  double lambda_aug;
535 
539  double gamma;
540  double gamma_aug;
541 
545  int n;
546 
551 
556 
560  int no;
561 
565  double prior_x;
566 
571 
575  //double process_noise;
576 
581 
582  } ukf_param;
583 
589  typedef struct
590  {
591  gsl_vector * params; // The parameters of the process equation or anything you need to give to the process function
592 
593  gsl_vector * xi; // State vector
594  gsl_matrix * xi_prediction; // Prediction of the states for each sigma-point
595  gsl_vector * xi_mean; // Mean state vector
596  gsl_matrix * Pxxi; // State covariance matrix
597  gsl_matrix * cholPxxi; // Cholesky decomposition of Pxxi
598  gsl_matrix * Pvvi; // Process noise covariance
599  gsl_matrix * cholPvvi; // Cholesky decomposition of the process noise
600 
601  gsl_matrix * yi_prediction; // Prediction of the measurements for each sigma-point
602  gsl_vector * yi_mean; // Mean measurement vector
603  gsl_vector * ino_yi; // Innovations
604  gsl_matrix * Pyyi; // Measurement covariance matrix
605  gsl_matrix * Pnni; // Measurement noise covariance
606 
607  gsl_matrix * Pxyi; // State-Measurement covariance matrix
608 
609  gsl_vector * sigmaPoint; // Vector holding one sigma point
610  gsl_matrix * sigmaPoints; // Matrix holding all the sigma points
611 
612  gsl_vector * sigmaPointMeasure; // one sigma point for the observation equation
613  gsl_matrix * sigmaPointsMeasure; // Sigma points for the observation equation
614 
615  gsl_vector * wm_j; // Weights used to compute the mean of the sigma points images
616  gsl_vector * wc_j; // Weights used to update the covariance matrices
617 
618  gsl_vector * wm_aug_j; // Augmented set of Weights used to compute the mean of the sigma points images for the observations
619  gsl_vector * wc_aug_j; // Augmented set of Weights used to update the covariance matrices of the observations
620 
621  gsl_matrix * Ki; // Kalman gain
622  gsl_matrix * Ki_T; // Its transpose
623 
624  gsl_vector * temp_n;
625  gsl_matrix * temp_n_n;
626  gsl_matrix * temp_n_1;
627  gsl_matrix * temp_1_n;
628 
629  gsl_matrix * temp_n_no;
630 
631  gsl_matrix * temp_no_no;
632  gsl_matrix * temp_no_1;
633  gsl_matrix * temp_1_no;
634  } ukf_state;
635 
640  {
641  protected:
643  public:
644  EvolutionNoise(double initial_value) : _initial_value(initial_value) {};
645  void init(ukf_param &p, ukf_state &s)
646  {
647  gsl_matrix_set_identity(s.Pvvi);
648  gsl_matrix_scale(s.Pvvi, _initial_value);
649  gsl_matrix_set_identity(s.cholPvvi);
650  gsl_matrix_scale(s.cholPvvi, sqrt(_initial_value));
651  }
652 
653  virtual void updateEvolutionNoise(ukf_param &p, ukf_state &s) = 0;
654  };
655 
660  {
661  double _decay, _lower_bound;
662  public:
663  EvolutionAnneal(double initial_value, double decay, double lower_bound) : EvolutionNoise(initial_value),
664  _decay(decay),
665  _lower_bound(lower_bound)
666  { };
667 
669  {
670  double value;
671  for(int i = 0 ; i < p.n ; ++i)
672  {
673  for(int j = 0 ; j < p.n ; ++j)
674  {
675  if(i == j)
676  {
677  value = ukf::math::max(_decay * gsl_matrix_get(s.Pvvi,i,i),_lower_bound);
678  gsl_matrix_set(s.Pvvi, i, i, value);
679  gsl_matrix_set(s.cholPvvi, i ,i, sqrt(value));
680  }
681  else
682  {
683  gsl_matrix_set(s.Pvvi, i, j, 0.0);
684  gsl_matrix_set(s.cholPvvi, i, j, 0.0);
685  }
686  }
687  }
688  }
689  };
690 
695  {
696  double _decay;
697  public:
698  EvolutionRLS(double initial_value, double decay) : EvolutionNoise(initial_value), _decay(decay)
699  {
700  if(ukf::math::cmp_equal(_decay, 0.0))
701  printf("Forgetting factor should not be null !!\n");
702  };
703 
705  {
706  gsl_matrix_memcpy(s.Pvvi, s.Pxxi);
707  gsl_matrix_scale(s.Pvvi, 1.0 / _decay - 1.0);
708  gsl_matrix_memcpy(s.cholPvvi, s.Pvvi);
709  gsl_linalg_cholesky_decomp(s.cholPvvi);
710  // Set all the elements of cholPvvi strictly above the diagonal to zero
711  for(int j = 0 ; j < p.n ; j++)
712  for(int k = j+1 ; k < p.n ; k++)
713  gsl_matrix_set(s.cholPvvi,j,k,0.0);
714  }
715  };
716 
721  {
722  double _alpha;
723  public:
724  EvolutionRobbinsMonro(double initial_value, double alpha) : EvolutionNoise(initial_value),
725  _alpha(alpha)
726  { };
727 
729  {
730  // Compute Kk * ino_yk
731  gsl_blas_dgemv(CblasNoTrans, 1.0, s.Ki, s.ino_yi, 0.0, s.temp_n);
732  // Compute : Prrk = (1 - alpha) Prrk + alpha . (Kk * ino_dk) * (Kk * ino_dk)^T
733  gsl_matrix_view mat_view = gsl_matrix_view_array(s.temp_n->data,p.n,1);
734  gsl_blas_dgemm(CblasNoTrans, CblasTrans, _alpha, &mat_view.matrix, &mat_view.matrix, (1.0 - _alpha),s.Pvvi);
735  }
736  };
737 
738 
739  } // namespace for state estimation
740 
741  namespace srstate
742  {
743 
744 
749  typedef struct
750  {
754  double kpa;
755 
759  double alpha;
760 
764  double beta;
765 
769  double lambda;
770  double lambda_aug;
771 
775  double gamma;
776  double gamma_aug;
777 
781  int n;
782 
787 
792 
796  int no;
797 
801  double prior_x;
802 
807 
812 
817 
818  } ukf_param;
819 
825  typedef struct
826  {
827  gsl_vector * params; // The parameters of the process equation or anything you need to give to the process function
828 
829  gsl_vector * xi; // State vector
830  gsl_matrix * xi_prediction; // Prediction of the states for each sigma-point
831  gsl_vector * xi_mean; // Mean state vector
832  gsl_matrix * Sxi; // Cholesky factor of variance covariance of the state
833  gsl_matrix * Svi; // Cholesky factor of the process noise
834 
835  gsl_matrix * yi_prediction; // Prediction of the measurements for each sigma-point
836  gsl_vector * yi_mean; // Mean measurement vector
837  gsl_vector * ino_yi; // Innovations
838  gsl_matrix * Syi; // Cholesky factor of the variance covariance of the output
839  gsl_matrix * Sni; // Cholesky factor of the measurement noise
840 
841  gsl_matrix * Pxyi; // State-Measurement covariance matrix
842 
843  gsl_vector * sigmaPoint; // Vector holding one sigma point
844  gsl_matrix * sigmaPoints; // Matrix holding all the sigma points
845 
846  gsl_vector * sigmaPointMeasure; // one sigma point for the observation equation
847  gsl_matrix * sigmaPointsMeasure; // Sigma points for the observation equation
848 
849  gsl_matrix * U;
850 
851  gsl_vector * wm_j; // Weights used to compute the mean of the sigma points images
852  gsl_vector * wc_j; // Weights used to update the covariance matrices
853 
854  gsl_vector * wm_aug_j; // Augmented set of Weights used to compute the mean of the sigma points images for the observations
855  gsl_vector * wc_aug_j; // Augmented set of Weights used to update the covariance matrices of the observations
856 
857  gsl_matrix * Ki; // Kalman gain
858  gsl_matrix * Ki_T; // Its transpose
859 
860  gsl_vector * temp_n;
861  gsl_vector * temp_no;
862 
863  gsl_matrix * temp_n_n;
864  gsl_matrix * temp_n_1;
865  gsl_matrix * temp_1_n;
866 
867  gsl_matrix * temp_n_no;
868 
869  gsl_matrix * temp_no_no;
870  gsl_matrix * temp_no_1;
871  gsl_matrix * temp_1_no;
872 
873  gsl_matrix * temp_3n_n;
874  gsl_matrix * temp_2nno_no;
875  } ukf_state;
876 
877 
878  } // namespace for state estimation, square root implementation
879 
880 }
881 
882 
883 #endif // UKF_TYPES_H
gsl_vector * wm_aug_j
Definition: ukf_types.h:618
gsl_matrix * Sxi
Definition: ukf_types.h:832
gsl_matrix * Ki_T
Definition: ukf_types.h:622
gsl_matrix * xi_prediction
Definition: ukf_types.h:830
void init(ukf_param &p, ukf_state &s)
Definition: ukf_types.h:645
EvolutionNoise * evolution_noise
Parameter used for the evolution noise.
Definition: ukf_types.h:96
gsl_vector * yi_mean
Definition: ukf_types.h:836
EvolutionNoise(double initial_value)
Definition: ukf_types.h:644
gsl_vector * cSk
Vector holding one column of Sk, of size .
Definition: ukf_types.h:196
void updateEvolutionNoise(ukf_param &p, ukf_state &s)
Definition: ukf_types.h:463
gsl_vector * w
Parameter vector, of size .
Definition: ukf_types.h:176
gsl_vector * Pwdk
Covariance of : , of size .
Definition: ukf_types.h:156
gsl_matrix * temp_n_no
Definition: ukf_types.h:629
gsl_vector * temp_n
Definition: ukf_types.h:860
void updateEvolutionNoise(ukf_param &p, ukf_state &s)
Definition: ukf_types.h:668
gsl_vector * dk
Temporary vector holding the image of the sigma points, of size .
Definition: ukf_types.h:215
gsl_vector * wc
Weights used to update the covariance matrices.
Definition: ukf_types.h:318
double lambda_aug
Definition: ukf_types.h:534
double Peek
Covariance of the observation noise.
Definition: ukf_types.h:166
gsl_matrix * mat_temp_1_output
Temporary matrix of size .
Definition: ukf_types.h:368
gsl_matrix * U
Definition: ukf_types.h:849
gsl_matrix * sigmaPointsMeasure
Definition: ukf_types.h:613
Pointer to the function to approximate in the scalar case.
Definition: ukf_types.h:136
Robbins-Monro evolution noise.
Definition: ukf_types.h:478
EvolutionRobbinsMonro(double initial_value, double alpha)
Definition: ukf_types.h:724
gsl_matrix * Sni
Definition: ukf_types.h:839
Structure holding the matrices manipulated by the statistical linearization in the vectorial case for...
Definition: ukf_types.h:589
gsl_matrix * Pddk
Covariance of the output, a matrix of size .
Definition: ukf_types.h:269
gsl_vector * wc_j
Definition: ukf_types.h:616
void updateEvolutionNoise(ukf_param &p, ukf_scalar_state &s)
Definition: ukf_types.h:435
double kpa
, is a good choice. According to van der Merwe, its value is not critical
Definition: ukf_types.h:60
gsl_matrix * temp_n_n
Definition: ukf_types.h:625
gsl_vector * wk
Temporary vector, holding a sigma-point.
Definition: ukf_types.h:181
gsl_matrix * Sk
Matrix holding the Cholesky decomposition of , of size .
Definition: ukf_types.h:191
gsl_matrix * Pk
Covariance matrix of the parameters, of size .
Definition: ukf_types.h:186
double d_mean
Variable holding the mean of the sigma points image.
Definition: ukf_types.h:225
int nbSamples
Number of sigma-points
Definition: ukf_types.h:550
gsl_vector * wm_aug_j
Definition: ukf_types.h:854
gsl_matrix * yi_prediction
Definition: ukf_types.h:601
gsl_matrix * Pyyi
Definition: ukf_types.h:604
double _initial_value
Definition: ukf_types.h:642
void init(ukf_param &p, ukf_scalar_state &s)
Definition: ukf_types.h:400
double lambda
Definition: ukf_types.h:533
int nbSamplesMeasure
Number of sigma-points
Definition: ukf_types.h:555
double observation_noise
Covariance of the observation noise.
Definition: ukf_types.h:101
gsl_matrix * mat_temp_output_1
Temporary matrix of size .
Definition: ukf_types.h:373
double measurement_noise
Covariance of the observation noise.
Definition: ukf_types.h:816
gsl_matrix * sigmaPoints
Matrix holding the sigma points in the columns, of size .
Definition: ukf_types.h:338
EvolutionAnneal(double initial_value, double decay, double lower_bound)
Definition: ukf_types.h:417
void updateEvolutionNoise(ukf_param &p, ukf_state &s)
Definition: ukf_types.h:422
gsl_vector * ino_yi
Definition: ukf_types.h:603
gsl_matrix * Kk
Kalman gain, a matrix of size .
Definition: ukf_types.h:254
gsl_matrix * Pxyi
Definition: ukf_types.h:841
Structure holding the parameters of the Unscented Kalman Filter.
Definition: ukf_types.h:55
gsl_matrix * Pxyi
Definition: ukf_types.h:607
Annealing type evolution noise.
Definition: ukf_types.h:413
Structure holding the parameters of the statistical linearization.
Definition: ukf_types.h:749
gsl_vector * ino_dk
Vector holding the inovation, of size ŝ
Definition: ukf_types.h:333
double kpa
, is a good choice. According to van der Merwe, its value is not critical
Definition: ukf_types.h:518
double beta
Non negative weights used to introduce knowledge about the higher order moments of the distribution...
Definition: ukf_types.h:70
gsl_matrix * Pxxi
Definition: ukf_types.h:596
gsl_matrix * mat_temp_output_output
Temporary matrix of size .
Definition: ukf_types.h:378
gsl_matrix * temp_n_n
Temporary matrix.
Definition: ukf_types.h:240
EvolutionRLS(double initial_value, double decay)
Definition: ukf_types.h:698
gsl_vector * d_mean
Vector holding the mean of the sigma points image, of size ŝ
Definition: ukf_types.h:328
double gamma
Definition: ukf_types.h:539
gsl_vector * xi_mean
Definition: ukf_types.h:595
gsl_vector * wk
Temporary vector holding one sigma point, of size .
Definition: ukf_types.h:289
gsl_vector * wc_aug_j
Definition: ukf_types.h:855
double max(double a, double b)
Definition: ukf_math.h:40
gsl_matrix * temp_no_1
Definition: ukf_types.h:870
int n
Number of parameters to estimate.
Definition: ukf_types.h:111
gsl_vector * w
Parameter vector, of size .
Definition: ukf_types.h:284
gsl_matrix * sigmaPoints
Definition: ukf_types.h:844
gsl_matrix * dk
Temporary matrix holding the image of the sigma points, of size .
Definition: ukf_types.h:323
ProcessNoise
The different types of implemented process noise for UKF state estimation.
Definition: ukf_types.h:36
void init(ukf_param &p, ukf_state &s)
Definition: ukf_types.h:395
gsl_matrix * mat_temp_n_1
Temporary matrix of size .
Definition: ukf_types.h:353
gsl_vector * temp_no
Definition: ukf_types.h:861
Forgetting type evolution noise.
Definition: ukf_types.h:694
EvolutionRLS(double initial_value, double decay)
Definition: ukf_types.h:457
double beta
Non negative weights used to introduce knowledge about the higher order moments of the distribution...
Definition: ukf_types.h:764
gsl_matrix * Peek
Covariance of the observation noise, of size .
Definition: ukf_types.h:274
gsl_matrix * temp_1_no
Definition: ukf_types.h:871
Mother class from which the evolution noises inherit.
Definition: ukf_types.h:639
Structure holding the parameters of the statistical linearization.
Definition: ukf_types.h:513
gsl_matrix * temp_n_1
Definition: ukf_types.h:864
int no
Dimension of the output.
Definition: ukf_types.h:121
gsl_matrix * sigmaPoints
Definition: ukf_types.h:610
EvolutionAnneal(double initial_value, double decay, double lower_bound)
Definition: ukf_types.h:663
gsl_vector * cSk
Vector holding one column of Sk, of size .
Definition: ukf_types.h:304
gsl_vector * sigmaPointMeasure
Definition: ukf_types.h:612
gsl_vector * wm
Weights used to compute the mean of the sigma points' images.
Definition: ukf_types.h:203
double ino_dk
Innovation.
Definition: ukf_types.h:220
gsl_matrix * cholPvvi
Definition: ukf_types.h:599
gsl_matrix * Pvvi
Definition: ukf_types.h:598
double lambda_aug
Definition: ukf_types.h:770
double alpha
: "Size" of sigma-point distribution. Should be small if the function is strongly non-linear ...
Definition: ukf_types.h:65
gsl_matrix * Pk
Covariance matrix of the parameters, of size .
Definition: ukf_types.h:294
gsl_matrix * temp_n_no
Definition: ukf_types.h:867
gsl_vector * vec_temp_n
Temporary vector of size .
Definition: ukf_types.h:343
gsl_matrix * temp_1_n
Definition: ukf_types.h:865
ProcessNoise process_noise_type
Type of process noise.
Definition: ukf_types.h:806
The covariance of the evolution noise is defined as .
Definition: ukf_types.h:45
gsl_vector * wc_j
Definition: ukf_types.h:852
gsl_matrix * cholPxxi
Definition: ukf_types.h:597
gsl_vector * sigmaPoint
Definition: ukf_types.h:843
virtual void updateEvolutionNoise(ukf_param &p, ukf_state &s)=0
gsl_vector * params
Definition: ukf_types.h:591
gsl_matrix * mat_temp_n_output
Temporary matrix of size .
Definition: ukf_types.h:358
void updateEvolutionNoise(ukf_param &p, ukf_state &s)
Definition: ukf_types.h:486
gsl_matrix * Prrk
Covariance of the evolution noise.
Definition: ukf_types.h:161
EvolutionNoise * evolution_noise
Type of process noise.
Definition: ukf_types.h:570
gsl_vector * xi
Definition: ukf_types.h:593
gsl_vector * yi_mean
Definition: ukf_types.h:602
double alpha
: "Size" of sigma-point distribution. Should be small if the function is strongly non-linear ...
Definition: ukf_types.h:523
gsl_matrix * Pwdk
Covariance of : , of size .
Definition: ukf_types.h:264
double process_noise
Parameter used for the evolution noise.
Definition: ukf_types.h:811
void updateEvolutionNoise(ukf_param &p, ukf_state &s)
Definition: ukf_types.h:728
Structure holding the matrices manipulated by the statistical linearization in the vectorial case for...
Definition: ukf_types.h:825
int no
Dimension of the output : the measurements.
Definition: ukf_types.h:560
double kpa
, is a good choice. According to van der Merwe, its value is not critical
Definition: ukf_types.h:754
gsl_matrix * xi_prediction
Definition: ukf_types.h:594
gsl_matrix * Ki
Definition: ukf_types.h:857
gsl_matrix * Kk_mat
Temporary matrix for the kalman gain, a matrix of size .
Definition: ukf_types.h:146
gsl_matrix * temp_no_no
Definition: ukf_types.h:869
gsl_matrix * temp_no_1
Definition: ukf_types.h:632
void updateEvolutionNoise(ukf_param &p, ukf_state &s)
Definition: ukf_types.h:704
EvolutionNoise(double initial_value)
Definition: ukf_types.h:394
double prior_x
Prior estimate of the covariance matrix of the state.
Definition: ukf_types.h:565
double lambda
Definition: ukf_types.h:75
int nbSamplesMeasure
Number of sigma-points
Definition: ukf_types.h:791
gsl_matrix * Prrk
Covariance of the evolution noise, of size .
Definition: ukf_types.h:279
gsl_matrix * temp_no_no
Definition: ukf_types.h:631
double gamma
Definition: ukf_types.h:775
gsl_vector * wm_j
Definition: ukf_types.h:615
gsl_vector * xi_mean
Definition: ukf_types.h:831
Forgetting type evolution noise.
Definition: ukf_types.h:453
gsl_vector * params
Definition: ukf_types.h:827
double alpha
: "Size" of sigma-point distribution. Should be small if the function is strongly non-linear ...
Definition: ukf_types.h:759
int nbSamples
Number of sigma-points
Definition: ukf_types.h:786
gsl_matrix * temp_1_n
Definition: ukf_types.h:627
gsl_matrix * temp_2nno_no
Definition: ukf_types.h:874
gsl_matrix * temp_n_n
Definition: ukf_types.h:863
Robbins-Monro evolution noise.
Definition: ukf_types.h:720
int no
Dimension of the output : the measurements.
Definition: ukf_types.h:796
The covariance of the evolution noise is fixed to .
Definition: ukf_types.h:41
virtual void updateEvolutionNoise(ukf_param &p, ukf_state &s)=0
gsl_matrix * yi_prediction
Definition: ukf_types.h:835
gsl_vector * sigmaPointMeasure
Definition: ukf_types.h:846
Structure holding the matrices manipulated by the unscented kalman filter in the vectorial case...
Definition: ukf_types.h:249
double _initial_value
Definition: ukf_types.h:392
gsl_vector * wm_j
Definition: ukf_types.h:851
gsl_matrix * Kk_mat_T
Temporary matrix for the transpose of the kalman gain, a matrix of size .
Definition: ukf_types.h:151
gsl_vector * wc
Weights used to update the covariance matrices.
Definition: ukf_types.h:210
double lambda
Definition: ukf_types.h:769
Annealing type evolution noise.
Definition: ukf_types.h:659
int n
Size of the state vector.
Definition: ukf_types.h:781
gsl_matrix * mat_temp_n_n
Temporary matrix of size .
Definition: ukf_types.h:383
gsl_vector * xi
Definition: ukf_types.h:829
void updateEvolutionNoise(ukf_param &p, ukf_scalar_state &s)
Definition: ukf_types.h:468
gsl_matrix * Kk_T
The tranposed Kalman gain, a vector of size .
Definition: ukf_types.h:259
double prior_x
Prior estimate of the covariance matrix of the state.
Definition: ukf_types.h:801
gsl_vector * Kk
Kalman gain, a vector of size .
Definition: ukf_types.h:141
gsl_matrix * temp_1_no
Definition: ukf_types.h:633
void updateEvolutionNoise(ukf_param &p, ukf_scalar_state &s)
Definition: ukf_types.h:494
gsl_vector * temp_n
Temporary vector.
Definition: ukf_types.h:235
gsl_matrix * Syi
Definition: ukf_types.h:838
int n
Size of the state vector.
Definition: ukf_types.h:545
double prior_pi
Prior estimate of the covariance matrix.
Definition: ukf_types.h:106
gsl_matrix * Sk
Matrix holding the Cholesky decomposition of , of size .
Definition: ukf_types.h:299
gsl_matrix * Svi
Definition: ukf_types.h:833
gsl_matrix * temp_n_1
Definition: ukf_types.h:626
gsl_vector * wc_aug_j
Definition: ukf_types.h:619
bool cmp_equal(double x, double y)
Definition: ukf_math.h:50
gsl_matrix * temp_3n_n
Definition: ukf_types.h:873
gsl_matrix * Ki_T
Definition: ukf_types.h:858
gsl_vector * ino_yi
Definition: ukf_types.h:837
double gamma_aug
Definition: ukf_types.h:776
double gamma_aug
Definition: ukf_types.h:540
gsl_vector * vec_temp_output
Temporary vector of size .
Definition: ukf_types.h:348
double beta
Non negative weights used to introduce knowledge about the higher order moments of the distribution...
Definition: ukf_types.h:528
gsl_matrix * sigmaPointsMeasure
Definition: ukf_types.h:847
gsl_matrix * Pnni
Definition: ukf_types.h:605
double Pddk
Covariance of the output.
Definition: ukf_types.h:171
Mother class from which the evolution noises inherit.
Definition: ukf_types.h:389
double measurement_noise
Parameter used for the evolution noise.
Definition: ukf_types.h:580
gsl_vector * temp_n
Definition: ukf_types.h:624
double gamma
Definition: ukf_types.h:80
gsl_matrix * Ki
Definition: ukf_types.h:621
gsl_matrix * sigmaPoints
Matrix holding the sigma points in the columns, of size .
Definition: ukf_types.h:230
gsl_vector * wm
Weights used to compute the mean of the sigma points' images.
Definition: ukf_types.h:311
gsl_matrix * mat_temp_output_n
Temporary matrix of size .
Definition: ukf_types.h:363
EvolutionRobbinsMonro(double initial_value, double alpha)
Definition: ukf_types.h:482
gsl_vector * sigmaPoint
Definition: ukf_types.h:609
int nbSamples
Number of sigma-points
Definition: ukf_types.h:116