Kalman Filter not converging [recovered]

Have not received replies to the post, therefore may be delete the post ?

Thanks for letting us know. We’re looking into it.

Thank you for the response. Looking forward to some clarifications.

I was looking at the code available to download for Orekit v11.3. It seems EKF considers the noise as the measurement matrix is scaled based on the standard deviation of the measurements.
But since the UKF is based on sigma points and no system matrices are involved, the standard deviation of the measurement seems to be ignored. I could be wrong. But I tried to modify the code in decorate method by adding the classes locally. (I am coding in java, therefore it is convenient to modify). The UKF converged and was stable after modifying the code.

For some unknown reason, your post was flaged by discourse and does not appear in the public thread.
Could you try to post it again in the thread? Also if you have some modification proposal, you could open an issue with your contribution on the forge.

I posted a similar question in another post.

which I think is open to the public.

I modified the decorate method in the KalmanEstimatorUtil and passed the unnormalized covariance matrix. I think this is alright.
I am using only TDOA measurements. The filter stabilizes with the changes.

Since most of the Kalman filter implementation is hidden, it is possible to create another method to create a MeasurementDecorate class instance in KalmanEstimatorUtil class.

	 public static MeasurementDecorator decorateUnscented(final ObservedMeasurement<?> observedMeasurement,
             final AbsoluteDate referenceDate) {

		// Normalized measurement noise matrix contains 1 on its diagonal and correlation coefficients
		// of the measurement on its non-diagonal elements.
		// Indeed, the "physical" measurement noise matrix is the covariance matrix of the measurement

		final RealMatrix covariance;
		if (observedMeasurement.getMeasurementType().equals(PV.MEASUREMENT_TYPE)) {
			// For PV measurements we do have a covariance matrix and thus a correlation coefficients matrix
			final PV pv = (PV) observedMeasurement;
			covariance =MatrixUtils.createRealMatrix(pv.getCovarianceMatrix());
			// MatrixUtils.createRealMatrix(pv.getCorrelationCoefficientsMatrix());
			} else if (observedMeasurement.getMeasurementType().equals(Position.MEASUREMENT_TYPE)) {
			// For Position measurements we do have a covariance matrix and thus a correlation coefficients matrix
			final Position position = (Position) observedMeasurement;
			covariance = MatrixUtils.createRealMatrix(position.getCovarianceMatrix());
			//covariance = MatrixUtils.createRealMatrix(position.getCorrelationCoefficientsMatrix());
			} else {
			// For other measurements we do not have a covariance matrix.
			// Thus the correlation coefficients matrix is an identity matrix.
			covariance = MatrixUtils.createRealIdentityMatrix(observedMeasurement.getDimension());
			final double[] sigma = observedMeasurement.getTheoreticalStandardDeviation();
			for(int i=0;i<sigma.length;i++) {
				covariance.setEntry(i, i, sigma[i]*sigma[i]);

		return new MeasurementDecorator(observedMeasurement, covariance, referenceDate);

In UnscentedKalmanEstimator class the estimationStep method has to be modified accordingly.

  public Propagator[] estimationStep(final ObservedMeasurement<?> observedMeasurement) {
    	final MeasurementDecorator decoratedMeasurement = KalmanEstimatorUtil.decorateUnscented(observedMeasurement, referenceDate);
        final ProcessEstimate estimate = filter.estimationStep(decoratedMeasurement);
        processModel.finalizeEstimation(observedMeasurement, estimate);
        if (observer != null) {
        return processModel.getEstimatedPropagators();

I think this is correct. But not clear how using non-normalized covariance will affect Hipparchus UKF.

I agree with your change, but am not an expert in unscented Kalman.
Luckily, the guy who implemented it during his internship (Gaëtan Pierre) now works on the desk next to mine in my new job! So I will ask him tomorrow when I’m back at office.
Could you open an issue with your proposed contribution in our gitlab?

Thank you for the response.
I created an issue as you suggested.
Also could you please look into parameter estimation in UKF as well?
I tried to estimate the SRP with UKF and it does not seem to estimate accurately. The EKF works fine. I think it could be related to the covariance matrix of the parameters.

correction : Solar radiation pressure reflective coefficient