-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Error in calculating the Doppler Factor. #126
Comments
@studentkra, looking through the history of the file, @Alesha72003 had recommended some changes (see #79) 3 years ago because they believed the previous logic was incorrect. Looking through the tests that were created for this, it is solely testing that it can generate a doppler factor of 1. So your theory is entirely possible. @Alesha72003 introduced an "mfactor" that I am not familiar with and do not see referenced anywhere on google. It is possible that m is a reference to a Russian word/letter which is why I am not finding it. I am happy to find the issue and make the PR for you, but it would really help if you provided an (or ideally 3-5) example set(s) of input data and your expected output. Look4Sat is an awesome library btw (never seen it before), but it has been almost a decade since I have done anything with java so I wasn't able to solve it by just referencing their code. I did find: fun getDownlinkFreq(freq: Long): Long {
return (freq.toDouble() * (SPEED_OF_LIGHT - distanceRate * 1000.0) / SPEED_OF_LIGHT).toLong()
}
fun getUplinkFreq(freq: Long): Long {
return (freq.toDouble() * (SPEED_OF_LIGHT + distanceRate * 1000.0) / SPEED_OF_LIGHT).toLong()
} Given that we are just calculating the dopplerFactor in satellite.js it would seem that the output you are expecting is: ...
return c + sign(rangeRate) / c; Assuming that sign returns the correct + or -. Alternatively we could just refactor this whole function to do a basic eci to range/az/el and then calculate doppler based on the the difference in range. It would be a lot simpler. @studentkra let me know if you are willing to provide some examples so I can troubleshoot it for you. |
@thkruz Hi, mate! I still exist somewhere in the Universe so there are some chances to merge your PR. :) But I believe that we should ask @shashwatak to give you all permissions to manage this repo and npm package. Unfortunally I can't do it by myself. You're definitely the best person who can maintain this one. |
Thanks for the answer! I replaced the function return with this:
Everything seems to be working correctly now. |
@thkruz collaborator invite sent! |
@studentkra I am digging into this code and I am having a hard time making sense of your solution. Edit: It turns out the double negatives were tricking me. I think we can refactor your solution to ditch that sign function all together. Here is an example of two satellites, one that is moving towards us at 7km/s and one that is moving away at the same speed. if (rangeRate < 0) return 1 - rangeRate / c; // 1 - (-7 / 299792.48) = ~1.00002334
if (rangeRate >= 0) return 1 - rangeRate / c; // 1 - (7 / 299792.48) = ~0.99997665
// So the return value could just be:
return 1 - rangeRate / c; Does that make sense to you (and anyone else reading) and feel like an adequate solution? As a side note, I found the mFactor by searching for the constant. It is the rotation speed of the earth and is being used to account for the observer moving while the earth spins. |
I am using the example from the Readme to calculate the Doppler Factor, slightly changing it because the observerCoordsEcf is not defined. I was guided by this theme:
#24
Everything seems to be working fine as long as the satellite is approaching. The frequency is decreasing, as it should be, and fully corresponds to the frequency shown by the Look4Sat program. But when the Doppler Factor is equal to one and the satellite begins to move away, the frequency begins to increase, it should continue to decrease.
What is my mistake?
Update:
I think there is a mistake in this function of the source code. An error in mathematical signs. The function never returns a value less than 1.
The text was updated successfully, but these errors were encountered: