Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GNU无线电:如何定义;获取“*”;方法在水槽块内 我想用C++的GNU无线电1个输入端口和0个输出端口来编写自己的汇流块。我阅读并遵循此处描述的步骤:_C++_Eclipse_Ubuntu_Block_Gnuradio - Fatal编程技术网

GNU无线电:如何定义;获取“*”;方法在水槽块内 我想用C++的GNU无线电1个输入端口和0个输出端口来编写自己的汇流块。我阅读并遵循此处描述的步骤:

GNU无线电:如何定义;获取“*”;方法在水槽块内 我想用C++的GNU无线电1个输入端口和0个输出端口来编写自己的汇流块。我阅读并遵循此处描述的步骤:,c++,eclipse,ubuntu,block,gnuradio,C++,Eclipse,Ubuntu,Block,Gnuradio,我正在使用 Ubuntu 14.04.3 LTS Eclipse 4.5.1 CDT 8.8.0.201509131935 GNU无线电3.7.8 使用gr_modtool,我创建了新模块“jammertrap”。在它里面,我创建了块“bandpower”。这创建了三个文件 bandpower.h内部/home/sdr/gnuradio/gr jammertrap/include/jammertrap/ bandpower_impl.h in/home/sdr/gnuradio/gr ja

我正在使用

  • Ubuntu 14.04.3 LTS
  • Eclipse 4.5.1
  • CDT 8.8.0.201509131935
  • GNU无线电3.7.8
使用gr_modtool,我创建了新模块“jammertrap”。在它里面,我创建了块“bandpower”。这创建了三个文件

  • bandpower.h内部/home/sdr/gnuradio/gr jammertrap/include/jammertrap/
  • bandpower_impl.h in/home/sdr/gnuradio/gr jammertrap/lib/
  • bandpower_impl.cc inside/home/sdr/gnuradio/gr jammertrap/lib/
bandpower.h:

#ifndef INCLUDED_JAMMERTRAP_BANDPOWER_H
#define INCLUDED_JAMMERTRAP_BANDPOWER_H

#include <jammertrap/api.h>
#include <gnuradio/block.h>

namespace gr
{
    namespace jammertrap
    {
        class JAMMERTRAP_API bandpower : virtual public gr::block
        {
            public:
                typedef boost::shared_ptr<bandpower> sptr;

                // Return a shared_ptr to a new instance of jammertrap::bandpower.
                // To avoid accidental use of raw pointers, jammertrap::bandpower's constructor is in a private implementation class.
                // jammertrap::bandpower::make is the public interface for creating new instances.
                static sptr make();
        };
    } // namespace jammertrap
} // namespace gr

#endif /* INCLUDED_JAMMERTRAP_BANDPOWER_H */
并用

osmosdr_source_ = osmosdr::source::make(std::string());
bandpower_measurement_ = gr::jammertrap::bandpower::make();
启动流程图后,我想通过调用get\u bandpower()读取计算出的bandpower,但Eclipse没有显示方法“bandpower\u measurement->get\u bandpower()


我忘记在bandpower.h、bandpower\u impl.h或bandpower\u impl.cc中写什么了?

正常OOT布局的公共API在
bandpower.h
中,因此您必须添加

virtual double get_bandpower() = 0;
在那个档案里

然后,像您一样,在
\u impl.cc
/
\u impl.h
中重载/实现它

顺便说一句,我稍微反对您实现背后的数学:因为
noutput_items
,即可用输入项的数量根据缓冲区填充/运行时行为而变化,您的“平均长度”不是常数,这意味着如果流图运行快,您的缓冲区通常会满,你的平均长度很高,而在“涓涓细流”的情况下,长度会小得多(在极端情况下,最短为
noutput\u items==1
)。因此,功率估计器的方差将取决于计算方面

这不是一件好事。更好的方法是使用恒定数量的平均项目。在您的情况下,您可以使用
set\u output\u multiple
(因为接收器也是一个同步块,这也会影响输入倍数),以确保始终获得固定数字的倍数

除此之外,已经有一些块可以做你想做的事情:

  • 探头平均磁极:有一个方法
    level()
    ,该方法与您的
    获取功率
    (除了√())
  • 复杂到Mag抽取FIR滤波器探头信号:是否√(Re²+Im²),然后将其传递给具有123个(这只是我的任意固定长度)1/长度的抽头的过滤器,并将其每平均抽取一个值。结果get发送到信号探测器,它有一个
    Signal()
    方法,该方法执行
    get\u bandpower
    的操作。这方面的CPU负载相对较小——它实际上只是每个样本的大小查找,然后每123个样本123个实乘法+123个实加法,在滤波器中,所有SIMD都增加了,所以基本上,每个样本少于1个FMAC
  • 复杂到Mag移动平均线探测信号:名称说明一切。这里没有什么神奇的
osmosdr::source:sptr osmosdr_source_;
gr::jammertrap::bandpower::sptr bandpower_measurement_;
osmosdr_source_ = osmosdr::source::make(std::string());
bandpower_measurement_ = gr::jammertrap::bandpower::make();
virtual double get_bandpower() = 0;