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.
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?