K2SAT S-band image receiver

K2SAT is a cubesat developed by the Aeroespace Systems and Control Lab in KAIST, a university in Daejeon, South Korea. It will be launched later this year, between September and October. The main mission of the satellite is to test the transmission of images taken with its onboard camera using an S-band QPSK transmitter that supports up to 2Mbps data rate. This will use the 2.4GHz Amateur satellite band, and the satellite has already coordinated a downlink frequency of 2404MHz. The K2SAT team at KAIST is the same one that built the QB50 KR01 (LINK) cubesat.

Since February, I have been collaborating with Pilwon Kwak and the rest of the K2SAT team to produce a GNU Radio receiver for the S-band image downlink and add it to my gr-satellites project. This receiver has now been publicly released. Here I explain the main details of the transmitter and protocol used by K2SAT and the implementation of the receiver.

Continue reading “K2SAT S-band image receiver”

Comparison of DSLWP-B orbit determination with tracking files

In the last post I compared the results of my orbit determination for DSLWP-B using one lunar month of Doppler data with the observations in the VLBI experiment done on June 10. In this post I will compare my orbit determination with the tracking files published by Wei Mingchuan BG2BHC in gr-dslwp. These tracking files are produced from the orbit determination performed by the Chinese Deep Space Network using two-way S-band Doppler measurements.

The tracking files contain a listing of the position \(x\) and velocity \(v\) vectors for DSLWP-B in ECEF coordinates. The entries are given at intervals of one second. The tracking files can be used directly to compute Doppler as received in a groundstation. In fact, if the ECEF coordinates of the groundstation are \(x_0\), then \(R = \langle x – x_0, v\rangle/\|x-x_0\|\) is the range-rate, and so the Doppler can be computed as \(D=-fR/c\), where \(f\) is the downlink frequency and \(c\) is the speed of light in vacuum. Here I have used this method to compute the Doppler according to the tracking files.

All the tracking files published so far have been considered in this study, except for the first two, which contained an incorrect anomaly at epoch. The figure below shows the residuals between the Doppler measurements made by Scott Tilley VE7TIL and my orbit determination (called “new elements”) and each of the tracking files. It seems that the residuals are quite similar.

The figure below shows the difference between the Doppler according to each of the tracking files and the Doppler predicted by my orbit determination.

It seems that the match is quite good for the central days, but not so good towards the edges. My orbit determination is numerically propagated from a single set of elements at MJD 28264.5 for the whole period, while the tracking files probably use different sets of elements that are propagated numerically over a few days only. Therefore it might happen that my orbit determination is affected by some accumulative error due to numerical integration or an inaccuracy in the force model.

Validation of DSLWP-B orbit determination using VLBI observations

In my last post I presented my orbit determination of DLSWP-B using one lunar month of S-band Doppler measurements made by Scott Tilley VE7TIL. In this post, I will use the delta-velocity measurements from the VLBI experiment on 2018-06-10 to validate my orbital elements.

In the figures below, I compare between the sets of data: The old elements, obtained in this post:

DSLWP_B.SMA = 8762.40279943
DSLWP_B.ECC = 0.764697135746
DSLWP_B.INC = 18.6101083906
DSLWP_B.RAAN = 297.248156986
DSLWP_B.AOP = 130.40460851
DSLWP_B.TA = 178.09494681

The new elements obtained in my last post:

DSLWP_B.SMA = 8765.95638789
DSLWP_B.ECC = 0.764479041563
DSLWP_B.INC = 23.0301858287
DSLWP_B.RAAN = 313.64185464
DSLWP_B.AOP = 113.462338342
DSLWP_B.TA = 178.5519212

The elements obtained from the 20180610 tracking file published by Wei Mingchuan BG2BHC in dslwp_dev. This tracking file contains a list of ECEF position and velocity vectors for DSLWP-B. The first entry is taken as the orbital state and the orbit is propagated in GMAT, as done in this post. It would also be possible to calculate the delta-velocity directly from the ECEF data, but the results would be fairly similar and I already have a script to do it with GMAT orbit propagation.

A degree 2 polynomial fit to the VLBI observations. It turns out that the delta-velocity during the VLBI experiment can be approximated fairly well by a parabola, so it makes sense to use this as a reference. Note that this also implies that this set of delta-velocity measurements alone would be insufficient to perform orbit determination, as a degree 2 polynomial gives us 3 coefficients, while we would need to determine 6 parameters for the orbital state. Adding delta-range would only give us an extra variable, so orbit determination using VLBI would need several sets of measurements well space in time so that the orbit can be observed at different anomalies.

The figures below show a comparison between the four sets of data and the VLBI measurements.

The RMS errors are respectively 0.248m/s for the old elements, 0.167m/s for the new elements, 0.156m/s for the tracking file, and 0.137m/s for the polynomial fit. Thus, we see that the newer elements represent a good improvement over the older elements. The tracking file gives a slightly better result than the new elements. However, the new elements should give good results over a long time span of over 20 days, as we have seen in the previous post, while the orbital parameters derived from the tracking files tend to change often.

The Jupyter notebook used to make these calculations has been updated in here.

DSLWP-B first month in orbit

DSLWP-B has now been for more than a month in lunar orbit, since the orbital injection was made on May 25. Scott Tilley VE7TIL has sent me his latest batch of S-band Doppler measurements, including data for all this first lunar month. Having a complete lunar month of data is interesting for orbit determination purposes, since it gives observability of the orbit from all possible right ascension angles.
I have run my orbit determination with the new data.

Continue reading “DSLWP-B first month in orbit”

DSLWP-B GMSK detector

Following the success of my JT4G detector, which I used to detect very weak signals from DSWLP-B and was also tested by other people, I have made a similar detector for the 250baud GMSK telemetry transmissions.

The coding used by the DSLWP-B GMSK telemetry follows the CCSDS standards for turbo-encoded GMSK/OQPSK. The relevant documentation can be found in the TM Synchronization and Channel Coding and Radio Frequency and Modulation Systems–Part 1: Earth Stations and Spacecraft blue books.

The CCSDS standards specify that a 64bit ASM shall be attached to each \(r=1/2\) turbo codeword. The idea of this algorithm is to correlate against the ASM (adequately precoded and modulated in GMSK). The ASM spans 256ms and the correlation is done as a single coherent integration. As a rule of thumb, this should achieve a reliable detection of signals down to around 12dB C/N0, which is equivalent to -12dB Eb/N0 or -22dB SNR in 2500Hz. Note that the decoding threshold for the \(r=1/2\) turbo code is around 1.5dB Eb/N0, so it is much easier to detect the GMSK beacon using this algorithm than to decode it. The difficulty of GMSK detection is comparable to the difficulty of JT4G decoding, which has a decoding threshold of around -23dB SNR in 2500Hz.

Here I explain the details of this GMSK ASM detector. The Python script for the detector is dslwp_gmsk.py.

Continue reading “DSLWP-B GMSK detector”

DSLWP-B detected with 7 element yagi

Yesterday I tried to detect DSLWP-B using my 7 element Arrow satellite yagi. The test schedule for DSLWP-B was as follows: active between 21:00 and 23:00 UTC on 2018-06-22. GMSK telemetry transmitted both on 435.4MHz and 436.4MHz. JT4G only on 435.4MHz every 10 minutes starting at 21:10. The idea was to record the tests with my equipment and the run my JT4G detector, which should be able to detect very weak signals. Today I have processed the recorded data and I have obtained a clear detection of one of the JT4G transmissions (albeit with a small SNR margin). This shows that it is possible to detect DSLWP-B with very modest equipment.

Continue reading “DSLWP-B detected with 7 element yagi”

DSLWP-B first JT4G test

Yesterday, between 9:00 and 11:00, DSLWP-B made its first JT4G 70cm transmissions from lunar orbit. Several stations such as Cees Bassa and the rest of the PI9CAM team at Dwingeloo, the Netherlands, Fer IW1DTU in Italy, Tetsu JA0CAW and Yasuo JA5BLZ in Japan, Mike DK3WN in Germany, Jiang Lei BG6LQV in China, Dave G4RGK in the UK, and others exchanged reception reports on Twitter. Some of them have also shared their recordings of the signals.

Last week I presented a JT4G detection algorithm intended to detect very weak signals from DSLWP-B, down to -25dB SNR in 2500Hz. I have now processed the recordings of yesterday’s transmissions with this algorithm and here I look at the results. I have also made a Python script with the algorithm so that people can process their recordings easily. Instructions are included in this post.

Continue reading “DSLWP-B first JT4G test”

First results of DSLWP-B Amateur VLBI

In March this year I spoke about the Amateur VLBI with LilacSat-2 experiment. This experiment consisted of a GPS-synchronized recording of LilacSat-2 at groundstations in Harbin and Chongqing, China, which are 2500km apart. The experiment was a preparation for the Amateur VLBI project with the DSLWP lunar orbiting satellites, and I contributed with some signal processing techniques for VLBI.

As you may know, the DSLWP-B satellite is now orbiting the Moon since May 25 and the first Amateur VLBI session was performed last Sunday. The groundstations at Shahe in Beijing, China, and Dwingeloo in the Netherlands performed a GPS-synchronized recording of the 70cm signals from DSLWP-B from 04:20 to 5:40 UTC on 2018-06-10. I have adapted my VLBI correlation algorithms and processed these recordings. Here are my first results.

Continue reading “First results of DSLWP-B Amateur VLBI”

JT4G detection algorithm for DSLWP-B

Now that DSLWP-B has already been for 17 days in lunar orbit, there have been several tests of the 70cm Amateur Radio payload, using 250bps GMSK with an r=1/2 turbo code. Several stations have received and decoded these transmissions successfully, ranging from the 25m radiotelescope at PI9CAM in Dwingeloo, the Netherlands (see recordings here) and the old 12m Inmarsat C-band dish in Shahe, Beijing, to much more modest stations such as DK3WN‘s, with a 15.4dBic 20-element crossed yagi in RHCP. The notices for future tests are published in Wei Mingchuan BG2BHC’s twitter account.

As far as I know, there have been no tests using JT4G yet. According to the documentation of WSJT-X 1.9.0, JT4G can be decoded down to -17dB SNR measured in 2.5kHz bandwidth. However, if we don’t insist on decoding the data, but only detecting the signal, much weaker signals can be detected. The algorithm presented here achieves reliable detections down to about -25dB SNR, or 9dB C/N0.

This possibility is very interesting, because it enables very modest stations to detect signals from DSLWP-B. In comparison, the r=1/2 turbo code can achieve decodes down to 1dB Eb/N0, or 25dB C/N0. In theory, this makes detection of JT4G signals 16dB easier than decoding the GMSK telemetry. Thus, very small stations should be able to detect JT4G signals from DSLWP-B.

Continue reading “JT4G detection algorithm for DSLWP-B”