Skip to content
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

Open
Narugakuruga opened this issue Oct 25, 2023 · 6 comments

Comments

@Narugakuruga
Copy link
Contributor

Narugakuruga commented Oct 25, 2023

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

Value Signal Message Addition?
TYPE_GPS_L1CA L1C/A LNAV No
TYPE_GPS_L2CNAV L2C L2-CNAV Yes
TYPE_GPS_L5CNAV L5 L5-CNAV Yes
TYPE_GPS_CNAV L1C CNAV-2 Yes

For BDS

Value Signal Message Addition?
TYPE_BDS_D1 B1I(MEO/IGSO) D1 No
TYPE_BDS_D2 B1I(GEO) D2 Yes
TYPE_BDS_CNAV1 B1C CNAV-1 Yes
TYPE_BDS_CNAV2 B2a CNAV-2 Yes
TYPE_BDS_CNAV3 B2b CNAV-3 Yes

API doesn't add CNAV3 yet. But 9200 is decoding it obviously.

for Galileo

Value Signal Message Addition?
TYPE_GAL_I E1/E5b I/NAV No
TYPE_GAL_F E5a F/NAV Yes
TYPE_GAL_C E6 C/NAV Yes

API doesn't add C/NAV yet. And no chip support E6 right now.

For GLONASS

Value Signal Message Addition?
TYPE_GLO_L1CA L1C/A L1OCd No

For INRSS

Value Signal Message Addition?
TYPE_IRN_L5CA L5 ?? No

For QZSS

Value Signal Message Addition?
TYPE_QZS_L1CA L1C/A LNAV No
@Narugakuruga
Copy link
Contributor Author

Additional information: getCodeType() is vendor specific implemented. So obviously there are mistake. For example
They output E1, L5(IRNSS) code type C means no data is transmitted. But obviously there's ephemeris data.

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

@Narugakuruga
Copy link
Contributor Author

Narugakuruga commented Oct 30, 2023

@barbeau is it possible to lable the navigation message which device can decode?
As I discovered, most device never use BDS D2 message rather than D1.
So for BDS PNR 1-5, 59-61 satellite, they can never receive ephemeric data as they transmit different message.
Also for QZSS PNR 196 satellite, there's no ephemeric or almanac at all in old device.

In newer device like Xiaomi 14 (SD 8 Gen 3), QZSS 196's almanac can be decoded finally.
And for Mediatek 9200. BDS 59-61 message can be decoded to provide real world benefits (high accuracy clock and orbit correction )

For future Galileo HAS. It also depends on navigation message to achieve high accuracy.
E6's pseudo range performance is no better than E5.

@barbeau
Copy link
Owner

barbeau commented Oct 30, 2023

is it possible to lable the navigation message which device can decode?

Yes, I have this ticketed in #522.

@Narugakuruga
Copy link
Contributor Author

is it possible to lable the navigation message which device can decode?

Yes, I have this ticketed in #522.

Glad to know ! I may go to retail store for some testing and log someday

Copy link

stale bot commented May 22, 2024

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!

@stale stale bot added the stale label May 22, 2024
@barbeau
Copy link
Owner

barbeau commented May 22, 2024

Not stale

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants