I have heard and been heard via QO-100! As a licensed radio amateur I have sent signals via satellite as far away as Brazil.

What it is

QO-100 is the first geostationary satellite with an amateur radio payload. A “repeater”, if you will. Geostationary means that you just aim your antenna (dish) once, and you can use it forever.

This is amazing for tweaking and experimenting. Other amateur radio satellites are only visible in the sky for minutes at a time, requiring you to chase them across the sky to make a contact before it’s gone.

They also fly lower, meaning they can only see a small part of the world at a time. QO-100 has constant line-of-sight to all of Africa, Europe, India, and parts of Brazil.

Needs a bit more equipment, though

Other “birds” (satellites) can be accessed using a normal handheld FM radio and something like an arrow antenna. Well, you should actually have two radios, so that you can hear yourself on the downlink while transmitting.

There are also linear amateur radio satellites. For them you need SSB radios, which narrows down which radios you can use. And you still need to chase them across the sky.

For QO-100, though, you don’t just need another modulation, you need more complicated frequencies.

The uplink for QO-100 is 2.4GHz, and the downlink is 10.4895GHz. (I’m only looking at the narrowband transponder, for now).

My setup

There are many options. I chose mine because I want to do as much as possible with software defined radios, and I want my components to work for other experiments, if this one doesn’t work out.

Receive side

First I needed a dish. I bought a small 35cm dish from passion-radio, because of its portability. Small dishes are not as good at focusing the signal, but in return they are easier to aim, since they have a wider beam.

Basically nothing reasonable can receive a 10GHz directly, so the next thing I needed was an LNB. It takes a block of high frequencies, and “moves it down” to lower ones. I got the othernet Bullseye, since it has good specs and reviews. This converts the downlink signal down to a more manageable 759.5MHz. The LNB needs a bias-tee of 12V to power it. This is like a “power over ethernet injector”, for those of you who build networks.

This shifting of frequencies also has the benefit that lower frequencies have lower losses while going through coax.

I plugged this into a USRP B200 (if buying from ettus, you’ll need its enclosure too). There are cheaper options out there, but I bought this 10 years ago, so why not use it. I also tried a LimeSDR Mini. It worked very well too, but my B200 has a GPS disciplined oscillator, which reduces any unknowns about being on frequency.

After the investment of the dish and the LNB, I brought the receive setup to the top of a tall building, to see if it works.

It was harder than I expected to point the dish. It needs to be very precisely aimed. In theory you can just use this website and a compass, but compasses don’t like nearby metal (including the metal in the dish), so I found that it was more effective to eyeball it from google maps, and the alignment of nearby buildings, and hunt from there.

The second problem is wind. Wind will catch the dish, and tip it over. I recommend a better plan than to simply dedicate one hand to holding on to it.

Eventually I found the beacons where I expected them:

Band edges

The best way I found to fine tune the direction was to output FT8 as audio, and maximize the apparent volume, while making very small adjustments.

Tuned to FT8

Even though the B200 was GPS locked, and presumably bang on frequency, that’s not the case for the LNB. It’s not bad, but it looks like it’s a problem for very frequency sensitive modes like FT8.

I used pipewire virtual audio cards to get the signal from GNURadio into WSJT-X. There we see the problem clearly. Those yellow blocks at the bottom should be perfect rectangles, and not lean to the side. The fact that they all lean the same way tells me it’s a problem on my end, not with the person transmitting.

FT8 skew in wsjtx

I have a plan for fixing this, but not today.

So in short: LNB in dish - bias-tee - USRP B200.

Transmit side

The transmit side has a different problem than the receive side. 2.4GHz is easy enough to generate using an SDR like the B200 (or LimeSDR). But the output of SDRs doesn’t have any power.

Before amplifying, though, it needs to be filtered. SDRs can generate any signal in a huge frequency range, but in the end any transmitter needs an analog filter. And analog filters are physical. They are band specific. I found some nice band pass filters on aliexpress, and bought a bunch for different bands. For this project we need a 2.4GHz band pass filter.

For power amplification I bought a 10W amplifier, but I’m still trying to make it work. In the mean time, I decided to use an analog devices CN0417. It’s only a 1W amplifier, but I was hoping that it could work for morse code or FT8.

In the past I’ve noticed that the USRP B200 has produced a pretty garbage signal (“nonlinearities”, the word may be) when it has its output gain set too high. I can set the gain lower, but the 1W power amplifier only amplifies by 20dB. So I added a 30dB LNA before the power amplifier.

I have only used LNAs on the receive side before, but turns out they work very well to amplify the low power of an SDR for transmit, too.

For the antenna, the best option seems to be to get a helix antenna, since it sits “around” the LNB, and bounces on the same dish.

In short: B200 - 30dB LNA - CN0417 - Helix antenna.

Converting to and from audio

At this point I have the uplink and downlink signal in the B200. As one does, I created a mess of a GNU Radio graph. It only uses standard blocks.

The transmit side takes audio and just sends it to the SDR. For transmit the SDR is mostly easily tuned directly. It just needs analog filtering and power amplification.

The receive side takes the whole narrowband downlink, and lets me tune around for what I want to decode. Or save the whole spectrum to disk.

To connect to WSJT-X I used the same virtual audio cables I’ve blogged about in the past. Some fighting in pavucontrol is needed to route the audio to the right loopback.

WSJT-X doesn’t need to trigger PTT, since this setup is full duplex.

The location

Sure, a bigger dish would help, as would putting the dish on the roof. But since I need to tweak it and have short cables for efficiency, putting it on the roof means a risk I’m not willing to take. So at least for now the setup is near ground level.

How did it go?

Reception works better than expected. Sure, not as clean as some other ground stations, but that’s to be expected.

For transmit, I first thought the small dish and weak amplifier was just not enough. I could not see the morse code beacons I send using RustRadio.

But then I saw and heard the beacons on websdr! So they do get there.

Heard morse code beacons (sound)

What about FT8?

As mentioned above, FT8 decoding isn’t great. Some decode, but most (by far) don’t. They sound OK, but don’t decode. I tried switching to lower sideband, in case that’s how people transmitted, but that didn’t seem to help. I think it’s all due to needing to compensate for LNB frequency instability.

I was heard, though:

FT8 heard all over

So yes, I can receive stronger signals, and I can be heard with my weaker signals. I just can’t hear my own weak signals.

Rooms for improvement

A bigger dish would help. I just need to figure out the best way to install it. Maybe this can wait until it’s all “perfect” and I can hire someone to install it on the roof.

More power. I need to get this 10W amplifier working. That should make me able to hear myself.

I need to figure out the downlink frequency stability. Either I can try to get an LNB with an external GPS discliplined clock, or I could use the satellite’s beacons — presumably stable — to lock on and fix the LNB instability in software. That’d be ideal. What can be done in software should be done in software.

The station

In use: Photo of the station in use

Mocked up: Photo of the station mocked up