CTS tests for GNSS carrier frequency?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

CTS tests for GNSS carrier frequency?

Sean Barbeau
Hi all,
I've been following emerging dual-frequency GNSS capabilities in Android devices over the last few months (for the current state of the industry see https://medium.com/@sjbarbeau/dual-frequency-gnss-on-android-devices-152b8826e1c).

The Xiaomi Mi 8 (launched May 31st) appears to be the first Android phone to supports dual frequency GNSS, supporting L1/L5 for GPS and E1/E5 for Galileo, as well as QZSS.

However, based on user screenshots of GPSTest and GnssLogger (see https://forum.xda-developers.com/galaxy-s9/help/gps-receiver-exynos-model-t3748641/page18, and also attached) it appears that the Xiaomi Mi 8 is populating carrier frequency information for the GnssMeasurement.getCarrierFrequencyHz() method:

...but NOT for the GnssStatus.getCarrierFrequencyHz() method:

GnssStatus.getCarrierFrequencyHz() Android docs say:

Gets the carrier frequency of the signal tracked.
For example it can be the GPS central frequency for L1 = 1575.45 MHz, or L2 = 1227.60 MHz, L5 = 1176.45 MHz, varying GLO channels, etc. If the field is not set, it is the primary common use central frequency, e.g. L1 = 1575.45 MHz for GPS. For an L1, L5 receiver tracking a satellite on L1 and L5 at the same time, two measurements will be reported for this same satellite, in one all the values related to L1 will be filled, and in the other all of the values related to L5 will be filled.

It seems to me, then, that if Xiaomi is returning multiple satellites in GnssStatus that have the same constellation and svid, getCarrierFrequencyHz() MUST be set - otherwise, it implies that multiple signals on the L1 (primary) frequency are being tracked from the same satellite, which should never happen.

I went digging into the Android CTS to see if there were any test cases for this, and from GnssStatusTest it looks like there aren't:

Here's the only code related to carrier frequency:

      if (status.hasCarrierFrequencyHz(i)) {
.assertTrue("carrier_frequency_hz: Carrier frequency in hz",
"X > 0.0",
.getCarrierFrequencyHz(i) > 0.0);

So, questions:
  1. Am I correct in saying that if multiple satellites in GnssStatus have the same constellation and svid, getCarrierFrequencyHz() MUST be set?
  2. Am I missing any unit tests that would cover this case?
Any info is appreciated!


Sean Barbeau, Ph.D.
Center for Urban Transportation Research
University of South Florida

You received this message because you are subscribed to the Google Groups "android-platform" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
Visit this group at https://groups.google.com/group/android-platform.
For more options, visit https://groups.google.com/d/optout.

Xiaomi Mi 8 - GnssLogger - Measurements.jpg (261K) Download Attachment
Xiaomi Mi 8 - GPSTest - GnssStatus.jpg (235K) Download Attachment
Xiaomi Mi 8 - GnssLogger - GnssStatus.png (481K) Download Attachment