C++ GNU无线电值错误:无法强制终结点
我正在使用GNU Radio Companion构建我的OOT块来进行顺序能量检测。我已成功安装,但在流程图中运行时出现错误: ValueError:无法强制终结点 但在我再次连接流图后,它出现了另一个错误:C++ GNU无线电值错误:无法强制终结点,c++,gnuradio,C++,Gnuradio,我正在使用GNU Radio Companion构建我的OOT块来进行顺序能量检测。我已成功安装,但在流程图中运行时出现错误: ValueError:无法强制终结点 但在我再次连接流图后,它出现了另一个错误: Using Volk machine: avx_64_mmx_orc Traceback (most recent call last): File "/home/mint/Documents/test_sensor/energy_de/seq_energy.py", line 9
Using Volk machine: avx_64_mmx_orc
Traceback (most recent call last):
File "/home/mint/Documents/test_sensor/energy_de/seq_energy.py", line 92, in <module>
tb = seq_energy()
File "/home/mint/Documents/test_sensor/energy_de/seq_energy.py", line 62, in __init__
self.sensing_seq_energy_0 = sensing.seq_energy(256, 20, 0.01, 0.1, 0.084)
AttributeError: 'module' object has no attribute 'seq_energy'
我创建了包含四个文件的块“seq_energy”:
1.seq_energy.h
#ifndef INCLUDED_SENSING_SEQ_ENERGY_H
#define INCLUDED_SENSING_SEQ_ENERGY_H
#include <sensing/api.h>
#include <gnuradio/sync_block.h>
namespace gr {
namespace sensing {
/*!
* \brief <+description of block+>
* \ingroup sensing
*
*/
class SENSING_API seq_energy : virtual public gr::sync_block
{
public:
typedef boost::shared_ptr<seq_energy> sptr;
/*!
* \brief Return a shared_ptr to a new instance of sensing::seq_energy.
*
* To avoid accidental use of raw pointers, sensing::seq_energy's
* constructor is in a private implementation
* class. sensing::seq_energy::make is the public interface for
* creating new instances.
*/
static sptr make(size_t number, int slots,float beta,float alpha, float noise);
virtual float beta() const = 0;
virtual void set_beta(float beta) = 0;
virtual float alpha() const = 0;
virtual void set_alpha(float alpha) = 0;
virtual float noise() const = 0;
virtual void set_noise(float noise) = 0;
};
} // namespace sensing
} // namespace gr
#如果NDEF包含(传感)顺序(能量)
#定义包含的传感顺序能量
#包括
#包括
命名空间gr{
名称空间感测{
/*!
*\简短
*\n组感测
*
*/
类感应API序列能量:虚拟公共gr::同步块
{
公众:
typedef boost::共享\u ptr sptr;
/*!
*\将共享的ptr返回到sensing::seq_energy的新实例。
*
*为避免意外使用原始指针,sensing::seq_energy's
*构造函数位于私有实现中
*class.sensing::seq_energy::make是的公共接口
*创建新实例。
*/
静态sptr制造(大小/数量、整数槽、浮点β、浮点α、浮点噪声);
虚拟浮点beta()常量=0;
虚拟空穴集_β(浮动β)=0;
虚拟浮点alpha()常量=0;
虚空集_alpha(浮点alpha)=0;
虚拟浮点噪声()常数=0;
虚拟空穴集_噪声(浮动噪声)=0;
};
}//名称空间感测
}//名称空间gr
2.以下能源项目
#ifndef INCLUDED_SENSING_SEQ_ENERGY_IMPL_H
#define INCLUDED_SENSING_SEQ_ENERGY_IMPL_H
#include <sensing/seq_energy.h>
namespace gr {
namespace sensing {
class seq_energy_impl : public seq_energy
{
private:
size_t d_number;
int d_slots;
float d_beta, d_alpha, d_noise;
public:
seq_energy_impl(size_t number, int slots,float beta,float alpha, float noise);
~seq_energy_impl();
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
float beta() const { return d_beta; }
void set_beta(float beta) { d_beta = beta; }
float alpha() const { return d_alpha; }
void set_alpha(float alpha) { d_alpha = alpha; }
float noise() const { return d_noise; }
void set_noise(float noise) { d_noise = noise; }
// Where all the action really happens
int work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
};
} // namespace sensing
} // namespace gr
#如果NDEF包含(感测)顺序(能量)(实施)
#定义包含的传感顺序能量实施
#包括
命名空间gr{
名称空间感测{
分类顺序能源实施:公共顺序能源
{
私人:
尺寸和数量;
int d_插槽;
浮动d_β、d_α、d_噪声;
公众:
seq_energy_impl(大小编号、整数插槽、浮点beta、浮点alpha、浮点噪声);
~seq_energy_impl();
无效预测(需要输入零输出项、输入向量项和输入项);
float beta()常量{return d_beta;}
空集_β(浮点β){d_β=beta;}
float alpha()常量{return d_alpha;}
空集_alpha(float alpha){d_alpha=alpha;}
float noise()常量{return d_noise;}
void set_noise(float noise){d_noise=noise;}
//所有动作都发生在哪里
整件工作(整件零件),
gr\u矢量\u常数\u无效\u星型和输入\u项,
gr_矢量_无效_星和输出_项);
};
}//名称空间感测
}//名称空间gr
3.seq_energy_impl.cc
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <gnuradio/io_signature.h>
#include "seq_energy_impl.h"
namespace gr {
namespace sensing {
seq_energy::sptr
seq_energy::make(size_t number, int slots,float beta,float alpha, float noise)
{
return gnuradio::get_initial_sptr
(new seq_energy_impl(number, slots, beta, alpha, noise));
}
/*
* The private constructor
*/
seq_energy_impl::seq_energy_impl(size_t number, int slots,float beta,float alpha, float noise)
: gr::sync_block("seq_energy",
gr::io_signature::make(1, 1, number*sizeof(float)),
gr::io_signature::make(1, 1, sizeof(float))),
d_number(number),d_slots(slots),d_beta(beta),d_alpha(alpha),d_noise(noise)
{}
/*
* Our virtual destructor.
*/
seq_energy_impl::~seq_energy_impl()
{
}
int
seq_energy_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
const float *in = (const float *) input_items[0];
float *out = (float *) output_items[0];
for(int i = 0; i < noutput_items; i++){
float sum[i];
for(int j = 0; j < (int)d_number;j++){
sum[i] += in[i*d_number];
}
if(sum[i] > d_alpha){
out[i] =1.0;
}
else if(sum[i] < d_beta){
out[i] = 0.0;
}
else if(sum[i] > d_noise){
out[i] = 1.0;
}
else{
out[i] = 0.0;
}
}
return noutput_items;
}
} /* namespace sensing */
} /* namespace gr */
#如果定义有配置#
#包括“config.h”
#恩迪夫
#包括
#包括“seq_energy_impl.h”
命名空间gr{
名称空间感测{
seq_energy::sptr
seq_energy::make(大小、整数槽、浮点beta、浮点alpha、浮点噪声)
{
返回gnuradio::get_initial_sptr
(新的seq_energy_impl(数量、时隙、β、α、噪声));
}
/*
*私有构造函数
*/
seq_energy_impl::seq_energy_impl(大小、整数槽、浮点beta、浮点alpha、浮点噪声)
:gr::sync_块(“seq_energy”,
gr::io_签名::make(1,1,number*sizeof(float)),
gr::io_签名::make(1,1,sizeof(float)),
d_编号(编号)、d_插槽(插槽)、d_β(β)、d_α(α)、d_噪声(噪声)
{}
/*
*我们的虚拟析构函数。
*/
seq_energy_impl::~seq_energy_impl()
{
}
int
seq_energy_impl::work(整数零输出项,
gr\u矢量\u常数\u无效\u星型和输入\u项,
gr_矢量_无效_星和输出_项)
{
常量浮点*in=(常量浮点*)输入_项[0];
浮点*输出=(浮点*)输出_项[0];
对于(int i=0;id_α){
out[i]=1.0;
}
else if(总和[i]d_噪声){
out[i]=1.0;
}
否则{
out[i]=0.0;
}
}
退货零配件;
}
}/*名称空间感测*/
}/*名称空间gr*/
4.enery_impl.xml
<?xml version="1.0"?>
<block>
<name>seq_energy</name>
<key>sensing_seq_energy</key>
<category>sensing</category>
<import>import sensing</import>
<make>sensing.seq_energy($number, $slots, $beta, $alpha, $noise)</make>
<callback>set_beta($beta)</callback>
<callback>set_alpha($alpha)</callback>
<callback>set_noise($noise)</callback>
<param>
<name>Number of samples</name>
<key>number</key>
<type>int</type>
</param>
<param>
<name>Maximum sensing slots</name>
<key>slots</key>
<type>int</type>
</param>
<param>
<name>Beta threshold</name>
<key>beta</key>
<type>float</type>
</param>
<param>
<name>Alpha threshold</name>
<key>alpha</key>
<type>float</type>
</param>
<param>
<name>Estimated noise power</name>
<key>noise</key>
<type>float</type>
</param>
<sink>
<name>in</name>
<type>float</type>
</sink>
<source>
<name>out</name>
<type>float</type>
</source>
</block>
seq_能源公司
感应能量
传感
进口感应
传感。seq_能量($number、$slots、$beta、$alpha、$noise)
set_beta($beta)
set_alpha($alpha)
设置噪音($noise)
样本数量
数
int
最大感测槽
槽
int
贝塔阈值
贝塔
浮动
阿尔法阈值
阿尔法
浮动
估计噪声功率
噪音
浮动
在里面
浮动
出来
浮动
此外,我想知道
- 是否需要在impl.h文件中添加此部件: float beta()常量{return d_beta;} 空集_β(浮点β){d_β=beta;} 为什么我们需要添加此部分?只是因为beta是一个私有变量,我们需要在impl.cc文件中使用它
- int和size\u t之间有什么区别吗?我可以把“大小号”改为“整数号”吗
看看您生成的(Python)代码。在抛出值错误的那一行,您应该处于
connect
调用。检查你在那里连接的东西:你真的连接对了吗?我很困惑。你的问题标题与实际问题有所不同。现在是“无法强制端点”还是“AttributeError”?很抱歉,是“无法强制端点”。还要添加ValueError发生的行;Python应该告诉您这是哪一行,以及一些周围的代码
<?xml version="1.0"?>
<block>
<name>seq_energy</name>
<key>sensing_seq_energy</key>
<category>sensing</category>
<import>import sensing</import>
<make>sensing.seq_energy($number, $slots, $beta, $alpha, $noise)</make>
<callback>set_beta($beta)</callback>
<callback>set_alpha($alpha)</callback>
<callback>set_noise($noise)</callback>
<param>
<name>Number of samples</name>
<key>number</key>
<type>int</type>
</param>
<param>
<name>Maximum sensing slots</name>
<key>slots</key>
<type>int</type>
</param>
<param>
<name>Beta threshold</name>
<key>beta</key>
<type>float</type>
</param>
<param>
<name>Alpha threshold</name>
<key>alpha</key>
<type>float</type>
</param>
<param>
<name>Estimated noise power</name>
<key>noise</key>
<type>float</type>
</param>
<sink>
<name>in</name>
<type>float</type>
</sink>
<source>
<name>out</name>
<type>float</type>
</source>
</block>