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
Beidou: avoid passing corrupt ephemeris and TOW measurements to observables #649
Open
vladisslav2011
wants to merge
6
commits into
gnss-sdr:next
Choose a base branch
from
vladisslav2011:beidou_tlm_ecc
base: next
Could not load branches
Branch not found: {{ refName }}
Could not load tags
Nothing to show
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
vladisslav2011
force-pushed
the
beidou_tlm_ecc
branch
2 times, most recently
from
August 9, 2022 17:57
4ec96e9
to
1c73ecf
Compare
|
vladisslav2011
force-pushed
the
beidou_tlm_ecc
branch
5 times, most recently
from
August 25, 2022 23:50
f7e80b6
to
0f98b97
Compare
Demonstration: https://www.youtube.com/watch?v=q4kNYVTMV3Y |
vladisslav2011
changed the title
Beidou: avoid passing corrupt ephemeris and TOW measurements to an observables
Beidou: avoid passing corrupt ephemeris and TOW measurements to observables
Aug 26, 2022
vladisslav2011
force-pushed
the
beidou_tlm_ecc
branch
2 times, most recently
from
August 26, 2022 13:56
fc3db41
to
d0767c3
Compare
vladisslav2011
force-pushed
the
beidou_tlm_ecc
branch
from
October 11, 2022 11:59
d0767c3
to
6727b4b
Compare
Implement generic ephemeris validator: Keep previous and last valid ephemeris. Compare received ephemeris to previous and last valid. Count successful comparisions. Update last valid ephemeris if count reaches threshold. Add telemetry decoder configuration parameters: int32_t TelemetryDecoder_B1.ecc_reject - reject ephemeris if the ECC error counter reaches this value int32_t TelemetryDecoder_B1.ecc_resync - resync telemetry decoder if the ECC error counter reaches this value int32_t TelemetryDecoder_B1.validator_thr - number of equal ephemeris received, after that the ephemeris would be passed to observable. Set to 1 to disable validation bool TelemetryDecoder_B1.validator_accept_first - an option to always pass the first received ephemeris, bypassing the validator for one time. This may speed up first PVT solution at cost of higher probability of getting incorrect PVT in case, the first epehemeris would be corrupt. Signed-off-by: Vladislav P <vladisslav2011@gmail.com>
Signed-off-by: Vlad P <vladisslav2011@gmail.com>
Simplified telemetry decoder with better preamble synchronization. Resynchronize on bad TOW update. New telemetry decoder ecc resync/reject functionality: Count ECC errors. Reject subframe when ECC counter reaches certain threshold, defined in a configuration. New configuration parameters: TelemetryDecoder_XX.ecc_reject If the ECC error count grows past this value, reject subframe/word as corrupt TelemetryDecoder_XX.ecc_resync If the ECC error count grows past this value, reject subframe/word and restart telemetry decoder Signed-off-by: Vladislav P <vladisslav2011@gmail.com>
1. Check SOW period 2. Compare received ephemeris to last received and last valid 3. Count successful comparisions and pass ephemeris to observables only when count reaches defined threshold 4.Add BeiDou ephemeris validation configuration options: uint32_t TelemetryDecoder_B1.validator_thr = 2 - minimum number of matching ephemeris sets received before passing it to observables bool TelemetryDecoder_B1.validator_accept_first = true - always pass first ephemeris set to observables to speed up first fix at cost of possible invalid solution or delayed solution in case of weak signals/interference/jamming. Signed-off-by: Vladislav P <vladisslav2011@gmail.com>
Signed-off-by: Vladislav P <vladisslav2011@gmail.com>
vladisslav2011
force-pushed
the
beidou_tlm_ecc
branch
from
December 11, 2022 14:27
6727b4b
to
132352a
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I've done some tests with real world signal and found, that BeiDou B1I/B3I telemetry decoders do not work correctly when run for some time or signal quality is far from perfect. This results in position jumps, no PVT when many satellites are tracked, completely wrong PVT using 4 satellites and weird periodic tracking shown by GNSS-SDR-Monitor.
This PR contains following fixes:
Merging this PR should fix #631
The next PR would implement similar improvements to Glonass telemetry decoder.
Documentation update pending.