Hello,
I’m doing a block with two inputs (signal and noise) and one output.
Signal input block generates samples sometimes. For example:
2,3,-,-,4,-,-,-,5,1,1,-,4,55…
Noise block generates samples always. For example:
1,1,0,2,2,1,2,3,4,2…
I want to create a block that adds noise to the signal and generate
samples always:
Signal 2,3,-,-,4,-,-,-,5,1,1,-,4,55…
Noise 1,1,0,2,2,1,2,3,4,2,3,4,1,12…
Output 3,4,0,2,6,1,2,3,9,3,4,4,5,67…
I have written this code, what is the fail?
Thank you
#ifdef HAVE_CONFIG_H
#include “config.h”
#endif
#include <gnuradio/io_signature.h>
#include “add_noise_fff_impl.h”
namespace gr {
namespace howto {
add_noise_fff::sptr
add_noise_fff::make()
{
return gnuradio::get_initial_sptr
(new add_noise_fff_impl());
}
/*
* The private constructor
*/
add_noise_fff_impl::add_noise_fff_impl()
: gr::block("add_noise_fff",
gr::io_signature::make(2,2, sizeof(float)),
gr::io_signature::make(1,1, sizeof(float)))
{}
/*
* Our virtual destructor.
*/
add_noise_fff_impl::~add_noise_fff_impl()
{
}
void
add_noise_fff_impl::forecast (int noutput_items, gr_vector_int
&ninput_items_required)
{
ninput_items_required[1] = noutput_items;
//ninput_items_required[0] = 0;
}
int
add_noise_fff_impl::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];
const float *in_noise = (const float *) input_items[1];
float *out = (float *) output_items[0];
int j=0;
int i=0;
for(;i<noutput_items;++i){
if(i<ninput_items[0]){
++j;
out[i]=in[i]+in_noise[i];
}
else
out[i]=in_noise[i];
}
//consume the inputs
this->consume(0, j); //consume port 0 input
this->consume(1, i); //consume port 1 input
// Tell runtime system how many output items we produced.
return noutput_items;
}
} /* namespace howto /
} / namespace gr */
#ifndef INCLUDED_HOWTO_ADD_NOISE_FFF_IMPL_H
#define INCLUDED_HOWTO_ADD_NOISE_FFF_IMPL_H
#include <howto/add_noise_fff.h>
namespace gr {
namespace howto {
class add_noise_fff_impl : public add_noise_fff
{
private:
// Nothing to declare in this block.
public:
add_noise_fff_impl();
~add_noise_fff_impl();
// Where all the action really happens
void forecast (int noutput_items, gr_vector_int
&ninput_items_required);
int general_work(int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
};
} // namespace howto
} // namespace gr
#endif /* INCLUDED_HOWTO_ADD_NOISE_FFF_IMPL_H */