# QPSK Phase Recovery : Maximum-likelihood Vs Costa's Loop

I have implemented a QPSK Costa's loop in GNU Radio and run some BER benchmarking. All is going well. Out of curiosity, I'm trying to implement the Maximum Likelihood phase recovery shown below. For the Costa's loop, a loop bandwidth, which specifies gain constants for the loop filter (F(z)) and the integrator, of a few percents of the symbol rate is adequate. My question is, first of all, since the ML phase recovery doesn't seem to have any traditional loop filter (e.g. proportional-plus-integrator), does the very concept of loop bandwidth apply? If the concept of loop bandwidth is applicable, how do you set it and what are the appropriate values (in relation to symbol rate, maximum frequency offset etc)?

UPDATE

Harris' ML structure

• the $\mathbf \Sigma$ could be understood as low pass filter, namely exactly what you said: an integrator! – Marcus Müller May 8 '19 at 16:54
• @Moses my original post details the considerations for setting the loop BW and the trade space involved. If you can’t find it (it is one of my first 5 postings) let me know and I will did it up and paste in the link. – Dan Boschen May 9 '19 at 1:11
• I found it but am on my phone and don’t know how to link it from that: the title is “Loop BW for Symbol Timing Recovery” and the explanation is applicable to both symbol and carrier recovery loops. – Dan Boschen May 9 '19 at 1:14
• Thanks for the nice article @DanBoschen. From what I understand, loop bandwidth and damping factor are a nice way of specifying PLL coefficients. The problem I have with Michael Rice's structure is the lack of PLL loop filter. I have included a digram from one of Harris' theses. Which structure is correct? – Moses Browne Mwakyanjala May 9 '19 at 17:03
• I agree there should be a loop filter. Also the tanh and SNR scaling are rarely implemented in practice (to my understanding). The tanh function is reasonably approximated with a sign() or even better a limited signal: y= x for small x and y = sign(x) for large x. You can try out those options if you implement this to see the pros and cons. Also observe the similarity to the phase detector in this post dsp.stackexchange.com/questions/31497/… when you use sign(x) vs tanh – Dan Boschen May 10 '19 at 9:47