Мне нужно переделать БПФ примера для тренинга, и я застрял в проблеме: у меня успешно получается та же форма, когда я строю ее БПФ, но границы отличаются от примера.
Вот функция, которую я должен построить и сделать БПФ:
Ожидается, что функция имеет частоту среза 2 Гц (0,5 секунды).
(Если вы не поняли: это означает, что при 0,5 секунде (и 2 Гц для БПФ) функция равна 0)
Слева показана функция, относящаяся ко времени, справа - преобразование Фурье.
Это пример. Простая красная линия, это функция, над которой я работаю :
Вот что я получаю:
Как видите, границы моего графика БПФ сильно отличаются от примера. У меня есть коэффициент 10² на графике .
Как вы думаете, проблема в том, как я использую БПФ?
Говорят, что функция нормализована, как вы думаете, разница в этом?
Это код, который я написал:
npas = 32768 # steps for discretization
t = np.linspace(0,200,npas) # time discretized (array of npas elements, from 0 to 200)
f = np.fft.fftfreq(t.size, d=1.0/npas) # frequency (for Fourier Transform) d = sample spacing (inverse of the sampling rate)
swh = np.zeros(npas) # initialization of the array swh (the function we use)
tau0 = 1.0/20
# creation of the function and it's Fourier transform
swh = (1/tau0)*np.exp(-t/tau0)*(1 + t/tau0 + (t**2)/(2*tau0**2) + (t**3)/(3*tau0**3) - 0.490*t**4/tau0**4) - np.exp(-t/tau0)*(1/tau0 + t/tau0**2 + t**2/tau0**3 - 0.490*(4*t**3)/tau0**4)
swh_f = np.fft.fft(swh) # Fourier transform of swh
##### Plot #####
plt.figure(1)
plt.subplot(1,2,1)
plt.title("Time Function")
plt.plot(t, swh, 'r' , linewidth=1, label = "SWH B = 0.490") # plot of swh, function of t
plt.legend(loc = 1, prop={'size': 7}) # legend position
plt.xlim(0,1.5)
plt.subplot(1,2,2)
plt.title("Frequency Function")
plt.plot(f[0:f.size//2], abs(swh_f[0:npas//2]), 'r' , linewidth=1) # plot of the Fourier transform, function of f (frequency)
plt.xscale('log')
plt.yscale('log')
plt.show()
Спасибо за внимание!