首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Numpy和Nyquist频率的FFT导数

基于Numpy和Nyquist频率的FFT导数
EN

Stack Overflow用户
提问于 2017-09-24 07:04:39
回答 1查看 1.2K关注 0票数 0

我很难理解Numpy关于Nyquist频率的行为。请考虑以下示例:

代码语言:javascript
复制
import numpy as np
x=np.linspace(0, 2*np.pi, 21)[:-1]
k=np.fft.rfftfreq(len(x), d=x[1]-x[0])

FFT=np.fft.rfft(x)

x1=np.fft.irfft(1j*k*FFT)
FFT[-1]+=1e5
x2=np.fft.irfft(1j*k*FFT)

print(np.allclose(x1,x2))

打印True。所以很明显,无论我如何处理FFT中的Nyquist频率,结果总是一样的,而更改被忽略了。奇怪的是,当尝试仅仅恢复函数(没有派生)时,不会发生这种情况:

代码语言:javascript
复制
x1=np.fft.irfft(FFT)
FFT[-1]+=1e5
x2=np.fft.irfft(FFT)

print(np.allclose(x1,x2))

打印False

我可能误解了奈奎斯特频率是什么(维基百科和其他来源不是很有用),但这两个结果不应该受到奈奎斯特频率变化的影响吗?我能找到的最接近的解释是,Nyquist频率应该是一个实数,但似乎仍然不能解释这两种行为。

我之所以问这个问题,是因为我试图复制我知道的结果,这些结果是正确的,它是从一个Fortran码中得到的,它确实做了一些与奈奎斯特频率wen区分的事情。我的结果总是有1%的折扣,我猜这就是罪魁祸首。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-24 08:04:33

r in np.fft.rfft()表示您正在实际输入上使用DFT。但如果这不是真的,你会得到意想不到的行为,像这样的。只需对复杂值使用fft函数即可。作为附带说明,请始终尝试检查数据。

编辑(附加解释):

特别是,当你计算“实输入密度FT”时,你要对你的数据强制执行某些性质,即实值函数的(D)FT,这意味着(D)FT变换是Hermitian对称的,因此负(D)FT系数是多余的,因此rfft和后来的irfft是在这种假设下进行优化计算的。有关更多信息,请参见他们的文档np.fft.rfft()np.fft.irfft()

简单地说,由于这种预期的奇偶性,一半的系数(负的)不会由np.fft.rfft()计算,而且由于(D)FT变换的奇偶性,第一个分量是纯实的(定义上),最后一个分量也是纯实的(为了方便起见)。由于1j乘法,在随后的irfft调用中,纯实的东西现在都是纯虚的(反之亦然)。由于irfft()将忽略第一个和最后一个组件的假想部分,所以您的语句不会影响其结果。

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

https://stackoverflow.com/questions/46387496

复制
相关文章

相似问题

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