there seems to be a bug in the costas loop. As far as I understand, in
case of
nonzero carrier offset, each incoming sample should be rotated with a
linear
increasing phasor (assuming a constant offset). This is done with the
following code:
void
gr_mpsk_receiver_cc::mm_sampler(symbol) {
d_phase += d_freq;
nco = gr_expj(d_phase+d_theta);
sample = nco*symbol;
}
This looks fine so far for me (although I dont understand why theta is
added
every time, and not once in the initialization of d_phase …), but
there is
also the following:
void
gr_mpsk_receiver_cc::phase_error_tracking(sample) {
…
d_phase += d_freq + d_alpha*phase_error;
…
}
So d_phase gets incremented by d_freq on every incoming sample, and once
every
symbol.
Any comments, is this actually a bug?
Stefan
–
Stefan Brüns / Bergstraße 21 / 52062 Aachen
mailto:lurch at gmx.li http://www.kawo1.rwth-aachen.de/~lurchi/
phone: +49 241 53809034 mobile: +49 151 50412019