C语言实现FFT
#include <stdio.h>#include <stdlib.h>
#include <math.h>
void bitreverse(float *x, int N) {
int i, j, k;
for (i = 0; i < N; i++) {
k = i;
for (j = 0; j < log2(N); j++) {
if (k & (N >> 1))
k = (k ^ (N >> 1)) >> 1;
else
k = k >> 1;
}
if (k > i) {
float temp = x;
x = x;
x = temp;
}
}
}
void fft(float *x, int N) {
bitreverse(x, N);
int k = N, n, m, i, j;
for (n = 1; n < N; n = n * 2) {
float u1 = 1.0, u2 = 0.0;
for (m = n / 2; m > 0; m = m / 2) {
for (i = 0; i < k; i = i + 2 * n) {
for (j = 0; j < n; j++) {
float t1 = x, t2 = x;
x = t2 + u2 * t1;
x = t2 - u2 * t1 + u1 * t1;
u1 = u1 * u1 - u2 * u2;
u2 = 2.0 * u1 * u2;
}
}
u1 = 1.0;
u2 = 0.0;
}
k = k / 2;
}
}
int main() {
int N = 8;
float x = {1, 0, -1, 0, 1, 0, -1, 0};
fft(x, N);
for (int i = 0; i < N; i++) {
printf("%f + %fi\n", creal(x), cimag(x));
}
return 0;
}
在交流信号测量中会用到FFT
页:
[1]