1   /* Copyright 2002-2019 CS Systèmes d'Information
2    * Licensed to CS Systèmes d'Information (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.estimation.sequential;
18  
19  import org.hipparchus.linear.RealMatrix;
20  import org.orekit.propagation.SpacecraftState;
21  
22  /** Provider for process noise matrices.
23   * @author Luc Maisonobe
24   * @since 9.2
25   */
26  public interface CovarianceMatrixProvider {
27  
28      /** Get the initial covariance matrix.
29       * <p>
30       * The initial covariance matrix is a covariance matrix corresponding to the
31       * parameters managed by the {@link KalmanEstimator Kalman estimator}.
32       * The number of rows/columns and their order are as follows:
33       * </p>
34       * <ul>
35       *   <li>The first 6 components correspond to the 6 orbital parameters
36       *   of the associated propagator. All 6 parameters must always be present,
37       *   regardless of the fact they are estimated or not.</li>
38       *   <li>The following components correspond to the subset of propagation
39       *   parameters of the associated propagator that are estimated.</li>
40       *   <li>The remaining components correspond to the subset of measurements
41       *   parameters that are estimated, considering all measurements, even
42       *   the ones that correspond to spacecrafts not related to the
43       *   associated propagator</li>
44       * </ul>
45       * <p>
46       * In most cases, the initial covariance matrix will be the output matrix
47       * of a previous run of the Kalman filter.
48       * </p>
49       * @param initial initial state state
50       * @return physical (i.e. non normalized) initial covariance matrix
51       * @see org.orekit.propagation.conversion.PropagatorBuilder#getOrbitalParametersDrivers()
52       * @see org.orekit.propagation.conversion.PropagatorBuilder#getPropagationParametersDrivers()
53       */
54      RealMatrix getInitialCovarianceMatrix(SpacecraftState initial);
55  
56      /** Get the process noise matrix between previous and current states.
57       * <p>
58       * The process noise matrix is a covariance matrix corresponding to the
59       * parameters managed by the {@link KalmanEstimator Kalman estimator}.
60       * The number of rows/columns and their order are as follows:
61       * </p>
62       * <ul>
63       *   <li>The first 6 components correspond to the 6 orbital parameters
64       *   of the associated propagator. All 6 parameters must always be present,
65       *   regardless of the fact they are estimated or not.</li>
66       *   <li>The following components correspond to the subset of propagation
67       *   parameters of the associated propagator that are estimated.</li>
68       *   <li>The remaining components correspond to the subset of measurements
69       *   parameters that are estimated, considering all measurements, even
70       *   the ones that correspond to spacecrafts not related to the
71       *   associated propagator</li>
72       * </ul>
73       * <p>
74       * In most cases, the process noise for the part corresponding to measurements
75       * (the final rows and columns) will be set to 0 for the process noise corresponding
76       * to the evolution between a non-null previous and current state.
77       * </p>
78       * @param previous previous state
79       * @param current current state
80       * @return physical (i.e. non normalized) process noise matrix between
81       * previous and current states
82       * @see org.orekit.propagation.conversion.PropagatorBuilder#getOrbitalParametersDrivers()
83       * @see org.orekit.propagation.conversion.PropagatorBuilder#getPropagationParametersDrivers()
84       */
85      RealMatrix getProcessNoiseMatrix(SpacecraftState../org/orekit/propagation/SpacecraftState.html#SpacecraftState">SpacecraftState previous, SpacecraftState current);
86  
87  }