Interpolation and filtering

Hello all,

I have two interpolation and filtering related queries in
“gri_mmse_fir_interpolator_cc.cc”.

  1. In the code portion:

gri_mmse_fir_interpolator_cc::gri_mmse_fir_interpolator_cc ()

{

filters.resize (NSTEPS + 1);

for (int i = 0; i < NSTEPS + 1; i++){

std::vector<float> t (&taps[i][0],

&taps[i][NTAPS]);----------------------------------------(1)

filters[i] = gr_fir_util::create_gr_fir_ccf

(t);----------------------------------------------------(2)

}

}

Can you let me know what is performed in steps (1) and (2). In step (2),
filter is designed but I don’t understand the procedure behind the
design.
“Taps[][]” is a two dimensional array defined and provided values in
“interpolator_taps.h”. I don’t understand the step (1) of how the 2D
array
is used. Can anyone please provide their explanation involved in this
procedure?

  1. In the code portion:

gr_complex

gri_mmse_fir_interpolator_cc::interpolate (const gr_complex input[],
float
mu)

{

int imu = (int) rint (mu * NSTEPS);

assert (imu >= 0);

assert (imu <= NSTEPS);

gr_complex r = filters[imu]->filter
(input);------------------------------------------------------------------(1
)

return r;

}

What “filter” function is called in step (1)? How exactly is the
interpolation done and values returned using “filter”?

Thanks in advance.

Regards

Ravi

On Wed, Jun 03, 2009 at 05:42:48PM +0530, Ravishankar. M wrote:

{
filters[i] = gr_fir_util::create_gr_fir_ccf
(t);----------------------------------------------------(2)

}

}

Can you let me know what is performed in steps (1) and (2).

Step (1) initializes an STL vector of float using the values from
taps[i][0], …, taps[i][NTAPS-1]. See any C++ book and/or STL guide
for additional help.

In step (2),
filter is designed but I don’t understand the procedure behind the design.
“Taps[][]” is a two dimensional array defined and provided values in
“interpolator_taps.h”. I don’t understand the step (1) of how the 2D array
is used. Can anyone please provide their explanation involved in this
procedure?

Step(2) is not designing a filter, it is instantiating a filter that
uses the taps from vector t above.

The values of the taps comes from the “interpolator_taps.h” include
file. They were designed using the non-linear optimization code
contained in gnuradio-core/src/gen_interpolator_taps.
interpolator_taps.h contains the taps for NSTEPS filters, each of
which has NTAPS taps.

For more details on the technique, please see “Digital Communication
Receivers: Synchronization, Channel Estimation and Signal Processing”
by Meyr, Moeneclaey and Fechtel, pages 505 to 513.

Eric