[Update 6/27/17: There is a significant error in the data in this post. I used the RINEX files from the CORS website for the base station data for the post-processing solutions described below. These contain only GPS data. However, the real-time stream I used from UNAVCO for the same receiver contains GLONASS observations as well. I did not realize this when I compared the Tersus real-time solution to the RTKLIB post-processed solution and concluded that the Tersus solution was better than the RTKLIB solution. Once I re-processed the RTKLIB solution with the GLONASS measurements, the two solutions were much more similar. See the following post for more details]
Last post I finished up by comparing some raw observation data collected from a moving rover with both Tersus and Swift receivers. Before analyzing that data I will start with some static data collected simultaneously with the Tersus receiver and a u-blox M8T, both connected to a dual frequency antenna through a signal splitter.
I’d like to compare the RTKLIB solution for the Tersus data with the solution from the internal Tersus RTK engine as well as compare solutions for the Tersus data to solutions with the u-blox M8T data. Since Tersus does not provide any post-processing tools I needed to run the experiment in real-time. For the base data I used the closest available CORS station with real-time data access. This was a GPS only station located 17 km from my home. This makes it a fairly challenging exercise both because of the long distance between receivers and the small number of base station measurements.
The Tersus receiver does not offer a configuration setting for static or kinematic mode, it always assumes the receiver may be moving. To put both receivers on equal footing, I also set up RTKLIB for a kinematic solution with continuous ambiguity resolution . Therefore, although the rover was not actually moving, neither the internal Tersus RTK engine or RTKLIB knew this, and both treated it as if it were a moving rover. To make the experiment more interesting, I intentionally obstructed the antenna view fairly severely every few minutes to simulate a rover passing under a heavy tree canopy or other obstruction. I did this because I wanted to compare how well the RTKLIB and internal solutions recovered from losing a fix.
In addition, the location of the “rover” antenna was not ideal. It was located on one edge of a low angle sloping roof. This meant partial blockage from the roof as well as a few nearby trees and probable multipath from a few metal vents on the roof. As always, I choose non-ideal conditions to add stress to the solution and make it more representative of real-world conditions.
Here are the raw observations, M8T above and Tersus below (yellow are single freq measurements, green are dual freq)
I show only the GPS observations since they are the only ones with matching observations in the base station data and hence the only ones that double differences can be calculated for. At the beginning of the data set, the M8T has six GPS observations (all L1) and the Tersus has twelve (L1+L2). The points where I obstructed the antenna are obvious in both data sets from the cycle slips. The additional cycle slips seen in the Tersus data occur on the L2 observations for the most part.
First let’s look at the M8T RTKLIB solution. With only six double difference observations and a 17 km baseline, the opportunity to resolve the ambiguities is just too limited and nearly the entire solution is float rather than fix. In some similar data sets the solution may be better than this, but in general I find when using only the L1 GPS satellites there is very little margin and the results can vary tremendously from run to run.
Here are the solutions for the Tersus receiver. Yellow/Green is the internal solution and Olive/Blue is the RTKLIB solution. They are both significantly better than the M8T solution with fixes acquired reasonably quickly then broken by the antenna obstructions, followed by a re-acquire.
In this case having 12 double-differenceable observations to work with instead of 6 makes a huge difference, and for this particular comparison, there doesn’t seem any point in spending more time examining the M8T solution.
What is more interesting is the differences between the internal solution and the RTKLIB solution. The Tersus advertises a 60 second time to first fix and most of the time, it achieved that easily even with the long baseline, significantly outperforming the RTKLIB solution which often took two minutes or more to recover. In the worst case however, (around 1:00 in the above plot), RTKLIB did significantly better than the internal solution acquiring a fix in just over two minutes while the internal solution required over eight. I think this must be a glitch in the Tersus firmware. For this excercise I used the new firmware just released last week but it does not appear to be perfect yet. They acknowledge that they are still maturing the firmware and it should improve with time. I don’t know what they are doing differently in their internal solution from the RTKLIB solution that gives them significantly faster re-acquire times, but if I had to guess, I would suspect that they are taking better advantage of the dual frequency measurements as I discussed in my previous post.
Here is a zoom in of the previous plot showing some of the higher frequency smaller amplitude differences. I don’t believe the small DC offsets are significant, they most likely come from me not paying close attention to the various offsets in the setup. Notice that the Tersus solution often loses fix momentarily where the RTKLIB solution stays fixed. This may just be a more conservative approach in the Tersus solution to declaring a fix. The momentary float values do not appear to add much error to the solution.
The above example was done with a fairly distant reference station to meet our requirement for real-time base station data. What if we don’t need real-time? There are many more CORS stations available for post-processing than real-time so that often means being able to use a closer base station, maybe one that is more likely to have GLONASS satellites as well. In my case, the closest CORS station is only 7 km away and does have GLONASS measurements as well as GPS. The receivers are not identical so the GLONASS measurements can only be used for the float solution, not for ambiguity resolution, but they should still help some. Here are the results using that base station. Yellow/Green is the Tersus RTKLIB solution and Olive/Blue is the M8T RTKLIB solution.
Clearly more satellites and shorter baselines helps. At this point the Tersus solution is still better than the M8T solution but the difference is not as dramatic.
So to summarize, this one example suggests that given the case of a single local receiver working with a distant reference station, there could be a significant advantage in using a Tersus dual-frequency receiver over a u-blox M8T single frequency receiver and that there is also an advantage in using the internal real-time RTK solution over the RTKLIB solution. Part of this advantage is simply because the satellite set that the dual frequency receiver uses (L1+L2) better matches what is available from the reference stations and allows for more double difference pairs.
It would be unwise to conclude too much from this one example but hopefully it at least provides a little insight in how the two receivers and the two RTK engines differ.
So this example was a comparison between one dual frequency receiver and one single frequency receiver, both paired with a fairly distant base station. In the next post I will compare a pair of matched local single frequency receivers to the same dual frequency receiver again paired with a fairly distant base.