I'm validating a C++ oQPSK receiver. The 5Mbps oQPSK signal is generated by a satellite emulator. The receiver structure goes as follows:

SDR --> AGC --> Costa's Loop --> Delay --> Polyphase Symbol Sync (Maximimum Likelihood) --> Constellation demap

I have tested the Costas and the polyphase sync with BPSK and QPSK and they performed very well. However, the constellation I get for oQPSK seems to be unlocking at a very specific interval. Upon inspection, I found out that the problem lies with the polyphase symbol sync. As you can see below, the fractional interval drifts between 0.0 and 1.0 due to the difference in clock frequencies between the SDR and the satellite receiver. Upon further inspection, I found out that unlocking is caused by PFB filters corresponding to fractional indices of around $\mu=0.5\pm0.1$.

Could anyone provide me with any clue as to what could be behind this? Why PFB behaves like this for this range of fractional indices?

Thanks in advance. enter image description here enter image description here

  • $\begingroup$ Are the AGC and Costas loop still locked and behaving normaly? During the symbol sync issue $\endgroup$
    – user51024
    Commented Aug 15, 2022 at 19:25
  • $\begingroup$ Is this normal that something is still drifting on your plot? Why not converging when locked? $\endgroup$
    – user51024
    Commented Aug 15, 2022 at 19:26
  • $\begingroup$ I think it's the error that should be fixed i.e. goes down to zero. Symbol and phase estimates could drift depending on the clock/phase difference between the transmitter and the receiver. $\endgroup$ Commented Aug 21, 2022 at 19:24
  • $\begingroup$ Once the correct sampling rate and offset is applied on the feedback loop there should be no drift anymore. The same for carrier frequency and phase offset $\endgroup$
    – user51024
    Commented Aug 22, 2022 at 9:34
  • $\begingroup$ I have seen in several places that symbol sync has to be done before Costa's Loop otherwise the loop will not converge. In your case seems to work though. Also, at the output of the Costas you may have I and Q reversed so how do you know which one to delay? Have you actually decoded the data? or only stopped at the constellation. $\endgroup$ Commented Oct 3, 2023 at 13:19

1 Answer 1


I was finally able to resolve the synchronization issue by increasing the number of samples per symbol. The system was working at 2 sps. Increasing it higher (e.g. 2.1) solved the problem completely even though I can't justify why.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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