On Fri, Nov 25, 2011 at 3:57 AM, Marcus M
<address@hidden> wrote:
Hi,
In the PLL/Costas algorithms why is the error term limited between {1,-1}? I understand the need for limiting but how was the value '1' chosen? In the following,
float
gr_costas_loop_cc::phase_detector_2(gr_complex sample) const
{
return (sample.real()*sample.imag());
}
the phase detector returns the product of the I and Q parts of the sample which means that the phase error detected is dependent upon the signal sample amplitude and if the amplitude of the signal is greater than 1, the returned error ought to be greater than 1 in most of the cases and limiting the error in such cases defeats the purpose. What am I missing here as this algorithm always seems to work?
Thanks
It's a bit of an unspoken rule that the signals into these blocks should be normalized (although they are fairly tolerant of signals > 1, but probably < 10). Any signal coming from a UHD source should be with the +/-1 range, unless it is manipulated strangely before that.
There is also the point here that the analysis of these loops really depends on a small-scale analysis of the phase difference, where you can approximate sin(theta) = theta. So returning large values doesn't actually make sense mathematically. Having said that, the actual implementations are also built such that even with large scale offsets, they are still monotonic and therefore point the error in the correct direction.
That explanation is a bit hand-wavy, but hopefully it makes some intuitive sense if you've study these kinds of control loops.
Thanks for the interesting question, though!
Tom