写一个C语言的FFT代码
时间: 2023-04-05 16:04:07 浏览: 81
我可以回答这个问题。以下是一个简单的C语言FFT代码:
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
void fft(double complex[], int);
void ifft(double complex[], int);
int main()
{
int i, n;
printf("Enter the number of elements: ");
scanf("%d", &n);
double complex x[n];
printf("Enter the elements: ");
for(i=0; i<n; i++)
scanf("%lf", &x[i]);
fft(x, n);
printf("FFT: ");
for(i=0; i<n; i++)
printf("%.2lf + %.2lfi, ", creal(x[i]), cimag(x[i]));
ifft(x, n);
printf("\nIFFT: ");
for(i=0; i<n; i++)
printf("%.2lf + %.2lfi, ", creal(x[i]), cimag(x[i]));
return 0;
}
void fft(double complex x[], int n)
{
if(n <= 1)
return;
double complex even[n/2], odd[n/2];
int i;
for(i=0; i<n/2; i++)
{
even[i] = x[2*i];
odd[i] = x[2*i+1];
}
fft(even, n/2);
fft(odd, n/2);
for(i=0; i<n/2; i++)
{
double complex t = cexp(-I*2*PI*i/n) * odd[i];
x[i] = even[i] + t;
x[i+n/2] = even[i] - t;
}
}
void ifft(double complex x[], int n)
{
int i;
for(i=0; i<n; i++)
x[i] = conj(x[i]);
fft(x, n);
for(i=0; i<n; i++)
{
x[i] = conj(x[i]);
x[i] /= n;
}
}