Unscented Kalman Filter Divergence using Radar

Hello everyone :slight_smile:

I’ve been using the Unscented Kalman Filter of Orekit for a long time for orbit determination. I’ve been running different tests with simulated orbits (generated from initial TLEs) for different satellites with three different types of sensors: radar (providing range, range-rate and Az/El measurements at each timestamp), laser (providing only but precise range measurements) and optical (providing precise Dec/RA measurements).

I’ve recently implemented the MultiplexedMeasurement class because I read this topic

and now I create multiplexed measurements for all the measurements at the same timestamp. This is primarily done for the radar, to include its three different measurements in the same multiplexed object, but sometimes different sensor measurements occur at the same time and they are also included in this multiplexed measurement (which is the point of this object).

The key part I want to share (as I currently do not have any clue about the reason of this behaviour) is that the radar measurements are not improving the estimation but worsening it. When I run the scenario with all the sensors the error is much greater than without the radar, and the estimation diverges after the radar passes. Nevertheless, it gets better during optical and laser passes.

For example, look at this specific segment. After the optical pass the error is below 40 meters, but after the radar it grows drastically.

Looking at the posterior segment we see the same behaviour: the optical corrects the position and the error is really small, but when the radar arrives the estimation is destroyed.

Comparing this exact same case with the one with no radar, the difference is enormous.


The complete analysis for that specific satellite (which is just an example but it occurs for all the satellites I analyse) is the following. This first image is with radar, optical and laser.


and this second image is without radar

I thought at the begining it was because I was not using the multiplexed measurements and I was feeding them to the UKF one by one, but then I implemented that methodology and the results did not change: the radar worsens my results, which is counterintuitive as I am adding information into the filter.

If anyone has any clue of what could be happening it would be of tremendous help. If there is anything that is not clear or anyone needs more information feel free to ask.

Thank you so much in advance.

Hi Antonio. To help figure out what’s wrong with your radar measurements I would start with the OD that you get without the radar measurements (which I assume you’re happy with), or a TLE with an epoch close to the measurement times, and compare the expected (estimated/theoretical) radar measurements from that fit/tle with your actual measurements. It’s bound to be something like units, sensor location or coordinate system, but it’s tricky to tell what the problem is without visualising it.

Hi Mark,

Thanks for your answer. As I am generating the ephemeris from TLEs, wouldn’t that provide me the same measurements? The radar measurements are synthetic and are obtained from a synthetic orbit generated from TLEs.

Maybe I am not getting what you are suggesting.

Hi,

I think what Mark is suggesting is to look at the measurement residuals before and after OD. Actually, looking at the normalized (by the expected sigma) residuals from your initial guess might be able to show if there’s something wrong with the data.

Have you tried using the range measurement alone, without the angles (so not in a multiplexed object)?

Are you using an outlier filter? If yes what is it saying?

Cheers,
Romain.

Hi Romain,

I’ve tested the behaviour without the angles (as they have a big error, ~0.4 deg which in LEO is around 40 km). However, it did not improve as I expected. Adding information is always better (or so I thought). And no, I am not using an outlier filter (I should add it in the future, sure. Thanks for the reminder).

Now I understand what @markrutten said, thanks @Serrof. For example, here is an extensive analysis of the residuals (observed measurement vs estimated measurement by the UKF). The segment pass is the following one, with an initial error very small but with a divergence when the radar pass arrives.

Here you have the .csv format of the residuals. Sigma is the theoretical std of the sensor measurement (and as I am generating the measurements synthetically they are the “real” ones).

date,type,residual,sigma,sensor
2025-09-04T14:34:36.000000Z,RangeRate (m/s),-0.1082907577408605,0.4,radar_1
2025-09-04T14:34:36.000000Z,Radar Range (m),-1.0082419873215258,7.0,radar_1
2025-09-04T14:34:36.000000Z,Azimuth (rad),0.007931664812347528,0.006108652381980153,radar_1
2025-09-04T14:34:36.000000Z,Elevation (rad),0.007347732658462558,0.006108652381980153,radar_1
2025-09-04T14:34:48.000000Z,RangeRate (m/s),-0.9807599836429972,0.4,radar_1
2025-09-04T14:34:48.000000Z,Radar Range (m),9.553990427870303,7.0,radar_1
2025-09-04T14:34:48.000000Z,Azimuth (rad),0.0018095869866239234,0.006108652381980153,radar_1
2025-09-04T14:34:48.000000Z,Elevation (rad),-0.012929019011269638,0.006108652381980153,radar_1
2025-09-04T14:35:00.000000Z,RangeRate (m/s),0.1426324270933037,0.4,radar_1
2025-09-04T14:35:00.000000Z,Radar Range (m),-8.550006423611194,7.0,radar_1
2025-09-04T14:35:00.000000Z,Azimuth (rad),-0.009055427157117268,0.006108652381980153,radar_1
2025-09-04T14:35:00.000000Z,Elevation (rad),2.4899704233916076e-05,0.006108652381980153,radar_1
2025-09-04T14:35:12.000000Z,RangeRate (m/s),0.11119287428522284,0.4,radar_1
2025-09-04T14:35:12.000000Z,Radar Range (m),12.079194069374353,7.0,radar_1
2025-09-04T14:35:12.000000Z,Azimuth (rad),-0.005943504558033386,0.006108652381980153,radar_1
2025-09-04T14:35:12.000000Z,Elevation (rad),0.008309678996939018,0.006108652381980153,radar_1
2025-09-04T14:35:24.000000Z,RangeRate (m/s),-0.14346758578197694,0.4,radar_1
2025-09-04T14:35:24.000000Z,Radar Range (m),-3.851352021796629,7.0,radar_1
2025-09-04T14:35:24.000000Z,Azimuth (rad),0.002049971566658648,0.006108652381980153,radar_1
2025-09-04T14:35:24.000000Z,Elevation (rad),-0.00695770631426762,0.006108652381980153,radar_1
2025-09-04T14:35:36.000000Z,RangeRate (m/s),-0.09888481001135574,0.4,radar_1
2025-09-04T14:35:36.000000Z,Radar Range (m),0.37685335148125887,7.0,radar_1
2025-09-04T14:35:36.000000Z,Azimuth (rad),0.00571406898777127,0.006108652381980153,radar_1
2025-09-04T14:35:36.000000Z,Elevation (rad),-0.009260714322378516,0.006108652381980153,radar_1
2025-09-04T14:35:48.000000Z,RangeRate (m/s),0.290927522997265,0.4,radar_1
2025-09-04T14:35:48.000000Z,Radar Range (m),-2.0086936373263597,7.0,radar_1
2025-09-04T14:35:48.000000Z,Azimuth (rad),0.007497708640227252,0.006108652381980153,radar_1
2025-09-04T14:35:48.000000Z,Elevation (rad),-0.0019244057819666205,0.006108652381980153,radar_1
2025-09-04T14:36:00.000000Z,RangeRate (m/s),0.43075889498061315,0.4,radar_1
2025-09-04T14:36:00.000000Z,Radar Range (m),6.0673448361922055,7.0,radar_1
2025-09-04T14:36:00.000000Z,Azimuth (rad),0.011686193075571172,0.006108652381980153,radar_1
2025-09-04T14:36:00.000000Z,Elevation (rad),-0.00869350096989574,0.006108652381980153,radar_1
2025-09-04T14:36:12.000000Z,RangeRate (m/s),-0.000265203191929686,0.4,radar_1
2025-09-04T14:36:12.000000Z,Radar Range (m),-2.5729294908232987,7.0,radar_1
2025-09-04T14:36:12.000000Z,Azimuth (rad),0.0014758555304057452,0.006108652381980153,radar_1
2025-09-04T14:36:12.000000Z,Elevation (rad),0.003857425599235076,0.006108652381980153,radar_1
2025-09-04T14:36:24.000000Z,RangeRate (m/s),-0.14558745385875227,0.4,radar_1
2025-09-04T14:36:24.000000Z,Radar Range (m),10.774831479648128,7.0,radar_1
2025-09-04T14:36:24.000000Z,Azimuth (rad),0.00974312746966488,0.006108652381980153,radar_1
2025-09-04T14:36:24.000000Z,Elevation (rad),0.00042487054595896634,0.006108652381980153,radar_1
2025-09-04T14:36:36.000000Z,RangeRate (m/s),0.2970237087113219,0.4,radar_1
2025-09-04T14:36:36.000000Z,Radar Range (m),-1.3672216727863997,7.0,radar_1
2025-09-04T14:36:36.000000Z,Azimuth (rad),0.001184595693695556,0.006108652381980153,radar_1
2025-09-04T14:36:36.000000Z,Elevation (rad),0.003176338026302794,0.006108652381980153,radar_1
2025-09-04T14:36:48.000000Z,RangeRate (m/s),0.5831817415648857,0.4,radar_1
2025-09-04T14:36:48.000000Z,Radar Range (m),-7.594542928272858,7.0,radar_1
2025-09-04T14:36:48.000000Z,Azimuth (rad),0.012675225220667663,0.006108652381980153,radar_1
2025-09-04T14:36:48.000000Z,Elevation (rad),0.00783711502500184,0.006108652381980153,radar_1
2025-09-04T14:37:00.000000Z,RangeRate (m/s),0.8855998766994162,0.4,radar_1
2025-09-04T14:37:00.000000Z,Radar Range (m),-4.236021857243031,7.0,radar_1
2025-09-04T14:37:00.000000Z,Azimuth (rad),0.005082920039387595,0.006108652381980153,radar_1
2025-09-04T14:37:00.000000Z,Elevation (rad),-0.004445110604792579,0.006108652381980153,radar_1
2025-09-04T14:37:12.000000Z,RangeRate (m/s),-0.28788918164173083,0.4,radar_1
2025-09-04T14:37:12.000000Z,Radar Range (m),-1.629587716422975,7.0,radar_1
2025-09-04T14:37:12.000000Z,Azimuth (rad),-0.0030056214012335047,0.006108652381980153,radar_1
2025-09-04T14:37:12.000000Z,Elevation (rad),-0.0036799999874151945,0.006108652381980153,radar_1
2025-09-04T14:37:24.000000Z,RangeRate (m/s),0.24031196030045976,0.4,radar_1
2025-09-04T14:37:24.000000Z,Radar Range (m),-6.16312653128989,7.0,radar_1
2025-09-04T14:37:24.000000Z,Azimuth (rad),0.0007236883464973864,0.006108652381980153,radar_1
2025-09-04T14:37:24.000000Z,Elevation (rad),-0.007490312270591826,0.006108652381980153,radar_1
2025-09-04T20:11:40.000000Z,SLR Range (m),-2483.9848325536586,0.01,laser_1
2025-09-04T20:11:40.000000Z,RA (rad),-9.499474437735245e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:11:40.000000Z,Dec (rad),4.5277562860102094e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:12:05.000000Z,SLR Range (m),0.9822207852266729,0.01,laser_1
2025-09-04T20:12:05.000000Z,SLR Range (m),0.48967807414010167,0.01,laser_2
2025-09-04T20:12:05.000000Z,RA (rad),6.734011685161079e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:12:05.000000Z,Dec (rad),-6.1417229021976105e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:12:30.000000Z,SLR Range (m),0.10304525308310986,0.01,laser_1
2025-09-04T20:12:30.000000Z,SLR Range (m),-0.003875811118632555,0.01,laser_2
2025-09-04T20:12:30.000000Z,RA (rad),9.19556263578869e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:12:30.000000Z,Dec (rad),4.877184793472544e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:12:55.000000Z,SLR Range (m),-0.00674667302519083,0.01,laser_1
2025-09-04T20:12:55.000000Z,SLR Range (m),0.0019791037775576115,0.01,laser_2
2025-09-04T20:12:55.000000Z,RA (rad),-5.623214668570853e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:12:55.000000Z,Dec (rad),-1.9586123635173536e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:13:20.000000Z,SLR Range (m),0.04265895439311862,0.01,laser_1
2025-09-04T20:13:20.000000Z,SLR Range (m),-0.0007661227136850357,0.01,laser_2
2025-09-04T20:13:20.000000Z,RA (rad),6.275217434570379e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:13:20.000000Z,Dec (rad),-3.7505920811309323e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:13:45.000000Z,SLR Range (m),0.0012012859806418419,0.01,laser_1
2025-09-04T20:13:45.000000Z,SLR Range (m),-0.030977773014456034,0.01,laser_2
2025-09-04T20:13:45.000000Z,RA (rad),-4.3604230759441975e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:13:45.000000Z,Dec (rad),1.0015582058153782e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:14:10.000000Z,SLR Range (m),0.036250055534765124,0.01,laser_1
2025-09-04T20:14:10.000000Z,SLR Range (m),0.023701879661530256,0.01,laser_2
2025-09-04T20:14:10.000000Z,RA (rad),-1.7413977637659173e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:14:10.000000Z,Dec (rad),1.7708584684972273e-05,6.981317007977318e-06,telescope_1
2025-09-04T20:14:35.000000Z,SLR Range (m),-0.02415871899574995,0.01,laser_1
2025-09-04T20:14:35.000000Z,SLR Range (m),0.013314144685864449,0.01,laser_2
2025-09-04T20:14:35.000000Z,RA (rad),-1.2822196945538877e-05,6.981317007977318e-06,telescope_1
2025-09-04T20:14:35.000000Z,Dec (rad),1.4471515541458757e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:15:00.000000Z,SLR Range (m),-0.012925806688144803,0.01,laser_1
2025-09-04T20:15:00.000000Z,SLR Range (m),0.01719088153913617,0.01,laser_2
2025-09-04T20:15:00.000000Z,RA (rad),2.3458602882442392e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:15:00.000000Z,Dec (rad),-3.2642613034816748e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:15:25.000000Z,SLR Range (m),0.00902405777014792,0.01,laser_1
2025-09-04T20:15:25.000000Z,SLR Range (m),-0.02002347889356315,0.01,laser_2
2025-09-04T20:15:25.000000Z,RA (rad),3.2815744326342156e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:15:25.000000Z,Dec (rad),3.021211289699899e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:15:50.000000Z,SLR Range (m),-0.031707103131338954,0.01,laser_1
2025-09-04T20:15:50.000000Z,SLR Range (m),0.0349963316693902,0.01,laser_2
2025-09-04T20:15:50.000000Z,RA (rad),1.3348776492616565e-05,6.981317007977318e-06,telescope_1
2025-09-04T20:15:50.000000Z,Dec (rad),3.1471547686789947e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:16:00.000000Z,RA (rad),3.057721392973889e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:16:00.000000Z,Dec (rad),-4.26752447302281e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:16:15.000000Z,SLR Range (m),-0.02167380042374134,0.01,laser_1
2025-09-04T20:16:15.000000Z,SLR Range (m),-0.01869438891299069,0.01,laser_2
2025-09-04T20:16:15.000000Z,RA (rad),9.35866152795839e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:16:15.000000Z,Dec (rad),1.0104932530841104e-05,6.981317007977318e-06,telescope_1
2025-09-04T20:16:20.000000Z,RA (rad),-5.752724306695711e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:16:20.000000Z,Dec (rad),1.0432623520517659e-05,6.981317007977318e-06,telescope_3
2025-09-04T20:16:40.000000Z,SLR Range (m),-0.016672587720677257,0.01,laser_1
2025-09-04T20:16:40.000000Z,RA (rad),-7.138110170057388e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:16:40.000000Z,Dec (rad),-2.111714077768223e-07,6.981317007977318e-06,telescope_3
2025-09-04T20:16:40.000000Z,SLR Range (m),0.021470044972375035,0.01,laser_2
2025-09-04T20:16:40.000000Z,RA (rad),-7.972311555803913e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:16:40.000000Z,Dec (rad),-4.799925233278657e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:17:00.000000Z,RA (rad),-2.0858054317951513e-05,6.981317007977318e-06,telescope_3
2025-09-04T20:17:00.000000Z,Dec (rad),8.858611172390951e-08,6.981317007977318e-06,telescope_3
2025-09-04T20:17:05.000000Z,SLR Range (m),0.016517315758392215,0.01,laser_1
2025-09-04T20:17:05.000000Z,SLR Range (m),0.015257595805451274,0.01,laser_2
2025-09-04T20:17:05.000000Z,RA (rad),-3.866049765210988e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:17:05.000000Z,Dec (rad),4.683965096452525e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:17:20.000000Z,RA (rad),-1.5889082050080106e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:17:20.000000Z,Dec (rad),7.628225195954741e-08,6.981317007977318e-06,telescope_3
2025-09-04T20:17:30.000000Z,SLR Range (m),0.03829953633248806,0.01,laser_1
2025-09-04T20:17:30.000000Z,SLR Range (m),0.024673533160239458,0.01,laser_2
2025-09-04T20:17:30.000000Z,RA (rad),7.979559184745355e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:17:30.000000Z,Dec (rad),-3.830856185826903e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:17:40.000000Z,RA (rad),-4.750562596189667e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:17:40.000000Z,Dec (rad),-7.295202411328194e-07,6.981317007977318e-06,telescope_3
2025-09-04T20:17:55.000000Z,SLR Range (m),-0.00721596647053957,0.01,laser_1
2025-09-04T20:17:55.000000Z,SLR Range (m),0.0064556351862847805,0.01,laser_2
2025-09-04T20:17:55.000000Z,RA (rad),9.196192429339334e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:17:55.000000Z,Dec (rad),-1.7609081814917715e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:18:00.000000Z,RA (rad),-6.39101573507439e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:18:00.000000Z,Dec (rad),1.044127702132247e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:18:20.000000Z,SLR Range (m),0.005713354796171188,0.01,laser_1
2025-09-04T20:18:20.000000Z,RA (rad),-4.315380190966778e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:18:20.000000Z,Dec (rad),1.0503238620118704e-05,6.981317007977318e-06,telescope_3
2025-09-04T20:18:20.000000Z,SLR Range (m),-0.0041564470157027245,0.01,laser_2
2025-09-04T20:18:20.000000Z,RA (rad),-1.8379773349952444e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:18:20.000000Z,Dec (rad),6.839308349992912e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:18:40.000000Z,RA (rad),-7.335926789142633e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:18:40.000000Z,Dec (rad),-6.8720039323455495e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:18:45.000000Z,SLR Range (m),-0.008908068295568228,0.01,laser_1
2025-09-04T20:18:45.000000Z,SLR Range (m),-0.023649074835702777,0.01,laser_2
2025-09-04T20:18:45.000000Z,RA (rad),-3.628251120213477e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:18:45.000000Z,Dec (rad),-1.2907936134398668e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:19:00.000000Z,RA (rad),-2.130815022649557e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:19:00.000000Z,Dec (rad),4.115943565502489e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:19:10.000000Z,SLR Range (m),0.014805451268330216,0.01,laser_1
2025-09-04T20:19:10.000000Z,SLR Range (m),0.0019812847021967173,0.01,laser_2
2025-09-04T20:19:10.000000Z,RA (rad),5.318895829775627e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:19:10.000000Z,Dec (rad),-1.5245275206132725e-05,6.981317007977318e-06,telescope_1
2025-09-04T20:19:20.000000Z,RA (rad),-3.656478649416428e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:19:20.000000Z,Dec (rad),3.401663676419475e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:19:24.000000Z,RangeRate (m/s),-0.40535168309111214,0.4,radar_1
2025-09-04T20:19:24.000000Z,Radar Range (m),3.238938099006191,7.0,radar_1
2025-09-04T20:19:24.000000Z,Azimuth (rad),0.0051707427196912015,0.006108652381980153,radar_1
2025-09-04T20:19:24.000000Z,Elevation (rad),0.0020800080870257975,0.006108652381980153,radar_1
2025-09-04T20:19:35.000000Z,SLR Range (m),-0.005667946999892592,0.01,laser_1
2025-09-04T20:19:35.000000Z,SLR Range (m),0.002593471435829997,0.01,laser_2
2025-09-04T20:19:35.000000Z,RA (rad),-8.046234104108763e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:19:35.000000Z,Dec (rad),-3.4297675930439198e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:19:36.000000Z,RangeRate (m/s),-0.22756924055647687,0.4,radar_1
2025-09-04T20:19:36.000000Z,Radar Range (m),4.2426568765658885,7.0,radar_1
2025-09-04T20:19:36.000000Z,Azimuth (rad),-0.004311903453537269,0.006108652381980153,radar_1
2025-09-04T20:19:36.000000Z,Elevation (rad),-0.013123153391862985,0.006108652381980153,radar_1
2025-09-04T20:19:40.000000Z,RA (rad),-1.8344437018313897e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:19:40.000000Z,Dec (rad),-7.404178932864103e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:19:48.000000Z,RangeRate (m/s),-0.07971542584846247,0.4,radar_1
2025-09-04T20:19:48.000000Z,Radar Range (m),-14.948403078364208,7.0,radar_1
2025-09-04T20:19:48.000000Z,Azimuth (rad),0.0026463755379357856,0.006108652381980153,radar_1
2025-09-04T20:19:48.000000Z,Elevation (rad),0.00038061008176160094,0.006108652381980153,radar_1
2025-09-04T20:20:00.000000Z,RangeRate (m/s),-0.6833696614471592,0.4,radar_1
2025-09-04T20:20:00.000000Z,Radar Range (m),-3.4772068625316024,7.0,radar_1
2025-09-04T20:20:00.000000Z,Azimuth (rad),-0.006347502371357727,0.006108652381980153,radar_1
2025-09-04T20:20:00.000000Z,Elevation (rad),-0.004114666326170191,0.006108652381980153,radar_1
2025-09-04T20:20:00.000000Z,SLR Range (m),0.020459336694329977,0.01,laser_1
2025-09-04T20:20:00.000000Z,RA (rad),1.2700028496404059e-05,6.981317007977318e-06,telescope_3
2025-09-04T20:20:00.000000Z,Dec (rad),-3.496193304274031e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:20:00.000000Z,SLR Range (m),0.027050355449318886,0.01,laser_2
2025-09-04T20:20:00.000000Z,RA (rad),-5.504877607753755e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:20:00.000000Z,Dec (rad),-6.7145139596713754e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:20:12.000000Z,RangeRate (m/s),-0.4012685725429037,0.4,radar_1
2025-09-04T20:20:12.000000Z,Radar Range (m),-0.201771869789809,7.0,radar_1
2025-09-04T20:20:12.000000Z,Azimuth (rad),0.007912470368688584,0.006108652381980153,radar_1
2025-09-04T20:20:12.000000Z,Elevation (rad),-0.00560383717402968,0.006108652381980153,radar_1
2025-09-04T20:20:20.000000Z,RA (rad),-2.031624457776715e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:20:20.000000Z,Dec (rad),1.3915931287439287e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:20:24.000000Z,RangeRate (m/s),-0.4929623953285045,0.4,radar_1
2025-09-04T20:20:24.000000Z,Radar Range (m),-1.8264938516076654,7.0,radar_1
2025-09-04T20:20:24.000000Z,Azimuth (rad),-0.0039899201456137234,0.006108652381980153,radar_1
2025-09-04T20:20:24.000000Z,Elevation (rad),0.010231862324253438,0.006108652381980153,radar_1
2025-09-04T20:20:25.000000Z,SLR Range (m),0.0031459445599466562,0.01,laser_1
2025-09-04T20:20:25.000000Z,SLR Range (m),-0.018497950630262494,0.01,laser_2
2025-09-04T20:20:25.000000Z,RA (rad),-6.6303789524324586e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:20:25.000000Z,Dec (rad),3.012067871288604e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:20:36.000000Z,RangeRate (m/s),-0.008086043810635601,0.4,radar_1
2025-09-04T20:20:36.000000Z,Radar Range (m),-4.493895949795842,7.0,radar_1
2025-09-04T20:20:36.000000Z,Azimuth (rad),0.0007514346987997911,0.006108652381980153,radar_1
2025-09-04T20:20:36.000000Z,Elevation (rad),0.002539353377251752,0.006108652381980153,radar_1
2025-09-04T20:20:40.000000Z,RA (rad),5.2022217191805e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:20:40.000000Z,Dec (rad),4.046655740969074e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:20:48.000000Z,RangeRate (m/s),0.1318795216898252,0.4,radar_1
2025-09-04T20:20:48.000000Z,Radar Range (m),-1.9086529165506363,7.0,radar_1
2025-09-04T20:20:48.000000Z,Azimuth (rad),-0.0022061605784391425,0.006108652381980153,radar_1
2025-09-04T20:20:48.000000Z,Elevation (rad),0.01081280289171671,0.006108652381980153,radar_1
2025-09-04T20:20:50.000000Z,SLR Range (m),0.004170918604359031,0.01,laser_1
2025-09-04T20:20:50.000000Z,SLR Range (m),-0.0029776415321975946,0.01,laser_2
2025-09-04T20:20:50.000000Z,RA (rad),8.632447068279703e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:20:50.000000Z,Dec (rad),-8.438104949215486e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:21:00.000000Z,RangeRate (m/s),-0.17296635668526505,0.4,radar_1
2025-09-04T20:21:00.000000Z,Radar Range (m),8.66512637026608,7.0,radar_1
2025-09-04T20:21:00.000000Z,Azimuth (rad),0.013571291621481851,0.006108652381980153,radar_1
2025-09-04T20:21:00.000000Z,Elevation (rad),0.00550120557493905,0.006108652381980153,radar_1
2025-09-04T20:21:00.000000Z,RA (rad),-9.746111297781468e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:21:00.000000Z,Dec (rad),3.397884553654751e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:21:12.000000Z,RangeRate (m/s),-0.38669002428332533,0.4,radar_1
2025-09-04T20:21:12.000000Z,Radar Range (m),4.450503569794819,7.0,radar_1
2025-09-04T20:21:12.000000Z,Azimuth (rad),0.010956167926829075,0.006108652381980153,radar_1
2025-09-04T20:21:12.000000Z,Elevation (rad),-0.006552902962603913,0.006108652381980153,radar_1
2025-09-04T20:21:15.000000Z,SLR Range (m),0.02068916312418878,0.01,laser_1
2025-09-04T20:21:15.000000Z,SLR Range (m),-0.00020818994380533695,0.01,laser_2
2025-09-04T20:21:15.000000Z,RA (rad),9.292477886058137e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:21:15.000000Z,Dec (rad),-3.931103062487784e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:21:20.000000Z,RA (rad),1.0947285465245926e-05,6.981317007977318e-06,telescope_3
2025-09-04T20:21:20.000000Z,Dec (rad),3.4295551268326285e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:21:24.000000Z,RangeRate (m/s),-0.5243646343715227,0.4,radar_1
2025-09-04T20:21:24.000000Z,Radar Range (m),-17.164216538192704,7.0,radar_1
2025-09-04T20:21:24.000000Z,Azimuth (rad),0.0007542485099238938,0.006108652381980153,radar_1
2025-09-04T20:21:24.000000Z,Elevation (rad),-0.011038046495422393,0.006108652381980153,radar_1
2025-09-04T20:21:36.000000Z,RangeRate (m/s),-0.41612231177487047,0.4,radar_1
2025-09-04T20:21:36.000000Z,Radar Range (m),-14.18918255274184,7.0,radar_1
2025-09-04T20:21:36.000000Z,Azimuth (rad),0.00022227153974840874,0.006108652381980153,radar_1
2025-09-04T20:21:36.000000Z,Elevation (rad),-0.0009588980036367989,0.006108652381980153,radar_1
2025-09-04T20:21:40.000000Z,SLR Range (m),0.01770299836061895,0.01,laser_1
2025-09-04T20:21:40.000000Z,RA (rad),-5.426669939412321e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:21:40.000000Z,Dec (rad),-1.822761941330797e-05,6.981317007977318e-06,telescope_3
2025-09-04T20:21:40.000000Z,SLR Range (m),-0.020582338329404593,0.01,laser_2
2025-09-04T20:21:40.000000Z,RA (rad),-6.075209702971485e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:21:40.000000Z,Dec (rad),8.029832382405733e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:21:48.000000Z,RangeRate (m/s),-0.06599474450194975,0.4,radar_1
2025-09-04T20:21:48.000000Z,Radar Range (m),-0.36044229567050934,7.0,radar_1
2025-09-04T20:21:48.000000Z,Azimuth (rad),0.004233130496177573,0.006108652381980153,radar_1
2025-09-04T20:21:48.000000Z,Elevation (rad),-0.002385132113140065,0.006108652381980153,radar_1
2025-09-04T20:22:00.000000Z,RangeRate (m/s),0.5441127872363722,0.4,radar_1
2025-09-04T20:22:00.000000Z,Radar Range (m),-0.2806427280884236,7.0,radar_1
2025-09-04T20:22:00.000000Z,Azimuth (rad),0.01835285823881927,0.006108652381980153,radar_1
2025-09-04T20:22:00.000000Z,Elevation (rad),-0.0005364987939400212,0.006108652381980153,radar_1
2025-09-04T20:22:00.000000Z,RA (rad),-3.3150341705034947e-07,6.981317007977318e-06,telescope_3
2025-09-04T20:22:00.000000Z,Dec (rad),3.521695868230479e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:22:05.000000Z,SLR Range (m),-0.004589744843542576,0.01,laser_1
2025-09-04T20:22:05.000000Z,SLR Range (m),-9.612878784537315e-06,0.01,laser_2
2025-09-04T20:22:05.000000Z,RA (rad),1.0188479600214961e-05,6.981317007977318e-06,telescope_1
2025-09-04T20:22:05.000000Z,Dec (rad),-4.435767486016262e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:22:12.000000Z,RangeRate (m/s),0.8647268871663982,0.4,radar_1
2025-09-04T20:22:12.000000Z,Radar Range (m),-2.5724699371494353,7.0,radar_1
2025-09-04T20:22:12.000000Z,Azimuth (rad),0.010403696991080569,0.006108652381980153,radar_1
2025-09-04T20:22:12.000000Z,Elevation (rad),0.0020371420060235623,0.006108652381980153,radar_1
2025-09-04T20:22:20.000000Z,RA (rad),4.847530872487127e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:22:20.000000Z,Dec (rad),-1.584191183220951e-05,6.981317007977318e-06,telescope_3
2025-09-04T20:22:30.000000Z,SLR Range (m),-0.00038137147203087807,0.01,laser_1
2025-09-04T20:22:30.000000Z,SLR Range (m),0.00971421948634088,0.01,laser_2
2025-09-04T20:22:30.000000Z,RA (rad),-5.142788082612704e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:22:30.000000Z,Dec (rad),-5.288038679163165e-07,6.981317007977318e-06,telescope_1
2025-09-04T20:22:40.000000Z,RA (rad),-1.4813044949879561e-05,6.981317007977318e-06,telescope_3
2025-09-04T20:22:40.000000Z,Dec (rad),1.127596689051713e-05,6.981317007977318e-06,telescope_3
2025-09-04T20:22:55.000000Z,SLR Range (m),-0.0037700177635997534,0.01,laser_1
2025-09-04T20:22:55.000000Z,SLR Range (m),-0.02353095216676593,0.01,laser_2
2025-09-04T20:22:55.000000Z,RA (rad),5.172703529954248e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:22:55.000000Z,Dec (rad),1.026398447988644e-05,6.981317007977318e-06,telescope_1
2025-09-04T20:23:00.000000Z,RA (rad),-4.6589483126968645e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:23:00.000000Z,Dec (rad),-5.511574400152153e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:23:20.000000Z,SLR Range (m),-0.004299985710531473,0.01,laser_1
2025-09-04T20:23:20.000000Z,RA (rad),-4.488381298517474e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:23:20.000000Z,Dec (rad),5.843777458103272e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:23:20.000000Z,SLR Range (m),0.01046972069889307,0.01,laser_2
2025-09-04T20:23:20.000000Z,RA (rad),-2.7025555239812427e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:23:20.000000Z,Dec (rad),-1.2829595817734352e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:23:40.000000Z,RA (rad),9.011623058774454e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:23:40.000000Z,Dec (rad),-5.009968900238082e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:23:45.000000Z,SLR Range (m),0.0031909975223243237,0.01,laser_1
2025-09-04T20:23:45.000000Z,SLR Range (m),-0.02291649766266346,0.01,laser_2
2025-09-04T20:23:45.000000Z,RA (rad),9.348563267619348e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:23:45.000000Z,Dec (rad),-7.954466755610845e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:24:00.000000Z,RA (rad),3.1876489151594356e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:24:00.000000Z,Dec (rad),-4.529600479086238e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:24:10.000000Z,SLR Range (m),0.003502293024212122,0.01,laser_1
2025-09-04T20:24:10.000000Z,SLR Range (m),0.03308348311111331,0.01,laser_2
2025-09-04T20:24:10.000000Z,RA (rad),-5.165346435132001e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:24:10.000000Z,Dec (rad),1.0815877864181478e-05,6.981317007977318e-06,telescope_1
2025-09-04T20:24:20.000000Z,RA (rad),-2.815716237059007e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:24:20.000000Z,Dec (rad),-6.090272035630395e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:24:35.000000Z,SLR Range (m),0.0015777763910591602,0.01,laser_1
2025-09-04T20:24:35.000000Z,SLR Range (m),-0.004817424342036247,0.01,laser_2
2025-09-04T20:24:35.000000Z,RA (rad),1.1714479531965694e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:24:35.000000Z,Dec (rad),-5.039334794232353e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:24:40.000000Z,RA (rad),-9.7492240016539e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:24:40.000000Z,Dec (rad),-8.135074592297009e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:25:00.000000Z,SLR Range (m),-0.0009901374578475952,0.01,laser_1
2025-09-04T20:25:00.000000Z,RA (rad),1.9818570251572964e-07,6.981317007977318e-06,telescope_3
2025-09-04T20:25:00.000000Z,Dec (rad),2.1164179571098174e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:25:00.000000Z,SLR Range (m),0.018011906649917364,0.01,laser_2
2025-09-04T20:25:00.000000Z,RA (rad),4.354636938208589e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:25:00.000000Z,Dec (rad),-1.5402287116828006e-06,6.981317007977318e-06,telescope_1
2025-09-04T20:25:20.000000Z,RA (rad),3.139312610811462e-06,6.981317007977318e-06,telescope_3
2025-09-04T20:25:20.000000Z,Dec (rad),-3.4205324516145552e-06,6.981317007977318e-06,telescope_3
2025-09-04T22:06:15.000000Z,SLR Range (m),-0.783302656840533,0.01,laser_1
2025-09-04T22:06:15.000000Z,RA (rad),1.827744635551909e-05,6.981317007977318e-06,telescope_1
2025-09-04T22:06:15.000000Z,Dec (rad),-6.776056094198735e-06,6.981317007977318e-06,telescope_1
2025-09-04T22:06:40.000000Z,SLR Range (m),0.005704654846340418,0.01,laser_1
2025-09-04T22:06:40.000000Z,RA (rad),2.4786689589717525e-06,6.981317007977318e-06,telescope_1
2025-09-04T22:06:40.000000Z,Dec (rad),-5.736969130309966e-06,6.981317007977318e-06,telescope_1
2025-09-04T22:07:00.000000Z,RA (rad),-6.194136082271484e-06,9.697049324080494e-06,telescope_2
2025-09-04T22:07:00.000000Z,Dec (rad),-1.662475449948353e-05,9.697049324080494e-06,telescope_2
2025-09-04T22:07:05.000000Z,SLR Range (m),-0.014550861436873674,0.01,laser_1
2025-09-04T22:07:05.000000Z,RA (rad),-7.727490951126015e-06,6.981317007977318e-06,telescope_1
2025-09-04T22:07:05.000000Z,Dec (rad),-1.903152446608436e-06,6.981317007977318e-06,telescope_1
2025-09-04T22:07:20.000000Z,RA (rad),-1.793655402604344e-05,9.697049324080494e-06,telescope_2
2025-09-04T22:07:20.000000Z,Dec (rad),3.6468051602955853e-06,9.697049324080494e-06,telescope_2
2025-09-04T22:07:30.000000Z,SLR Range (m),-0.014407176990061998,0.01,laser_1
2025-09-04T22:07:30.000000Z,SLR Range (m),0.029282893054187298,0.01,laser_2
2025-09-04T22:07:30.000000Z,RA (rad),-1.4273201225378784e-06,6.981317007977318e-06,telescope_1
2025-09-04T22:07:30.000000Z,Dec (rad),3.594180776028688e-06,6.981317007977318e-06,telescope_1
2025-09-04T22:07:40.000000Z,RA (rad),-8.232845801092736e-06,9.697049324080494e-06,telescope_2
2025-09-04T22:07:40.000000Z,Dec (rad),1.0414316544027358e-05,9.697049324080494e-06,telescope_2
2025-09-04T22:07:55.000000Z,SLR Range (m),0.012225708924233913,0.01,laser_1
2025-09-04T22:07:55.000000Z,SLR Range (m),-0.0016463049687445164,0.01,laser_2
2025-09-04T22:07:55.000000Z,RA (rad),4.377489186246919e-06,6.981317007977318e-06,telescope_1
2025-09-04T22:07:55.000000Z,Dec (rad),-1.2187295046456326e-05,6.981317007977318e-06,telescope_1
2025-09-04T22:08:00.000000Z,RA (rad),9.920396556672983e-06,9.697049324080494e-06,telescope_2
2025-09-04T22:08:00.000000Z,Dec (rad),3.4787013647452625e-06,9.697049324080494e-06,telescope_2
2025-09-04T22:08:20.000000Z,SLR Range (m),0.006032266654074192,0.01,laser_1
2025-09-04T22:08:20.000000Z,SLR Range (m),-0.003442504908889532,0.01,laser_2
2025-09-04T22:08:20.000000Z,RA (rad),3.283657887820368e-06,9.697049324080494e-06,telescope_2
2025-09-04T22:08:20.000000Z,Dec (rad),-6.127153029278354e-06,9.697049324080494e-06,telescope_2
2025-09-04T22:08:20.000000Z,RA (rad),-5.168957162737797e-06,6.981317007977318e-06,telescope_1
2025-09-04T22:08:20.000000Z,Dec (rad),-8.802047559430815e-07,6.981317007977318e-06,telescope_1
2025-09-04T22:08:40.000000Z,RA (rad),-1.4902806500183274e-05,9.697049324080494e-06,telescope_2
2025-09-04T22:08:40.000000Z,Dec (rad),-5.713878177049381e-06,9.697049324080494e-06,telescope_2

Finally, here I show an image of the residuals plotted for each type of measurement between the expected 3\sigma band for each kind of measurement.

As it can be seen the residuals are within the expected values (apart from that outlier of the laser).

Hope this helps. I have MANY MORE of these analyses. If you need more things just ask me and I’ll be happy to share if that helps to diagnose the malfunctioning. Thank you so much in advance.

Pd. Hope this is what you were asking for. If not, please tell me what you meant.

The following paper might be applicable:

W. D. Blair and Y. Bar-Shalom, “Tracking maneuvering targets with multiple sensors: does more data always mean better estimates?,” in IEEE Transactions on Aerospace and Electronic Systems, vol. 32, no. 1, pp. 450-456, Jan. 1996, doi: 10.1109/7.481286.

Hi Antonio. My intuition says that there’s a difference between what you’re simulating and what you’re passing to your estimator. My suggestion was to compare the measurements you’re using in your estimator against a known orbit (TLE or your OD without the radar measurements), rather than the residuals from the estimator itself - sorry for not being clear. The filter will change the estimate to pull the innovations toward zero mean (as you see with the SLR data in your residual plot).

You haven’t mentioned how you initialise the filter? What do you use for the initial state and covariance?

Hi Mark,

I did this analysis

# Initialize dictionaries to store residuals by measurement type
range_residuals = []
range_rate_residuals = []
azimuth_residuals = []
elevation_residuals = []

# VALIDATION STEP (after generating measurements):
for target_id in generated_measurements:
    for sensor_name, pass_list in generated_measurements[target_id].items():
        if sensor_name == "radar":
            for pass_measurements in pass_list:
                for obs_meas in pass_measurements:
                    # 1. Get measurement time
                    obs_time = obs_meas.getDate()
                    
                    # 2. Propagate true orbit to that time
                    true_state = ephemerides_dict[target_id].propagate(obs_time)
                    
                    # 3. Compute estimated value
                    estimated_value = list(obs_meas.estimate(0, 0, [true_state]).getEstimatedValue())
                    
                    # 4. Get observed value
                    observed_value = list(obs_meas.getObservedValue())
                    
                    # 5. Get sigma(s)
                    sigma = list(obs_meas.getTheoreticalStandardDeviation())
                    
                    # 6. Identify measurement type and store residuals
                    mtype = obs_meas.getMeasurementType()
                    
                    if mtype == Range.MEASUREMENT_TYPE:
                        residual = observed_value[0] - estimated_value[0]
                        normalized_residual = residual / sigma[0]
                        range_residuals.append(normalized_residual)
                        
                        if abs(normalized_residual) > 3:
                            print(f"⚠️ PROBLEM in {sensor_name} at {obs_time}")
                            print(f"   Range normalized residual: {normalized_residual:.2f}")
                    
                    elif mtype == RangeRate.MEASUREMENT_TYPE:
                        residual = observed_value[0] - estimated_value[0]
                        normalized_residual = residual / sigma[0]
                        range_rate_residuals.append(normalized_residual)
                        
                        if abs(normalized_residual) > 3:
                            print(f"⚠️ PROBLEM in {sensor_name} at {obs_time}")
                            print(f"   RangeRate normalized residual: {normalized_residual:.2f}")
                    
                    elif mtype == AngularAzEl.MEASUREMENT_TYPE:
                        # Azimuth (first component)
                        az_residual = observed_value[0] - estimated_value[0]
                        az_normalized = az_residual / sigma[0]
                        azimuth_residuals.append(az_normalized)
                        
                        # Elevation (second component)
                        el_residual = observed_value[1] - estimated_value[1]
                        el_normalized = el_residual / sigma[1]
                        elevation_residuals.append(el_normalized)
                        
                        if abs(az_normalized) > 3 or abs(el_normalized) > 3:
                            print(f"⚠️ PROBLEM in RADAR at {obs_time}")
                            print(f"   Azimuth normalized residual: {az_normalized:.2f}")
                            print(f"   Elevation normalized residual: {el_normalized:.2f}")

and I got the following result:

The \sigma mentioned in the legend is the one calculated using numpy from the residuals distribution (i.e., not the theoretical \sigma of the measurement, but the residuals \sigma after normalisation).

Also, I did the same analysis for laser and optical sensors:


I hope this is what you were suggesting. I think this is just the normal behaviour of introducing the random measurement generation with the \sigma of each measurement. The estimated_value(s) differ from the observed_value(s) due to that randomness, but the distribution is the expected Gaussian one.

Regarding the initial orbit: what I do is perform an IOD using my own algorithm (it works really well, that is not the problem) which provides initial state and covariance. Then I run the filter in the first pass forward, backwards and then again forward to try to eliminate any possible bad initial guess. The rest of the passes work with just the UKF running on its own.

Thank you so much for your help. Maybe this reduces the list of suspects.