X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=gnuradio-core%2Fsrc%2Flib%2Fgeneral%2Fgr_fft_vcc.cc;h=d07f6fa078b15d13437bf254c46ee6d4c28bbc30;hb=ea29b08aeb54227e6628f655ccfdb96fe4d8c378;hp=9ee9f745831c53912d6f982fe535a61d1c212fd8;hpb=18a684bf3dc144c48fc4cc6cc72f5070febd8074;p=debian%2Fgnuradio diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.cc b/gnuradio-core/src/lib/general/gr_fft_vcc.cc index 9ee9f745..d07f6fa0 100644 --- a/gnuradio-core/src/lib/general/gr_fft_vcc.cc +++ b/gnuradio-core/src/lib/general/gr_fft_vcc.cc @@ -1,12 +1,12 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) + * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, @@ -24,74 +24,36 @@ #include "config.h" #endif -#include +#include // abstract class +#include // concrete class #include #include #include +#include gr_fft_vcc_sptr -gr_make_fft_vcc (int fft_size, bool forward,const std::vector window) +gr_make_fft_vcc (int fft_size, bool forward,const std::vector &window, bool shift) { - return gr_fft_vcc_sptr (new gr_fft_vcc (fft_size, forward, window)); + return gr_make_fft_vcc_fftw(fft_size, forward, window, shift); } -gr_fft_vcc::gr_fft_vcc (int fft_size, bool forward, const std::vector window) - : gr_sync_block ("fft_vcc", +gr_fft_vcc::gr_fft_vcc (const std::string &name, + int fft_size, bool forward, const std::vector &window, + bool shift) + : gr_sync_block (name, gr_make_io_signature (1, 1, fft_size * sizeof (gr_complex)), gr_make_io_signature (1, 1, fft_size * sizeof (gr_complex))), - d_fft_size(fft_size) + d_fft_size(fft_size), d_forward(forward), d_shift(shift) { - d_fft = new gri_fft_complex (d_fft_size, forward); - set_window(window); - } gr_fft_vcc::~gr_fft_vcc () { - delete d_fft; -} - -int -gr_fft_vcc::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]; - - unsigned int input_data_size = input_signature()->sizeof_stream_item (0); - unsigned int output_data_size = output_signature()->sizeof_stream_item (0); - - int count = 0; - - while (count++ < noutput_items){ - - // copy input into optimally aligned buffer - - if (d_window.size()){ - gr_complex *dst = d_fft->get_inbuf(); - for (unsigned int i = 0; i < d_fft_size; i++) // apply window - dst[i] = in[i] * d_window[i]; - } - else - memcpy (d_fft->get_inbuf(), in, input_data_size); - - // compute the fft - d_fft->execute (); - - // cpoy result to our output - memcpy (out, d_fft->get_outbuf (), output_data_size); - - in += d_fft_size; - out += d_fft_size; - } - - return noutput_items; } bool -gr_fft_vcc::set_window(const std::vector window) +gr_fft_vcc::set_window(const std::vector &window) { if(window.size()==0 || window.size()==d_fft_size) { d_window=window;