16 arma::uword Nsamp = 120;
32 arma::mat x = { 0, 10, 1, 50, -0.08, -9 };
35 arma::mat A = { { 1, 0, dT, 0, dT * dT / 2, 0 }, { 0, 1, 0, dT, 0, dT * dT / 2 }, { 0, 0, 1, 0, dT, 0 }, { 0, 0, 0, 1, 0, dT }, { 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1 } };
38 arma::mat H = { { 1, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0 } };
41 arma::mat P = P0 * arma::eye( N, N );
43 arma::mat Q = arma::zeros( N, N );
44 Q( N - 2, N - 2 ) = 1;
45 Q( N - 1, N - 1 ) = 1;
49 arma::mat R = R0 * arma::eye( M, M );
53 arma::mat z( M, Nsamp, arma::fill::zeros );
54 arma::mat z0( M, Nsamp, arma::fill::zeros );
56 arma::mat xx( N, 1, arma::fill::zeros );
58 for( arma::uword n = 1; n < Nsamp; n++ )
60 xx = A * xx + 0.1 * Q * arma::randn( N, 1 );
64 z.row( 0 ) = z0.row( 0 ) + 0.001 * R0 * arma::randn( 1, Nsamp );
65 z.row( 1 ) = z0.row( 1 ) + 0.8 * R0 * arma::randn( 1, Nsamp );
67 arma::mat x_log( N, Nsamp );
68 arma::mat e_log( M, Nsamp );
69 arma::cube P_log( N, N, Nsamp );
70 arma::mat xs_log( M, Nsamp );
71 arma::cube Ps_log( N, N, Nsamp );
74 for( arma::uword n = 0; n < Nsamp; n++ )
77 kalman.
update( z.col( n ) );
80 e_log.col( n ) = kalman.
get_err();
85 kalman.
rts_smooth( x_log, P_log, xs_log, Ps_log );
89 gp0.
window(
"Plot", 10, 10, 500, 500 );
91 gp0.
plot_add( z0.row( 0 ), z0.row( 1 ),
"True Y",
"lines dashtype 2 linecolor \"black\"" );
92 gp0.
plot_add( z.row( 0 ), z.row( 1 ),
"Meas Y",
"points" );
93 gp0.
plot_add( x_log.row( 0 ), x_log.row( 1 ),
"Kalman" );
94 gp0.
plot_add( xs_log.row( 0 ), xs_log.row( 1 ),
"RTS smooth" );