Img2Num C++ (Internal Developer Docs) dev
API Documentation
Loading...
Searching...
No Matches
fft_iterative.h
1#ifndef ITERATIVE_FFT_H
2#define ITERATIVE_FFT_H
3
4#include <complex>
5#include <cstddef> // for size_t
6#include <vector>
7
8namespace fft {
9using cd = std::complex<double>;
10
11// Check if an integer is a power of two.
12bool is_power_of_two(size_t n);
13
14// Return the next power of two >= n.
15size_t next_power_of_two(size_t n);
16
17// In-place bit-reversal permutation of vector a (length must be power of two).
18void bit_reverse_permute(std::vector<cd> &a);
19
20void pad_to_pow_two(std::vector<cd> &a, size_t &N);
21
22// Iterative in-place FFT.
23// Parameters:
24// - a: input/output buffer (modified in-place).
25// - inverse: false for forward FFT, true for inverse FFT.
26void iterative_fft(std::vector<cd> &a, bool inverse = false);
27
28// Convenience wrapper: return FFT result as a new vector.
29// Parameters:
30// - input: const input vector.
31// - inverse: false for forward FFT, true for inverse FFT.
32std::vector<cd> fft_copy(const std::vector<cd> &input, bool inverse = false);
33
34// Iterative in-place 2D FFT.
35// Parameters:
36// - data: input/output buffer (modified in-place).
37// - inverse: false for forward FFT, true for inverse FFT.
38void iterative_fft_2d(std::vector<cd> &a, size_t width, size_t height, bool inverse = false);
39
40// Convenience wrapper: return 2D FFT result as a new vector.
41// Parameters:
42// - input: const input vector.
43// - inverse: false for forward FFT, true for inverse FFT.
44std::vector<cd> iterative_fft_2d_copy(const std::vector<cd> &input, size_t width, size_t height,
45 bool inverse = false);
46} // namespace fft
47
48#endif // ITERATIVE_FFT_H