Rich,
 If you look in gr-filter/lib/fir_filter.cc you'll see all the filter
kernel implementations. Since it looks like you're only interested in
floats (and therefore, I assume real - not complex - signals and taps), if
you look at fir_filter_fff::filter(const float input[]) you can see that it
really is just a wrapper for the volk_32f_x2_dot_prod_32f kernel from VOLK.
Note that this call is the inner kernel, which gets called either by
filterN (for the non-decimating case) or filterNdec (for the decimating
case) inside the work(...) function by the corresponding block (i.e.
fir_filter_fff_impl.cc for the all-floats case). If you are interested in
complex signals/taps, fir_filter.cc has all the other variants as well, but
you'll notice that pretty much all the filter(...) calls are just wrappers
for VOLK functions (e.g. volk_32fc_x2_dot_prod_32fc for the all complex
float case). All the rest of the code relating to the FIR filters has to do
with setup and things like updating taps, so if all you need is a simple
dot product function for implementing your own FIR filter, I highly
recommend looking through the VOLK documentation. Note that if you have
lots of taps, it becomes desirable at some point to move into the Fourier
domain, and do a simple element-wise multiply rather than a time domain
convolution. I'll leave walking through fft_filter.cc as an exercise for
the reader...

 Regards,
  Doug

On Mon, Sep 14, 2015 at 1:24 AM, Richard Bell <richard.be...@gmail.com>
wrote:

> Hi all,
>
> I'm not sure how to implement a simple FIR filter within C++ code that
> does not act directly on the OOT blocks input array. I would appreciate it
> if someone would demonstrate a simple example of how to use fir_filter_fff
> assuming the following:
>
> float[N] my_input_array = {N float values};   <---- This is not the OOT
> modules input port array
> float[M] taps = {my taps};
> float[N+M-1] my_output_array = {N+M-1 float values}; <---- This is not the
> OOT modules output port
>
> What is the code that will convolve my_input_array with taps and store it
> in my_output_array using gnuradio builtins? I've tried this myself but
> can't get it to work. I'm not interested in writing my own convolution code
> when gnuradio has optimized implementations.
>
> Thanks,
> Rich
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>


-- 
Doug Geiger
doug.gei...@bioradiation.net
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to