Jafar
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
demoKalman.tcl
00001 # $Id$ #
00002 
00003 #
00004 #/** An example on using a kalman filter in tcl. \file demoKalman.tcl  \ingroup filter */
00005 #
00006 
00007 #
00008 # LABARRERE "Le filtrage et ses application" Supaero
00009 # Ch IX "Filtre de Kalman"
00010 # IX.6 exemples
00011 # p 236-237
00012 
00013 # gnuplot commande
00014 # plot 'demoKalman.dat' u 1:2 w l, '' u 1:4 w l, '' u 1:6 w l
00015 
00016 package require kernel
00017 package require jmath
00018 package require filter
00019 
00020 
00021 # the time step (s)
00022 set dt "0.1"
00023 
00024 set t 0
00025 set x 0
00026 set v 1
00027 
00028 set z [jmath::new_vec 1]
00029 
00030 set gamma 1
00031 set r "0.1"
00032 
00033 set F [jmath::new_mat 2 2]
00034 jmath::setValue $F "((1, $dt), (0, 1))"
00035 
00036 set filter_gamma $gamma
00037 set filter_r $r
00038 
00039 set Q [jmath::new_sym_mat 2]
00040 jmath::setValue $Q \
00041 "(([expr $filter_gamma*pow($dt,4)/4], [expr $filter_gamma*pow($dt,3)/2]), \
00042  ([expr $filter_gamma*pow($dt,3)/2], [expr $filter_gamma*pow($dt,2)]))"
00043 
00044 set pm [filter::new_LinearPredictModel $F $Q]
00045 $pm setTimeStep $dt
00046 
00047 set H [jmath::new_mat 1 2]
00048 jmath::setValue $H "((1, 0))"
00049 
00050 set om [filter::new_LinearObserveModel $H]
00051 
00052 set R [jmath::new_vec 1]
00053 jmath::setValue $R "($filter_r)"
00054 
00055 $om setUncorrelatedR $R
00056 
00057 set Lambda_0 [jmath::new_sym_mat 2]
00058 jmath::setValue $Lambda_0 \
00059 "(($filter_r, 0), \
00060  (0,[expr 4*$filter_r/pow($dt,2)]))"
00061 
00062 set X_0 [jmath::new_vec 2]
00063 $X_0 clear
00064 
00065 set myFilter [filter::new_KalmanFilter 2]
00066 #$myFilter setCovUpdateType $::filter::BaseKalmanFilter_SIMPLE
00067 #$myFilter setCovUpdateType $::filter::BaseKalmanFilter_STANDARD
00068 $myFilter setCovUpdateType $::filter::BaseKalmanFilter_JOSEPH
00069 $myFilter init $X_0 $Lambda_0
00070 
00071 jmath::NormalDistribution myNormale 0 $r
00072 
00073 set myLog [kernel::new_DataLogger "demoKalman.dat"]
00074 $myLog addLoggable $myFilter
00075 
00076 $myLog log
00077 
00078 proc oneStep {} {
00079     global t dt x v z pm om myNormale myFilter myLog
00080     
00081     set x [expr "$x + $dt*$v"]
00082     set w [myNormale get]
00083 
00084     $z set 0 [expr "$x+$w"]
00085     
00086     $myFilter predict $pm
00087     $myFilter update $om $z
00088 
00089     $myLog log
00090 
00091 }
00092 
00093 proc step {{nSteps 50}} {
00094     # run nSteps of the filter
00095     for {set i 0} {$i < $nSteps} {incr i} {
00096         oneStep
00097     }
00098 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Wed Oct 15 2014 00:37:19 for Jafar by doxygen 1.7.6.1
LAAS-CNRS