-
Notifications
You must be signed in to change notification settings - Fork 365
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
[Early Concept] Detect code type (signal component) and additional navigation message #658
Comments
Additional information: getCodeType() is vendor specific implemented. So obviously there are mistake. For example And my test shows SD870 receive ephemeris somewhat faster when use dual band. But it's ambiguous to measure. I'm not sure if it's trustworthy to use this API And I don't have devices to test GnssNavigationMessage |
@barbeau is it possible to lable the navigation message which device can decode? In newer device like Xiaomi 14 (SD 8 Gen 3), QZSS 196's almanac can be decoded finally. For future Galileo HAS. It also depends on navigation message to achieve high accuracy. |
Yes, I have this ticketed in #522. |
Glad to know ! I may go to retail store for some testing and log someday |
This issue has been automatically marked as stale because it has not had recent activity. Please comment here if it is still valid so that we can reprioritize. Thank you! |
Not stale |
GNSSMeasurement API provides code types. which reprecent different signal component.
https://developer.android.com/reference/android/location/GnssMeasurement#getCodeType()
For modern GNSS signal like L5, E5a, B2a, two component is provided for civilian use:
I component, aka Data component.
The advantage of it sually contains addition navigation message different from L1 E1 B1 band. For example B2a use CNAV-2 message which only take 8s to receive a frame. While B1I and B1C take 30s.
B2b is one step further, its CNAV-3 message take merely 1s to receive. Similar things in Galileo and GPS.
However tracking this component means lower sensitivity and less accurate pseudo range.
In practise, use I branch means faster TFFT and more up to date almanac and ephemeris. and also clock/orbit correction.
Q component, aka Pilot component.
This component exclusively contain pseudo range code. No navigation message is transmitted. It has better tracking performance and accuracy theoretically.
Therefore, also theoretically, GNSS chip should track I component only when it can utilize additional nav message.
Otherwise, track Q component for accuracy, and only rely on L1's traditional nav message.
in GnssMeasurement getCodeType()
For L5-I, E5a-I, E5b-I, B2a-I, B2b-I, should output "I" or "D"
For L5-Q, E5a-Q, E5b-Q, B2a-Q, B2b-Q, should output "Q" or "P"
In my test, Qualcomm 870 appears to output Q for all L5 bands. And mediatek 9200 output I. Which means mediatek can decode addional CNAV-3 message. And it is in line with their advertisement "PPP-B2b"(Use addional data for accuracy correction)
For base L1/E1/B1I/L5(IRNSS), this detection seens unnecessary. Because it's the mandatory requirement to decode traditional nav message, as chipmaker alway develop single band GNSS chip at the beginning.
Also GnssNavigationMessage provide a direct way to tell if there's additional nav message.
https://developer.android.com/reference/android/location/GnssNavigationMessage#TYPE_BDS_CNAV1
For GPS
For BDS
TYPE_BDS_CNAV3API doesn't add CNAV3 yet. But 9200 is decoding it obviously.
for Galileo
TYPE_GAL_CAPI doesn't add C/NAV yet. And no chip support E6 right now.
For GLONASS
For INRSS
For QZSS
The text was updated successfully, but these errors were encountered: