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
- 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/
#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()
的操作。这方面的CPU负载相对较小——它实际上只是每个样本的大小查找,然后每123个样本123个实乘法+123个实加法,在滤波器中,所有SIMD都增加了,所以基本上,每个样本少于1个FMACget\u bandpower
- 复杂到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;