我正在探索JTransforms FFT,我尝试了FFT.realForward()
和FFT.realForwardFull()
,我得到了这些结果:
RealForward
16.236587494
-2.3513066039999995 <----------------?
1.8268368691062924
-1.1179067733368138
6.698362081000001
5.353354667
-6.146021583106291
-12.013420149336813
RealForwardFull
16.236587494
0.0 <------------------
1.8268368691062924
-1.1179067733368138
6.698362081000001
5.353354667
-6.146021583106291
-12.013420149336813
-2.3513066039999995 <-----------------
0.0 <-------------
-6.146021583106291
12.013420149336813
6.698362081000001
-5.353354667
1.8268368691062924
1.1179067733368138
因此,正如您所看到的,realforwardFull()
为第一个数字提供了不同的想象并添加了一对新的。不应该realforward()
产生相同的结果减去任何重复吗?
答案 0 :(得分:1)
因为实信号的FFT是对称的,所以k = 0和k = N / 2分量都是实数(你可以在“完整”输出中看到)。因此,它们在“非完整”输出中被打包在一起。
此输出布局在JavaDoc中进行了解释。
(注意:FFTW做同样的事情。)
答案 1 :(得分:0)
有关如何表示FFT输出数据的信息,请参阅JTransforms文档HERE
对于RealForwardFull,输出是常用的全FFT数据,即N-Complex数,实数和虚数组件交错。
对于RealForward,输出排列如下: - 前两个元素分别是第一个(k = 0)和中间(k = N / 2)FFT系数的实部,其余的FFT系数是然后在实际和虚构的组件交错后给出。
像Oli CharlesWorth提到的那样,k = 0和k = N / 2项的虚部将为零,因为输入信号是实数,因此Realforward不返回它们。它只返回足够的最小信息能够重建全谱。