A few months ago I talked about BER simulations of the gr-satellites demodulators. In there, I showed the BER curves for the BPSK and FSK demodulators that are included in gr-satellites, and gave some explanation about why the current FSK demodulator is far from ideal. Yesterday I was generating again these BER plots to check that I hadn’t broken anything after some small improvements. I was surprised to find that the FSK BER curve I got was much worse than the one in the old post.
In the two figures below you can see the BER curve I got and the BER curve in my older post. The high SNR behaviour is nearly the same, but for low SNR the BER curve I got is much worse. The curve only starts “behaving well” at around 11dB Eb/N0, where the former curve started behaving well at maybe 7dB Eb/N0.
The reason for the change in regimes between a flat portion of the curve where the BER is 0.5, a transition region, and a portion where the demodulator “behaves well” is the clock recovery loop. When the SNR is below a certain threshold, the clock recovery loop doesn’t lock, so we are essentially decoding random garbage. In the transition region, the clock recovery loop barely locks, so it incurs a significant performance penalty. When the SNR is high enough, the clock recovery loop locks just fine and it doesn’t disturb the BER.
The threshold at which the clock recovery loop can lock is directly related to the clock bandwidth. A larger bandwidth will make locking faster, but will also bring the locking threshold up. The current default clock bandwidth in gr-satellites is 0.06. Repeating the simulation with a clock bandwidth of 0.02 I get the figure below, which is pretty close to the old figure.
Now, choosing the clock recovery bandwidth is a tradeoff between fast lock (which is needed to get packets with short preambles or unstable clocks) and low SNR performance. I have tried to optimize the default parameters for gr-satellites with many real world recordings, but in particular cases other parameter choices will work better.
I also find that the change in locking threshold from 7dB to 11dB Eb/N0 is perhaps not so significant as it might seem. Below 11dB Eb/N0 the BER is still pretty high even if the clock recovery has locked, so unless there is a good FEC cleaning all these bit errors, it is impossible to decode. Thus, we don’t really care whether the clock recovery can lock or not. In fact, many FSK Amateur satellites are still using AX.25 unfortunately. Since AX.25 has no FEC, anything below 13dB Eb/N0 or so is a no-go for these satellites.
Thank you for the informative articles.
Regarding FSK demodulation, you mentioned in one of your previous posts that there is another approach for demod that would contribute to better results.
“A much better way to demodulate non-coherent FSK is to shift each of the tones to baseband, accumulate coherently for a symbol period, take the power, and compare to see which tone gives the largest power”
Have you seen such implementations in GNU Radio or could you suggest any useful material in relation to that?
I think there is an OOT module for AFSK 1k2 packet radio that does this demodulation. Maybe gr-bruninga, but I can’t recall which exactly. Also you might be interested in Roza Chatzigeorgiou’s BSc thesis https://dias.library.tuc.gr/view/86358 but I think the code from that thesis is not publicly available.