用c语言生成FFT的代码
时间: 2024-04-22 21:26:15 浏览: 122
当然,以下是一个使用C语言生成FFT的基本代码示例:
```c
#include <stdio.h>
#include <complex.h>
#include <math.h>
#define PI 3.141592653589793238462643383279502884
void fft(complex double* x, int N) {
if (N <= 1) {
return;
}
complex double even[N/2];
complex double odd[N/2];
for (int 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 (int k = 0; k < N/2; k++) {
complex double t = cexp(-I * 2 * PI * k / N) * odd[k];
x[k] = even[k] + t;
x[k + N/2] = even[k] - t;
}
}
int main() {
int N;
printf("Enter the number of elements: ");
scanf("%d", &N);
complex double x[N];
printf("Enter the elements:\n");
for (int i = 0; i < N; i++) {
double real, imag;
scanf("%lf %lf", &real, &imag);
x[i] = real + imag * I;
}
fft(x, N);
printf("FFT result:\n");
for (int i = 0; i < N; i++) {
printf("%.2f + %.2fi\n", creal(x[i]), cimag(x[i]));
}
return 0;
}
```
这段代码实现了基于递归的快速傅里叶变换(FFT)。你可以按照以下步骤运行代码:
1. 输入要进行FFT的元素数量(N)。
2. 依次输入N个复数元素(实部和虚部)。
3. 程序将输出FFT结果。
请注意,这只是一个基本的FFT实现示例,可能不适用于大规模的信号处理任务。你可以根据自己的需求进行修改和优化。
阅读全文