По словам моего хорошего друга Вольфрама , преобразование Фурье гауссиана во временной / пространственной области дает другой гауссиан в частотной / спектральной области.Когда я проверяю это с помощью процедуры numpy.fft.fft
, я не получаю то, что ожидал.
import numpy as np
import matplotlib.pyplot as plt
N = 1000 # Number of samples
a = 10.0 # Inverse variance
x = np.linspace(-5, 5, N) # Spatial domain
y = np.exp(-a*x**2) # Gaussian in spatial domain
dx = x[1] - x[0] # Sampling rate
k = np.fft.fftfreq(N, dx) # Wave numbers
inds = np.argsort(k) # Sorting order of wave numbers
# Analytical solution for Fourier transform of y
y_hat = np.sqrt(np.pi / a) * np.exp(-np.pi**2 * k**2 / a)
# Numerical solution (FFT of y)
y_hat2 = np.fft.fft(y)
# Plot original function in spatial domain
plt.subplot(211)
plt.plot(x, y)
plt.xlabel("position [m]")
plt.ylabel("y")
# Plot solutions in the spectral domain
plt.subplot(212)
plt.plot(k[inds], np.real(y_hat2[inds]), label="Real FFT(y)")
plt.plot(k[inds], np.imag(y_hat2[inds]), label="Imag FFT(y)")
plt.plot(k[inds], y_hat[inds], "k--", label="Analytical")
plt.xlabel("wave number [1/m]")
plt.ylabel("FFT(y)")
plt.ylim((-1, 1))
plt.xlim((-5, 5))
plt.legend()
plt.tight_layout()
plt.show()
Результат:
Как оказалось, мнимая часть БПФ y
отлична от нуля, а действительная часть сильно колеблется около 0, обе из которых не ожидаются от аналитического решения.Может ли кто-нибудь объяснить мне, почему это происходит?