33 static void *
memdup(
const void *src,
size_t n);
39 static unsigned len = 0;
55 for (
size_t i = 0; i < n / 2; i++) {
56 cos_table[i] = cosf(2.0f * M_PI * iF / nF);
57 sin_table[i] = sinf(2.0f * M_PI * iF / nF);
76 printf(
"Need to re-init FFT\n");
79 if ((n & (n - 1)) == 0) {
82 printf(
"Only power of 2 fft len supported\n");
95 for (
size_t temp = n; temp > 1U; temp >>= 1)
97 if ((
size_t)1U << levels != n)
100 if (SIZE_MAX /
sizeof(
CFTTYPE) < n / 2)
103 for (
size_t i = 0; i < n; i++) {
116 size_t halfsize =
size / 2;
117 size_t tablestep = n /
size;
118 for (
size_t i = 0; i < n; i +=
size) {
119 for (
size_t j = i, k = 0; j < i + halfsize; j++, k += tablestep) {
120 size_t l = j + halfsize;
123 real[l] = real[j] - tpre;
124 imag[l] = imag[j] - tpim;
139 for (
int i = 0; i < n; i++, x >>= 1)
140 result = (result << 1) | (x & 1U);
144 static void *
memdup(
const void *src,
size_t n) {
145 void *dest = malloc(n);
146 if (n > 0 && dest != NULL)
147 memcpy(dest, src, n);
bool Fft_inverseTransform(CFTTYPE real[], CFTTYPE imag[], size_t n)
static size_t reverse_bits(size_t x, int n)
bool Fft_transform(CFTTYPE real[], CFTTYPE imag[], size_t n)
static CFTTYPE * sin_table
static void * memdup(const void *src, size_t n)
bool Fft_transformRadix2(CFTTYPE real[], CFTTYPE imag[], size_t n)
static CFTTYPE * cos_table