The implementation header file is as below:

#ifndef INCLUDED_ACTIVECAT_FFT1_IMPL_H
#define INCLUDED_ACTIVECAT_FFT1_IMPL_H

#include <activecat/fft1.h>
#include <fftw3.h>

namespace gr {
  namespace activecat {

    class fft1_impl : public fft1
    {
     private:
       int d_N;
       int d_direction;
       int d_shift;

       fftw_complex *d_input;
       fftw_plan     d_plan;

     public:
        fft1_impl(int fft_size, int direction, bool fft_shift);
        ~fft1_impl();

        int work(
           int noutput_items,
           gr_vector_const_void_star &input_items,
           gr_vector_void_star &output_items);
    };

  } // namespace activecat
} // namespace gr

#endif /* INCLUDED_ACTIVECAT_FFT1_IMPL_H */



On Tue, Mar 4, 2014 at 1:55 PM, Activecat <active...@gmail.com> wrote:

> Dear Sir,
>
> I am trying to build a custom block with FFT capability.
> I use FFTW3, the FFT stuff runs well as a standalone program before
> integrating into gnuradio.
>
> Then I integrate the FFT function into the block, it compiles without any
> error.
> But when I run the flow graph in GRC, it produces following error message.
>
>         Generating: "/home/sgku/gnuradio/flow_graphs/top_block.py"
>         Executing: "/home/sgku/gnuradio/flow_graphs/top_block.py"
>         Traceback (most recent call last):
>           File "/home/sgku/gnuradio/flow_graphs/top_block.py", line 18, in
> <module>
>             import activecat
>           File
> "/usr/local/lib/python2.7/dist-packages/activecat/__init__.py", line 45, in
> <module>
>             from activecat_swig import *
>           File
> "/usr/local/lib/python2.7/dist-packages/activecat/activecat_swig.py", line
> 26, in <module>
>             _activecat_swig = swig_import_helper()
>           File
> "/usr/local/lib/python2.7/dist-packages/activecat/activecat_swig.py", line
> 22, in swig_import_helper
>             _mod = imp.load_module('_activecat_swig', fp, pathname,
> description)
>         ImportError: /usr/local/lib/libgnuradio-activecat.so: undefined
> symbol: fftw_plan_dft_1d
>         >>> Done
>
>
> Below is the implmentation source file:
>
>
>     namespace gr {
>               namespace activecat {
>
>                 fft1::sptr
>                 fft1::make(int fft_size, int direction, bool fft_shift)
>                 {
>                   return gnuradio::get_initial_sptr
>                     (new fft1_impl(fft_size, direction, fft_shift));
>                 }
>
>                 // constructor
>                 fft1_impl::fft1_impl(int fft_size, int direction, bool
> fft_shift)
>                   : gr::sync_block("fft1",
>                           gr::io_signature::make( 1, 1,
> sizeof(gr_complex)),
>                           gr::io_signature::make( 1, 1,
> sizeof(gr_complex))),
>                       d_N(fft_size),
>                       d_direction(direction),
>                       d_shift(fft_shift)
>                 {
>                     d_input = (fftw_complex*) fftw_malloc(
> sizeof(fftw_complex) * d_N );
>                     d_plan  = fftw_plan_dft_1d( d_N, d_input, d_input,
> FFTW_BACKWARD, FFTW_ESTIMATE );  // later change FFTW_BACKWARD to
> d_direction
>
>                     set_output_multiple( d_N );
>                     set_min_noutput_items( d_N );
>                 }
>
>                 // destructor
>                 fft1_impl::~fft1_impl()
>                 { }
>
>                 int
>                 fft1_impl::work(
>                           int noutput_items,
>                           gr_vector_const_void_star &input_items,
>                           gr_vector_void_star &output_items)
>                 {
>                     const gr_complex  *in  =  (const gr_complex *)
> input_items[0];
>                     gr_complex        *out =  (gr_complex *)
> output_items[0];
>
>                     for (int i=0; i < noutput_items; i++)
>                     {
>                         d_input[i][0] = in[i].real();
>                         d_input[i][1] = in[i].imag();
>                     }
>
>                     fftw_execute( d_plan );
>
>                     for (int i=0; i < noutput_items; i++)
>                     {
>                         out[i].real( d_input[i][0] );
>                         out[i].imag( d_input[i][1] );
>                     }
>
>
>                     return noutput_items;
>                 }
>               } /* namespace activecat */
>             } /* namespace gr */
>
>
>
>  Question:
> How to solve this error ?
>
> Regards,
> Activecat
> active...@gmail.com
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to