Measurements generation

Hello everyone!! I’am trying to create measurements (AngularAzEl) using measurements.generation.Generator(). I have a known position (RCSC_state) for the satellite at certain time t2. The idea is to calculate the orbit of the satellite at t2 with IodLaplace with different time difference between created measurements to see if it fits the known orbit. I want to find out how far should the measurements be spaced in time to calculate accurate orbit of the satellite at specified height.

meas_length = 90.0
date_start = datetime_to_absolutedate(DATE_RCSC[int(len(DATE_RCSC)/2)]).shiftedBy(-meas_length/2)
date_end = datetime_to_absolutedate(DATE_RCSC[int(len(DATE_RCSC)/2)]).shiftedBy(meas_length/2)
myMeasurements = myGenerator.generate(date_start, date_end)

updateTime = 2
fixedStepSelector = FixedStepSelector(float(updateTime), utc)

for i in range(1, int(len(myMeas_list)/updateTime)+1, 1):
    mean_mes = int(len(myMeas_list)/2)
    est_orb = laplace.estimate(inertialFrame, myMeas_list[mean_mes-i], myMeas_list[mean_mes], myMeas_list[mean_mes+i])
    #which is equivalent to laplace.estimate(inertialFrame, t2-updateTime*i, t2, t2+updateTime*i)
    res.append(abs(est_orb.getPosition().getNorm()-RCSC_state))

time = np.linspace(0, (updateTime*len(res)-updateTime)*2, len(res))
plt.plot(time, res)

I am changing the value of meas_length not changing updateTime and get different accuracy of calculated position. If we’re increasing meas_length the graph we get should continue (cause I’m creating measurements for the same time moments) but it shifts upwards or downwards (see the graph below). Do you have any suggestions of this behavior??
I can provide the whole script if it’ll be needed.


The graph shows that accuracy improves when you increase the range (meas_length) to 100 seconds, and then it deteriorates while converging at about 100 seconds. Why does the result depends on the meas_length itself while updateTime remains unchanged??

Hi @daiana

Welcome on the strange world of Initial Orbit Determination! :slight_smile:

What you observe is “normal”. Il should not be normal but it is expected. I recommend you to have a look on the following thesis : https://oaktrust.library.tamu.edu/bitstream/handle/1969.1/ETD-TAMU-2011-12-10242/SCHAEPERKOETTER-THESIS.pdf?sequence=2&isAllowed=y
It is, in my own opinion, the best document describing IOD accuracy depending on the orbit case.
Figure 6, 7, 8, 9, and 12 present exactly what you observe: the accuracy improves when the measurement range increase, and it deteriorates after. And this for the majority of orbit types with IOD Laplace.

My second recommendation is to use IodGauss instead of IodLaplace. It has a better accuracy. Please note that this method is available since Orekit 12.0.

Best regards,
Bryan

1 Like

A last recommendation is to use IodGooding, but you need 2 first guess of the range between your satellite and your station