0

My objective is to demodulate the signals with different modulation orders and schemes. In particular, I want to recover the phase first.

Let us say, my signal looks like in the constellation below

Constellation.

The idea is to position the constellation in such a way that the largest excursions are at 45 degrees angle. In other words, IQ diagram must be shifted by some angle. This angle is determined by the average shift of all points from the reference axis (real or imaginary). The idea itself is coming from this post, where BPSK phase recovery is described.

My problem is that I still do not understand, how do we perform the phase recovery for the higher order modulation schemes. The idea of simply mirroring the constellation to one quadrant (as it works in the case of BPSK) does not seem correct to me and also does not work well. So how we can do it?

Thanks!

Python
  • 133
  • 6
  • See this post on using a decision directed phase detector which works well for this application https://dsp.stackexchange.com/questions/74667/decision-directed-ted-timing-error-detector-what-does-it-mean – Dan Boschen May 08 '21 at 19:07
  • And more specifically this one https://dsp.stackexchange.com/questions/31497/how-to-correct-the-phase-offset-for-qpsk-i-q-data/31506#31506 – Dan Boschen May 08 '21 at 19:14
  • And this shows the implementation usable for higher order QAM as well as QPSK https://dsp.stackexchange.com/questions/51856/qpsk-constellation-from-baseband-signal/51866#51866 – Dan Boschen May 08 '21 at 19:34
  • @DanBoschen thank you for the advice! The concept of PLL is new to me, so I would like to clarify one thing: my approach in demodulating QPSK would be to define the "reference points" on the constellation (+- sqrt(2) +- j sqrt(2)) and then compare all received symbols with them. Then I multiply the received symbol with complex conjugate of the nearest neighbor (reference point) and I obtain the phase that can be used to recover the phase of the symbols. Is this right? – Python May 08 '21 at 20:54
  • Yes you have that right- this gives you an error which you should accumulate as the loop filter in the PLL; this is diagrammed in the link I gave above so if something in that link isn’t clear you can ask under that question – Dan Boschen May 08 '21 at 22:59
  • @DanBoschen Unfortunately ,I don't have enough reputation to comment other posts. I have doubts regarding the way to accumulate the error as the loop filter in PLL. I have understood that we cannot simply sum the errors from all symbols up. In the last picture of your answer here https://dsp.stackexchange.com/questions/17297/high-modulation-index-psk-carrier-recovery, PI Loop Filter in a feedback loop has a necessary structure, but I do not know how to implement it in software. So could you briefly explain how to accumulate the error in the correct way or to point me to the reference? Thanks! – Python May 09 '21 at 10:30

1 Answers1

1

This post provides many details on implementing carrier recovery for a higher order QAM system (or even QPSK).

High modulation index PSK - carrier recovery

Using a PI loop filter where in addition to a simple accumulator, a direct (proportional) path is also summed in results in a 2nd order Type 2 tracking loop as required to track phase offsets to zero error under static frequency offset conditions. Symbol-aided synchronization (where a known pilot is used) is recommended for higher order QAM to minimize acquisition time. The coefficients of the loop filter are set to stabilize the carrier recovery loop and also set the appropriate loop BW.

See this post for further considerations on setting the loop BW properly:

Loop bandwidth for symbol timing recovery

Dan Boschen
  • 50,942
  • 2
  • 57
  • 135