Gr_pll_carriertracking for atsc_fpll

Is gr.pll_carriertracking_cc a suitable replacement for atsc_fpll? The
atsc one appears to have a loop filter that the carriertracking one does
not:

atsc_fpll:

float input = agc.scale (in[k]);

nco.step ();                // increment phase
nco.sincos (&a_sin, &a_cos);  // compute cos and sin

float I = input * a_sin;
float Q = input * a_cos;

out[k] = I;

float filtered_I = afci.filter (I);
float filtered_Q = afcq.filter (Q);

// phase detector

float x = atan2 (filtered_Q, filtered_I);

nco.adjust_phase (alpha * x);
nco.adjust_freq (beta * x);

pll_carriertracking:

error = phase_detector(iptr[i],d_phase);

d_freq = d_freq + d_beta * error;
d_phase = mod_2pi(d_phase + d_freq + d_alpha * error);

gr_sincosf(d_phase,&t_imag,&t_real);
optr[i] = iptr[i] * gr_complex(t_real,-t_imag);

If we can use a complex pll it would eleminate one upconverter and lower
some sampling rates. It kinda works with lots of errors - comparison of
their output here: Comparing atsc_fpll and gr_pll_carriertracking

–Chuck