diff options
Diffstat (limited to 'gr-blocks/lib/bin_statistics_f_impl.cc')
-rw-r--r-- | gr-blocks/lib/bin_statistics_f_impl.cc | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/gr-blocks/lib/bin_statistics_f_impl.cc b/gr-blocks/lib/bin_statistics_f_impl.cc deleted file mode 100644 index dca2f868a5..0000000000 --- a/gr-blocks/lib/bin_statistics_f_impl.cc +++ /dev/null @@ -1,152 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010,2013 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "bin_statistics_f_impl.h" -#include <gnuradio/io_signature.h> -#include <string.h> - -namespace gr { -namespace blocks { - -bin_statistics_f::sptr bin_statistics_f::make(unsigned int vlen, - msg_queue::sptr msgq, - feval_dd* tune, - size_t tune_delay, - size_t dwell_delay) -{ - return gnuradio::get_initial_sptr( - new bin_statistics_f_impl(vlen, msgq, tune, tune_delay, dwell_delay)); -} - -bin_statistics_f_impl::bin_statistics_f_impl(unsigned int vlen, - msg_queue::sptr msgq, - feval_dd* tune, - size_t tune_delay, - size_t dwell_delay) - : sync_block("bin_statistics_f", - io_signature::make(1, 1, sizeof(float) * vlen), - io_signature::make(0, 0, 0)), - d_vlen(vlen), - d_msgq(msgq), - d_tune(tune), - d_tune_delay(tune_delay), - d_dwell_delay(dwell_delay), - d_center_freq(0), - d_delay(0), - d_max(vlen) -{ - enter_init(); -} - -bin_statistics_f_impl::~bin_statistics_f_impl() {} - -void bin_statistics_f_impl::enter_init() -{ - d_state = ST_INIT; - d_delay = 0; -} - -void bin_statistics_f_impl::enter_tune_delay() -{ - d_state = ST_TUNE_DELAY; - d_delay = d_tune_delay; - d_center_freq = d_tune->calleval(0); -} - -void bin_statistics_f_impl::enter_dwell_delay() -{ - d_state = ST_DWELL_DELAY; - d_delay = d_dwell_delay; - reset_stats(); -} - -void bin_statistics_f_impl::leave_dwell_delay() { send_stats(); } - -int bin_statistics_f_impl::work(int noutput_items, - gr_vector_const_void_star& input_items, - gr_vector_void_star& output_items) -{ - const float* input = (const float*)input_items[0]; - size_t vlen = d_max.size(); - - int n = 0; - int t; - - while (n < noutput_items) { - switch (d_state) { - - case ST_INIT: - enter_tune_delay(); - break; - - case ST_TUNE_DELAY: - t = std::min(noutput_items - n, int(d_delay)); - n += t; - d_delay -= t; - if (d_delay == 0) - enter_dwell_delay(); - break; - - case ST_DWELL_DELAY: - t = std::min(noutput_items - n, int(d_delay)); - for (int i = 0; i < t; i++) { - accrue_stats(&input[n * vlen]); - n++; - } - d_delay -= t; - if (d_delay == 0) { - leave_dwell_delay(); - enter_tune_delay(); - } - break; - - default: - assert(0); - } - } - - return noutput_items; -} - -////////////////////////////////////////////////////////////////////////// -// virtual methods for gathering stats -////////////////////////////////////////////////////////////////////////// - -void bin_statistics_f_impl::reset_stats() -{ - for (size_t i = 0; i < vlen(); i++) { - d_max[i] = 0; - } -} - -void bin_statistics_f_impl::accrue_stats(const float* input) -{ - for (size_t i = 0; i < vlen(); i++) { - d_max[i] = std::max(d_max[i], input[i]); // compute per bin maxima - } -} - -void bin_statistics_f_impl::send_stats() -{ - if (msgq()->full_p()) // if the queue is full, don't block, drop the data... - return; - - // build & send a message - message::sptr msg = message::make(0, center_freq(), vlen(), vlen() * sizeof(float)); - memcpy(msg->msg(), &d_max[0], vlen() * sizeof(float)); - msgq()->insert_tail(msg); -} - -} /* namespace blocks */ -} /* namespace gr */ |