⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gr_bin_statistics_f.cc

📁 这是用python语言写的一个数字广播的信号处理工具包。利用它
💻 CC
字号:
/* -*- c++ -*- *//* * Copyright 2006 Free Software Foundation, Inc. *  * This file is part of GNU Radio *  * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. *  * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING.  If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <gr_bin_statistics_f.h>#include <gr_io_signature.h>#include <string.h>gr_bin_statistics_f_sptrgr_make_bin_statistics_f(unsigned int vlen,			gr_msg_queue_sptr msgq,			gr_feval_dd *tune,			size_t tune_delay,			size_t dwell_delay){  return gr_bin_statistics_f_sptr(new gr_bin_statistics_f(vlen,							  msgq,							  tune,							  tune_delay,							  dwell_delay));}gr_bin_statistics_f::gr_bin_statistics_f(unsigned int vlen,					 gr_msg_queue_sptr msgq,					 gr_feval_dd *tune,					 size_t tune_delay,					 size_t dwell_delay)  : gr_sync_block("bin_statistics_f",		  gr_make_io_signature(1, 1, sizeof(float) * vlen),		  gr_make_io_signature(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();}gr_bin_statistics_f::~gr_bin_statistics_f(){  // NOP}voidgr_bin_statistics_f::enter_init(){  d_state = ST_INIT;  d_delay = 0;}voidgr_bin_statistics_f::enter_tune_delay(){  d_state = ST_TUNE_DELAY;  d_delay = d_tune_delay;  d_center_freq = d_tune->calleval(0);}voidgr_bin_statistics_f::enter_dwell_delay(){  d_state = ST_DWELL_DELAY;  d_delay = d_dwell_delay;  reset_stats();}voidgr_bin_statistics_f::leave_dwell_delay(){  send_stats();}intgr_bin_statistics_f::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;      assert(d_delay >= 0);      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;      assert(d_delay >= 0);      if (d_delay == 0){	leave_dwell_delay();	enter_tune_delay();      }      break;    default:      assert(0);    }  }  return noutput_items;}////////////////////////////////////////////////////////////////////////////           virtual methods for gathering stats//////////////////////////////////////////////////////////////////////////voidgr_bin_statistics_f::reset_stats(){  for (size_t i = 0; i < vlen(); i++){    d_max[i] = 0;  }}voidgr_bin_statistics_f::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  }}voidgr_bin_statistics_f::send_stats(){  if (msgq()->full_p())		// if the queue is full, don't block, drop the data...    return;  // build & send a message  gr_message_sptr msg = gr_make_message(0, center_freq(), vlen(), vlen() * sizeof(float));  memcpy(msg->msg(), &d_max[0], vlen() * sizeof(float));  msgq()->insert_tail(msg);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -