对于这个问题,我正在使用Apache
中的数学库我的目标是在对输入值的前向傅立叶变换的absolute value结果执行逆傅立叶变换后得到我的输入。
当我对输入的前向傅里叶变换的Complex value结果执行逆傅立叶变换时,得到正确的输出。
我可能做错了什么?
public void fourierTestTemp(){
double[] input = new double[]{1,0,0,0,0,0,0,66,888,0,0,0,0,0,0,0};//Length = 16
double[] result = new double[input.length];//This double array will hold the results of the fourier transform
FastFourierTransformer transformer = new FastFourierTransformer(DftNormalization.UNITARY);//The FastFourierTransformer class by Apache
Complex[] complx = transformer.transform(result, TransformType.FORWARD);//Apply fourier transform to double[]
//Go through Complex value results and obtain absolute value
for (int i = 0; i < complx.length; i++) {
result[i] = complx[i].abs();
}
//Perform inverse transform on the obtained absolute values from the forward transform.
complx = transformer.transform(result, TransformType.INVERSE);
//Go through Complex value results and obtain absolute value
for (int i = 0; i < complx.length; i++) {
result[i] = complx[i].abs();
}
//Print results
for (int i = 0; i < result.length; i++) {
System.out.print(result[i]+",");
}
}
答案 0 :(得分:1)
ifft(abs(fft(x)))仅在x严格对称时才是同一性(可以仅由DFT的余弦基矢量构成)。你的测试向量不是。
余弦是对称函数。正弦是反对称的。
如果x不对称,fft(x)将不是实数,因此abs()函数将旋转一些相位结果,从而扭曲ifft输出波形。