[time-nuts] uBlox NEO-M8T lesson: let it run

MLewis 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 
solution, to
- 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 mailing list