Я готов применить преобразование Фурье к данным временного ряда, чтобы преобразовать данные в частотную область. Я не уверен, что метод, который я использовал для применения преобразования Фурье, правильный или нет? Ниже ссылка на данные, которые я использовал.
После прочтения файла данных я построил оригинальные данные, используя
t = np.linspace(0,55*24*60*60, 55)
s = df.values
sns.set_style("darkgrid")
plt.ylabel("Amplitude")
plt.xlabel("Time [s]")
plt.plot(t, s)
plt.show()
Поскольку данные поступают ежедневно, я преобразовал их в секунды, используя 24*60*60
, и в течение 55 дней, используя 55*24*60*60
.
График выглядит следующим образом:
Далее я реализовал преобразование Фурье, используя следующий фрагмент кода, и получил изображение следующим образом:
#Applying Fourier Transform
fft = fftpack.fft(s)
#Time taken by one complete cycle of wave (seconds)
T = t[1] - t[0]
#Calculating sampling frequency
F = 1/T
N = s.size
#Avoid aliasing by multiplying sampling frequency by 1/2
f = np.linspace(0, 0.5*F, N)
#Convert frequency to mHz
f = f * 1000
#Plotting frequency domain against amplitude
sns.set_style("darkgrid")
plt.ylabel("Amplitude")
plt.xlabel("Frequency [mHz]")
plt.plot(f[:N // 2], np.abs(fft)[:N // 2])
plt.show()
У меня есть следующие вопросы:
Я не уверен, верна ли моя приведенная выше методология для реализации преобразования Фурье.
Я не уверен, что метод, который я использую, чтобы избежать псевдонимов, является правильным.
Если то, что я сделал, правильно, чем то, как интерпретировать три пика на графике частотной области.
Наконец, как бы я инвертировал преобразование, используя только значащие частоты.