Hi All,
I found “ofdm_frame_equalizer_vcvc_impl.cc” use below code to correct
integral freq shift(IFO) in freq domain, but as I known, the IFO only
cause signal cyclic shifting in freq domain, why this block use gr_expj
to correcting IFO in freq domain? might be blow code should be done in
time domain.

// Correct the frequency shift on the symbols
gr_complex phase_correction;
for (int i = 0; i < frame_len; i++) {
phase_correction = gr_expj(-M_TWOPI * carrier_offset * d_cp_len

/ d_fft_len * (i+1));
for (int k = 0; k < d_fft_len; k++) {
out[i*d_fft_len+k] *= phase_correction;
}
}

this corrects the coarse freq offset propagation due to the CP.
As ‘i’ increments, this represents later times. So, in a sense, this is
in time direction.

Well, if all carriers are carrying data, then the signal parametrization
is
bad, so this is not really an issue. That would be like leaving out the
CP
and then complaining about ISI.

Hi Martin,
Thank you, I got it. Those code take charge correcting phase shift
caused by CP.
The real IFO correcting is done when copy IN buff to OUT buff.
Seems there is a minor issue, if all carriers were occupied by data, OUT
buff will lose some data, right?

// Copy the frame and the channel state vector
// such that the symbols are shifted to the correct

I found “ofdm_frame_equalizer_vcvc_impl.cc” use below code to correct
for (int k = 0; k < d_fft_len; k++) {
out[i*d_fft_len+k] *= phase_correction;
}
}

–
Thanks
Tiankun

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