Imported Upstream version 3.2.2
[debian/gnuradio] / gnuradio-core / src / lib / general / gr_probe_density_b.cc
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2008 Free Software Foundation, Inc.
4  * 
5  * GNU Radio is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3, or (at your option)
8  * any later version.
9  * 
10  * GNU Radio is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  * 
15  * You should have received a copy of the GNU General Public License
16  * along with GNU Radio; see the file COPYING.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #ifdef HAVE_CONFIG_H
22 #include <config.h>
23 #endif
24
25 #include <gr_probe_density_b.h>
26 #include <gr_io_signature.h>
27 #include <stdexcept>
28 #include <iostream>
29
30 gr_probe_density_b_sptr 
31 gr_make_probe_density_b(double alpha)
32 {
33   return gr_probe_density_b_sptr(new gr_probe_density_b(alpha));
34 }
35
36 gr_probe_density_b::gr_probe_density_b(double alpha)
37   : gr_sync_block("density_b",
38                   gr_make_io_signature(1, 1, sizeof(char)),
39                   gr_make_io_signature(0, 0, 0))
40 {
41   set_alpha(alpha);
42   d_density = 1.0;
43 }
44
45 gr_probe_density_b::~gr_probe_density_b()
46 {
47 }
48
49 int 
50 gr_probe_density_b::work(int noutput_items,
51                          gr_vector_const_void_star &input_items,
52                          gr_vector_void_star &output_items)
53 {
54   const char *in = (const char *)input_items[0];
55
56   for (int i = 0; i < noutput_items; i++)
57     d_density = d_alpha*(double)in[i] + d_beta*d_density;
58
59   return noutput_items;
60 }
61
62 void
63 gr_probe_density_b::set_alpha(double alpha)
64 {
65   d_alpha = alpha;
66   d_beta = 1.0-d_alpha;
67 }
68