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 position
if (carrier_offset < 0) {
memset((void *) out, 0x00, sizeof(gr_complex) *
(-carrier_offset));<===1
memcpy(
(void *) &out[-carrier_offset], (void *) in,
sizeof(gr_complex) * (d_fft_len * frame_len +
carrier_offset)
);
} else {
memset((void *) (out + d_fft_len * frame_len -
carrier_offset), <====2
0x00, sizeof(gr_complex) * carrier_offset);
memcpy(
(void *) out, (void *) (in+carrier_offset),
sizeof(gr_complex) * (d_fft_len * frame_len -
carrier_offset)
);
}
在 2014年09月02日 23:37, Martin Braun 写道:
Tiankan,
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.
M
On 09/02/2014 04:14 PM, Tiankun Hu wrote:
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;
}
}
--
Thanks
Tiankun
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio