Проблема с визуализацией компонентов преобразования Фурье (Python FFT) - PullRequest
2 голосов
/ 14 июня 2019

Я анализирую набор данных временного ряда, который, я уверен, может быть разбит с помощью fft. Я хочу разработать модель для оценки данных с использованием суммы sin / cos, но у меня возникли проблемы с синтаксисом для поиска частот в python

Вот график данных график данных

А вот ссылка на исходные данные: https://drive.google.com/open?id=1mqZtQ-txdd_AFbKGBlbSL6903CK-_kXl

Большинство примеров, которые я видел, имеют несколько выборок в секунду / период времени, однако данные в этом наборе представляют поминутные наблюдения некоторой метрики. Из-за этого у меня были проблемы с переводом ответов онлайн на эту проблему

Вот мой первый наивный подход

X = fftpack.fft(data)
freqs = fftpack.fftfreq(len(data))
plt.plot(freqs, np.abs(X))
plt.show()

Вместо пиков на основных частотах мой график имеет только один пик на 0. результат

1 Ответ

2 голосов
/ 14 июня 2019

БПФ, который вы разместили, был смещен, так что 0 находится в центре. Данные слева от центра представляют отрицательные частоты, а справа - положительные частоты. Если вы увеличите масштаб и посмотрите более внимательно, я думаю, вы увидите, что рядом с центром есть два пика, которые вы интерпретируете как один пик на 0. Просто глядя на положительную сторону, местоположение этого пика скажет вам, какой частота вносит значительный вклад в мощность сигнала.

Как вы сказали, ваша ось x, вероятно, неверна. scipy.fftpack.fftfreq необходимо знать время между выборками (в секундах, я думаю) вашего сигнала во временной области, чтобы правильно определить полосу пропускания и создать массив по оси X в Гц. Это должно сделать это:

dt = 60 # 60 seconds between samples
freqs = fftpack.fftfreq(len(data),dt)
...