The "in" buffer should start at in[0] the history comes into play at allowing 
enough valid indices to perform the filtering operation over the entire buffer 
which allows N valid output data versus N-nTAPS.  When I looked at filtering in 
gnuradio the way I thought about it as and at the end I've included some ASCII 
art to demonstrate it, from the illustration you can see how the history comes 
into play.  I'm no DSP engineer but this seems to work for me someone can feel 
free to correct me if I'm wrong.


< adapted from gr_fir_fff_generic.cc>


for(i=0; i<n; i++)
  for(j=0; j< ntaps; j++)
    out[i] += taps[j] * input[i+j]



  0      1         2       3      4     5      6      7       8      9
hist0  hist1  hist2  hist3  in0   in1   in2   in3   in4   in5
tap3   tap2   tap1   tap0


  0      1         2       3      4     5      6      7       8      9
hist0  hist1  hist2  hist3  in0   in1   in2   in3   in4   in5
         tap3   tap2   tap1   tap0


  0      1         2       3      4     5      6      7       8      9
hist0  hist1  hist2  hist3  in0   in1   in2   in3   in4   in5
                  tap3   tap2   tap1  tap0
                          
  0      1         2       3      4     5      6      7       8      9
hist0  hist1  hist2  hist3  in0   in1    in2   in3   in4   in5
                           tap3  tap2  tap1  tap0
                                         
  0      1         2       3      4     5      6      7       8      9
hist0  hist1  hist2  hist3  in0   in1     in2   in3   in4   in5
                                    tap3  tap2  tap1  tap0
                                                        
  0      1         2       3      4     5      6      7       8      9
hist0  hist1  hist2  hist3  in0   in1   in2     in3   in4   in5
                                           tap3  tap2  tap1  tap0
                                                                  
  0      1         2       3      4     5      6      7       8      9
hist0  hist1  hist2  hist3  in0   in1   in2    in3    in4    in5
                                                   tap3  tap2  tap1  tap0





al fayez


-----Original Message-----
From: Josh Blum <j...@joshknows.com>
To: Discuss-gnuradio <Discuss-gnuradio@gnu.org>
Sent: Sun, Sep 25, 2011 6:59 pm
Subject: [Discuss-gnuradio] making gnuradio blocks entirely in python


So there is a useful feature I think gnuradio is missing, and thats the
ability to rapidly prototype signal processing in python. It would be
great if a python block would have access to all the facilities
available to a block written in a c++ environment.

So I put together pyblock (not to be confused with those other project
by the same name). Its a stand-alone build that links against gnuradio.
https://github.com/guruofquality/pyblock

Theres a few demos: an adder, using tags, interp and decim blocks.
https://github.com/guruofquality/pyblock/tree/master/examples

The interesting thing is that the work functions just call into numpy
routines, so there is a chance that the implementations can be
reasonably fast.

I would like to be able to support history so i can implement a filter
using numpy but I am a little lacking in the basic understanding so fill
me in if you know. Suppose I have this work function:

int work(int noutput_items, gr_vector_const_void_star
&input_items,gr_vector_void_star &output_items){
const float *in = reinterpret_cast<const float *>(input_items[0]);

I am assuming history is on the input buffer.
Is the vector "in" ninput_items + history() items long? Where
ninput_items = noutput_items*/some_factor.
Whats the first index of the first item? Is in[0] or in[0-history()]?

-Josh

_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

 
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to