1 /* 2 * Licensed to the Hipparchus project under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The Hipparchus project 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 * https://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 18 package org.hipparchus.filtering.kalman.extended; 19 20 import org.hipparchus.filtering.kalman.Measurement; 21 import org.hipparchus.linear.RealMatrix; 22 import org.hipparchus.linear.RealVector; 23 24 /** 25 * Non-linear process that can be estimated by a {@link ExtendedKalmanFilter}. 26 * <p> 27 * This interface must be implemented by users to represent the behavior 28 * of the process to be estimated 29 * </p> 30 * @param <T> the type of the measurements 31 * @see ExtendedKalmanFilter 32 * @see org.hipparchus.filtering.kalman.linear.LinearProcess 33 * @since 1.3 34 */ 35 public interface NonLinearProcess<T extends Measurement> { 36 37 /** Get the state evolution between two times. 38 * @param previousTime time of the previous state 39 * @param previousState process state at {@code previousTime} 40 * @param measurement measurement to process 41 * @return state evolution 42 */ 43 NonLinearEvolution getEvolution(double previousTime, RealVector previousState, T measurement); 44 45 /** Get the innovation brought by a measurement. 46 * @param measurement measurement to process 47 * @param evolution evolution returned by a previous call to {@link #getEvolution(double, RealVector, Measurement)} 48 * @param innovationCovarianceMatrix innovation covariance matrix, defined as \(h.P.h^T + r\) 49 * where h is the {@link NonLinearEvolution#getMeasurementJacobian() measurement Jacobian}, 50 * P is the predicted covariance and r is {@link Measurement#getCovariance() measurement covariance} 51 * @return innovation brought by a measurement, may be null if measurement should be rejected 52 */ 53 RealVector getInnovation(T measurement, NonLinearEvolution evolution, RealMatrix innovationCovarianceMatrix); 54 55 }