Hello,
I’m trying to build several signal processing blocks for a project that
I’m
doing using USRP2. I was going through the examples and sample code
along
with browsing the source code and I can’t seem to find exactly what I
need.
I’m trying to do an average of a vector of length N:
Input vector size N
Output vector size 1
I’m doing it for floats.
#ifndef INCLUDED_CORES_WEIGHTED_AVG_FF_H
#define INCLUDED_CORES_WEIGHTED_AVG_FF_H
#include <gr_sync_block.h>
class cores_weighted_avg_ff;
typedef boost::shared_ptr<cores_weighted_avg_ff>
cores_weighted_avg_ff_sptr;
cores_weighted_avg_ff_sptr cores_make_weighted_avg_ff (unsigned int
vlen);
class cores_weighted_avg_ff : public gr_sync_block
{
private:
friend cores_weighted_avg_ff_sptr cores_make_weighted_avg_ff
(unsigned
int vlen);
cores_weighted_avg_ff (unsigned int vlen); // private constructor
unsigned int d_vlen;
public:
int general_work (int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
};
#endif
and source
#ifdef HAVE_CONFIG_H
#include “config.h”
#endif
#include <cores_weighted_avg_ff.h>
#include <gr_io_signature.h>
cores_weighted_avg_ff_sptr
cores_make_weighted_avg_ff (unsigned int vlen)
{ return cores_weighted_avg_ff_sptr (new cores_weighted_avg_ff
(vlen));}
cores_weighted_avg_ff::cores_weighted_avg_ff (unsigned int vlen)
: gr_decimator_block (“weighed_avg_ff”,
gr_make_io_signature (1, 1, sizeof (float) * vlen),
gr_make_io_signature (1, 1, sizeof (float))),
d_vlen(vlen)
{
}
int
cores_weighted_avg_ff::int general_work (int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
{
const float *in = (const float *) input_items[0];
float *out = (float *) output_items[0];
int noi = noutput_items * d_vlen;
for (int i = 0; i < noi; i++){
out += in[i]*i;
}
out /= d_vlen;
consume(noutput_items,d_vlen)
return noutput_items;
}
I’m not sure if the code is correct what I want to do (input is more
than
welcome), when I compile this code I get a weird error:
cores_weighted_avg_ff.h: In function ‘PyObject*
_wrap_weighted_avg_ff(PyObject*, PyObject*)’:
cores_weighted_avg_ff.h:63: error: too few arguments to function
‘cores_weighted_avg_ff_sptr cores_make_weighted_avg_ff(unsigned int)’
cores.cc:4326: error: at this point in file
make[4]: *** [cores.lo] Error 1
Any help would be greatly appreciated.