Statistics
| Branch: | Tag: | Revision:

root / gnuradio-core / src / lib / general / gr_constellation_decoder2_cb.cc @ 233621d6

History | View | Annotate | Download (2.3 kB)

1 0c7d7678 Ben Reynwar
/* -*- c++ -*- */
2 0c7d7678 Ben Reynwar
/*
3 0c7d7678 Ben Reynwar
 * Copyright 2006, 2011 Free Software Foundation, Inc.
4 0c7d7678 Ben Reynwar
 * 
5 0c7d7678 Ben Reynwar
 * This file is part of GNU Radio
6 0c7d7678 Ben Reynwar
 * 
7 0c7d7678 Ben Reynwar
 * GNU Radio is free software; you can redistribute it and/or modify
8 0c7d7678 Ben Reynwar
 * it under the terms of the GNU General Public License as published by
9 0c7d7678 Ben Reynwar
 * the Free Software Foundation; either version 3, or (at your option)
10 0c7d7678 Ben Reynwar
 * any later version.
11 0c7d7678 Ben Reynwar
 * 
12 0c7d7678 Ben Reynwar
 * GNU Radio is distributed in the hope that it will be useful,
13 0c7d7678 Ben Reynwar
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 0c7d7678 Ben Reynwar
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 0c7d7678 Ben Reynwar
 * GNU General Public License for more details.
16 0c7d7678 Ben Reynwar
 * 
17 0c7d7678 Ben Reynwar
 * You should have received a copy of the GNU General Public License
18 0c7d7678 Ben Reynwar
 * along with GNU Radio; see the file COPYING.  If not, write to
19 0c7d7678 Ben Reynwar
 * the Free Software Foundation, Inc., 51 Franklin Street,
20 0c7d7678 Ben Reynwar
 * Boston, MA 02110-1301, USA.
21 0c7d7678 Ben Reynwar
 */
22 0c7d7678 Ben Reynwar
23 0c7d7678 Ben Reynwar
#ifdef HAVE_CONFIG_H
24 0c7d7678 Ben Reynwar
#include "config.h"
25 0c7d7678 Ben Reynwar
#endif
26 0c7d7678 Ben Reynwar
27 0c7d7678 Ben Reynwar
#include <gr_constellation_decoder2_cb.h>
28 0c7d7678 Ben Reynwar
#include <gr_constellation.h>
29 0c7d7678 Ben Reynwar
#include <gr_io_signature.h>
30 38fe2e1b Ben Reynwar
#include <iostream>
31 0c7d7678 Ben Reynwar
32 0c7d7678 Ben Reynwar
gr_constellation_decoder2_cb_sptr
33 0c7d7678 Ben Reynwar
gr_make_constellation_decoder2_cb (gr_constellation_sptr constellation)
34 0c7d7678 Ben Reynwar
{
35 0c7d7678 Ben Reynwar
  return gr_constellation_decoder2_cb_sptr 
36 0c7d7678 Ben Reynwar
                (new gr_constellation_decoder2_cb(constellation));
37 0c7d7678 Ben Reynwar
}
38 0c7d7678 Ben Reynwar
39 0c7d7678 Ben Reynwar
gr_constellation_decoder2_cb::
40 0c7d7678 Ben Reynwar
gr_constellation_decoder2_cb (gr_constellation_sptr constellation)
41 38fe2e1b Ben Reynwar
  : gr_block ("constellation_decoder2_cb",
42 38fe2e1b Ben Reynwar
              gr_make_io_signature (1, 1, sizeof (gr_complex)),
43 38fe2e1b Ben Reynwar
              gr_make_io_signature (1, 1, sizeof (unsigned char))),
44 38fe2e1b Ben Reynwar
    d_constellation(constellation),
45 38fe2e1b Ben Reynwar
    d_dim(constellation->dimensionality())
46 0c7d7678 Ben Reynwar
{
47 38fe2e1b Ben Reynwar
  set_relative_rate (1.0 / ((double) d_dim));
48 0c7d7678 Ben Reynwar
}
49 0c7d7678 Ben Reynwar
50 38fe2e1b Ben Reynwar
void
51 38fe2e1b Ben Reynwar
gr_constellation_decoder2_cb::forecast (int noutput_items,
52 38fe2e1b Ben Reynwar
                                        gr_vector_int &ninput_items_required)
53 38fe2e1b Ben Reynwar
{
54 38fe2e1b Ben Reynwar
  unsigned int input_required = noutput_items * d_dim;
55 38fe2e1b Ben Reynwar
56 38fe2e1b Ben Reynwar
  unsigned ninputs = ninput_items_required.size();
57 38fe2e1b Ben Reynwar
  for (unsigned int i = 0; i < ninputs; i++)
58 38fe2e1b Ben Reynwar
    ninput_items_required[i] = input_required;
59 38fe2e1b Ben Reynwar
}
60 0c7d7678 Ben Reynwar
61 0c7d7678 Ben Reynwar
62 0c7d7678 Ben Reynwar
int
63 38fe2e1b Ben Reynwar
gr_constellation_decoder2_cb::
64 38fe2e1b Ben Reynwar
general_work (int noutput_items,
65 38fe2e1b Ben Reynwar
              gr_vector_int &ninput_items,
66 38fe2e1b Ben Reynwar
              gr_vector_const_void_star &input_items,
67 38fe2e1b Ben Reynwar
              gr_vector_void_star &output_items)
68 0c7d7678 Ben Reynwar
{
69 0c7d7678 Ben Reynwar
  gr_complex const *in = (const gr_complex *) input_items[0];
70 0c7d7678 Ben Reynwar
  unsigned char *out = (unsigned char *) output_items[0];
71 38fe2e1b Ben Reynwar
72 0c7d7678 Ben Reynwar
  for(int i = 0; i < noutput_items; i++){
73 38fe2e1b Ben Reynwar
    out[i] = d_constellation->decision_maker(&(in[i*d_dim]));
74 0c7d7678 Ben Reynwar
  }
75 0c7d7678 Ben Reynwar
76 38fe2e1b Ben Reynwar
  consume_each (noutput_items * d_dim);
77 0c7d7678 Ben Reynwar
  return noutput_items;
78 0c7d7678 Ben Reynwar
}