Q:

GPS message: compute ephemeris data and pseudo-ranges from subframes

I have raw GPS data (see end of the question for details if you think the protocols are relevant), and I need to extract/compute ephemeris and pseudoranges (my goal is to replace the recursive least squares that the receiver solves to compute the position with a home-brewed method based on sensor fusion). Concerning the ephemeris, I have access to the 3 first subframes of each of the 25 frames of the GPS message. Documentations/books/etc that I have found just vaguely mention that the first subframe contains clock data, and the two others contain ephemeris data. However, none of them precisely says what the words in these subframes are, and how I can use them to compute orbital information (I'm assuming that I only want satellite positions?). Can anyone give me pointers to some references on how to do this? Or (even better), is there any open-source code that already implements this?
I really appreciate your help.
Details on the data: They have been transmitted by a Ublox EVK-7p using the UBX RXM-EPH and RXM-RAW protocols.
RXM-EPH: satellite ID (4 byes), HOW word (4 bytes), followed by three 32-byte arrays corresponding to subrames 1 to 3 of the GPS message.
RXM-RAW: time of week, week, num of satellites, reserved (?) , carrier phase, pseudo-range, doppler, and so on....
Update: I found this which seems to answer most of my questions. It is from 1995 though.

A:

The GPS standard has been the same since the first GPS satellites were launched, so sources from 1995 are very relevant In fact that is the document I would point you to. One of the best libraries for decoding GPS is gnss-sdr, You can look at how they are doing protocol decoding in order to get an idea of how to implement it.
Other docs I would point you would be the official GPS website and the interface control documents. There is a ton of useful information there.

