У меня есть набор данных (массив), и мне нужно найти периодичность в нем. Как мне поступить? Кто-то сказал, что я могу использовать БПФ, но я не уверен, как это даст мне периодичность. Ваша помощь ценится!
Как найти периодичность в данных?
Ответ 1
Для этой задачи лучше всего использовать автокорреляцию.
БПФ - это инструмент неправильный, который можно использовать для поиска периодичности.
Рассмотрим, например, случай, когда ваша волна формируется путем объединения двух простых синусоидальных волн, один с периодом в 2 секунды (0,5 Гц), а другой с 3 секундами (0,333 Гц). Этот сигнал будет иметь периодичность 6 секунд (т.е. 2 * 3), но спектр Фурье будет показывать только два пика при 5 Гц и 0,333 Гц.
Ответ 2
Периодичность не определена. Например, такие данные:
1, 10, 1, 10, 1, 11, 1, 10, 1, 10, 1, 11, 1, 10, 1, 10, 1, 11
вы можете рассматривать как одно с неточной, но сильной периодичностью 2 и как точную периодичность 6.
Для точной периодичности вы можете просто попытаться найти данные в виде подстроки данных, повторяющихся дважды.
Для точной периодичности реальных, шумных сигналов во временной области и частотной области методы могут быть использованы.
Один временной интервал является самокорреляцией. Это похоже на поиск подстроки выше: поиск значения сдвига, на котором данные имеют максимальную самоочевидность.
Для простых сигналов подсчет пороговых переходов может быть достаточным.
Часто используемые методы домена включают в себя один с использованием FFT/FHT: поиск максимума в спектре fequency, который дает 1/T периодичности.
Другой метод использует Cepstrum.
Ответ 3
Я нашел документ, который объединяет периодограмму на основе БПФ с автокорреляцией, чтобы обеспечить более точную информацию о периодичности сигнала. Я думаю, что этот метод можно было бы рассмотреть:
Об обнаружении периодичности и структурном периодическом сходстве
Ответ 4
В этой новой статье не было большого внимания, спектральная кластеризация
Amariei, C., Tomita, M., and Murray, D. B. (2014). Количественная периодичность в данных omics. Границы в клеточной и биологии развития.
Реализовано в пакете R, доступном по адресу oscillat.iab.keio.ac.jp. Я не связан с авторами, но поставил код в GitHub здесь для облегчения доступа (main script здесь).
Использует DFT и группирует строки в основные спектральные мощности, которые приятно использовать в моем опыте. Очевидно, что для геномики он разработан как надежный (отмечено в коде вычислительно тяжелый), поэтому может зависеть от приложения.
Ответ 5
Вы можете использовать FFT, потому что он преобразует ваш набор данных из пространства значений в частотное пространство.
Это означает, что в итоге вы получите набор частот, которые будут составлять начальный вход, который вы хотите проанализировать. Затем вы можете легко узнать, какие основные факторы, которые генерируются конкретными частотами, и поэтому вы поймете, сколько периодичности существует и которые являются наиболее влиятельными.
смотрите здесь: http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/dft/