Thanks Doug. I ended up implementing my own solution using a volk call. I 
hadn't realized the built in filters were wrappers for volk, thank you for 
pointing that out. Glad to know I did it in a gnuradio centric way. 
Rich

Sent from my iPhone

> On Sep 15, 2015, at 8:14 AM, Douglas Geiger <doug.gei...@bioradiation.net> 
> wrote:
> 
> 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