Как найти периодичность в данных? - PullRequest
17 голосов
/ 21 ноября 2010

У меня есть набор данных (массив), и мне нужно найти периодичность в нем.Как мне поступить?Кто-то сказал, что я могу использовать БПФ, но я не уверен, как это даст мне периодичность.Ваша помощь приветствуется!

Ответы [ 5 ]

14 голосов
/ 22 ноября 2010

Для этой задачи лучше всего использовать автокорреляцию.

БПФ - это неправильный инструмент, используемый для поиска периодичности.

Рассмотрим, например, случай, когда ваша форма волны создается путем сложения двух простых синусоидальных волн, одна с периодом 2 секунды (0,5 Гц), а другая с 3 секундами (0,333 Гц). Эта форма волны будет иметь периодичность 6 секунд (т.е. 2 * 3), но спектр Фурье будет показывать только два пика при 0,5 Гц и 0,333 Гц.

4 голосов
/ 21 ноября 2010

Периодичность не является четко определенным термином. Например, такие данные:

1, 10, 1, 10, 1, 11, 1, 10, 1, 10, 1, 11, 1, 10, 1, 10, 1, 11

Вы можете рассматривать как единицу с не точной, но сильной периодичностью 2 и точной периодичностью 6.

Для точной периодичности вы можете просто попытаться найти данные в виде подстроки данных, повторенных дважды.

Для неточной периодичности реальных, шумовых сигналов во временной и частотной областях могут использоваться методы.

Временная область 1 - это самокорреляция. Это похоже на поиск по подстроке выше: выполняется поиск значения сдвига, для которого данные имеют максимальное самоподобие.

Для подсчета сигналов простых пороговых переходов может быть достаточно.

Методы области частот включают метод, использующий FFT / FHT: поиск максимума в спектре частот, который дает периодичность 1 / T.

Другой метод использует Cepstrum .

2 голосов
/ 30 апреля 2015

Эта новая статья не получила большого внимания, спектральная кластеризация

Amariei, C., Tomita, M. & Murray, DB (2014). Количественная оценка периодичности в данных омики . Границы в клеточной биологии и биологии развития .

Реализуется в пакете R, доступном по адресу oscillat.iab.keio.ac.jp .Я не связан с авторами, но разместил код на GitHub здесь для более легкого доступа (основной скрипт здесь ).

Использует DFT и группирует строкив основные спектральные силы, приятно использовать в моем опыте.Очевидно, что для геномики он разработан так, чтобы быть надежным (отмечается в коде, что вычислительно тяжелый ), поэтому может зависеть от приложения.

1 голос
/ 11 июня 2013

Я нашел статью, в которой периодограмма на основе БПФ сочетается с автокорреляцией, чтобы предоставить более точную информацию о периодичности сигнала.Я думаю, что этот метод может стоить изучить:

Об обнаружении периодичности и структурном периодическом сходстве

1 голос
/ 21 ноября 2010

Вы можете использовать БПФ, потому что он преобразует ваш набор данных из пространства значений в пространство частот.

Это означает, что у вас в конечном итоге будет набор частот, из которых будет получен начальный вводчто вы хотите проанализировать.Тогда вы можете легко распознать, какие основные вклады генерируются конкретными частотами, и вы поймете, сколько существует периодичностей, а какие наиболее влиятельны ..

посмотрите здесь: http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/dft/

...