Mike,
Good question!
For anyone reading this, I'd first suggest reading this article which talks about the general problem of understanding GNSS features of devices:
...which also introduces the GPSTest Database for crowd-sourced GNSS info (a Google Sheet):
As the above article says, the GPSTest Database attaches this info from the device to user submissions:
- Raw measurements —SUPPORTED if the device APIs return valid GnssMeasurement pseudorange data, and UNSUPPORTED if it does not. Apps can use these raw measurements to calculate a location using innovative techniques that might be more accurate than the one your device OEM has implemented.
- Carrier phase via getAccumulatedDeltaRangeMeters()— Carrier phase measurements are a more accurate way of determining your location from satellite signals than pseudorange alone by leveraging information from the radio waves that carry GNSS data (see this Google I/O presentation and this InsideGNSS article for details). If a device supports carrier phase measurements via GnssMeasurement.getAccumulatedDeltaRangeMeters() this field will be set to SUPPORTED, and UNSUPPORTED if it does not. If the device hasn’t reported measurement data at the time of submission, this value may be shown as UNKNOWN.
So to do RTK, when choosing a device you need to make sure that Column N in the database "Carrier phase (getAccumulatedDeltaRangeMeters())" says SUPPORTED.
Specifically, this is the rough logic that GPSTest uses to check for support:
- if at least one GnssMeasurement has the GnssMeasurement.ADR_STATE_VALID bit set to true and that same measurement has a non-zero value for GnssMeasurement.getAccumulatedDeltaRangeMeters(), then this column is set to SUPPORTED. Otherwise, it's NOT_SUPPORTED.
Here's the actual source code:
Data from GnssMeasurement.getAccumulatedDeltaRangeMeters() is what gets logged to CSV when you use GnssLogger or GPSTest for raw measurements on these devices. So it should indicate that you'll get valid (non-zero) numbers, although GPSTest doesn't do any additional analysis of those numbers. For more info on what gets logged for raw measurements see:
If you want to find dual-frequency devices in the Database, then Column H "Dual-frequency" should also show SUPPORTED (you can also check Column J "GNSS CFs" to see if L5 and E5a are listed as supported signals).
Note that there is a caveat to the GPSTest Database - this data reflects the experience of the user that submitted this data and there isn't a guarantee that your experience will be the same - for details see the "Caveats" section of the above article.
After reviewing the database, it looks like the Google Pixel 5 or Samsung Galaxy 21 Ultra (Exynos variant) both satisfy the above SUPPORTED criteria for dual-frequency and non-zero values from GnssMeasurement.getAccumulatedDeltaRangeMeters().
Note that the Samsung Galaxy 21 Ultra (Qualcomm Snapdragon variant) does NOT - it shows UNSUPPORTED for GnssMeasurement.getAccumulatedDeltaRangeMeters(). You can tell if a device is Qualcomm or Exynos (which uses the Broadcomm chip) by checking Column G "GNSS hardware model name".
Here are the devices and model numbers that seem to satisfy both criteria (dual-frequency and RTK) as of June 7, 2021 (but double-check the sheet yourself to make sure):
- Pixel 4
- Pixel 4 XL
- Pixel 5
- Huawei P40 (Dual SIM) (ANA-NX9)
- HUAWEI P30 (ELE-L29)
- HUAWEI P40 Pro Plus 5G (International) (ELS-N39)
- HUAWEI P40 Pro 5G (International) (ELS-NX9)
- HUAWEI Mate 20 Pro (LYA-L09, LYA-L29)
- HUAWEI HONOR View20 (PCT-L29)
- HUAWEI P30 Pro (VOG-L04, VOG-L29)
- HUAWEI HONOR 20 (YAL-L21)
- Samsung SM-G981B Galaxy S20 5G (Exynos/Broadcom)
- Samsung SM-G988B Galaxy S20 Ultra 5G (Exynos/Broadcom)
- Samsung SM-G996B Galaxy S21+ 5G (Exynos/Broadcom)
- Samsung SM-G998B Galaxy S21 Ultra 5G (Exynos/Broadcom)
- Samsung SM-N975F Galaxy Note10+ (Exynos/Broadcom)
- Xiaomi Mi 8
Note that support can change over time so as time passes please check again to see if the latest firmware supports it (see Columns G "GNSS hardware model name" and Column AD "Android software (Incremental) build" for software versions).
Pixel 4a 5G is not dual-frequency but does support RTK (based on the Database).
An aside - note that to log carrier phase data you also need ensure that you enable the Android system setting to "force full GNSS measurements" - see this article for more details:
I'd love to hear feedback from anyone who has tried to do RTK on the above devices to hear their experience - I haven't tried myself.
Sean