discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Discuss-gnuradio] Simple block with constant rate


From: caruiz.ext
Subject: [Discuss-gnuradio] Simple block with constant rate
Date: Wed, 25 Jun 2014 11:15:47 +0200
User-agent: Roundcube Webmail

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 */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]