Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中高斯函数的傅里叶变换_Python_Fft_Continuous Fourier - Fatal编程技术网

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

Python中高斯函数的傅里叶变换,python,fft,continuous-fourier,Python,Fft,Continuous Fourier,我想计算一些高斯函数的傅里叶变换。考虑简单的高斯G(t)=E^ {-T^ 2 }。g(t)的傅里叶变换具有a,使得第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 很简单。现在h[0]应该包含零频率项,我们从解析表达式中知道它是根pi。但是它却

我想计算一些高斯函数的傅里叶变换。考虑简单的高斯G(t)=E^ {-T^ 2 }。g(t)的傅里叶变换具有a,使得第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
很简单。现在
h[0]
应该包含零频率项,我们从解析表达式中知道它是根pi。但是它却给出了
746.444


为什么解析解和计算解之间存在差异?

不确定为什么你认为应该得到解析表达式。NUmPy中的DFFT显然是不对称的,若你们看Ak的公式,你们可以清楚地看到,对于A0,你们应该得到输入的总和。同样,从[-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()
得到


不知道为什么你认为你应该得到解析表达式。NUmPy中的DFFT显然是不对称的,若你们看Ak的公式,你们可以清楚地看到,对于A0,你们应该得到输入的总和。同样,从[-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()
得到


Hmmm好的,这是有帮助的,但我仍然感到困惑:这个链接实际上表明h(0)=根pi。我想你们已经稍微解释过了,“NUmPy中的DFFT显然是不对称的”,但我仍然不完全清楚为什么h(0)不等于根pi@user1887919嗯,这是NumPy使用的惯例。有些库具有多个前后缩放选项(如C中的likefftw3和C#中的mathdotnet),但在NumPy中,据我所见只有两个选项-无正向和1/N反向缩放(您和我使用的是norm=None)或1/sqrt(N)正向和反向缩放(“正交”选项)。这两个选项都不会产生sqrt(pi)。您可能可以将NumPy FFT封装到自己的例程中,这些例程可以进行适当的缩放。@user1887919您可以看一看,这是Matlab,但关于缩放的讨论非常好。嗯,这是很有帮助的-但我仍然感到困惑:链接实际上表明h(0)=根pi。我想你们已经稍微解释过了,“NUmPy中的DFFT显然是不对称的”,但我仍然不完全清楚为什么h(0)不等于根pi@user1887919嗯,这是NumPy使用的惯例。有些库具有多个前后缩放选项(如C中的likefftw3和C#中的mathdotnet),但在NumPy中,据我所见只有两个选项-无正向和1/N反向缩放(您和我使用的是norm=None)或1/sqrt(N)正向和反向缩放(“正交”选项)。这两个选项都不会产生sqrt(pi)。您可以将NumPy FFT封装到自己的例程中,这些例程可以进行适当的缩放。@user1887919您可以查看一下,它是Matlab,但是关于缩放的讨论非常好