phase_difference(Nc+1) = rx_symbols(Nc+1) * conj(prev_rx_symbols(Nc+1)) * norm;
if (real(phase_difference(Nc+1)) < 0)
sync_bit = 1;
- f_err = imag(phase_difference(Nc+1));
+ f_err = imag(phase_difference(Nc+1))*norm; % make f_err magnitude insensitive
else
sync_bit = 0;
- f_err = -imag(phase_difference(Nc+1));
+ f_err = -imag(phase_difference(Nc+1))*norm;
end
% extra pi/4 rotation as we need for snr_update and scatter diagram
\*---------------------------------------------------------------------------*/
/*
-TODO:
- [ ] windback phase at init time, incl cconj
+ TODO: [ ] windback phase calculated once at init time
*/
void down_convert_and_rx_filter(COMP rx_filt[NC+1][P+1], int Nc, COMP rx_fdm[],
phase_difference[Nc] = cmult(rx_symbols[Nc], fcmult(norm, cconj(prev_rx_symbols[Nc])));
if (phase_difference[Nc].real < 0) {
*sync_bit = 1;
- ferr = phase_difference[Nc].imag;
+ ferr = phase_difference[Nc].imag*norm; /* make f_err magnitude insensitive */
}
else {
*sync_bit = 0;
- ferr = -phase_difference[Nc].imag;
+ ferr = -phase_difference[Nc].imag*norm;
}
/* pilot carrier gets an extra pi/4 rotation to make it consistent