Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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
C++ GNU无线电值错误:无法强制终结点_C++_Gnuradio - Fatal编程技术网

C++ GNU无线电值错误:无法强制终结点

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

我正在使用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 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>