用C语言写一个fft算法
时间: 2023-03-28 13:03:32 浏览: 51
你好,以下是用 C 语言写一个 FFT 算法的示例代码:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
void fft(double *x, double *y, int n)
{
if (n <= 1) {
return;
}
double xr[n / 2], xi[n / 2], yr[n / 2], yi[n / 2];
for (int i = ; i < n / 2; i++) {
xr[i] = x[2 * i];
xi[i] = x[2 * i + 1];
yr[i] = y[2 * i];
yi[i] = y[2 * i + 1];
}
fft(xr, xi, n / 2);
fft(yr, yi, n / 2);
for (int k = ; k < n / 2; k++) {
double t = xr[k];
xr[k] = xr[k] * cos(2 * PI * k / n) + xi[k] * sin(2 * PI * k / n);
xi[k] = xi[k] * cos(2 * PI * k / n) - t * sin(2 * PI * k / n);
t = yr[k];
yr[k] = yr[k] * cos(2 * PI * k / n) + yi[k] * sin(2 * PI * k / n);
yi[k] = yi[k] * cos(2 * PI * k / n) - t * sin(2 * PI * k / n);
}
for (int i = ; i < n / 2; i++) {
x[i] = xr[i] + yr[i + n / 2];
y[i] = xi[i] + yi[i + n / 2];
x[i + n / 2] = xr[i] - yr[i + n / 2];
y[i + n / 2] = xi[i] - yi[i + n / 2];
}
}
int main()
{
double x[] = {1, 2, 3, 4, 5, 6, 7, 8};
double y[] = {, , , , , , , };
int n = sizeof(x) / sizeof(double);
fft(x, y, n);
printf("FFT result:\n");
for (int i = ; i < n; i++) {
printf("%f + %fi\n", x[i], y[i]);
}
return ;
}
```
希望对你有所帮助。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)