Chris Thompson - AC2CZ - Amateur Radio Station

Dot Product vs Costas Loop BPSK Decoder

Which is better for partially stabalized LEO Cubsats with linear antenna?


In my previous post I discussed the Dot Product BPSK Decoder I implemented in FoxTelem based on the work of Phil Karn - KA9Q. I tested its performance against the Costas loop based decoder I presented at the 2018 AMSAT symposium. I discuss the test results below.

Performance vs Costas Loop

Before we get into the tests, let's remember that in an ideal situation a coherent demodulator like the Costas Loop performs better than a non coherent decoder like the Dot Product demodulator. So we know that with a long steady signal a Costas loop will decode more frames. That is proved easily with testing in the lab. The Costas loop can decode about 2-3dB further into the noise than the Dot Product decoder.

So we are interested in what happens with a realistic signal that is shifting with Doppler and fading as expected. Then which decoder will be better?

Test 1: 5dps, Deep Fade, Antenna Pattern Rotating

AO-85 Plot of Rotation around Z

We want to simulate the rotation of the antenna pattern. Our cubesats are partially stabilized with a magnet which keeps them aligned to the earth's magnetic field. This is designed to keep the 2 meter and 70 cm quarter wave antennae in a "vertical" position. Or at least vertical with respect to the the Z axis. They are then rotating around Z because of sunlight pushing against the solar panels. The panels are slightly offset so that the force is uneven and the spacecraft rotates slowly in one direction.

I took a quick look at AO-85's rotation around Z. It is hard to pick a typical rotation rate, but it might by 5 degrees per second (dps) or one revolution in 72 seconds. I used the Doppler and Fade Simulation program I wrote. The Funcube Dongle was listening to a flat sat transmitter with a strong signal.

SimSat settings screen

The fade model is a quarter wave whip antenna pattern with a 95% fade out, meaning it will disappear all the way into the noise about twice a minute. I ran this for nearly 10 minutes. In the screen shots below (click for a larger image) you can see the dot product decoder on the right, with a rotating phasor, but always a straight line. Costas is on the left with the classic two dots in the phasor that we see in the text books because the phase is locked.

The Dot Product decoder has 103 frames vs 87 frames for Costas. It is nearly 20% better. Dot Product Vs Costas Test 1

Test 2: 20dps, Antenna Pattern Rotating

I took a bit more time and examined the rotation rate for AO-92, which may better model the orbit we are interested in for a spacecraft with a BPSK telemetry system. I also know that AO-92 has given us some difficulty talking pictures with its camera due to its fast rotation. The spin is typically much faster than 5dps. The plot below shows the rotation rates during 2018 and they span from -20dps to +20dps.

AO-92 Plot of Rotation Rate around Z

So a realistic rate is perhaps 15dps, which is 24 seconds for a rotation.

This was modeled in SimSat, two copies of FoxTelem were run in parallel, the transmitter was started and the results are shown below. Now the Dot Product Decoder gets twice as many decodes. This feels like an important results because it is a realistic rotation, fade pattern and signal level. But it is not the end of the story.

Test 3: 5dps, Polarization Changing

The spacecraft is supposed to rotate around Z so that we have nearly vertical antenna as it passes across the sky. Even if that were true, the antenna are at an angle and their polarization (angle) changes with respect to the ground station. But it is worse than that. The spacecraft is often rotating around X and/or Y as well. A quick inspection of the telemetry shows that it is slower than around Z (which is the primary axis and powered by sunlight striking the panels) but is in the range of -10 to +10dps. See the chart below for AO-92:

The polarization mismatches do not have the sharp nulls that we see in the antenna pattern. Instead the Polarization Loss Factor (PLF) for two linearly polarized antenna at an angle theta is the square of cos theta. Cos squared is very similar to a raised cosine and is shown in the plot below. Note that it is at twice the frequency. Plot of Cosine and Cosine Squared

In test 3 I modeled the fade with a cosine squared pattern to simulate the mismatch to a linear antenna with the cycle repeating every 72 seconds to simulate 5dps. The results are shown below, where we can see that the Costas Loop is much better.

I repeated this test with several combinations. If the signal is stronger, or the fade is not as deep, then the gap narrows but Costas is always at least 5% better. If the fade is more rapid, say 30dps, then Costas is 30% better. There seems to be no combination with this fade pattern where the Dot Product decoder is better.


If the signals are strong and there is no fading then both decoders perform well, with the Coherent decoder having a slight edge. The Costas Loop is also less susceptible to noise and is better with weak signals. It can decode a signal 2-3dB above the noise. The current version of the Dot Product decoder needs a signal 4-5dB above the noise.

For a rotating quarter wave antenna pattern where the signal fades into the noise during the null, the Dot Product decoder outperforms a Costas Loop. In a realistic test it can be 30% better. This assumes the ground station is using Circular Polarization and it not suffering long slow fades due to polarization mismatch.

If the station is using a linearly polarized antenna and the fading has a cosine squared shape, then a Costas Loop, with its faster acquisition and better low signal handling, outperforms the current Dot Product decoder. Sometimes as much as 30%. It is quite possible that signal acquisition time can be improved for the Dot Product Decoder, so this gap may be narrowed.

The final recommendation might therefore be "run both decoders" and why not if you have enough compute power. It will be interesting to see what happens with real signals.

73 Chris

Enter Comments Here:


Answer this question to help prevent spam (one word, not case sensitive):
The third planet from the sun is called what?

Comments on this post

On: 06/04/20 12:12 Burns Fisher WB1FJ said:
Very interesting.  My experience with HuskySat (tracking with a circularly polarized beam) is 
that in the lab, Costas is far better.  Perhaps that is related to being less "fussy" about tuning.  
But in orbit, DP was noticeably better.  Both of these are using a FunCube Dongle Pro+ 
without changing the FCDPP's local oscillator during the pass.

One additional data point:  I briefly tried using my  IC9700 with CAT driven by MacDoppler,  
and with the USB sound card set to deliver IF frequencies to FoxTelem (which was set to take 
input from the USB sound card of type IQ, but with FoxTelem not tuning at all.  In this case, 
Costas seemed better.  My assumption was that Costas was a bit less sensitive to minor errors 
in the Keps and the rather large quanta (several seconds) between CAT turning changes.

Copyright 2001-2021 Chris Thompson
Send me an email