Measurement editing

Hi Orekit community,

I’m working on an Orekit orbit propagator, and I was wondering if Orekit has the ability to do measurement editing, as in discarding outliers or bad data points along the fitting process.
Or do I need to come up with a way to do this myself by hand?

Thanks,
SeongHo

Hi there,

In the EstimationModifier, there is OutlierFilter and an extension which is dynamical and meant specifically for Kalman estimation. Check them out.

Best,
Romain.

Hi Romain @Serrof ,

I use the BLS estimator for my orbit determination. I am looking for some posts that deal with how to use OutlierFilter, but I wasn’t able to find anything that applies.

I am not sure where in my code I should place the OutlierFilter. In a general workflow of the Orekit code, where does OutlierFilter come into play?

Thanks,
SeongHo

Please check the tutorials and more precisely the AbstractOrbitDetermination class that applies the mechanism on a bunch of different measurements.

Cheers,
Romain.

Thanks for the help! @Serrof

I have another question. It seems like OutlierFilter gets rid of the outliers in the fitting process. My concern is that IOD might use one of the outliers. Is there any recommended way to get rid of the outliers before IOD begins?

In this code, I am adding a filter to each measurement that is being fed into the estimator and I’m also adding the OutliersManager to each measurement. Does it seem to be the right way to implement the OutlierFilter?

rangeOutliersManager = OutlierFilter(2, 5.0)

observableSatellite = ObservableSatellite(0) # Propagator index = 0

for timestamp, pv_gcrf in points_df.iterrows():
    date = datetime_to_absolutedate(timestamp)
    vector = Vector3D(pv_gcrf[['x', 'y', 'z']].to_list())
    orekit_position = Position(
        date,
        vector,
        sigma_position,
        1.0,  # Base weight
        observableSatellite
    )
    orekit_position.addModifier(rangeOutliersManager)
    estimator.addMeasurement(orekit_position)

Best,
SeongHo