首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy.fft.fft和numpy.fft.rfft有什么区别?

numpy.fft.fft和numpy.fft.rfft有什么区别?
EN

Stack Overflow用户
提问于 2018-09-18 13:26:29
回答 2查看 25.8K关注 0票数 20

文档中说,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回收箱。

有人能更深入地解释命令之间的区别以及为什么返回的数组的形状是不同的。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-18 13:44:22

通过实例说明了这里的基本区别。如其所述:

代码语言:javascript
复制
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))

将导致:

代码语言:javascript
复制
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__,这种对称性仅用于计算非负频率项。

票数 14
EN

Stack Overflow用户

发布于 2018-09-18 13:53:27

在文档中解释了原因:

当DFT计算为纯实输入时,输出为Hermitian对称的,即负频率项只是对应的正频项的复共轭项,因此负频项是多余的。此函数不计算负频率项,因此输出的转换轴长度为n//2 + 1。

因此,对算法进行了优化,使rfft的速度提高了一倍。此外,光谱更容易绘制:

代码语言:javascript
复制
In [124]: s=abs(sin(arange(0,2**13,3)))

In [125]: sp=rfft(s)

In [126]: plot(abs(sp))

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52387673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档