gpt4 book ai didi

python - numpy.fft.fft 是如何工作的?

转载 作者:太空狗 更新时间:2023-10-30 01:07:02 28 4
gpt4 key购买 nike

我目前正在尝试了解 numpy 的 fft 函数。为此,我测试了以下假设:
我有两个函数,f(x) = x^2g(x) = f'(x) = 2*x。根据傅立叶变换定律和 wolfram alpha,G(w) = 2pi*i*F(w)(前置因子可以变化,但应该只有一个常数因子)。在 python 中实现时,我写

import numpy as np
def x2(x):
return x*x
def nx(x):
return 2*x

a = np.linspace(-3, 3, 16)
a1 = x2(a)
a2 = nx(a)

b1 = np.fft.fft(a1)
b2 = np.fft.fft(a2)

c = b1/b2

现在我期望 c 的值几乎恒定,但我得到了

array([  1.02081592e+16+0.j        ,   1.32769987e-16-1.0054679j ,
4.90653893e-17-0.48284271j, -1.28214041e-16-0.29932115j,
-1.21430643e-16-0.2j , 5.63664751e-16-0.13363573j,
-5.92271642e-17-0.08284271j, -4.21346622e-16-0.03978247j,
-5.55111512e-16-0.j , -5.04781597e-16+0.03978247j,
-6.29288619e-17+0.08284271j, 8.39500693e-16+0.13363573j,
-1.21430643e-16+0.2j , -0.00000000e+00+0.29932115j,
-0.00000000e+00+0.48284271j, 1.32769987e-16+1.0054679j ])

我的错误在哪里,我该怎么做才能按预期使用 fft?

最佳答案

您提供的属性适用于 Continuous Fourier transform (CFT)。 FFT计算的是Discrete Fourier transform (DFT),与CFT相关但不完全等价。

在某些条件下,DFT 确实与 CFT 成正比:即对在样本限制之外为零的函数进行充分采样(例如,参见 this book 的附录 E)。

对于您在上面提出的函数,这两个条件都不成立,因此 DFT 与 CFT 不成比例,您的数值结果反射(reflect)了这一点。


这里有一些代码通过 FFT 确认您感兴趣的关系,使用适当采样的带宽限制函数:

import numpy as np

def f(x):
return np.exp(-x ** 2)
def fprime(x):
return -2 * x * f(x)

a = np.linspace(-10, 10, 100)
a1 = f(a)
a2 = fprime(a)

b1 = np.fft.fft(a1)
b2 = np.fft.fft(a2)
omega = 2 * np.pi * np.fft.fftfreq(len(a), a[1] - a[0])

np.allclose(b1 * 1j * omega, b2)
# True

关于python - numpy.fft.fft 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849059/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com