Consider a typical BPSK system running at a baud rate of 1 kbaud/sec - the receiver needs to deal with severe frequency offsets, let's say up to +/- 1 MHz offset and that the frequency offset can change by up to 100 khz/sec.

So we're dealing with a frequency offset that's 1000x the baud_rate. Usually if we were transmitting at a higher baud rate, this would be more like 0.1x the baud rate - and one way to easily handle this frequency offset would be to employ fred harris' band-edge frequency locked loop (fll). However, AFAIK the band-edge fll approach only works very well at 2 samps/symbol. If you try to run it at a much higher # of samples/symbol (e.g. in this example we'd need to run it around ~2000 samples/symbol to have unambiguous view of our maximum frequency offset), the band-edge filters would become extremely narrow and you'd have no hope of exciting them with enough energy and locking onto the signal.

Of course - we could just replace the band-edge filters with much wider ones in hopes of catching the signal and locking onto it - but in doing so we're now allowing in a significant amount of noise. This leads me to another approach - where an FFT loop is used to determine the frequency offset and correct for it. I think of this as a generalization of the idea of swapping out the band-edge fll filters for wider ones. For example, we can consider creating a frequency discriminator/error term by comparing the pos and neg half energy of the FFT. Again, this is plagued by similar noise issues. Additionally, we have to consider complications due to the frequency offset moving (at 100khz/sec) - if we try to use a larger FFT (or average multiple FFTs ala welch/bartlett/etc) we run into the issue of the signal smearing across multiple bins - this makes it difficult to achieve significant processing gain and correct for large frequency offsets in low-snr situations.

So my question is - is there a 'correct' way of dealing with this problem? I've convinced myself using a coarse frequency correction followed by a fine freq correction (say an FFT method followed by a band-edge method) sort-of works, but I'm not really sure this is the best way to go at it (especially given the noise issues inherent in the FFT trade-off I mentioned above).

  • $\begingroup$ Pretagging @DanBoschen since I know this is right up his alley $\endgroup$ – user67081 Feb 17 at 8:15
  • 1
    $\begingroup$ The problem is less the frequency offset – got to correct that, but that's something a parametric frequency estimator, followed by a frequency shift, can do, followed by a second order PLL if in doubt, but the frequency drift, which makes this system have close to zero mutual information between channel in and output, unless you can put very strong restrictions on the drift (like it's the same drift for thousands of symbols). $\endgroup$ – Marcus Müller Feb 17 at 8:18
  • 1
    $\begingroup$ Btw, this sounds like space comms, in that case, try to correct the Doppler and doppler shift before you even start? $\endgroup$ – Marcus Müller Feb 17 at 8:26
  • $\begingroup$ Thanks @MarcusMüller I think you're dead on here as usual :) And you're right, I should've mentioned pre-correction of the doppler, we'll definitely be doing that, but I was just curious if there was some other fancy way to deal with this barring that -- however it sounds like it's pretty much mandatory to have some good knowledge of what the drift profile looks like $\endgroup$ – user67081 Feb 17 at 18:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.