I am working on a system that reports its location to a server using very little power. In order to achieve an extremely low power usage, I am avoiding having to download both the almanac and the ephemeris data from the satellites. Downloading these from another source does not wield an acceptable power usage either. Instead, I am trying to post-process the on the server.

I came across the following question with a similar situation, where the user provided an answer himself:

Storing only the satellite ID, its timestamp and the receiver's timestamp (when the Navigation Message arrived) is enough to calculate position. As hinted in Kirk Kuykendall's comment, this is equivalent to the satellite ID and pseudorange data stored in a RINEX file.

Then I found the following answer to another question about post-processing:

To perform post-processing you typically need a GPS that can record raw pseudorange and carrier cycle data. Very few consumer level GPS support this functionality, and those that do require software modification.

I believe that these modules are pretty common nowadays. I am planning on using a Maestro A2235-H GPS Module, which is using the SiRFstarIV architecture. The GPS module supports both the NMEA protocol and the SiRF Binary Protocol (with the One Socket Protocol extension).

According to this One Socket Protocol Interface Control Document, the One Socket Protocol contains a Navigation Library Measurement Data message (Message ID 28, page 287). This message contains what I believe to be the necessary data to reconstruct the receiver's accurate position on the server. Each measurement, it reports:

  • Time Tag
  • Satellite ID
  • Estimated Satellite Time (GPS Software Time)
  • Raw Pseudorange (Without ionospheric, tropospheric or clock corrections)
  • Carrier Frequency
  • Carrier Phase

Now I'm looking for software that can post-process the receiver's GPS position using these satellite measurements. I collected the following libraries from the two questions above:

Unfortunately, this is where I got lost. I'm not sure which library supports my needs. I simply need a tool that converts the satellite measurements into a lon/lat position which I can incorporate into my code on the server. I have therefore the following questions:

I could generate a RINEX file for every measurement, but do I have to feed the RINEX file to these libraries? Or can I feed the satellite measurement data directly?

Do these libraries collect the required ephemeris data automatically?

Which library do you recommend for my situation?


Maybe you could use RTKLIB with https://github.com/fcancillo/RXtoRINEX-V2.0 to translate the SIRFstarIV data into RINEX and other formats.

It's been years since you asked, so maybe it would be a good time to look into newer devices, with newer capabilities and power requirements.

Depending on the accuracy you require, you can get pretty low power consumption with the system doing the calculations in-chip. If you need to do the processing off-line, you needs to transfer lots of satellite data to the system that will do the calculations, which might cost power.

uBlox has a NEO-7P or NEO-M8P devices with PPP capable power devices ($200 on a board in 2018) that can calculate cm-scale accurate fixes on-chip, so you may not need an extenal library. They are also compatible with RTKLIB, if you would like to do that.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.