{
arma::uword Nsamp = 120;
arma::uword N = 6;
arma::uword M = 2;
arma::uword L = 1;
double P0 = 100;
double Q0 = 0.00003;
double R0 = 25;
double dT = 0.1;
arma::mat x = {0, 10, 1, 50, -0.08, -9};
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}};
arma::mat H = {{1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}};
arma::mat P = P0 * arma::eye(N, N);
arma::mat Q = arma::zeros(N, N);
Q(N - 2, N - 2) = 1;
Q(N - 1, N - 1) = 1;
Q = Q0 * Q;
arma::mat R = R0 * arma::eye(M, M);
arma::mat z(M, Nsamp, arma::fill::zeros);
arma::mat z0(M, Nsamp, arma::fill::zeros);
arma::mat xx(N, 1, arma::fill::zeros);
xx = x.t();
for (arma::uword n = 1; n < Nsamp; n++)
{
xx = A * xx + 0.1 * Q * arma::randn(N, 1);
z0.col(n) = H * xx;
}
z.row(0) = z0.row(0) + 0.001 * R0 * arma::randn(1, Nsamp);
z.row(1) = z0.row(1) + 0.8 * R0 * arma::randn(1, Nsamp);
arma::mat x_log(N, Nsamp);
arma::mat e_log(M, Nsamp);
arma::cube P_log(N, N, Nsamp);
arma::mat xs_log(M, Nsamp);
arma::cube Ps_log(N, N, Nsamp);
for (arma::uword n = 0; n < Nsamp; n++)
{
}
gp0.
window(
"Plot", 10, 10, 500, 500);
gp0.
plot_add(z0.row(0), z0.row(1),
"True Y",
"lines dashtype 2 linecolor \"black\"");
gp0.
plot_add(z.row(0), z.row(1),
"Meas Y",
"points");
gp0.
plot_add(x_log.row(0), x_log.row(1),
"Kalman");
gp0.
plot_add(xs_log.row(0), xs_log.row(1),
"RTS smooth");
return 0;
}