If you’ve been looking for a practical example of using GNU Radio, you should check out [Daniel Estévez’s] work on decoding telemetry captured from the Lunar Flashlight cubesat. The cubesat is having some trouble, but the data in question was a recording from the day after launch. We aren’t sure what it would take to eavesdrop on it live, but the 3-minute recording is from a 20-meter antenna at 8.4 GHz.
The flowgraph for GNU Radio isn’t as bad as you might think, thanks to some judicious reuse of blocks from other projects to do some of the decoding. The modulation is PCM/PM/bi-phase-L. Nominally, the speed is supposed to be 48,000 baud, but [Daniel] measured 48,077.
Spacecraft telemetry often uses the CCSDS (Consultative Committee for Space Data Systems) standard, and the encoding matches the standard. One oddity is that midway through the recording, the carrier frequency jumps over 120 kHz. [Daniel] speculates that the satellite was correcting its frequency to lock to an uplink carrier from a ground station.
Once the data is unpacked, you have to interpret it, and [Daniel] does a good job using Jupyter. He doesn’t know the complete format of all the telemetry, but he makes some assumptions that seem sound. We have to wonder how the analytics compare with JPL’s official ground station.
The last time we checked in with Daniel, he did the same trick for Voyager I. If you want to try GNU Radio — even if you don’t have any radio hardware — check out our introduction.
The bit rate of serial ports on microcontrollers (and in many other contexts) is derived from a clock that is divided down from some master clock in the system. It’s quite common for it not to be exact. The actual error is less than 0.2%, which is insignificant for that type of modulation.
The accuracy of the master clock itself may also be less than perfect, especially in the thermal environment of a satellite.
Not to mention… The relative velocity of something in lunar orbit is going to be pretty different from something on the ground. GPS has to compensate for tiny relativistic clock differences like this iirc.
That shouldn’t change the bit rate by an appreciable amount, but the doppler shift and relativistic differences a certainly used for orbit determination.
Nah, according to Wikipedia, altitude is 20km above moon, this translates to 1670m/s orbital speed. With that speed Doppler shift on 48000Hz should be only 0.3Hz, much smaller than mentioned 77Hz.
On the other hand, 0.2% is within tolerance for microcontroler clock and for serial communication.