I am trying to use gnuradio channel_model to do some simulation right
now, and I found something is not consistent in the implementation of
the channel_model C++ code. Here is my confusion:
In gnuradio-core/src/lib/hier/gr_channel_model.cc : line 57
d_timing_offset = gr_make_fractional_interpolator_cc(0.0, epsilon);
defines the timing offset filter as a fractional interpolator.
In ./gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.cc or
we can see that the constructor’s first argument is
phase_shift' and the second arg is 'interp_ration'. From my point of view,interp_ration’ defines the number of input to output ratio, so if it is
less than 1.0, this filter gives more output items than what it is
input; And the `phase_shift’ defines the relative phase of the
However, timing offset should be a metric of phase shift based on symbol
timing T instead of `interpolation ratio’. In our software
implementation, M=Ts/T >=2, which means the interpolator can only model
timing offset at most 1/M, even so, line 57 of gr_channel_model.cc
d_timing_offset = gr_make_fractional_interpolator_cc(epsilon, 1.0);
And many other files using this channel model would then not need to
define its timing offset (like example_timing.py,
qa_constellation_receiver.py etc.) to be 1.0
to make things correct.
I wonder if everyone agrees with this, or I am wrong about this? Thanks.