An FFT-based coarse frequency acquisition block is being tested in GNU Radio. The algorithm used can be found on the GOES satellite user manual and is summarized in the figure below. [![goes-acquisition][1]][1] The algorithm works by: 1. Carrier detection by absolute-law, square-law or fourth-power law. Square law detector involves squaring the IQ signal while fourth-power law uses the fourth-power of the IQ signal. 2. Finding the FFT 3. Averaging successive FFT sequences 4. Finding the peak by looking at 8 adjacent bins with the highest magnitude. I have been able to implement the algorithm in GNU Radio, at least for BPSK. The algorithm is able to recover the carrier at all offset scenarios (offset < 10% symbol rate, offset ~ symbol rate, offset > symbol rate). [![fft-acquisition-gnuradio][2]][2] [![fft-acquisition-bpsk][3]][3] According to the GOES manual, the same algorithm should work for OQPSK, and I assume by extension, QPSK. However, the carrier derived by the algorithm for the case of QPSK is pretty bad, especially in low-SNR scenarios. I have two questions 1. Are there any literature sources as to how the frequency detectors (square, fourth-power) work? I have basically implemented the algorithms but I do not fully understand their mathematical derivations. 2. Is there a more effective frequency detector for QPSK apart from square/fourth-power/absolute laws that could remedy the situation? Regards, Moses. [1]: https://i.sstatic.net/gCMiq.png [2]: https://i.sstatic.net/RQ1dy.png [3]: https://i.sstatic.net/CIhFE.png