【发布时间】:2026-01-09 17:50:01
【问题描述】:
我目前正在尝试从 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)。 -
@DietrichEpp:这些数组中的 w 是什么,它也是虚构的吗?
-
@arc_lupus
w是等价于x的频率空间。在这种情况下,您在原始空间中有x^2,它本身没有频率(至少不是在易于理解的意义上),因此您将获得大量不同的峰值来表示x^2。例如,如果f(x) = sin(x),那么您将有一个很好的、简单的 delta func 在 1 处捕获sin(x)中的简单频率。
标签: python numpy signal-processing fft