[time-nuts] uBlox NEO-M8T lesson: let it run
mlewis000 at rogers.com
Wed May 16 05:23:03 EDT 2018
I have the NEO-M8T-0-01, which doesn't have Galileo, but I'm running
with GPS and GLONASS enabled.
(I was shipped old stock by a supplier. I'd love to upgrade the firmware
to 3.01 TIM 1.10 to be able to get the Galileo constellation, but I'm
just an individual. All my emails offering to sign an NDA to get it have
not been replied to.)
My antenna is a Tallysman TW4722 Wideband GNSS Dual Feed pre-filtered.
I'm constrained to less than half of a full sky view (at Lat 45, from
near ground level, a width of around 175 degrees of azimuth, aimed 30
degrees East of South) with multipath from infrastructure and mostly low
buildings. I've been improving results by using signal level threshold,
minimum elevation threshold and RF absorbing material for shields, to
try to filter out SVs without line-of-sight to the antenna. I even got
improvements by putting the GNSS module inside an insulated thick-walled
aluminum can for thermal stability, possibly some RF benefit. All was of
benefit, but with that limited skyview I was getting a low SV count and
a number of short periods each day where I'd be thrown into holdover due
to zero SVs. Adding in Galileo would be really useful to have more SVs
in that skyview.
Recently, after reviewing the gain map of patch antennas, I decided to
see if I could make better use of the area of maximum gain by pointing
its vertical axis more at the centre of my sky view, for higher signal
strength, but at risk of more multipath off the ground. So I tilted its
circular ground plane 30 degrees at my sky view. Immediately I saw
higher signal levels and more SVs above the signal level threshold (18
dB). So I decided to write some code to disable SVs that couldn't have
line-of-sight to my antenna, based on an azimuth range. To that end, I
starting going through the M8 message codes. I didn't find a way to
manually exclude an SV, but I discovered UBX-CFG-NMEA - "Consider"
u-blox receivers use a sophisticated signal quality detection scheme, in
order to produce the best possible position output. This algorithm
considers all SV measurements, and may eventually decide to only use a
subset thereof, if it improves the overall position accuracy.
If Consideration mode is enabled, all satellites, which were considered
for navigation, are communicated as being used for the position
If Consideration Mode is disabled, only those satellites which after the
consideration step remained in the position output are marked as being
With the ublox u-center, I found that Consider was Enabled. With
Consider Disabled, the list of SVs indicated those actually used in the
Encouraged by the initial results, I dialed back the signal level
threshold to 16 dB (from 18).
I then observed, with Lady Heather providing the SV list and the sky map:
1. Every SV that doesn't have line-of-sight to my antenna is excluded
from the solution.
- The M8T solution is excluding SVs showing as visible that are only
visible to the antenna by reflecting from buildings, structural steel
posts, or an electrical transformer on pole.
2. A regular number of short incidents where a SV, although positioned
within my sky view, is excluded from the solution. Turns out this
matches when the SV's line-of-sight signal path is either blocked by or
runs close to:
- some steel posts,
- an entrance roof,
- an electrical transformer on pole,
- some hydro wires running parallel to my building, or
- the horizon or buildings on the horizon (but only at some azimuths).
3. The count of satellites went from:
- before: typically two, three or four available to consider for a
- now: typically five or six used for the solution.
4. Astoundingly fewer holdover periods per day:
- One short period with zero SVs.
- A second short period with a count of two SVs.
I may have to lower or remove the signal level threshold, as any
solution should be better than going into holdover?
With the Consider disabled, I get to see that the M8T is only using
valid satellites for its solution - the same ones I would have manually
chosen (less a few more when in a position with somewhat dynamic issues
I wouldn't have been able to easily detect or even detect, let alone
address) - and I got to dial back threshold. No more point in trying to
find a way to code excluding SVs. Except for being able to get the
updated firmware to add the Galileo constellation in so I'm without
holdovers, I'm done. Just let the M8T run and do its job.
Now I finally feel the M8T was money well spent.
More information about the time-nuts