c++实现DFT
时间: 2023-06-29 09:18:17 浏览: 47
DFT(离散傅里叶变换)是一种将离散信号转换为复数频率域的方法。下面是一份使用C++实现DFT算法的示例代码:
```c++
#include <iostream>
#include <complex>
#include <cmath>
#include <vector>
using namespace std;
typedef complex<double> Complex;
vector<Complex> dft(vector<Complex> x) {
int n = x.size();
vector<Complex> X(n);
for (int k = 0; k < n; k++) {
Complex sum(0, 0);
for (int t = 0; t < n; t++) {
Complex expval(cos(2 * M_PI * k * t / n), -sin(2 * M_PI * k * t / n));
sum += x[t] * expval;
}
X[k] = sum;
}
return X;
}
int main() {
vector<Complex> x = {1, 2, 3, 4, 5, 6, 7, 8};
vector<Complex> X = dft(x);
for (int i = 0; i < X.size(); i++) {
cout << X[i] << endl;
}
return 0;
}
```
上述代码中,dft函数接收一个由输入信号组成的向量x,并返回一个由频率域信号组成的向量X。其中,复数类型complex<double>用于表示复数,M_PI表示圆周率π,cos和sin函数用于计算正余弦值。函数中的两个for循环分别对应DFT的两个求和公式,用于计算频率域信号。最后,我们通过main函数对代码进行测试,输出结果可以得到DFT算法的正确性。