Я бы посоветовал вам выполнить дискретное преобразование Фурье для функции, для которой вы уже знаете аналитический результат. Как только вы удовлетворены увиденным, вы запускаете несколько строк кода для чего-то, для чего вы не знаете результат, как я уже делал в этом обсуждении
Числовое преобразование Фурье прямоугольной функции
Как видите, как в Matlab, так и в Python смещение правой стороны спектра (fftshift (y)) должно выполняться до и после числового преобразования Фурье.
Вас также может заинтересовать так называемая теорема Найквиста, которая устанавливает минимальную частоту дискретизации, для которой может применяться числовое преобразование Фурье, но я не думаю, что в данный момент это ваша проблема, поскольку частота дискретизации ваш спектр выглядит довольно высоким.
Кстати, правильный способ выполнения быстрого преобразования Фурье для пошаговой функции с использованием python описан ниже
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-3, 3, 0.01)
y = np.zeros(len(x))
y[200:400] = 1
# Step function for which the Fourier Transform is well known to be sin(x)/x
yShift = np.fft.fftshift(y)
# Shift of the N/2 sampling data on the right side to the left side
fftyShift = np.fft.fft(yShift)
# Numerical Fourier Transform (Lanczos)
ffty = np.fft.fftshift(fftyShift)
# Shift of the N/2 transformed data on the right side to the left side
plt.plot(ffty)
plt.show()