GNUradio Software Drift correction - looking for IQ recording of NB transponder

  • Dear all,

    I am using GNUradio for my uplink-only setup and that seems to work well. Next step is to include downlink reception. I have been thinking about doing LNB drift correction in software based on the beacon (as used / discussed by several people here on the forum). Instead of an FFT based approach, I plan to use a Costas loop to recover the (suppressed) carrier of the PSK400 beacon. Costas loops are designed to do carrier recovery on DSB-SCsignals (PSK can also be regarded as DSB-SC), so in theory it should work. I cannot test this out in practice however as my LNB is still on its way in the mail :) :)

    Therefore, would anyone be able to send me an IQ recording of the NB transponder (including the beacons) using a PLL LNB running on its original crystal (so no drift correction or GPS disciplining used)?

    Sample rate may be 480 ksamples or anything higher (not too high to limit the file size a bit). Dropbox or something similar should work to transfer the file. Many thanks in advance!


    Wouter Jan PE4WJ

  • Hey Wouter,

    How far have you got with this ? I've been a bit tied up with work lately, but I'd be very interested in your results with the Costas loop. I've been trying with FFT and the Argmax block, but with limited success. The major issues I've been fighting are:

    a) There is always a 'loudest' bin even when the carrier is off - Thresholding and the interleaving the loudest bin with the threshold out to a external script is how I solved that.

    b) I use RPC from a python script to send the correction back to the FlowGraph. It's difficult to get/send enough updates quick enough for fldigi to reliably decode the CW, or for the GNURadio PSK400 decoder to decode the PSK400 beacon.



  • Hi Iain,

    Yes, as Remco indicated the first experimental version works. I have not yet had the time to do a write-up and explanation so you may have to dig a bit to make it work, but I will certainly do a write-up when I have time. And it most likely needs more experimentation to improve performance. I have just committed a cleaned up version of the flowgraph. Let me know if you can get it to work!


    Wouter Jan PE4WJ

  • I modified the flowgraph to read from an RTL stick and got it working!

    Very nice. Now let's see if it can be integrated in gqrx...

    At least the experiment (also with gr-satellites) got me a bit more accustomed to gnuradio-companion. That is important because the first steps only lead to error messages and frustration :-)

  • I can now get it to track well enough that FL Digi can decode the Lower Beacon (which I could not do before).

    Still some drift, and it's still 1-2k off, but that's just a static offset. Probably I need to play with the numbers a little more, and not be so impatient!

    Have grafted the Upper Beacon decoder on, No success as yet, but it may still be drifting too much for the decoder, and/or I need to remove the 1k5 offset. I may just modify the decoder to take the input from an audio device, and route the audio feed via jack and run both flowgraphs to make things easier to debug.

    Drift is much less on the Upper beacon as well, so I think it's just fiddling with the numbers and getting the beacon in the correct frequency space for the decoder. Well I hope at least!


  • I don't think the description claims that this is a first or that it is unique.

    However, it is a bit different from other implementations in that it requires only a single stick (or other receiver hardware), thus it also compensates the drift of the SDR (not only the LNB), and it compensates at a high rate (many times per second).

    I have been running it while I was at work, tuned to the lower beacon, and when I came home it was still happily receiving CW at the same pitch (800 Hz). Very good.

    I don't see the static offset. When I tune to -125800 I hear the lower beacon at 800 Hz and when tuned to 123500 I hear the familiar upper beacon. Those frequencies are to be expected, remember you tune to the frequency of the suppressed carrier so any audio frequency you want to hear has to be subtracted from that (in USB).

    When you want to decode the upper beacon you do not need an entirely separate beacon receiver but you can start from the input- and output of the Costas loop.

  • g7iii Iain: it sounds like the loop is not locked. When locked, there should be zero drift, and the frequency should be spot-on, since the system performs phaselocking. What dish size are you using? The system is quite sensitive to SNR and needs a certain minimum SNR of the beacon signal to lock reliably. I have been able to get it to lock on a 35x45 CM dish but that is a bit marginal.

    For me, what works is to first adjust the LNB frequency correction until the upper beacon more or less matches the expected frequency (default: +125 kHz) , and then lower the loop bandwidth until the lock is solid. This can be checked by tuning to -125800 Hz as suggested by Rob, this puts the lower CW beacon at an 800 Hz CW pitch.

    DB8TF :

    No worries, I have included a mention of your solution on my blog.

  • PE4WJ: Yeah, I'm thinking the same way myself. I have a 1.1M dish, but currently the Upper Beacon is "only" around 6dB above the transponder noise floor, I think the recent winds may have adjusted things a little - I'll tweak the dish and feed a bit later.

    Getting closer though, as I say much better than without the drift tracking :)


  • PE4WJ & G7II

    As long as you can hear the noise floor of the transponder the upper beacon has to be about 12dB above it.

    It doesn't matter if you are hearing the noise floor with only 1dB (e.g. with a 35cm dish) or with 100dB (maybe in Bochum) over the backround noise.

    S/N of the beacon related to the noisefloor is in these cases always the same.

    73 de Johannes