Interpolation and filtering


#1

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


#2

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