Hi all,
I have the following c++ code which gets fft by sliding on sample by sample
fo the input.

    /*

     * The private constructor

     */

    sliding_fft_impl::sliding_fft_impl(uint fft_size)

      : gr::sync_block("sliding_fft",

              gr::io_signature::make(1, 1, sizeof(gr_complex)),

              gr::io_signature::make(1, 1, fft_size * sizeof(gr_complex))),

        d_fft_size(fft_size)

    {

        d_fft = new fft::fft_complex (d_fft_size, 1, 2);

        set_history(fft_size);

    }


    sliding_fft_impl::~sliding_fft_impl()

    {

        delete d_fft;

    }


    int

    sliding_fft_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];


        memcpy(d_fft->get_inbuf(), in, d_fft_size * sizeof(gr_complex));

        d_fft->execute();

        memcpy(out, d_fft->get_outbuf(), d_fft_size * sizeof(gr_complex));


        //delete d_fft;

        return 1;

    }


If I run the fft execution on 2 threads, or more, is there any "race"
problem between these 2 threads and the work one? Inj another words,
is it possible that this work being called before finishing the fft
execution?


If it is so, there will be a race problem because "work" wants to
write on d_fft->get_inbuf() while fft execution wants to read from it!


please help me with this code. I don't know why at the runtime, the
data I give at the output aren't desired after a while!!


Best,

Mostafa
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to