Пример #1
0
        public void KalmanFilteringTest()
        {
            var vectorBuilder = Vector <double> .Build;
            var matrixBuild   = Matrix <double> .Build;

            var resultPositon = vectorBuilder.Dense(6, 0);

            resultPositon[0] = -0.11712893894299961;
            resultPositon[1] = -0.0085413873210193024;
            resultPositon[2] = -0.00034048259997198428;
            resultPositon[3] = 0.47421163145835582;
            resultPositon[4] = -0.00690331375794314;
            resultPositon[5] = -0.00027109000134432605;

            double[,] prevariance =
            {
                {
                    0.242766594755489, 0.0523105449659795, 0.00101097341848172, 7.62628147622445e-09,
                    1.83912407997933e-06, 0.000104585919975806
                },
                {
                    0.0523105449659795, 7.99334660284189, 0.220587578642543, 1.83912407997933e-06, 0.000460038020961047,
                    0.0287783990337413
                },
                {
                    0.00101097341848172, 0.220587578642543, 10.3999959410456, 0.000104585919975806, 0.0287783990337413,
                    2.39999917381918
                },
                {
                    7.62628147622445e-09, 1.83912407997933e-06, 0.000104585919975806, 0.242766594755489,
                    0.0523105449659795, 0.00101097341848172
                },
                {
                    1.83912407997933e-06, 0.000460038020961047, 0.0287783990337413, 0.0523105449659795,
                    7.99334660284189, 0.220587578642543
                },
                {
                    0.000104585919975806, 0.0287783990337413, 2.39999917381918, 0.00101097341848172, 0.220587578642543,
                    10.3999959410456
                }
            };

            var varianceTemp = matrixBuild.DenseOfArray(prevariance);

            var m1 = MatlabReader.ReadAll <double>("testData.mat");

            KalmanFiltering kalmanFiltering = new KalmanFiltering();

            foreach (Matrix <double> testData in m1.Values)
            {
                var result = kalmanFiltering.TraceTableEstablishment(testData);
                kalmanFiltering.PrePosition[0] = -0.0950698731643758;
                kalmanFiltering.PrePosition[1] = 0.00483652853477623;
                kalmanFiltering.PrePosition[2] = 9.61518040733592e-05;
                kalmanFiltering.PrePosition[3] = 0.487928863356650;
                kalmanFiltering.PrePosition[4] = 0.00140521891949567;
                kalmanFiltering.PrePosition[5] = 3.61578884580855e-05;


                kalmanFiltering.PreVarience = varianceTemp;
                kalmanFiltering.Tracking(result);

                Assert.AreEqual(resultPositon, kalmanFiltering.CurrentPosition);
            }
        }