首页 > 解决方案 > numpy.fft.fft 和 numpy.fft.rfft 有什么区别?

问题描述

文档说这样np.fft.fft做:

计算一维离散傅里叶变换。

np.fft.rfft这样做:

计算实际输入的一维离散傅里叶变换。

我还看到,对于我的数据(音频数据,实值),np.fft.fft返回一个包含复数的二维形状数组(number_of_frames,fft_length)。

Fornp.fft.rfft返回包​​含复数的形状为 (number_of_frames, ((fft_length/2) + 1)) 的二维数组。我被引导相信这仅包含非冗余 FFT 箱

有人可以更深入地解释命令之间的差异以及返回数组的形状为何不同。谢谢你。

标签: pythonarraysnumpysignal-processingfft

解决方案


原因在文档中进行了解释:

当为纯实输入计算 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))

在此处输入图像描述


推荐阅读