Python中高斯函数的傅立叶变换

时间:2019-05-15 17:43:39

标签: python fft continuous-fourier

我想计算一些高斯函数的傅立叶变换。考虑简单的高斯g(t)= e ^ {-t ^ 2}。 g(t)的傅立叶变换具有simple analytical expression ,因此第0个频率只是根pi。

如果我尝试在Python中做同样的事情:

N = 1000
t = np.linspace(-1,1,N)
g = np.exp(-t**2)

h = np.fft.fft(g) #This is the Fourier transform of expression g

足够简单。现在as per the docs h[0]应该包含零频率项,从解析表达式中我们知道它是根pi。但是相反,它给出了746.444?!

为什么解析解决方案与计算解决方案之间存在差异?

1 个答案:

答案 0 :(得分:2)

不确定您为什么认为应该得到分析表达。 NUmPy中的DFFT显然是不对称的,如果您查看A k here的公式,您会清楚地看到,对于A 0 ,您应该求和输入。而且,从[-sigma ... sigma]间隔获得高斯也不正确。

此处为修改示例

import numpy as np
import matplotlib.pyplot as plt

N = 4001
t = np.linspace(-4.0, 4.0, N)
print((t[0], t[2000], t[4000]))
g = np.exp(-t*t)
print(np.sum(g)) # sum of input

h = np.fft.fft(g, norm=None)
print(h[0]) # should be the same as sum of input

它会打印

(-4.0, 0.0, 4.0)
886.2269119018041
(886.226911901804+0j)

您可以进行逆变换并将其绘制

q = np.fft.ifft(h, norm=None)

plt.plot(t, g, label = "Gauss")
plt.show()
plt.plot(t, np.abs(q), label = "dFFT Gauss")
plt.show()
f = np.fft.fftfreq(N)
plt.plot(f, np.angle(h), f, np.abs(h))
plt.show()

并获得

enter image description here