A tour of QB50

The QB50 project consists in a constellation of cubesats with the goal of studying the thermosphere. The cubesats are built by different universities around the world and each of them carries one of three different scientific instruments. A total of 36 cubesats have been built for the QB50 project. All of them transmit on the 70cm Amateur satellite band. A total of 28 were launched to the ISS on April 18th on the Cygnus CRS-7 resupply ship. Over the last two weeks, they have been released from the ISS. The complete launch schedule and radio information can be found here (note that the launches on May 23rd were delayed due to an unforeseen EVA). Several other non-QB50 cubesats, some of them transmitting in the Amateur bands, have also been released together with the QB50 satellites. This is probably the time that more Amateur satellite have been released at the same time. The satellites have not separated much yet, giving a great opportunity to record a single pass and analyse the telemetry of all the satellites.

A few days after the release of all the 28 QB50 cubesats, on May 29th at 18:25:29 UTC, I made an SDR recording of the complete pass of all the cubesats. The recording spans the 3MHz of the 70cm Amateur satellite band (435-438MHz) and lasts 23 minutes and 08 seconds. It was made from locator IN80do using a 7 element handheld yagi (the Arrow satellite yagi) held in the vertical polarization and a LimeSDR. The gain of the LimeSDR was set to maximum, but no external LNA was used. Here I look at the recording, list the satellites heard, and decode their telemetry.

A large number of QB50 satellites have been heard with good signals in the recording. According to Jan PE0SAT, not all the QB50 satellites have been confirmed to be active. Also, some non-QB50 satellites that were launched with them have also been heard. Finally, there are as well some unexpected Amateur satellites in the recording, as they happened to be over the horizon at the time of the pass. For some of them, signals are quite weak, since the position of the satellite was far from the beam of the yagi.

QB50 satellites heard (including frequency and time within the recording of a strong transmission):

  1. 435.800MHz 06:35 qbee SE01. 9k6 FSK AX.25
  2. 435.900MHz 16:24 nSIGHT AZ02. 9k6 FSK AX.25
  3. 436.030MHz 10:10 LINK KR01. 1k2 BPSK AX.25 with G3RUH
  4. 436.400MHz 14:38 Atlantis US02. 9k6 FSK AX.25
  5. 436.425MHz 16:32 DUTHSat GR01. 1k2 BPSK AX.25 with G3RUH
  6. 436.510MHz 16:41 LilacSat-1 CN02. 9k6 BPSK with CCSDS FEC
  7. 436.610MHz 16:01 PolyITAN 2-SAU UA01. 9k6 BPSK
  8. 436.710MHz 16:59 ExAlta-1 CA03. 4k8 NanoCom AX100
  9. 436.845MHz 05:49 HAVELSAT TR02. CW
  10. 436.885MHz 10:26 SpaceCube FR05. Invalid 1k2 AFSK AX.25
  11. 437.020MHz 05:07 X-CubeSat FR01. Weak and invalid 1k2 AFSK AX.25
  12. 437.060MHz 04:27 Columbia US04. 9k6 FSK AX.25
  13. 437.345MHz 15:17 Aalto-2 FI01. CW
  14. 437.370MHz 17:19 BeEagleSat TR01. CW
  15. 437.505MHz 17:28 Challenger US01 9k6 FSK AX.25
  16. 437.740MHz 08:25 Hoopoe IL01. 9k6 BPSK AX.25 with G3RUH

Other satellites in the ISS release:

  1. 437.400MHz 10:20 CSUNSAT-1. FM CW

Other Amateur satellites heard:

  1. 435.650MHz 06:49 TW-1B. 4k8 NanoCom AX100
  2. 437.225MHz 14:52 LilacSat-2. 9k6 BPSK & 4k8 FSK with CCSDS FEC
  3. 437.430MHz 06:08 AAUSAT-4. 4k8 FSK with CCSDS FEC
  4. 437.570MHz 18:20 STRaND-1. 9k6 FSK AX.25

Now we pass to an individual analysis of all the satellites heard in the recording. They are ordered roughly in order of appearance.
The satellites which use 9k6 FSK AX.25 have been decoded with direwolf. The rest of them have been decoded with gr-satellites. No attempt has been made to decode all the packets. In general, only one packet from each satellite has been decoded to test if the decoder is working fine and the signal is strong enough.

Direwolf has also been used to parse the AX.25 header of the frames obtained with gr-satellites. To do so, one has to run direwolf with the -p option to make it create a KISS port on /tmp/kisstnc and then use nc localhost 52001 > /tmp/kisstnc to send the KISS output from the gr-satellites flowgraph into direwolf.

The first satellite is the Chinese TW-1B. It uses a NanoCom AX100 FSK transceiver at 4k8. The deviation is quite high, producing a signal which is 40kHz wide (which is probably too much).

TW-1B 4k8 AX100

The NanoCom AX100 was also used in GOMX-3 and it is supported in gr-satellites. A while ago, I talked about the details of this transceiver. The following packet was decoded with gr-satellites.

pdu_length = 207
contents = 
0000: 00 80 a7 aa 02 03 79 7b 79 07 8f ff f0 ff f4 ff 
0010: ff ff ac ff dc ff d2 ff e1 ff e3 ff be ff c7 ff 
0020: 8d 01 ab 00 00 3a 4d 00 00 00 17 00 37 91 64 00 
0030: 00 04 c9 01 02 23 00 00 01 00 3b 69 44 4b ff 8f 
0040: 06 00 b1 52 29 00 05 a3 b7 a7 d0 85 98 04 3f 80 
0050: 6a 0f 41 27 c7 11 41 40 5f 00 05 00 0b 00 00 00 
0060: 39 00 6d 00 26 00 2b 00 66 01 d8 00 a4 00 75 00 
0070: 00 00 01 ff fe ff fe 00 00 00 00 38 00 d7 00 00 
0080: 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 03 
0090: fb d7 fb eb 40 6c 00 00 50 02 02 00 00 00 00 00 
00a0: 00 00 00 00 00 00 00 99 9b df 40 a0 e6 97 3f 48 
00b0: ce 69 c5 63 8f 95 c6 b5 4d 7c c4 01 00 00 00 80 
00c0: 00 00 00 80 00 00 00 00 aa 26 aa 00 00 04 00

It is a CSP packet, but other than that, the telemetry format is unknown.

The next satellite is Columbia, QB50 US04. As most of the QB50 satellites, it uses 9k6 FSK AX.25 (with G3RUH scrambler). This is not a very good idea for space applications, due to the lack of FEC.

Columbia US04 9k6 FSK AX.25

The following two packets were decoded with direwolf.

U frame UI: p/f=0, No layer 3 protocol implemented., length = 238
 dest    CQ      0 c/r=0 res=3 last=0
 source  KD8CJT  0 c/r=1 res=3 last=1
  000:  86 a2 40 40 40 40 60 96 88 70 86 94 a8 e1 03 f0  ..@@@@`..p......
  010:  fa f3 20 07 00 d6 20 bf 25 09 6d 54 00 10 88 74  .. ... .%.mT...t
  020:  88 5a 00 00 88 5c 00 18 00 00 00 00 00 00 00 00  .Z...\..........
  030:  00 00 00 00 00 00 00 00 00 00 1a 56 bf c0 00 00  ...........V....
  040:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  050:  01 cd 00 00 00 82 00 00 00 77 00 00 00 00 00 00  .........w......
  060:  00 9b 00 00 0f 4b 00 00 00 04 00 00 00 00 00 00  .....K..........
  070:  00 00 00 00 00 01 00 00 00 26 00 00 00 01 00 00  .........&......
  080:  00 00 00 00 0a ae 00 07 ff 00 00 00 0a ae 00 07  ................
  090:  ff 00 00 00 00 0d 00 00 00 00 00 00 00 0d 00 00  ................
  0a0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  0b0:  00 00 5f ff 7f 3f 1e 00 20 03 11 06 61 00 00 96  .._..?.. ...a...
  0c0:  01 01 00 00 3f ab 06 00 3f ab 06 00 43 51 20 20  ....?...?...CQ  
  0d0:  20 20 4b 44 38 43 4a 54 05 00 00 00 40 00 01 00    KD8CJT....@...
  0e0:  00 00 00 00 00 00 00 00 00 00 00 00 18 5e        .............^
U frame UI: p/f=0, No layer 3 protocol implemented., length = 246
 dest    CQ      0 c/r=0 res=3 last=0
 source  KD8CJT  0 c/r=1 res=3 last=1
  000:  86 a2 40 40 40 40 60 96 88 70 86 94 a8 e1 03 f0  ..@@@@`..p......
  010:  fa f3 20 08 00 de 00 80 20 bf 25 0e b8 b4 88 5b  .. ..... .%....[
  020:  88 75 09 af 0a bd 0a c0 0a bf 0a c1 0a b2 0a a9  .u..............
  030:  0a be 00 36 00 f4 00 40 02 43 03 47 03 c9 0a 22  ...6...@.C.G..."
  040:  0d 57 00 00 00 30 08 1e 09 f5 0f ff 09 00 00 02  .W...0..........
  050:  00 02 00 02 00 02 00 2c 01 54 04 60 0a 67 02 b4  .......,.T.`.g..
  060:  05 54 04 dc 09 e4 0a 7b 00 75 01 c6 01 9d 09 d3  .T.....{.u......
  070:  05 f2 05 c0 05 1a 09 fc 0a 78 00 10 00 c3 00 c8  .........x......
  080:  00 e3 00 9c 00 ac 00 ae 09 b3 0a 8c 00 08 00 e9  ................
  090:  00 cc 01 20 01 14 00 f5 00 eb 00 00 0a a7 00 3e  ... ...........>
  0a0:  09 bd ea 56 08 dc 00 72 ea f4 03 d8 24 02 ff 8d  ...V...r....$...
  0b0:  fc ef f3 6e 0e a5 ff 75 ff ff ff ff ff ff ff ff  ...n...u........
  0c0:  bd c9 d0 00 00 55 b0 66 00 bf d3 c5 00 46 21 5f  .....U.f.....F!_
  0d0:  00 08 c1 7e 00 01 36 56 ff ed 55 3b 00 00 00 5a  ...~..6V..U;...Z
  0e0:  01 2d ff 62 40 00 14 00 05 00 00 6d 00 00 00 00  .-.b@......m....
  0f0:  d8 03 00 00 4c ee                                ....L.

It is worthy to note that Columbia is using the callsign KD8CJT instead of ON04US. The two above packets clearly have a different format. According to the telemetry format, the first packet is of type HK_PKT_TYPE (I don’t know what this means) and the second is a beacon.

Next comes X-CubeSat, QB50 FR01. Its frequency is near that of Columbia, so a packet from Columbia can also be seen in the image below. This satellite, as well as the other French satellite, QB50 FR05, is using 1k2 AFSK AX.25. However, the signal in the waterfall seems rather strange. It appears that the FM deviation is too low. The carrier is very strong and there is only one weak sideband. In the case of X-CubeSat, the sideband is often under the noise floor. I haven’t been able to decode FR01 or FR05 using direwolf. Clearly something is wrong with these satellites. However, JA0CAW has managed to decode telemetry from FR01.

X-CubeSat FR01

The next satellite is qbee, QB50 SE01. It uses 9k6 FSK AX.25, but this is an interesting satellite, because the payload of the AX.25 frame is a Reed-Solomon encoded CSP packet. This makes possible correcting bit errors within the packet, but a special decoder needs to be used for this, as a regular AX.25 decoder will drop packets with incorrect CRC.

qbee SE01 9k6 FSK AX.25

The following is an AX.25 frame from qbee decoded with direwolf. The length of this packet doesn’t match the description in Open Cosmos web. The payload should be 84 bytes long according to Open Cosmos, but it is only 81 bytes long.

 dest    '')"  0 c/r=0 res=0 last=0
 source  '')"  0 c/r=0 res=0 last=0
  000:  4f 4e 30 31 53 45 00 4f 4e 30 31 53 45 00 03 00  ON01SE.ON01SE...
  010:  02 a2 c0 00 94 ba 91 01 00 68 8f 05 00 00 7d 7c  .........h....}|
  020:  00 00 00 7e 4f 50 45 4e 20 43 4f 53 4d 4f 53 7e  ...~OPEN COSMOS~
  030:  00 9b ea d6 ca ca af 41 08 d4 69 a4 06 55 9a f5  .......A..i..U..
  040:  9a f0 40 d4 44 1b c3 ee bc 31 be b2 b5 f8 cf 02  ..@.D....1......
  050:  5f                                               _

It is interesting to note that the AX.25 header is malformed, since it is written in ASCII. The documentation by Open Cosmos says:

The qb01 beacon callsign fields are not bit-shifted, so unfortunately an AX.25-compliant TNC will have trouble decoding them.

For some reason, several QB50 teams do not seem to get the AX.25 header right.

There is a beacon decoder by Open Cosmos. When run with the frame above, it produces the following output:

================================================================================
ax25
 dest: [.ON01SE]
 source: [.ON01SE]
 control: 0x00
 pid: 0x03
 csp
  header: 0x02a2c000
decode_rs: Reed-Solomon corrected 3 errors
  beacon
   wod
    time: 2000-10-31T17:15:00Z (0x0191ba94)
    mode: 0x00
    vbatt: 8.20 (0x68)
    ibatt: 0.126 (0x8f)
    ibus3v3: 0.12 (0x05)
    ibus5v0: 0.00 (0x00)
    comm_temp: -15.0 (0x00)
    eps_temp: 16.2 (0x7d)
    batt_temp: 16.0 (0x7c)
   power: 0x00
   service_e: 0x00
   service_r: 0x00
   byline: [~OPEN COSMOS~.]
================================================================================
ax25_payload: AX25 callsign not found
decode_human: Failed to deframe AX.25
================================================================================

Note that the decoder states that 3 byte errors were corrected by Reed-Solomon. This is probably due to the length mismatch, because the frame above doesn’t have any byte errors, as its AX.25 CRC-16 is correct. The beacon decoder includes a sample KISS file and all the packets there are 81 bytes long and also produce 3 Reed-Solomon errors.

Next we have AAUSAT-4 which was launched back in April 2016. It uses 4k8 FSK with CCSDS convolutional code, scrambling and Reed-Solomon.

AAUSAT-4 4k8 FSK + CCSDS FEC

There is a custom decoder and telemetry parser for AAUSAT-4 in gr-satellites. When run on the packet above, it produces the following output.

AIS:
        Boot count:	387
        Unique MSSI:	65535
COM:
        Boot count:		213
        Packets received:	0
        Packets send:		1491
        Latest rssi:		0
        Latest bit corrections:	0
        Latest byte corrections:0
EPS:
        Boot count:		24582
        Up time:		11392971 seconds
        Real time clock:	2017-05-29 20:27:27
        Battery voltage:	7920 mV
        Cell difference:	-8.0 mV
        Battery current:	-80 mA
        Solar power:		2960
        Temperature:		5 C
        PA temperature:		4 C
ADCS1:
        State:	0
        Bdot:	(-1121, 159, 958)

The next satellite is HAVELSAT, QB50 TR02. It transmits CW telemetry. The message in this transmission is ON02TR01477F100E.

HAVELSAT TR02 CW

SpaceCube, QB50 FR05, is the other French QB50 satellite. As X-CubeSat, it transmits 1k2 AFSK AX.25. The FM deviation seems rather low, again, but the sideband is much stronger than in the case of X-CubeSat. Still, I wasn’t able to decode SpaceCube with direwolf. As far as I know, nobody has been able to decode it. I have been looking at some recordings of SpaceCube before and I have the impression that the CRC-16 in the packet is wrong.

SpaceCube FR05

The next satellite is Hoopoe, QB50 IL01, also known as Duchifat-2 (duchifat is Hebrew for hoopoe, which is the national bird of Israel). It uses 9k6 BPSK AX.25 with G3RUH scrambling. The signal is not very strong, but it can be decoded without problems.

Hoopoe IL01 9k6 BPSK AX.25 + G3RUH

There is a decoder for Hoopoe in gr-satellites. The frame above produces the following output when parsed by direwolf.

U frame UI: p/f=0, No layer 3 protocol implemented., length = 46
 dest    4X4HSC  0 c/r=1 res=3 last=0
 source  ON01IL  0 c/r=0 res=3 last=1
  000:  68 b0 68 90 a6 86 e0 9e 9c 60 62 92 98 61 03 f0  h.h......`b..a..
  010:  00 31 31 00 08 0a ce 20 00 12 10 03 19 20 bf 22  .11.... ..... ."
  020:  d4 00 ff 01 6a 98 06 00 a4 9c 98 48 9d 00        ....j......H..

Next comes LINK, QB50 KR01. Presumably it transmits 9k6 BPSK, but currently it transmits 1k2 BPSK AX.25 with G3RUH scrambling.

LINK KR01 1k2 BPSK AX.25 + G3RUH

There is a decoder for LINK in gr-satellites. The frame above decodes as follows.

 dest    ON01KR  0 c/r=0 res=3 last=0
 source  D80LW   0 c/r=0 res=3 last=0
  000:  9e 9c 60 62 96 a4 60 88 70 60 98 ae 40 60 03 f0  ..`b..`.p`..@`..
  010:  08 66 68 00 08 0a c0 66 00 13 10 03 19 20 bf 25  .fh....f..... .%
  020:  be 00 ee 00 69 86 05 01 a2 a6 8a 02 d2 42 00     ....i........B.

Note that the AX.25 destination and source addresses are swapped. Also, the “last” marker is not set. Another case of badly formed AX.25 header. There is also a telemetry parser in gr-satellites, which produces the following output.

Container: 
    mode = Otherwise
    batvoltage = 8.25
    batcurrent = 0.0551181102362
    3v3buscurrent = 0.125
    5vbuscurrent = 0.025
    tempcomm = 25.5
    tempeps = 26.5
    tempbattery = 19.5
    spacecraftmode = Commissioning

CSUNSAT-1 is a non-QB50 cubesat that was released from the ISS with the rest of the QB50 cubesats. Presumably it transmits FM CW, although the shape of the signal on the waterfall is quite peculiar. It would be interesting to know how it is produced.

CSUNSAT-1 FM CW

The message in the transmission above is CSUNSAT1 HAAA3AAAAAAAAAAAAAAAAAAAAAAAAAL.

The next satellite is Aalto-2, QB50 FI01. It is currently transmitting a CW beacon with its callsign: AALTO2.

Aalto-2 FI01 CW

In the CW transmission above, sidebands are visible. These are only visible when the signal is strong. It would be interesting to see if the sidebands are AM or FM. On the image above, you can also see the CW signal of BeEagleSat.

LilacSat-2 is also visible in the recording. Since it was quite far from the beam of the yagi during the pass, its signal is pretty weak. gr-satellites has support for LilacSat-2, but the signals were too weak to produce valid decodes.

LilacSat-2 9k6 BPSK and 4k8 GMSK

The next satellite is BeEagleSat, QB50 TR01. It transmits CW telemetry. There is deep fading on the signal with a period of around 5 seconds. The message in the transmission below is ON01TR0164801801009797.

BeEagleSat TR01 CW

Next comes Challenger, QB50 US01. It transmits 9k6 FSK AX.25.

Challenger US01 9k6 FSK AX.25

The packet above decoded in direwolf produces:

U frame UI: p/f=0, No layer 3 protocol implemented., length = 186
 dest    QBUS01  0 c/r=0 res=3 last=0
 source  CQ      0 c/r=1 res=3 last=1
  000:  a2 84 aa a6 60 62 60 86 a2 40 40 40 40 e1 03 f0  ....`b`..@@@@...
  010:  19 00 2d f7 a0 00 89 7f be 20 0f 02 91 3a 19 00  ..-...... ...:..
  020:  86 02 00 00 14 00 00 00 31 47 02 00 3f 01 00 00  ........1G..?...
  030:  e7 02 88 03 69 02 1f 01 00 18 1d 0e 00 00 83 00  ....i...........
  040:  01 16 00 3f 97 00 6b 0a 6e 00 00 2c 99 1d 00 87  ...?..k.n..,....
  050:  16 b0 19 69 4e 37 04 00 07 3c 3b 03 02 b6 05 9f  ...iN7...<;.....
  060:  05 00 01 7e 7c ff 80 03 04 15 14 a8 8b 00 00 00  ...~|...........
  070:  00 00 a1 13 03 00 00 00 00 00 00 00 00 00 00 00  ................
  080:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  090:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  0a0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  0b0:  00 00 00 00 00 00 e2 5a a5 a5                    .......Z..

Update: I hadn’t noted this before, but the destination and source addresses are swapped in the packet above. Another case of a team not getting the AX.25 right.

Atlantis, QB50 US02, is another QB50 satellite from USA transmitting 9k6 FSK AX.25. However, its signal was too weak to produce valid decodes with direwolf.

Atlantis US02 9k6 FSK AX.25

Update 01/06/2017: I have found that Atlantis is much stronger later on in the recording and many packets can be decoded with direwolf. For instance, in the image below we can see a strong packet together with DUTHSat’s signal.

Atlantis US02 strong packet

The packet above decodes in direwolf to produce the following:

U frame UI: p/f=0, No layer 3 protocol implemented., length = 246
 dest    CQ      0 c/r=0 res=3 last=0
 source  WD8DOX  0 c/r=1 res=3 last=1
  000:  86 a2 40 40 40 40 60 ae 88 70 88 9e b0 e1 03 f0  ..@@@@`..p......
  010:  fa f3 20 08 00 de 00 80 20 bf 28 2f c7 3f db 16  .. ..... .(/.?..
  020:  db 1b 09 b3 0a ac 0a af 0a af 0a a9 0a a3 0a 98  ................
  030:  0a ab 00 47 00 e0 00 41 02 51 03 54 03 da 0a 52  ...G...A.Q.T...R
  040:  0d 66 00 00 00 34 08 1f 09 e6 0f ff 09 50 00 01  .f...4.......P..
  050:  00 00 00 00 00 00 00 34 01 93 04 9b 0a 73 04 30  .......4.....s.0
  060:  05 8e 06 3d 0a 27 0a 69 00 2b 01 e5 01 28 05 c7  ...=.'.i.+...(..
  070:  02 33 01 a8 02 1f 09 d6 0a 6f 00 24 01 e4 01 ee  .3.......o.$....
  080:  01 e7 00 9e 01 da 02 1e 09 4d 0a 79 00 69 01 0f  .........M.y.i..
  090:  01 20 01 40 01 35 01 22 01 18 00 01 0a 99 00 2c  . .@.5.".......,
  0a0:  07 fa f0 4c 04 9f ff c4 fa a5 f8 53 18 4b ff ae  ...L.......S.K..
  0b0:  f9 b0 03 c0 20 1a 00 37 17 f6 ed f2 eb 53 ff d5  .... ..7.....S..
  0c0:  c0 e5 08 00 ff 6c 92 f8 ff 60 3d 72 ff 72 8e 3b  .....l...`=r.r.;
  0d0:  00 13 ee e3 00 60 98 54 ff f1 cc 4c 00 00 00 f5  .....`.T...L....
  0e0:  01 61 01 28 3f 00 11 00 05 00 00 73 00 00 00 00  .a.(?......s....
  0f0:  d8 03 00 00 47 bc                                ....G.

Interestingly, Atlantis is using the callsign WD8DOX instead of ON02US.

The next satellite is ExAlta-1, QB50 CA03. It has a NanoCom AX100 transceiver from GOMspace and it transmits 4k8 FSK. However, the deviation is much smaller than the case of TW-1B, which uses the same radio and baudrate. While TW-1B used 40kHz of bandwidth, ExAlta-1’s signal fits nicely into 15kHz, which is much more convenient.

ExAlta-1 CA03 4k8 AX100

Support for ExAlta-1 has been added to gr-satellites. The packet above decodes as:

pdu_length = 144
contents = 
0000: 00 3c a8 82 30 12 69 12 78 0e 6f 3e 3b 00 80 01 
0010: 05 00 69 00 51 00 00 00 03 00 00 00 3a 00 13 00 
0020: 06 00 78 00 01 00 01 01 00 01 00 00 00 00 00 00 
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
0050: 00 00 00 00 00 00 00 00 1f 1c 00 00 0c f8 01 00 
0060: 05 05 00 00 00 00 00 00 00 00 01 00 00 00 01 00 
0070: 00 00 01 00 00 00 15 00 17 00 15 00 14 00 10 00 
0080: 0f 00 07 04 01 00 00 01 00 dc 4f 4e 30 33 43 41

A telemetry parser is not yet available in gr-satellites, but the satellite team provides detailed specifications.

PolyITAN 2-SAU, QB50 UA01 presumably transmits 9k6 BPSK AX.25. However, I haven’t been able to decode valid AX.25 frames, even though the signal is strong. The constellation plot locks properly to the 9k6 BPSK signal, and looking at the spectrum, the signal appears scrambled. However, I still have to look at the signal in more detail to find the problem.

PolyITAN 2-SAU UA01 9k6 BPSK

Next comes nSIGHT, QB50 AZ02. It transmits 9k6 FSK AX.25. There is deep fast fading, and most of the packets are affected by it.

nSIGHT AZ02 9k6 FSK AX.25

The packet above produces the following valid decode in direwolf, even though it has deep fading in the middle.

U frame UI: p/f=0, No layer 3 protocol implemented., length = 69
 dest    ZS1SCS  0 c/r=1 res=3 last=0
 source  ON02AZ  0 c/r=0 res=3 last=1
  000:  b4 a6 62 a6 86 a6 e0 9e 9c 60 64 82 b4 61 03 f0  ..b......`d..a..
  010:  ff 30 06 80 04 00 00 40 00 00 00 3a d4 03 00 0c  .0.....@...:....
  020:  04 c6 16 20 01 00 20 14 14 14 13 07 04 6d 20 91  ... .. ......m .
  030:  00 60 00 09 03 00 40 24 00 00 00 00 00 00 00 d8  .`....@$........
  040:  c1 14 08 cb 25                                   ....%

LilacSat-1, QB50 CN02, is the most interesting satellite in the QB50 constellation because of its FM/Codec2 repeater and image downlink following the BY70-1 system. It deserves its own separate post, and I will probably write several. It transmits 9k6 BPSK using CCSDS convolutional code and scrambling.

LilacSat-1 CN02 9k6 BPSK + CCSDS FEC

For now, I have used gr-satellites to decode all the beacons in the recording. The result is in this gist. There are some things to note and improve in the future. First, not all beacon types are supported. The parser only supports the beacon types which were used in BY70-1, but LilacSat-1 uses more beacon types. Second, since there is no Reed-Solomon error correction, it is easier that bit errors slip through. CRC checking is important, and it is currently not done. For instance, the message in telemetry packet 8288 is ON02CN:@Hemìo World! instead of ON02CN: Hello World!.

DUTHSat, QB50 GR01, transmits 1k2 BPSK AX.25 scrambled with G3RUH. Presumably, it should transmit 9k6, but it’s currently on 1k2 mode.

DUTHSat GR01 1k2 BPSK AX.25 + G3RUH

I have added support for DUTHSat to gr-satellites. The AX.25 frame above, decoded in gr-satellites and parsed in direwolf produces the following.

 dest    SZ7DUT  0 c/r=0 res=0 last=1
 source  SZ7DUT  0 c/r=0 res=0 last=0
  000:  a6 b4 6e 88 aa a8 01 a6 b4 6e 88 aa a8 00 03 f0  ..n......n......
  010:  c8 ff ff 03 00 1f 00 00 e0 4f 75 00 00 d6 00 00  .........Ou.....
  020:  00 00 00 00 00 52 67 7a 5b 00 60 4d 75 00 00 32  .....Rgz[.`Mu..2
  030:  02 00 30 22 01 00 00 00 00 00 00 00 00 00 00 00  ..0"............
  040:  00 00 00 00 00 00 00 00 00 3f 05 b8 04 00 00 00  .........?......
  050:  00 03 00 11 06 c8 0b ee 0b 75 75 b9 07 ba 07 ba  .........uu.....
  060:  07 30 01 9b 00 5e 01 74 20 aa 00 00 00 03 00 02  .0...^.t .......
  070:  00 00 00 00 00 06 00 04 00 62 00 00 00 00 00 13  .........b......
  080:  12 15 13 01 04 40 a8 0e 00 00 00 00 00 00 00 00  .....@..........
  090:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  0a0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  0b0:  00 00 00 00 00 00 00 00 00 00 00                 ...........

Note that DUTHSat is using the callsign SZ7DUT instead of ON01GR.

Finally, STRaND-1 is a satellite launched in 2013 which was off the beam of the yagi during this pass. It does a long transmission in 9k6 FSK AX.25, but the signal in the recording is too weak to decode. (Update: Mike DK3WN remarks that STRaND-1 frames are not AX.25, however, it still uses HLDC framing).

STRaND-1 9k6 FSK AX.25

The full recording is available in qb50-436500kHz-2017-05-29-182529.wav (size around 16GB). I don’t promise to host this file forever, but at least I’ll host it for several months. It is an IQ wav using 16 bit integers samples and 3Msps. Small samples of many of the satellites have been added to satellite-recordings. Update 2022-03-31: the recording is now hosted on Zenodo.

10 comments

  1. Very impressive Dani. Amazing effort and results. Congratulations on a job well done.

    Bob N6RFM

  2. HI
    I just want to correct for FR01. Several stations are able to decode the AFSK 1.2 K data.
    For FR05, you are right, the modulation index seem’s a liitle bit low and the data decoding is more difficult.

  3. Great piece of work {and help} Daniel!
    Thanks sharing! Keep up the good work for us satellite ? amateurs!
    Keep well & 73.
    Albert
    PD0OXW

    1. As stated in the post: “It was made from locator IN80do”

      More precisely, the location was 40.5961 N, 3.6963 W, accurate to a few tens of metres. It was made at ground level (roughly 700m ASL).

Leave a Reply to F6FAO Cancel reply

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.