Преобразование Фурье гауссовской функции в Python - PullRequest
0 голосов
/ 15 мая 2019

Я хочу вычислить преобразование Фурье для некоторой гауссовской функции.Рассмотрим простую гауссову g (t) = e ^ {- t ^ 2}.Преобразование Фурье от g (t) имеет простое аналитическое выражение , такое, что 0-я частота - просто корень пи.

Если я пытаюсь сделать то же самое в 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] должен содержать член с нулевой частотой, который, как мы знаем из аналитического выражения, является корневым пи.Но вместо этого он дает 746.444?!

Почему расхождение между аналитическим решением и вычислительным?

1 Ответ

2 голосов
/ 15 мая 2019

Не уверен, почему вы думаете, что вы должны получить аналитическое выражение. DFFT в NUmPy явно асимметричен, и если вы посмотрите на формулу для A k здесь , вы можете ясно увидеть, что для 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

...