文档中说,np.fft.fft是这样做的:
计算一维离散傅里叶变换。
np.fft.rfft就是这样做的:
计算实际输入的一维离散傅里叶变换。
我还看到,对于我的数据(音频数据,实值),np.fft.fft返回包含复数的二维形状数组(number_of_frames,fft_length)。
对于np.fft.rfft,返回包含复数的二维形状数组(number_of_frames,((fft_length/2) +1)。我被引导相信这只包含非冗余的FFT回收箱。
有人能更深入地解释命令之间的区别以及为什么返回的数组的形状是不同的。谢谢。
发布于 2018-09-18 13:44:22
通过实例说明了这里的基本区别。如其所述:
import numpy as np
data = [0, 1, 2, 1, 0]
print("FFT output\n", np.fft.fft(data))
print("RFFT output\n", np.fft.rfft(data))将导致:
FFT output
[ 4. +0.j -2.11803399-1.53884177j 0.11803399+0.36327126j
0.11803399-0.36327126j -2.11803399+1.53884177j]
RFFT output
[ 4. +0.j -2.11803399-1.53884177j 0.11803399+0.36327126j]注意,对于实际输入,fft输出的最后一个元素是第二个元素的复杂共轭。对于rfft__,这种对称性仅用于计算非负频率项。
发布于 2018-09-18 13:53:27
在文档中解释了原因:
当DFT计算为纯实输入时,输出为Hermitian对称的,即负频率项只是对应的正频项的复共轭项,因此负频项是多余的。此函数不计算负频率项,因此输出的转换轴长度为n//2 + 1。
因此,对算法进行了优化,使rfft的速度提高了一倍。此外,光谱更容易绘制:
In [124]: s=abs(sin(arange(0,2**13,3)))
In [125]: sp=rfft(s)
In [126]: plot(abs(sp))

https://stackoverflow.com/questions/52387673
复制相似问题