3
* Copyright 2008 Free Software Foundation, Inc.
5
* This file is part of GNU Radio
7
* GNU Radio is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 3, or (at your option)
12
* GNU Radio is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
17
* You should have received a copy of the GNU General Public License
18
* along with GNU Radio; see the file COPYING. If not, write to
19
* the Free Software Foundation, Inc., 51 Franklin Street,
20
* Boston, MA 02110-1301, USA.
27
#include <gr_probe_mpsk_snr_c.h>
28
#include <gr_io_signature.h>
30
gr_probe_mpsk_snr_c_sptr
31
gr_make_probe_mpsk_snr_c(double alpha)
33
return gr_probe_mpsk_snr_c_sptr(new gr_probe_mpsk_snr_c(alpha));
36
gr_probe_mpsk_snr_c::gr_probe_mpsk_snr_c(double alpha)
37
: gr_sync_block ("probe_mpsk_snr_c",
38
gr_make_io_signature(1, 1, sizeof(gr_complex)),
39
gr_make_io_signature(0, 0, 0)),
46
gr_probe_mpsk_snr_c::~gr_probe_mpsk_snr_c()
51
gr_probe_mpsk_snr_c::work(int noutput_items,
52
gr_vector_const_void_star &input_items,
53
gr_vector_void_star &output_items)
55
const gr_complex *in = (const gr_complex *) input_items[0];
57
for (int i = 0; i < noutput_items; i++){
58
// Update of signal mean estimate
59
double mag = abs(in[i]);
60
d_signal_mean = d_alpha*abs(in[i]) + d_beta*d_signal_mean;
62
// Update noise variance estimate
63
double noise = mag-d_signal_mean;
64
double var = noise*noise;
65
d_noise_variance = d_alpha*var + d_beta*d_noise_variance;
72
gr_probe_mpsk_snr_c::snr() const
74
if (d_noise_variance == 0.0)
77
return 10*log10(d_signal_mean*d_signal_mean/d_noise_variance);
81
gr_probe_mpsk_snr_c::set_alpha(double alpha)