C 语言实现傅里叶变换
时间: 2023-07-20 07:24:50 浏览: 114
C语言实现傅里叶变换
以下是一个使用 C 语言实现离散傅里叶变换(DFT)的示例代码:
```c
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
void dft(double complex *x, double complex *X, int N) {
for (int k = 0; k < N; k++) {
X[k] = 0;
for (int n = 0; n < N; n++) {
X[k] += x[n] * cexp(-2 * M_PI * I * k * n / N);
}
}
}
int main() {
int N = 8;
double complex x[] = {1, 0, 1, 0, 1, 0, 1, 0};
double complex X[N];
dft(x, X, N);
for (int k = 0; k < N; k++) {
printf("X[%d] = %f + %f i\n", k, creal(X[k]), cimag(X[k]));
}
return 0;
}
```
在这个示例代码中,`dft` 函数接受一个复数数组 `x`,计算出其离散傅里叶变换结果 `X`。`main` 函数中定义了一个长度为 8 的复数数组 `x`,用于进行 DFT 计算,并输出计算结果。
需要注意的是,在 C 语言中,复数需要使用 `double complex` 数据类型进行表示,同时需要包含 `complex.h` 头文件。在计算中,使用 `cexp` 函数来计算复数的指数函数。
这个示例代码中的 DFT 实现是一个直接计算所有频率分量的算法,计算复杂度为 O(N^2),因此对于大规模的信号处理来说,可能会使用更高效的 FFT 算法进行计算。
阅读全文