dlib C++ Library - fft_stl.h

    // Copyright (C) 2023  Davis E. King (davis@dlib.net)
    // License: Boost Software License   See LICENSE.txt for the full license.
    #ifndef DLIB_FFT_STL_Hh_
    #define DLIB_FFT_STL_Hh_

    #include <vector>
    #include "fft.h"

    namespace dlib
    {

    // ----------------------------------------------------------------------------------------

        template < typename T, typename Alloc >
        void fft_inplace (std::vector<std::complex<T>, Alloc>& data)
        /*!
            requires
                - data contains elements of type std::complex<> that itself contains double, float, or long double.
            ensures
                - This function is identical to fft() except that it does the FFT in-place.
                  That is, after this function executes we will have:
                    - #data == fft(data)
        !*/
        {
            static_assert(std::is_floating_point<T>::value, "only support floating point types");
            if (data.size() != 0)
                fft({(long)data.size()}, &data[0], &data[0], false);
        }

    // ----------------------------------------------------------------------------------------

        template < typename T, typename Alloc >
        void ifft_inplace (std::vector<std::complex<T>, Alloc>& data)
        /*!
            requires
                - data contains elements of type std::complex<> that itself contains double, float, or long double.
            ensures
                - This function is identical to ifft() except that it does the inverse FFT
                  in-place.  That is, after this function executes we will have:
                    - #data == ifft(data)*data.size()
                    - Note that the output needs to be divided by data.size() to complete the
                      inverse transformation.
        !*/
        {
            static_assert(std::is_floating_point<T>::value, "only support floating point types");
            if (data.size() != 0)
                fft({(long)data.size()}, &data[0], &data[0], true);
        }

    // ----------------------------------------------------------------------------------------

    }

    #endif //DLIB_FFT_STL_Hh_