我需要用 C++ 编写快速傅立叶变换,我指的是维基百科中的这个公式:
但是由于某种原因,当我简单地输入 (1,1) (1,1) (1,1) (1,1) for by vector 时,我没有得到正确的输出. 这是我的代码:
#include <iostream>
#include <complex>
#include <cmath>
#include <time.h>
using namespace std;
typedef complex<double> dcomp;
int main() {
const int N = 4;
dcomp sum1 = dcomp(0.0, 0.0);
dcomp sum2 = dcomp(0.0, 0.0);
dcomp *X = new dcomp[N];
dcomp *v = new dcomp[N];
for(int i = 0; i < N; i++) {
v[i] = dcomp(1.0, 1.0);
}
for(int k = 0; k < N; k++) {
for(int m = 0; m < N/2.0; m++) {
double inside = (-2*M_PI/N)*(2*m)*k;
sum1 = sum1 + v[2*m] * dcomp(cos(inside), sin(inside));
}
for(int m = 0; m < N/2.0; m++) {
double inside1 = (-2*M_PI/N)*(2*m+1)*k;
sum2 = sum2 + v[2*m + 1] * dcomp(cos(inside1), sin(inside1));
}
X[k] = sum1 + sum2;
cout << X[k] << endl;
}
return 0;
}
如果您只看一下公式,这很容易阅读我实际上在做同样的事情,但我的输出是 (4,4) (4,4) (4,4) (4,4)
它应该是: (2,2) (0,0) (0,0) (0,0)
谁能帮助我并指出我哪里出错了?