Issues with Digipeating to 70cm Cubesats

I have already been talking with @dl7ndr via email about this issue I am having but figured I would move it to a forum post to see if others have any insight about my issue (plus hopefully document my findings for others who try to do the custom transmit route).

I have been trying to digipeat to Lasarsat, Crocube, and GRBBeta (although primary Lasarsat) using inexpensive hardware with effectively no promising results. Previously I was using the following setup:

This setup yielded typically ~50Ws at the antenna input however I couldn’t get the PTT transfer between RX and TX quick enough. Therefore I swapped to using a different FSK transmitter (well technically lora transmitter but running in FSK mode) and produced the following setup.

This new setup seems to work far better (and still provides ~50Ws into the antenna input) than the previous transmit based SDR setup especially now that I added an external clock input into the SX1278. However, I still can’t seem to get any luck with getting decent digipeats.

@dl7ndr suggested that my modulation amplitude/gain on the SX1278 seems to be potentially too low but I don’t think there is anyway to improve that. For reference, I have attached a fm recording of the output of the PA (attenuated heavily down to around -75dBm into the PlutoSDR RX). Any suggestions would be appreciate for what I can try next.

test_transmit.wav.zip (1.6 MB)

The modulation amplitude of the attached packets from your attached wav file look much better.

Well that is good at least. Still doesn’t make it clear what I could be missing. I am trying to see if I can get access to another proper ham radio like an icom 5100 to compare to but no guarantees yet.

Okay I have done the following to verify my setup.

  1. Borrowed a Yaseu FT-991A and tried using that to digipeat. No luck but verified with another SDR that the packets are decodable.
  2. Measured the Gain of the transmit antenna using another identical antenna. Measured gain is close to the MFG’s spec (measured ~10dBi while MFG quotes 11dBi).

Not sure what else could be wrong with my setup that would prevent any digipeating.

Please let us know your setup for the FT-991A.

If the LNA switches back to RX too slow, leave it out of your chain for a test.

How do you correct the doppler shift on both, RX and TX?

I guess you are still trying primarily on LASARsat.
Currently, the ISS’s digipeater is on 437.825 at 1k2.
So you may try your setup for 1k2 at first, hopefully the voice repeater outputting at 437.800 is not transmitting during the test.

So the RX is still separate from the tx path and still utilizes the same plutosdr for receive. Correct me if I am wrong though if I successfully digipeat to LASARSAT, it should show that in the telemetry packets so even if I can’t switch back to RX quickly enough I should still see something in the “U,” packets.

I correct doppler shift using gpredict for the FT-991A and SDRAngel for the RX Chain.

After an ISS Pass I think I might have gotten a successful digipeat back? But hard to say.

rommac@lab-server:~/station-2864$ ./gr_satellites.sh
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'CQ' (total 2)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'KB6LTY' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 3
                    extension = False
            Container:
                callsign = u'RS0ISS' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b'=3429.70N/11712.30W-@ KB DE CHRISTY  DM14jl' (total 43)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'0P0PS4' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = False
            Container:
                callsign = u'RS0ISS' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'APRSAT' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b"'v&\x1cl \x1cSI]ARISS-International Space Station=\r" (total 45)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'CQ' (total 2)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'KJ7TZG' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'RS0ISS' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b'TESTKJ7TZG' (total 10)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'CQ' (total 2)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'KJ7TZG' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'RS0ISS' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b'TESTKJ7TZG_TEST_ISS' (total 19)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'CQ' (total 2)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'KJ7TZG' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'RS0ISS' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b'TESTKJ7TZG_TEST_ISS' (total 19)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'0P0PS4' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = False
            Container:
                callsign = u'RS0ISS' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'APRSAT' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b"'v&\x1cl \x1cSI]ARISS-International Space Station=\r" (total 45)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'CQ' (total 2)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'N5ZKK' (total 5)
                ssid = Container:
                    ch = False
                    ssid = 6
                    extension = False
            Container:
                callsign = u'RS0ISS' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'SGATE' (total 5)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b'EM00 KERRVILLE' (total 14)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'CQ' (total 2)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'KB6LTY' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 3
                    extension = False
            Container:
                callsign = u'RS0ISS' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b':N5ZKK-6  :HELLO DE CHRISTY DM14' (total 32)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'CQ' (total 2)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'KJ7TZG' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'ARISS' (total 5)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b'TESTKJ7TZG' (total 10)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'CQ' (total 2)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'KB6LTY' (total 6)
                ssid = Container:
                    ch = False
                    ssid = 3
                    extension = False
            Container:
                callsign = u'RS0ISS' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b'=3429.70N/11712.30W-@ KB DE CHRISTY  DM14jl' (total 43)
-> Packet from 1k2 AFSK downlink
Container:
    header = Container:
        addresses = ListContainer:
            Container:
                callsign = u'CQ' (total 2)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'KJ7TZG' (total 6)
                ssid = Container:
                    ch = True
                    ssid = 0
                    extension = False
            Container:
                callsign = u'ARISS' (total 5)
                ssid = Container:
                    ch = False
                    ssid = 0
                    extension = True
        control = 0x03
        pid = 0xF0
    info = b'TESTKJ7TZG' (total 10)

I would need the hex data to say if the h bit is set or not.

Add --hexdump to your gr_satellites command line.

Jan | PE0SAT

************************************
***** VERBOSE PDU DEBUG PRINT ******
((transmitter . 1k2 AFSK downlink))
pdu length =         33 bytes
pdu vector contents =
0000: 86 a2 40 40 40 40 e0 96 94 6e a8 b4 8e e0 a4 a6
0010: 60 92 a6 a6 61 03 f0 54 45 53 54 4b 4a 37 54 5a
0020: 47
************************************

Fairly certain this wasn’t a genuine repeat back since this occurred during a doppler shift of zero Hz and at really low elevation (~10 degrees).

The 61 is the SSID for RS0ISS. This is 0110 0001 in binary. The h bit is 0, so it didn’t come from the ISS (was not digipeated).

1 Like