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?

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

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

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+

…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

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

Huawei Mate 20 and Mate 20 Pro

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, and while Huawei fixed this bug in build 9.0.0.232, L5 and E5a signals still weren’t displayed. However, it looks like Huawei finally got it right in 9.1.0.300, as L5 and E5a signals are now shown to be in-use:

Mate 20 Pro finally shows dual-frequency GNSS as of EMUI 9.1.0.300 (Source: Richard Gadd)

Pixel 3

Xiaomi Mi Mix 3

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

Samsung Galaxy S10

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)

L5 values are displayed on the Honor View 20 as of Magic 2.1 (Source: Graham Sherwood)

LG G8 ThinQ

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

LG V50 ThinQ 5G

Sony Xperia 1

Xiaomi Mi 9

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

Huawei P30 and P30 Pro

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

And a screenshot of the P30 and P30 Pro (below) 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

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

And the below screenshot confirms it!

The Oppo Reno 10x supports L5 and E5a (Source: Steve)

Lenovo Z6 Pro and Youth Edition

However, screenshots from the Z6 Youth Edition (with 11.0.049 ST Android 9) tell a different story — no L5 or E5a satellites are visible!

Lenovo Z6 Youth Edition appears to have a bug that mislabels dual-frequency signals (Source: Kurt Keller)

But if you look close, multiple records for some satellite IDs are shown — I’m guessing it’s a bug, and one of the pair are L5/E5a. Hopefully Lenovo fixes this soon!

Pixel 3A

OnePlus 7 and 7 Pro

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

And here’s the screenshot to prove it:

The OnePlus 7 Pro shows dual-frequency GNSS (Source: JLR)

Asus ZenFone 6

> Support GPS (Dual bands, L1+L5), GLONASS (G1), BDS (B1), GALILEO (Dual bands, E1+E5a), QZSS (Dual bands, L1+L5)

Xiaomi Redmi K20 and K20 Pro

Xiaomi Mi 9T and 9T Pro

The Xiaomi 9T Pro shows dual-frequency GNSS (Source: Andres Zanzani)

Samsung Galaxy Note 10 and 10+ (and 5G variants)

Apparently the Note 10 5G(SM-N971N) and Note 10+ 5G (SM-N976N) South Korean variants do support GPS L5!

Note 10 5G (SM-N971N) and 10+ 5G (SM-N976N) South Korean variants support dual-frequency! (Source: JaeGwang)

A user is also reporting that dual-frequency is working on a Note 10+ that was pre-ordered on T-Mobile in the U.S. (SM-N975U):

A Galaxy Note 10+ pre-order on T-Mobile (SM-N975U) is also showing dual-frequency! (Source: Robert Kay JR)

Someone else ran GPSTest on a Samsung Note 10+ Costco demo unit (SM-N975XU) in the U.S. and saw dual-frequency! Another user is reporting that Samsung Galaxy Note 10+ 5G UK EE (SM-N976B) also shows dual-frequency, although GNSS stops working when 5G is enabled (!). Notebookcheck.net is showing some screenshots for the Galaxy Note 10+ (SM-N975F) w/ Exynos processor that does have dual-frequency displayed, as does a user’s screenshot.

But how about the rest? Screenshots please!

Google Pixel 4 and Pixel 4 XL

GPS,⁸ GLONASS, Galileo⁸

But, if you scroll allll the way down to the bottom to read the footnotes, it says:

⁸Dual Band (L1+L5) or (E1 +E5a). Support — coming soon

Apparently “coming soon” means December 10th— release QQ1B.191205.012.A1 has landed on some devices showing dual-frequency!

Pixel 4 showing dual-frequency GNSS as of release QQ1B.191205.012.A1 (Source:
Christian Brodtkorb Wiik)

OnePlus 7T

OnePlus 7T shows dual-frequency! (Source: Dan Rigby)

Samsung Galaxy S20, S20+, and S20 Ultra 5G

So far, looks like the T-Mobile variant of the S20 Ultra 5G shows dual-frequency! And this article includes a screenshot of the European Exynos S20 Ultra variant, also with dual-frequency! This post also shows a Exynos variant Galaxy S20+ (SM-G985F) with dual frequency, and a user shared that the S20 Exynos variant (SM-G980F/DS) does as well.

Xiaomi Redmi Note 9 Pro Max

OnePlus 8 and 8 Pro

Xiaomi Mi 10 Lite 5G

Samsung Note 20 Ultra

Google Pixel 4a and 4a 5G

However, the Pixel 4a 5G was announced on Sept 30th with a release date of Oct 15, 2020, and will have a Qualcomm Snapdragon 765G — this means it should support dual-frequency GNSS. However, users have shared screenshots showing that dual frequency is NOT supported. More screenshots welcome!

Google Pixel 5

Samsung Galaxy S20 FE 5G

OnePlus Nord N10

Samsung Galaxy S21, S21+, S21 Ultra

Samsung Galaxy S21 Ultra Snapdragon variant (GM-G998U1) does support dual-frequency! (Source: Matthew Miller)

The Snapdragon variant of the S21+ (SM-G996U1) also supports dual-frequency.

But does the EU variant with the Exynos 2100 chipset? The first screenshots from a Galaxy S21 SM-G991B below suggests no.

Samsung Galaxy S21 Exynos variant (SM-G991B) does NOT show dual-frequency (Source: Mike O)

Interestingly, though, this review and screenshot of the S21 Ultra Exynos variant DOES show dual-frequency GNSS, as it seems to contain a BCM4775 chip as well. Interestingly, looking at the GPSTest Database, apparently the S21 base variant (Exynos and Snapdragon) do NOT support dual-frequency GNSS — it seems dual-frequency has been reserved for the S21+ and S21 Ultra variants.

Summary

One important item of note — if you’re testing an older dual-frequency device in the U. S., you may not see Galileo satellites.

So, can you see L1+L5 signals using the GPSTest app on your device?

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.

Finally, if you’re interested in testing the GNSS accuracy of the device, check out the new Accuracy feature in GPSTest!

Quick reference

GPSTest Database

Was this article helpful? Consider following me on Medium. If you’re a user of the open-source GPSTest app and you’d like to support it, you can check out the GPSTest “Buy me a coffee” page:

References

  1. 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. u-blox F9 technology platform (e.g., ZED-F9P multi-band GNSS module as covered by GPS World)
  2. u-blox ANN-MB multi‑band active GNSS antenna, as covered by GPS World

Acknowledgements

Improving the world, one byte at a time. @sjbarbeau, https://github.com/barbeau, https://www.linkedin.com/in/seanbarbeau/. I work @CUTRUSF. Posts are my own.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store