3 * Copyright 2010 Free Software Foundation, Inc.
5 * This file is part of GNU Radio
7 * GNU Radio is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3, or (at your option)
12 * GNU Radio is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with GNU Radio; see the file COPYING. If not, write to
19 * the Free Software Foundation, Inc., 51 Franklin Street,
20 * Boston, MA 02110-1301, USA.
23 #ifndef INCLUDED_GRI_FFT_FILTER_FFF_GENERIC_H
24 #define INCLUDED_GRI_FFT_FILTER_FFF_GENERIC_H
26 #include <gr_complex.h>
29 class gri_fft_real_fwd;
30 class gri_fft_real_rev;
32 class gri_fft_filter_fff_generic
37 int d_fftsize; // fftsize = ntaps + nsamples - 1
39 gri_fft_real_fwd *d_fwdfft; // forward "plan"
40 gri_fft_real_rev *d_invfft; // inverse "plan"
41 std::vector<float> d_tail; // state carried between blocks for overlap-add
42 std::vector<gr_complex> d_xformed_taps; // Fourier xformed taps
43 std::vector<float> d_new_taps;
46 void compute_sizes(int ntaps);
47 int tailsize() const { return d_ntaps - 1; }
51 * \brief Construct a FFT filter for float vectors with the given taps and decimation rate.
53 * This is the basic implementation for performing FFT filter for fast convolution
54 * in other blocks for floating point vectors (such as gr_fft_filter_fff).
55 * \param decimation The decimation rate of the filter (int)
56 * \param taps The filter taps (float)
58 gri_fft_filter_fff_generic (int decimation, const std::vector<float> &taps);
59 ~gri_fft_filter_fff_generic ();
62 * \brief Set new taps for the filter.
64 * Sets new taps and resets the class properties to handle different sizes
65 * \param taps The filter taps (float)
67 int set_taps (const std::vector<float> &taps);
70 * \brief Perform the filter operation
72 * \param nitems The number of items to produce
73 * \param input The input vector to be filtered
74 * \param output The result of the filter operation
76 int filter (int nitems, const float *input, float *output);
80 #endif /* INCLUDED_GRI_FFT_FILTER_FFF_GENERIC_H */