#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <howto_interp_gscrambler_cc.h>
#include <gr_io_signature.h>
#include <stdexcept>
#include <iostream>
howto_interp_gscrambler_cc_sptr howto_make_interp_gscrambler_cc (unsigned interpolation, int degree, int mask, int seed)
{
return howto_interp_gscrambler_cc_sptr (new howto_interp_gscrambler_cc (interpolation, degree, mask, seed));
}
howto_interp_gscrambler_cc::howto_interp_gscrambler_cc (unsigned interpolation, int degree, int mask, int seed)
: gr_sync_interpolator ("interp_fir_filter_ccf",
gr_make_io_signature (1, 1, sizeof (gr_complex)),
gr_make_io_signature (1, 1, sizeof (gr_complex)),
interpolation)
{
if (interpolation == 0)
throw std::out_of_range ("interpolation must be > 0");
d_len = (unsigned int)((1ULL << degree)-1);
if (mask == 0)
mask = gri_glfsr::glfsr_mask(degree);
d_reference = new gri_glfsr(mask, seed);
}
howto_interp_gscrambler_cc::~howto_interp_gscrambler_cc ()
{
delete d_reference;
}
int howto_interp_gscrambler_cc::work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
const gr_complex *in = (const gr_complex *) input_items[0];
gr_complex *out = (gr_complex *) output_items[0];
int ntaps = interpolation (); // as same as d_len
int ni = noutput_items / interpolation ();
for (int i = 0; i < ni; i++){
for (int nt = 0; nt < ntaps; nt++){
d_pn = 2.0*d_reference->next_bit()-1.0; // no conditionals
*out++ = *in * d_pn;
}
in++;
}
return noutput_items;
}
最終更新:2011年06月18日 02:54