我现在正在试图理解numpy中的fft函数。为此,我测试了以下假设:
我有两个函数:
我有两个函数:
f(x)= x ^ 2
和g(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?
G(w) = 2 pi i F(w)
。应该是G(w) = 2 pi i w F(w)
。 - Dietrich Eppw
是对应于x
的频率空间等价物。 在这种情况下,您在原始空间中有x ^ 2
,它本身没有特定的频率(至少不是以易于理解的方式),因此您将得到多个不同的峰来表示x ^ 2
。例如,如果f(x)= sin(x)
,则您将在1处获得一个漂亮简单的delta函数,以捕获sin(x)
中的简单频率。 - Mike Williamson