PLL error term related and limiting it to {-1, 1}

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

On Fri, Nov 25, 2011 at 3:57 AM, Marcus M [email protected] wrote:

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs