Plotting DSLWP-B observations Doppler and geometry

I have made a Python script to plot the Doppler and geometry for a DSLWP-B observation. This can be useful for several things: predicting the downlink and uplink Doppler corrections, checking for the Doppler of the Moonbounce signal, checking the position of DSLWP-B in the sky, and studying Moonbounce geometry.

The script has to be run indicating the tracking file (from dswlp_dev) to take the DSLWP-B orbital state from, the starting and ending time for the observation, and the path for the output plots. For instance, running

./ ~/dslwp_dev/program_tracking_dslwp-b_20181027.txt 2018-10-27T05:00 2018-10-27T07:00 /tmp/morning

will generate plots for tomorrow morning’s observation. The path of the output plots will be /tmp/morning_*.png

The first lines of the Python script are configuration variables. At least you will have to set there the path to your GMAT installation. Other variables that can be set are the location of the receiving and transmitting stations (by default these are set to PI9CAM and DK5LA).

The Python script takes the first line of the tracking file as the orbital state vector for the spacecraft in GMAT. Then GMAT is run to propagate the orbit over the observation window, producing an output report. Finally, Python is used for computation and plotting. As an example, we show the plots corresponding the two observation windows for tomorrow, Saturday 27th.

2018-10-27 05:00 to 07:00 UTC

The skyplot shows that in Dwingeloo the Moon is towards the west, and will set a few hours after the observation.

The Moon view plot shows the location of DSLWP-B with respect to the Moon, as seen from the receiving groundstation. The plot on the left shows the offset in azimuth and elevation of DSLWP-B from the Moon, giving a planar view of the sky. The plot on the right gives a sense of depth by plotting the radial variable of the spherical coordinates (i.e., the difference in distances to the Earth between the Moon and DSLWP-B). The bottom of this graph represents points closer to the Earth than the Moon.

The specular reflection point plot shows the point of the lunar surface where a specular reflection Moonbounce signal would reflect. In this case it is interesting that the specular reflection point moves very little during the 2 hour observation window (Click on the plot to view it in full size. The specular reflection point is near the centre of the image).

The Doppler plots are useful to arrange transmit and receive frequencies, and also to check if the Moonbounce Doppler is going to be substantially different from the direct Doppler.

2018-10-27 17:20 to 19:20 UTC

In the evening’s observation window, the Moon is rising in Dwingeloo. Indeed, the observation starts before Moonrise.

A very interesting feature of this observation is that DSLWP-B is eclipsed behind the Moon during part of the observation. This can be easily seen in the plot below. We see that DSLWP-B passes behind the Moon, and it is also much more close to the Moon than during the morning’s observation.

Since DSLWP-B gets eclipsed behind the Moon, the specular reflection point trace breaks off. As DSLWP-B gets behind the Moon, the reflection point approaches a point on the rim of the lunar disc, as seen from Earth. When DSLWP-B reappears, the reflection point appears on the opposite side of the rim of the lunar disc.

In this case, it is also interesting to compare the Moonbounce and direct Doppler curves. As DSLWP-B approaches the eclipse, the Moonbounce Doppler converges to the direct signal Doppler. When DSLWP-B is eclipsed, the Moonbounce Doppler is not defined, as the reflection is impossible. The direct signal technically has a well-defined Doppler, but it is completely blocked by the Moon. As DSLWP-B emerges from behind the Moon, the Moonbounce Doppler appears from the direct Doppler curve and quickly diverges.

These are all the plots that I have thought of as useful to give some intuition about the geometry of DSLWP-B, as seen from Earth. If you can think of anything more, please tell me and I will consider adding it.


  1. Amazing! Thank you – this will be very useful.

    Using Python 3.5.2, I got syntax errors running the script as-is. By removing the “f” character from lines 68, 268, 277, & 322, I was able to run it without error.

    Does the removal of the “f” character on these lines invalidate the results?

    Do I need a newer version of Python3 to avoid these errors?


  2. I believe that I have answered my own question ref. the use of “f strings”. If my research results are accurate, that is only valid in Python 3.6 & beyond, hence my error when using Python 3.5.2.

  3. Thanks also Dani! This is great. I upgraded to Python 3.6 and had to satisfy some dependencies to get it working.

    Best, Bob N6RFM

  4. Daniel,
    have we some information, what is the time frame, when it can be use the orbit description data (the program_tracking_… file) run this analysis in the future?
    I try it run for tomorrow (30 oct. 6:00-9:00 UT) and put the result moon-map with the possible touch surface here:!topic/muholdasok/FQj1hfAHpEA
    Maybe can ask Wei bg2bhc to activate the transmission on a possible good orbit?
    t.janos (hg5apz)

    1. Hi Janos,
      I’m not sure I understand you question, so please ask back if I missed something.

      The state vector extracted from the program_tracking file can be propagated by GMAT giving an accurate enough orbit over the course of many weeks. So the current tracking file can be used to predict what will happen in the next few months.

      I’m not 100% sure about the mission constraints, but I think Wei will be happy to try to activate the transmitter if we show him a date for an interesting orbital configuration.

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.