// FFT #pragma once #include #include #include namespace RIT { // Fast Fourier Transform class FFT { private: int mSize; std::vector order; std::vector> expLUT; bool mFlagHalfOnly; public: FFT(int size, bool halfOnly = false); std::vector> operator()(const std::vector> &v) const; FFT& SetHalfOnly(bool enable); private: void reorder(const std::vector>& src, std::vector>& dst) const; void fft_recursive(std::vector>::iterator X, int N) const; void fft_half(std::vector>::iterator X, int N) const; }; // class FFT // Inverse FFT class IFFT { public: IFFT(int size); IFFT(std::shared_ptr fft); ~IFFT(); std::vector> operator()(const std::vector> &v) const; private: struct Impl; std::unique_ptr mImpl; }; // class IFFT } // namespace RIT