Dual-frequency GNSS on Android devices

L1+L5 support for GPS is here! …or is it?

It’s an exciting time for Global Navigation Satellite Systems (GNSS) on Android. Android Nougat 7.0 brought official support for multiple GNSS constellations beyond U.S. GPS (including GLONASS, QZSS, BeiDou, and Galileo), as well as the ability to collect and process raw pseudorange measurements and navigation messages within an Android app. Android P is providing developer options for testing real-time kinematic (RTK), or carrier-phase measurements, for the first time using embedded GNSS. Galileo, the European Union GNSS, is now operational with 22 satellites in Initial Services and nearing completion, and is already supported by a number of mobile devices. Other embedded device sensors are being fused with GNSS measurements for better location info (e.g., barometric sensors for altitude).

One of the most promising enhancements to position accuracy is the introduction of “dual-frequency” GNSS support. Dual-frequency GNSS means that the receiver tracks more than one radio signal from each satellites on different frequencies — for GPS, this is L1 and L5, and on Galileo E1 and E5a.

A visualization of the various GNSS carrier frequencies (Image courtesy of Broadcom via GPS World)

The more advanced L5/E5a signals are less prone to multipath errors and therefore can be used to refine position accuracy to the order of 30 cm (versus today’s 5 meters). From a user’s perspective, this is the difference between a real-time navigation app knowing which road you’re on and which lane you’re in. And, because multipath errors due to building reflections are a key problem in urban canyons, dual-frequency GNSS promises better accuracy and precision in some of the most challenging city environments. This means better wayfinding directions near and in buildings, and, with other technologies, possibly even down to which floor of a building you’re on. This IEEE article, as well as the 2018 Google I/O presentation “How to get one-meter location-accuracy from Android devices,” give detailed overviews of the benefits of tracking multiple GNSS carrier frequencies.

Does your device support L1 + L5?

First, let’s start with the easiest way to tell if your Android device supports both L1 and L5 signals.

Download GPSTest by barbeauDev from Google Play or F-Droid (full disclosure, I’m the developer of this open-source app):

Then, look for any “L5” or “E5a” values in the “CF” (Carrier Frequency) column:

No carrier frequency (CF) data on a Samsung Galaxy S8+ (using GPSTest app)

As you can see above, the Samsung Galaxy S8+ (SM-G955U) doesn’t show any CF info.

And, as of June 2018, I haven’t seen any devices that actually do show carrier frequency data. (EDIT September 8th, 2018 — The Xiaomi Mi 8 with Android P beta finally shows CF values! Other Android P devices are showing CF values now too. See subsections below for details).

This leads to two questions:

  1. What’s the status of Android support for dual frequency GNSS?
  2. Are there any devices out there that support dual frequency?

Android 8.0 support

In Android 8.0 Oreo (API Level 26), there is a new method to get the carrier frequency for each satellite signal in view. The developer documentation for GnssStatus.getCarrierFrequencyHz() says:

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

GnssStatus.getCarrierFrequencyHz() returns a floating point value. So, to show the user a label like “L5” in an Android app, a developer needs to translate the raw number of 1176450000.000 Hz to the string “L5”.

This means that an app must maintain a mapping of all carrier frequency numbers to labels for all GNSS, which is a bit of a pain. I and another contributor managed to scrape together this info from a variety of authoritative (and some less authoritative) sources and turned it into this table:

I then translated that mapping into code for GPSTest, and the resulting label shows up in the CF (Carrier Frequency) column on the Status screen IF the device provides this data.

In summary — Android Oreo (API 26) and higher (and the GPSTest Android app) officially support multiple GNSS frequencies.

So, what about device support?

Device support

Broadcom made a splash in September 2017 by announcing the launch of the BCM47755 GNSS chip that officially supports multiple carrier frequencies:

More specifically, BCM47755 supports:

  • GPS — L1 C/A + L5
  • Galileo — E1 + E5a
  • QZSS — L1 + L5
  • GLONASS — L1
  • BeiDou — B1

And, Broadcom said that the BCM47755 would appear in 2018 smartphones, but not which ones.

So, is this chip included in any devices currently on the market? If so, is dual-frequency GNSS enabled? Here’s where things get a bit murkier.

Samsung Galaxy S9/S9+

The Samsung Galaxy S9 and S9+ released on March 11, 2018 are prime candidates for dual frequency support. However, the official Samsung Galaxy S9 spec only says:

…location (GPS, Galileo, Glonass, BeiDou)
*Galileo and BeiDou coverage may be limited. BeiDou may not be available for certain countries.

That doesn’t help. Let’s look at the actual hardware — here’s a teardown of the S9+:

There are two different chipset variants of the S9/S9+:

  1. Qualcomm Snapdragon 845 (U.S., Latin America, Chinese, and Japanese markets)
  2. Samsung Exynos 9810 (European and other markets)

Qualcomm is a competitor to Broadcom, and therefore it’s unlikely that a Qualcomm SoC (and therefore any device based on the Snapdragon series) will include the BCM47755. (EDIT: I thought we’d never see a Broadcom chip in a Qualcomm SoC device, but the Xiaomi Mi 8 proved me wrong! See the next section for details)

However, the teardown shows that the Exynos variant has a “Broadcom BCM47752 GNSS Receiver” — close, but this isn’t the exact “47755” that we were looking for.

So what’s the difference between the 47752 and 47755? If you find out, let me know :). Broadcom’s spec sheet for the BCM4775x family doesn’t provide any details about the 47752 (or the yet-unseen 47754), and also doesn’t say that the entire 4775x family supports dual-frequency GNSS. Only the 47755 and 47758 models are specifically called out as supporting L5 and E5a. As a result, the exact specs on the 44752 remain a mystery.

No matter what the documentation does or doesn’t say, here’s the most important info— users of the Galaxy S9 Exynos variant are reporting that they ̶c̶a̶n̶’̶t̶ ̶s̶e̶e̶ ̶c̶a̶r̶r̶i̶e̶r̶ ̶f̶r̶e̶q̶u̶e̶n̶c̶i̶e̶s̶ can’t see dual-frequency information (EDIT January 25, 2019 — With Android P, users can now see single frequency carrier information). Here’s a screenshot:

Galaxy S9 Exynos variant shows single carrier frequency information using GPSTest (Source: B. Buster)

Which leads to more questions:

  1. Does the Broadcom BCM47752 chip support dual-frequency GNSS?
  2. If so, does the Galaxy S9/S9+ Exynos variant need a firmware update to enable it?

For the adventurous spirits out there, it may be possible to enable dual-frequency support on the Exynos Galaxy S9/S9+ by editing system config files — we don’t know yet.

If you want to go down this road, first note that this requires root and, as with any changes to your device unsanctioned by Samsung, could potentially brick your S9 or otherwise leave it less than fully functional. So, you’ve been warned.

According to user cr2 on XDA Developers, here are the steps that may enable dual-frequency GNSS support on the Exynos Galaxy S9/S9+:

  1. Find the file /vendor/etc/gps.xml on your device
  2. In gps.xml, find the <gll> section
  3. Replace the MultiCarrLnaMask and MultiCarrRFMode lines with the following (you also might want to save the current lines in case you need to revert these changes):
MultiCarrLnaMask ="L1_EXT_ON | L5_EXT_ON"
MultiCarrRFMode ="GL_MULTI_CARR_RF_MODE_L1_L5"

Save the file, reboot your S9 and fire up the GPSTest app — does CF data appear?

If not, try these values (it addsL2 on the 2nd line):

MultiCarrLnaMask ="L1_EXT_ON|L5_EXT_ON"
MultiCarrRFMode ="GL_MULTI_CARR_RF_MODE_L1_L2_L5"

Any luck?

Xiaomi Mi 8

According to leaks of the retail box prior to launch, the Xiaomi Mi 8 was rumored to feature “dual-GPS”. Immediately following the device launch on May 31st, The Verge and TechPP both reported that the Mi 8 does indeed support the L1 and L5 bands of GPS. The EU GSA, the organization that operates Galileo, capped this off with a definitive press release on June 4th with the following information:

Xiaomi — one of the fastest growing mobile brands — has launched the world’s first dual-frequency GNSS smartphone. Fitted with a Broadcom BCM47755 chip, the Xiaomi Mi 8, launched on May 31, is the world’s first smartphone providing up to decimetre-level accuracy for location-based services and vehicle navigation…. The BCM47755, introduced last year, is a dual-frequency (E1/L1+E5/L5) GNSS chip that can compute location with an accuracy of up to a few decimetres.…
Providing enhanced performance, the Mi 8 offers users better positioning in urban environments” (Source: EU GSA)

Interestingly, the Xiaomi Mi 8 uses a Qualcomm Snapdragon 845 SoC, and therefore must leverage the BCM47755 in addition to the main SoC to support dual-frequency GNSS.

Initial versions of the Xiaomi Mi 8 firmware seemed to support dual-frequency GNSS but didn’t show CF values in GPSTest because the GnssStatus.getCarrierFrequencyHz() function didn’t work properly (circa June to August 2018).

However, on September 8th a user shared a screenshot showing that the latest Android P beta update (MIUI 10 Global 8.9.11 Beta) does indeed show CF values!

Xiaomi Mi 8 with Android P beta running GPSTest on Sept. 8th (Source: Brian Nguyễn)

So, it looks like Xiaomi fixed the issue with GnssStatus.getCarrierFrequencyHz() not being populated, which is great!

However, the carrier frequency of 1575.450 for Beidou doesn’t seem to match any known Beidou values. (EDIT — it looks like this is the B1C carrier frequency, which GPSTest v3.2.7 now supports).

Also, it’s a little suspicious that the device is reporting using nearly ALL satellites (“U” indicator in “Flags” column) to compute a fix — is this another bug?

Samsung Galaxy Note 9

The Samsung Galaxy Note 9 was announced on August 9, 2018. However, the live-stream event made no mention of dual-frequency GNSS. In the first teardown of the Note 9 by Russian site hi-tech.mail.ru, presumably of the Exynos variant, you can’t see the printing on the chips on the portion of the board that housed the BCM47752 on the Galaxy S9, so we can’t yet tell if a BCM 4775X chip is included in the Note 9 Exynos. In TechInsight’s teardown of the Note 9 Snapdragon 845 variant there is no BCM4775X chip to be found. The Note 9 launched on August 24th, and while I haven’t seen a teardown of the Exynos variant with high resolution photos yet, the initial screenshots don’t look promising.

Huawei Mate 20 and Mate 20 Pro

Huawei launched the Mate 20 and Mate 20 Pro on October 16, 2018, and — tl;dr — it supports dual-frequency! However, there is a twist. Instead of using the Broadcom chipset, these devices use the Kirin 980, which is also being marketed as the “World 1st 7nm Mobile AI Chipset”. But, more importantly for this article, the Kirin 980 website says:

The GPS is supported by industry leading L1 + L5 dual frequency ultra-precise positioning to give you a more accurate target location when using map navigation, even in complex terrains.

And it looks like dual-frequency extends to Galileo and QZSS too, according to the Mate 20 Pro specs:

GPS (L1 + L5 dual band) / AGPS / Glonass / BeiDou / Galileo (E1 + E5a dual band) / QZSS (L1 + L5 dual band)

Initial Mate 20 screenshots did not show any CF values, although it looks like Huawei fixed this bug in build 9.0.0.232:

Mate 20 Pro currently doesn’t show dual-frequency GNSS (L5 or E5a) in use (Source: Timothy Hasko)

However, as of build 9.0.0.232, dual-frequency is NOT in use — no L5 or E5a signals are displayed. Based on this comment, it appears that, just like the first release of the Xiaomi Mi 8, the Android GnssStatus API may not be supported correctly, but dual-frequency information is visible in the GnssMeasurement API.

Do you have a newer version of software on your Mate 20 or Mate 20 Pro? If so, can you share a screenshot?

Pixel 3

While some had hoped that Google would showcase dual-frequency GNSS support in the new Pixel 3 family, after being released on October 18 specs and screenshots show no dual-frequency support.

Xiaomi Mi Mix 3

Xiaomi announced the Mi Mix 3 on October 25th, and, as Android Authority stated, user screenshots show that it supports dual frequency GNSS for GPS, Galileo, and QZSS:

Xiaomi Mi Mix 3 screenshot showing dual-frequency for GPS, Galileo, and QZSS (Source: Lance Moss)

Samsung Galaxy S10

On November 14th, Samsung announced the Exynos 9 Series (9820) application processor, which powers the international variants of the Galaxy S10. The Exynos 9820 specs did not include any mention of dual-frequency GNSS. However, based on a tear down it looks like Samsung put a Broadcom BCM47752KLB1G chip in the Exynos S10+, which appears to be the same mysterious model that appeared in the S9. Unfortunately, though, so far screenshots aren’t showing any L5 signals. Is it possible that L5 support could be enabled on the S10 by hacking the config?

No L5 signals on the Exynos S10 so far (Source: Mike L)

On December 5th Qualcomm announced the Snapdragon 855, which powers the U.S., Latin America, Chinese, and Japanese variants of the S10. The Snapdragon 855 specs say (emphasis mine):

Satellite Systems Support: GPS, GLONASS, Beidou, Galileo, QZSS, SBAS, Dual frequency GNSS

However, on February 20th, 2019 Samsung made no mention of dual-frequency GNSS at their press event, and the Samsung S10 family spec sheet doesn’t mention dual-frequency. And, strangely, based on screenshots from users is appears that some S10 Snapdragon models support dual-frequency, while others do not. So far the only Snapdragon variant to show dual-frequency in-use for GPS, Galileo, and QZSS is the SM-G9730 (S10) and SM-G9750 (S10+) from Hong Kong (International GSM only, no CDMA):

Dual-frequency is supported on the Hong Kong (Snapdragon) variant of the Galaxy S10! (Source: Cyris Woo)

Here are the S10 Snapdragon models that users have submitted screenshot for that do NOT seem to support dual-frequency:

If anyone else gets their hands on other variants of the Snapdragon S10, S10+, or S10e, please run GPSTest and let me know what you see! Please include a screenshot of your Android system “Settings->About phone” so your exact model number is included.

Honor View 20 (V20)

Honor announced the View 20 in December of 2018, and it’s specs claim dual-frequency GNSS using the Kirin 980 chipset. Please send screenshots!

LG G8 ThinQ

On February 24th, LG revealed the LG G8 ThinQ, another Snapdragon 855 device…but again, no mention of dual frequency GNSS. And unfortunately this photo of a Sprint floor model (likely the LMG820UM0) does not show dual-frequency GNSS:

This Sprint floor model of the LG G8 does not show dual-frequency GNSS (Source: Andy)

LG V50 ThinQ 5G

Same as the above — launched February 24th, Snapdragon 855, no mention of dual-frequency…

Sony Xperia 1

Another of the 2019 Snapdragon 855 devices, but again, the official specs make no mention of dual-frequency GNSS.

Xiaomi Mi 9

The Xiaomi Mi 9 uses the Snapdragon 855, but, unlike other Snapdragon 855 devices, it does officially claim to support dual frequency for GPS:L1+L5 and Galileo:E1+E5a! And screenshots do indeed show L5 and E5a signals!

Dual-frequency shown on the Xiaomi Mi 9 (Source: Patrick lecourt)

Huawei P30 and P30 Pro

Announced on March 26, 2019, the Huawei P30 and P30 Pro specs do claim dual-frequency support:

GPS (L1 + L5 Dual Band) / AGPS / Glonass / BeiDou / Galileo (E1 + E5a Dual Band) / QZSS (L1 + L5 Dual Band)

And a screenshot of the P30 Pro does indeed show L5 and E5a in use!

Huawei P30 Pro supports dual-frequency GNSS, showing both L5 and E5a in use (Source: George Simas)

OPPO Reno

In an article on April 4th, 2019, OPPO’s Vice President, Shen Yiren, said:

The 10x hybrid zoom version uses dual-frequency GPS.

Screenshots anyone?

Lenovo Z6 Pro and Youth Edition

On April 23, 2019, Lenovo announced the Z6 Pro, based on the Snapdragon 855, which claims dual-frequency support. On May 9th, it also announced that the Z6 Youth Edition will also have dual-frequency GNSS. Please share!

Pixel 3A

In early May 2019 Google revealed the Pixel 3A, which uses the Snapdragon 670 chipset. Unfortunately, this means no dual-frequency support, as a screenshot shows.

OnePlus 7 and 7 Pro

These devices launched in mid-May 2019, and the specs, which feature a Snapdragon 855, claim dual-frequency support:

GPS (L1+L5 Dual Band), GLONASS, Galileo (E1+E5a Dual Band), Beidou, SBAS, A-GPS

Please share screenshots!

Summary

It initially seemed that the mysterious Broadcom BCM47752 chip in the Exynos variant of the Samsung Galaxy S9/S9+ was the prime candidate for dual-frequency GNSS support in a commercially-available Android devices. However, the Xiaomi Mi 8 (launched on May 31st, 2018) was the first commercially-available phone to officially support dual-frequency, showing GPS, Galileo, and QZSS in GPSTest! Samsung didn’t mention dual-frequency GNSS in the Galaxy Note 9 announcement event, and following the launch on August 24th it doesn’t look like the Note 9 supports dual-frequency GNSS. Huawei launched the Mate 20 and Mate 20 Pro in mid-October, and it looks like these devices do indeed support dual-frequency, but using the Kirin 980 chipset. However, early screenshots of GPSTest indicate dual-frequency GNSS is not in use on the Mate 20. Xiaomi Mi Mix 3 screenshots show dual-frequency support for GPS, Galileo, and QZSS. Dual-frequency support appears to be missing from the Exynos Galaxy S10, even though it carries the same mysterious BCM47752 chip as the Exynos S9. Support for dual-frequency support in the Snapdragon 855 chipset announced in early December 2018 promises to bring dual-frequency support to many future devices in U.S., Latin America, Chinese, and Japanese markets, and we have seen support in the Hong Kong variant of the Galaxy S10! But, all other variants of the S10 don’t show dual-frequency support. So far no word of dual frequency for the LG G8 or V50 5G , also both Snapdragon 855 devices. Huawei P30 and P30 Pro have dual-frequency support. OPPO Reno, Lenovo Z6 Pro and Youth Edition, and OnePlus 7 and 7 Pro all claim dual-frequency support, while the Pixel 3A does not support L5.

One important item of note — if you’re testing a dual-frequency device in the U. S., you likely won’t see Galileo satellites, although it seems that will change following November 15th (and early Galaxy S10 screenshots do show Galileo 🎉).

So, can you see L1+L5 signals using the GPSTest app on your device? Are you willing to take the risk of rooting your S9 and editing gps.xml to see if that enables dual frequency GNSS? Did you run GPSTest on the Xiaomi Mi 8 and see an indicator that many satellites aren’t being used in a fix? Did you find another teardown of the Note 9 Exynos variant, or do you see CF values on a Note 9? Can you share a screenshot from a newer version Huawei Mate 20/Pro? Can you run GPSTest on a Samsung Galaxy S10? Any screenshots for the Xiaomi Mi 9?

If so, let me know in the comments below. In the mean time, I’ll be digging for more information and will update this article when I find it.

References

  1. XDA Developers thread on S9 Exynos and dual frequency support— https://forum.xda-developers.com/galaxy-s9/help/gps-receiver-exynos-model-t3748641/
  2. European Global Navigation Satellite Systems Agency (GSA). “World’s first dual-frequency GNSS smartphone hits the market,” June 4, 2018. https://www.gsa.europa.eu/newsroom/news/world-s-first-dual-frequency-gnss-smartphone-hits-market

Non-smartphone dual-frequency hardware

  1. STMicroelectronics Teseo APP (Automotive Precise Positioning) receiver
  2. u-blox F9 technology platform (e.g., ZED-F9P multi-band GNSS module as covered by GPS World)
  3. u-blox ANN-MB multi‑band active GNSS antenna, as covered by GPS World

Acknowledgements