On Fri, Nov 25, 2011 at 3:57 AM, Marcus M <[email protected]> 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



>
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to