Я не понимаю, почему ifft (fft (myFunction)) не совпадает с моей функцией. Кажется, что он имеет ту же форму, но имеет коэффициент 2 (игнорируя постоянное смещение y). Вся документация, которую я вижу, говорит, что есть некоторая нормализация, которую fft не делает, но что ifft должен позаботиться об этом. Ниже приведен пример кода ниже - вы можете увидеть, где я привязал коэффициент 2, чтобы дать мне правильный ответ. Спасибо за любую помощь - ее вождение меня гайки.обратный FFT не то же самое, что и исходная функция
import numpy as np
import scipy.fftpack as fftp
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
def fourier_series(x, y, wn, n=None):
# get FFT
myfft = fftp.fft(y, n)
# kill higher freqs above wavenumber wn
myfft[wn:] = 0
# make new series
y2 = fftp.ifft(myfft).real
# find constant y offset
myfft[1:]=0
c = fftp.ifft(myfft)[0]
# remove c, apply factor of 2 and re apply c
y2 = (y2-c)*2 + c
plt.figure(num=None)
plt.plot(x, y, x, y2)
plt.show()
if __name__=='__main__':
x = np.array([float(i) for i in range(0,360)])
y = np.sin(2*np.pi/360*x) + np.sin(2*2*np.pi/360*x) + 5
fourier_series(x, y, 3, 360)
Отлично - вы совершенно правы. Спасибо, парни. Мне нравится, как быстро люди могут реагировать на SO! – nrob
Обязательно отметьте вопрос как ответ, если вы удовлетворены. – M456