Forum: GNU Radio Interpolation and filtering

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
74041d11ba2d5782a38692cdc55a181a?d=identicon&s=25 Ravi Trivedi (ravimani77)
on 2009-06-03 14:14
(Received via mailing list)
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?





2) 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
745d8202ef5a58c1058d0e5395a78f9c?d=identicon&s=25 Eric Blossom (Guest)
on 2009-06-05 04:23
(Received via mailing list)
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
This topic is locked and can not be replied to.