I intend to create a new Class to deal with my data. I’m working with Radar data, basically composed of Azimuth, Elevation, Distance and Radial velocity.
I’d like to obtain a Class similar to AngularAzEl, in order to perform the following methods :
Also, I’d like to know if it’s possible to build an AngularAzEl without ObservableSatellite ?
The aim here is to create the RadarMeasurment object, then to analyze a data base to identify the Satellite (then set the Satellite in the measurement object).
The ObservableSatellite is needed in the measurements models.
But its sole purpose is to store and remember the clock offset driver of the satellite.
If you don’t need this offset and uses only one satellite you can just put new ObservableSatellite(0) in all your measurements and it should just work fine.
If you want to have this in one measurement I’m afraid you will have to write a class dedicated to it.
However there is an Orekit object that you can use, the MultiplexedMeasurement.
This is also an implementation of `ObservedMeasurement and allows you to gather several measurements in one single object.
In your case, given your radar measurement input, you could add:
an AngularAzEl for Azimuth/Elevation;
a Range for distance;
a RangeRate for radial velocity.
And with this you should have everything you need in one single measurement object.
Thank you very much for your answer, it actually helps me !
I’m gonna create a Class from MultiplexedMeasurement as you adviced it to me, it seems to be a good idea. I just have a problem with the ObservableSatellite :
My measurements come from a Radar (az, el, dist, radial velocity and associated sigma values) and the aim of the study is to identify the Satellite, in those conditions I’m not able to create an AngularAzEl object. I’m not sure to understand what you said about the offset. I think I don’t need it but I will not work with only one satellite.
I have another question on this topic :
I don’t understand what is baseweight in the Constructor neither.
The clock offset is used when the measurement is somehow based on a timestamp set by an onboard clock that may be out-of-sync with respect to UTC. It is mainly used for GNSS measurements (either when the satellite you deal with is a GNSS satellite with an onboard atomic clock or when you deal with a regular satellite with a GNSS receiver). In your case, the satellite is passive, the measurement is not related to any onboard clock, it is only timestamped by the radar itself.
If you don’t know the satellite at the start of operation, just create something like
ObservableSatellite unknownSat = new ObservableSatellite(0);
and use unknownSat to build all you measurements. Then you can do a first loop and call the estimate method with the state of each candidate satellite and based on the residuals select which one is more consistent. After this first loop, you will have associated original measurements with different satellites.
After this first step, you have can either do several mono-satellites orbit determinations or one multi-satellites orbit determination.
If you plan to perform n mono-satellites orbit determinations, then you can simply reuse the already built measurements, taking care to use only the measurements associated with one single satellite for each determination. this means you will have to filter out the measurements list. As all orbit determinations will manage only one satellite, for this OD they will all consider their satellite is the number 0 (since there is only one satellite at this step), this is the reason why you can reuse the measurements built before.
If you plan to use one multi-satellites orbit determination, you will have to rebuild the measurements, but this time using the appropriate candidate (i.e. you will use n different ObservableSatellite in one OD process).
I think n independant mono-satellites orbit determination is simpler, but one single multi-satellite OD would allow you to estimate common parameters like radar biases.
The baseweight is a way to change the relative weight of each measurements. In regular operations, you just set it to 1.0 for all measurements and then the relative weight will simply be automatically computed from the measurements standard deviation. If for example you have two radars, one that as a standard deviation of 10m and another one that has a standard deviation of 30m, then the measurements built with the characteristics of the first radar will be considered “more important” by the optimizer and you don’t need to change the base weight, just put 1.0 for both. If on the other hand you have two radars with the same standard deviation but for some reason you have more confidence on radar 1 than on radar 2 (perhaps there was a lot of interferences that day on radar 2 site and you want to work around this, then you will set for example 2.0 on the base weight of radar 1 measurements and 1.0 on the base weight of radar 2 measurements, in order to force the optimizer to consider radar 1 “more important” than radar 2
Thank you very much @luc for this complete answer !
I understand now how to use the object AngularAzEl. And you’re right, for my problem the usage of an unknown satellite seems to be the best way.
I’m just affraid of the performances of my computation because I have to keep useless informations in memory (Groundstation, Satellite, Offset and Baseweight) for each point.
I just implemented a small Class radarMeasurements with the values I need (date, az, el, range, rangeRate and possibly radar when I will work with different radars).
Maybe I will use a sub-Class of Measurements as @MaximeJ proposed when I will work on a more complex solution (multi-satellite, multi-radar).
Thank you again for your help !
ps : I asked a question on another subject about the conversion pvcoordinates => az, el, range for simulations and the opposite operation az, el, range => Vector3D with which I have some troubles with the reference Frame (X and Y are inversed)
If you have any idea I’ll be happy to exchange with you about this topic also.