FFT工作正常,但是当我想采用IFFT时,我总是从其结果中看到相同的图形。无论原始信号如何,结果都很复杂,图形总是相同的。ifft结果不同于原始信号
在实部图表是与虚部段=帧大小
一个-sin它与同期
在哪里可以是一个问题一个-cos?
原始信号:
IFFT真正的价值(在照片是唯一的帧的一半):
FFT算法,我使用。
double** FFT(double** f, int s, bool inverse) {
if (s == 1) return f;
int sH = s/2;
double** fOdd = new double*[sH];
double** fEven = new double*[sH];
for (int i = 0; i < sH; i++) {
int j = 2 * i;
fOdd[i] = f[j];
fEven[i] = f[j + 1];
}
double** sOdd = FFT(fOdd, sH, inverse);
double** sEven = FFT(fEven, sH, inverse);
double**spectr = new double*[s];
double arg = inverse ? DoublePI/s : -DoublePI/s;
double*oBase = new double[2]{ cos(arg),sin(arg) };
double*o = new double[2]{ 1,0 };
for (int i = 0; i < sH; i++) {
double* sO1 = Mul(o, sOdd[i]);
spectr[i] = Sum(sEven[i], sO1);
spectr[i + sH] = Dif(sEven[i], sO1);
o = Mul(o, oBase);
}
return spectr;
}
侧面说明:您的代码分配大量使用'new'堆中的对象,但你的代码永远不会调用'delete'不改变对象的所有权才离开范围 - 所以你的程序会泄漏内存。 – Dai
@戴,谢谢你的回答,我会尽力解决它的工作。但现在这不是我的最大问题。 –
imho它是最大的问题。所有这些指针和'新'使代码不必要的难以阅读和发现像你所拥有的错误 – user463035818