I am currently using the least-squares algorithm with the TDOA and FDOA measurement classes for some research I am performing. The issue I’m having is: the T/FDOA measurement classes assume that the receivers creating the T/FDOA values are on the ground, and the code is written with this assumption baked-in. However, the receivers I am working with are in space. The current structure of the code is:
TDOA extends GroundReceiverMeasurement {
TDOA(GroundStation primary, GroundStation secondary, ...) {
}
EstimatedMeasurementBase<TDOA> theoreticalEvaluationWithoutDerivatives(...) {
final GroundReceiverComonParametersWIthoutDerivatives common = computeCommonParametersWIthout(SpacecraftState) {
...
}
EstimatedMeasurement<TDOA> theoreticalEvaluation(...) {
final GroundReceiverComonParametersWIthDerivatives common = computeCommonParametersWIth(SpacecraftState) {
...
}
}
GroundReceiverMeasurement extends AbstractMeasurement {
GroundReceiver(Groundstation station, ...) {
}
GroundReceiverCommonParametersWithoutDerivatives computeCommonParametersWIthout(SpacecraftState state) {
}
GroundReceiverCommonParametersWithDerivatives computeCommonParametersWIth(SpacecraftState state) {
}
}
# Standalone class
GroundStation(TopocentricFrame baseFrame)
# Math implementation classes
GroundReceiverCommonParametersWithoutDerivatives
GroundReceiverCommonParametersWithDerivatives
What I’d like to change the structure to in order to make it more flexible is:
TDOA extends AbstractMeasurement {
TDOA(Receiver primary, Receiver secondary) {
}
EstimatedMeasurementBase<TDOA> theoreticalEvaluationWithoutDerivatives(...) {
final ComonParametersWIthoutDerivatives common = computeCommonParametersWIthout(SpacecraftState) {
...
}
EstimatedMeasurement<TDOA> theoreticalEvaluation(...) {
final ComonParametersWIthDerivatives common = computeCommonParametersWIth(SpacecraftState) {
...
}
}
# New child classes
GroundReceiver extends Receiver
SatelliteReceiver extends Receiver
# New parent class
Receiver() {
CommonParametersWithoutDerivatives computeCommonParametersWIthout(SpacecraftState state) {
}
CommonParametersWithDerivatives computeCommonParametersWIth(SpacecraftState state) {
}
}
Obviously the other measurement classes that rely on GroundReceiver would be updated similarly, and it wouldn’t be possible to push this to main
until v14. And the actual implementation might end up looking a little different than this, since this is only a first draft solution. But in general what does everyone think of this idea?