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