Как соотнести два временных ряда с пробелами и разными временными базами?


10

Я задал этот вопрос в StackOverflow, и мне было рекомендовано задать его здесь.


У меня есть два временных ряда данных трехмерного акселерометра, которые имеют разные временные базы (часы запускались в разное время, с небольшим ползучестью во время выборки), а также содержат много пробелов разного размера (из-за задержек, связанных с записью в отдельные флеш устройства).

Используемые акселерометры - недорогой GCDC X250-2 . Я использую акселерометры с максимальным усилением, поэтому данные имеют значительный минимальный уровень шума.

Каждый временной ряд имеет около 2 миллионов точек данных (более часа при 512 выборках в секунду) и содержит около 500 интересных событий, где типичное событие охватывает 100–150 выборок (по 200–300 мс каждая). На многие из этих событий влияют сбои данных во время флэш-записи.

Таким образом, данные не являются первозданными и даже не очень красивыми. Но мой осмотр глазного яблока показывает, что он явно содержит информацию, которая мне интересна. (При необходимости я могу публиковать графики).

Акселерометры находятся в схожих средах, но они только умеренно связаны, то есть я могу наглядно определить, какие события соответствуют каждому акселерометру, но я до сих пор не добился успеха в программном обеспечении. Из-за физических ограничений устройства также монтируются в разных ориентациях, где оси не совпадают, но они настолько близки к ортогональным, насколько я мог сделать их. Так, например, для 3-осевых акселерометров A & B, + Ax отображается на -By (вверх-вниз), + Az отображается на -Bx (слева-справа), а + Ay отображается на -Bz (спереди назад) ,

Моя первоначальная цель - сопоставить шоковые события на вертикальной оси, хотя в конечном итоге я хотел бы: а) автоматически обнаружить сопоставление оси, б) сопоставить активность на сопоставленных тузах и в) извлечь различия в поведении между двумя акселерометрами (например, скручивание) или сгибание).

Природа данных временных рядов делает Python numpy.correlate () непригодным для использования. Я также посмотрел на пакет R's Zoo, но не добился успеха. Я обращался за помощью в различные области анализа сигналов, но я не добился прогресса.

У кого-нибудь есть подсказки, что я могу сделать, или подходы, которые я должен исследовать?

Обновление 28 Фев 2011: Добавлены некоторые участки здесь показывают примеры данных.


1
@BobC, возможно, один из модераторов может перенести ваше сообщение на этот сайт. Это было бы самым разумным. Что касается ваших технических вопросов, прежде всего, используете ли вы БПФ для корреляции? Это должно быть возможно для 2 миллионов точек данных на полуприличном компьютере. Ваше отношение сигнал / шум выглядит достаточно высоким, поэтому вы должны быть в бизнесе. Быстрое и грязное сокращение будет заполнять недостающие данные либо последним доступным образцом, либо нулями. Ползучесть различий в интервалах выборки может быть самой сложной «особенностью» ваших данных, с которой приходится иметь дело.
кардинал

@cardinal: Я действительно попробовал FFT, только чтобы получить мусор в результате. «Интересные» особенности, легко видимые в данных, неотличимы от шума в БПФ. Тем не менее, я выполнил БПФ только для всего набора данных: возможно, БПФ с движущимся окном обеспечит лучшие результаты, но я пока не смог найти эффективный в вычислительном отношении способ его реализации. Я подозреваю, что вейвлет-преобразование может помочь, но я не знаком с ним (но постепенно узнаю об этом).
BobC

1
O(n2)O(nlogn)

@BobC, мне кажется, что какой-то вариант алгоритма перекрытия-и-добавления-добавления или перекрытия-и-сохранения можно использовать для выполнения БПФ со скользящим окном. Сдвиг сэмплов в окне равносилен фазовому сдвигу, поэтому все, что вам нужно сделать, это компенсировать те сэмплы, которые «падают» с левого конца, и те, которые «входят» с правого конца.
кардинал

Привет, у меня есть похожий вопрос. У меня есть 2 временных ряда, каждый из которых представлен матрицей, первый столбец которой соответствует значениям, а второй столбец соответствует разнице во времени (начиная с предыдущего значения). Как найти корреляцию между этими 2 матрицами? Я попытался сделать xcorr2 (), но это не кажется правильным, и выполнение xcorr, вероятно, вычислит корреляцию только с учетом значений, но я также хочу учесть время. Я действительно запутался здесь, поможет ли БПФ? Как бы вы посоветовали мне заняться этим?

Ответы:


12

Вопрос касается расчета корреляции между двумя нерегулярно дискретизированными временными рядами (одномерные случайные процессы) и их использования для определения временного сдвига, в котором они максимально коррелированы (их «разность фаз»).

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

(z(p)z(q))2/2z(p)ppqZVar(Z(p))pZ(p)Z(q)

(z(p),w(p))zw

С двумя миллионами очков вы сможете обнаружить небольшие отклонения от стационарности. Вполне возможно, что разность фаз между двумя временными рядами также может изменяться со временем. Чтобы справиться с этим, рассчитайте кросс-вариограмму отдельно для разных окон, разнесенных на протяжении периода времени.

O(nk)O(n2)k


ntn=nttnτn=tn+α+βnαβ

ββ

@whuber, @BobC, я делаю полуобразованное предположение, основанное на прошлом опыте работы с подобными проблемами и проблемами. Большинство подходов, которые я видел, требуют значительных вычислительных ресурсов и не впечатляют. Одной из попыток может быть что-то вроде динамического искажения времени или того, что Рамсей и Сильверман называют регистрацией кривой . Для меня неясно, будет ли возможно что-либо из этого в наборе данных такого размера.
кардинал

Мне понадобится немного времени, чтобы мой мозг обернулся вокруг этого. Я начну с примеров в упомянутых вами R-пакетах.
BobC

@BobC, приблизительная модель, которую я дал для временной асинхронности, близка к той, что у вас есть? Я думаю, что это «случайное начальное смещение» + «линейная ошибка», где последнее связано с небольшой постоянной разницей в интервале выборки между вашими двумя устройствами. Затем возникает некоторая дополнительная небольшая случайная ошибка, скажем, из-за обработки прерываний двух разных UC.
кардинал
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.