I am trying to implement a basic digital modulation scheme (BPSK) with a low data rate of 5 kbps. The requirement is to support a frequency offset of +/- 10 KHz. I would like to know what are the criteria to decide how much offset can be corrected? My burst data header is only 50 bits. I want to know if it is possible to track the frequency offset and also do the timing recovery (gardner) in the header bits.


The answer is yes it is possible and any amount of frequency offset can be corrected to the extent your sampling rate is sufficiently high enough for unambiguous frequency resolution over ±10 KHz. A very simple frequency discriminator that can be used in a carrier tracking loop is further described at this post:Carrier frequency offset estimation for QPSK and asymmetrical spectrum and results in determining the frequency offset simply from the product of two successive (complex) samples given as $I_1Q_2-I_2Q_1$. For BPSK you can also remove the modulation from the frequency error result by first squaring the signal, in which case the result will be twice the actual frequency offset; which is of no consequence since the loop will drive the offset to 0 in any event).

This discriminator has unambiguous frequency resolution for IQ rotation up to 90° between samples. A 10 KHz frequency offset will rotate 90° if the sampling rate is 40 KHz, so as long as your sampling rate can be greater than this rate, this should be a very simple approach to carrier recovery / Doppler wipe-off (80 KHz if using the frequency doubling approach to strip the modulation).

The maximum possible offset sets your search window and the header duration if used for acquisition sets the carrier recovery Loop BW. The carrier Loop BW sets the acquisition SNR required (wider BW is faster but requires a higher SNR). So use a loop BW that is wide enough to settle for a step response in frequency change from 0 to 10 KHz within the time duration of 50 symbols. (And then the loop bandwidth can be further tightened once acquired if channel dynamics allow).

  • $\begingroup$ Actually the header size is fixed to be 50 bits. I cant change it. I was planning to use a coarse freq recovery(fft based) to track the freq offset followed by coastas loop for fine recovery and then gardner for timing recovery?or should i use only coastas with large bw followed by timing recovery? Requirement is 1e-6 BER for 12dB SNR. Please suggest how to proceed? $\endgroup$ – Susan Jul 24 '20 at 13:51
  • $\begingroup$ Depending on your sampling rate I would simply use an approach like this as your discriminator your carrier recovery loop-- Look at what the maximum phase rotation would be at your maximum frequency offset to set your sampling rate there---keeping the rotation less than 90° for the capture range of BPSK. Hope this answers your questions! dsp.stackexchange.com/questions/67535/… $\endgroup$ – Dan Boschen Jul 24 '20 at 14:02
  • $\begingroup$ .I have gone thru ur post. Still i am confused. my freq offset is 10*symbol rate.its very high so should i use a fft based freq estimater? is 50 bits header enough for that? $\endgroup$ – Susan Jul 24 '20 at 14:23
  • 1
    $\begingroup$ @Susan What is your maximum available sampling rate? At that sampling rate and your maximum frequency offset work through how much the symbol would rotate between successive samples. If that rotation can be less than 90° you can use a much simpler approach to determine the frequency error and close your loop (the one I referred you to) over doing a complete fft. Yes a 50 bit header is enough, it will set your carrier loop bandwidth to be wide enough to settle within that time. Use a wider loop BW for acquisition and then tighten if needed during tracking for better SNR $\endgroup$ – Dan Boschen Jul 24 '20 at 17:10
  • $\begingroup$ (to the extent channel dynamics allow). $\endgroup$ – Dan Boschen Jul 24 '20 at 17:12

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.