1

我正在尝试使用 gr_modtool.py 在 gnuradio 中创建一个新的 DSP 块。gnuradio 版本是 3.3.0。我在包含文件夹的 abc.h 文件中有以下代码

 ifndef INCLUDED_ENERGYDETECTOR_LOCAL_SENSING_FF_H
 #define INCLUDED_ENERGYDETECTOR_LOCAL_SENSING_FF_H
 #include <gr_block.h>

 namespace gr {
   namespace energydetector {
 class ENERGYDETECTOR_API local_sensing_ff : virtual public gr_block
 {
  private:

  public:
    typedef boost::shared_ptr<local_sensing_ff> sptr;
    float d_pfa; int d_L; int d_samples;    
    static sptr make(float pfa=0.01,int L=16,int samples=1000);
    virtual void set_pfa(float input_a) { d_pfa = input_a; }  
    virtual int get_pfa() { return d_pfa; } 
    virtual void set_L(int input_b) { d_L = input_b; }  
    virtual int get_L() { return d_L; } 
    virtual void set_samples(int input_c) { d_samples = input_c; }  
   virtual int get_samples() { return d_samples; } 
     };
    } // namespace energydetector
  } // namespace gr
  #endif /* INCLUDED_ENERGYDETECTOR_LOCAL_SENSING_FF_H */

上述头文件的实现类如下:

 #ifndef INCLUDED_ENERGY-DETECTOR_LOCAL_SENSING_FF_IMPL_H
 #define INCLUDED_ENERGY-DETECTOR_LOCAL_SENSING_FF_IMPL_H

 #include <energy-detector/local_sensing_ff.h>

 namespace gr {
  namespace energydetector {
   class local_sensing_ff_impl : public local_sensing_ff
   {
   private:
      float d_pfa; int d_L; int d_samples;  
  public:
    local_sensing_ff_impl(float pfa,int L,int samples);
    ~local_sensing_ff_impl();
    void set_pfa(float input_a) { d_pfa = input_a; }  
    int get_pfa() { return d_pfa; } 
    void set_L(int input_b) { d_L = input_b; }  
    int get_L() { return d_L; } 
    void set_samples(int input_c) { d_samples = input_c; } 
    int get_samples() { return d_samples; }
        int general_work(int noutput_items,
           gr_vector_int &ninput_items,
           gr_vector_const_void_star &input_items,
           gr_vector_void_star &output_items);
   };
  } // namespace energy-detector
 } // namespace gr
#endif /* INCLUDED_ENERGY-DETECTOR_LOCAL_SENSING_FF_IMPL_H */

SWIG 文件是 abc.i

 #define ENERGY_DETECTOR_API
 %include "gnuradio.i"          // the common stuff
 %include "energydetector_swig_doc.i"
 %{
    #include "energydetector/local_sensing_ff.h"
  %}

  %include "energydetector/local_sensing_ff.h"
  GR_SWIG_BLOCK_MAGIC2(energydetector, local_sensing_ff);

它构建成功,但在执行时出现以下错误:

def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
AttributeError: No constructor defined

请帮我调试一下。

4

3 回答 3

0

最后我知道这是由于版本不支持。gr_modtool.py 仅受 GNURadio 3.6 或更高版本支持。

虽然我们可以构建块并在 GRC 中使用它,但不知道为什么它不能工作。一定是 gr_modtool.py 生成的代码结构不适用于 3.3.0 版本

所以任何来这个问题的人都要确保你有 GNURadio 3.6 及更高版本。但是,如果有人通过修改 gr_modtool.py 或任何代码解决了这个问题,那么请在这个问题中告诉我们。

于 2013-08-09T17:29:03.590 回答
0

当我从我的代码中删除“from gnuradio.gr import *”时,这个问题就消失了

于 2017-06-22T23:49:03.433 回答
-1

SWIG 不会为没有公共构造函数或抽象的类生成构造函数。

http://www.swig.org/Doc1.3/SWIGPlus.html#SWIGPlus_nn9

于 2014-07-25T22:01:30.353 回答