快速傅里叶变换C代码
时间: 2023-09-02 14:10:26 浏览: 83
当然,下面是一个示例的快速傅里叶变换(FFT)的C代码:
```c
#include <stdio.h>
#include <math.h>
#include <complex.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 = 8;
complex double x[] = {1, 1, 1, 1, 0, 0, 0, 0};
fft(x, N);
printf("FFT: ");
for (int i = 0; i < N; i++) {
printf("%.2f + %.2fi, ", creal(x[i]), cimag(x[i]));
}
return 0;
}
```
这是一个简单的以递归方式实现的快速傅里叶变换。代码中使用了复数类型 `complex double`,并通过递归将输入序列分解为偶数和奇数部分,然后进行迭代计算。最后,输出变换结果。
请注意,这只是一个简单的示例代码,并未包含输入序列的动态分配和错误处理。在实际应用中,你可能需要根据自己的需求进行适当的修改和扩展。希望对你有所帮助!如果有任何问题,请随时提问。
阅读全文