MATLAB: How to improve the performance of the Frequency Recovery sub-system for low Signal to Noise Ratio (SNR)

carrierfrequencyoffsetrecoverysimulink

I am modeling a channel to introduce some frequency offset in the transmitted BPSK modulated signal. At the receiver, I am using a non-data aided open loop carrier frequency algorithm based on the 2P-Power Method. Please find the model in the attachments.
For low Signal to Noise Ratios (SNR), the signal constellation after frequency recovery rotates when it should ideally be steady. After some period of time, the constellation flips over the decision threshold (Y-axis). Hence, the demodulator now considers 1s as 0s and vice-versa. As the SNR decreases, the rate of rotation of the signal constellation increases.

Best Answer

The frequency recovery algorithm used in this case is non-data aided and open-loop. Using data aided and closed loop methods would offer better performance. For the current open loop scheme, a larger observation interval would improve performance. Currently it is 64 symbols; higher values could be tried. Consider the design parameter constraints while making these changes.
Observe that even with high SNR, the ‘After Freq Recovery’ constellation rotates, although very slowly. If the simulation is run for a long period of time, the constellation might flip across the decision threshold. Hence, it is strongly recommend that either a closed loop frequency recovery algorithm that would continuously correct the rotational drift of the constellation or some sort of training sequence inserted periodically to reset the constellation be used.
Related Question