Як співвіднести два часові ряди з прогалинами та різними часовими базами?


10

Я поставив це питання на StackOverflow, і рекомендував його задати тут.


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

Я використовую акселерометри - це недорогий GCDC X250-2 . Я запускаю акселерометри з їх найбільшим посиленням, тому дані мають суттєвий рівень шуму.

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

Отже, дані не первозданні і навіть не дуже гарні. Але моя перевірка очного яблука показує, що він чітко містить інформацію, яка мене цікавить. (Я можу розміщувати сюжети, якщо потрібно.)

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

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

Характер даних часових рядів робить число Python numpy.correlate () непридатним. Я також переглянув пакет Z в зоопарку R, але не просунувся. Я шукав допомогу в різних сферах аналізу сигналів, але я не досягнув прогресу.

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

Оновлення 28 лютого 2011 р. Додано сюди кілька сюжетів, на яких відображені приклади даних.


1
@BobC, можливо, хтось із модераторів може перенести вашу публікацію на цей сайт. Це було б найбільш розумно. Що стосується ваших технічних питань, перш за все, ви використовуєте FFT для кореляції? Це має бути можливим для 2 мільйонів точок даних на напівпристойному комп'ютері. Ваше співвідношення сигнал / шум виглядає досить високим, тому вам слід займатися бізнесом. Швидким і брудним скороченням буде заповнення відсутніх даних або останнім доступним зразком, або нулями. Повзання від різниці між інтервалом вибірки може бути найбільш складною "особливістю" ваших даних, з якими потрібно боротися.
кардинал

@cardinal: Я дійсно спробував FFT, тільки щоб отримати сміття в результаті. "Цікаві" функції, які легко видно в даних, не відрізняються від шуму в FFT. Однак я робив FFT лише для всього набору даних: Можливо, FFT, що рухається, забезпечить кращі результати, але я ще не зміг знайти обчислювально ефективний спосіб його реалізації. Я підозрюю, що перетворення Wavelet могло б допомогти, але я з цим незнайомий (але я повільно про це дізнаюся).
BobC

1
@BobC, що я мав на увазі, чи розглядали ви FFT-реалізацію для обчислення кореляції? Пряма згортка - це , але реалізація на основі FFT зменшить цю , зробивши її можливою. Що стосується перегляду самого FFT, то з 2 мільйонами точок даних ваше частотне дозвіл буде дуже високим. Будь-яка повзання вибірки та інші речі зобов’язані вимивати сигнал на частоті. Але ви повинні мати змогу збиратись на багатьох бункерах, щоб вивести сигнал із шуму. Щось на кшталт підходу Велча чи, можливо, спеціальна техніка вікон. O ( n журналу n )O(n2)O(nlogn)
кардинал

@BobC, у верхній частині моєї голови, схоже, якийсь варіант алгоритму перекриття-додавання або перекриття-збереження може бути використаний для створення FFT з розсувним вікном. Ковзання зразків у вікні просто означає зсув фази, тому все, що вам потрібно зробити, - це компенсувати ті зразки, які «опадають» на лівий кінець, і ті, що «заходять» на правий кінець.
кардинал

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

Відповіді:


12

Питання стосується обчислення кореляції між двома нерегулярно вибіреними часовими рядами (одновимірними стохастичними процесами) та використанням цього, щоб знайти зміщення часу там, де вони максимально співвіднесені (їх "різниця фаз").

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

При неправильному відстані відстані між парами місць змінюються: жодна дві відстані не можуть бути однаковими. Геостатистика долає це за допомогою емпіричної варіограми . Це обчислює "типове" (часто середнє або середнє) значення 2/2 - "напівваріантність" - де позначає виміряне значення в точці і відстань між і обмежено лежати в інтервалі, званому "відставанням". Якщо припустити, що процес є нерухомим і має коваріацію, то очікування напівваріантності дорівнює максимальній коваріації (рівній для будь-якого ) мінус коваріації міжг ( р ) р р д Z В(z(p)z(q))2/2z(p)ppqZр Z ( р ) Z ( д )Var(Z(p))pZ(p) і . Це роздрібнення в лаги справляється з проблемою нерегулярного інтервалу.Z(q)

Коли впорядкована пара вимірювань проводиться в кожній точці, можна аналогічно обчислити емпіричну перехресну варіограму між 's та ' і тим самим оцінити коваріантність при будь-якому відставанні . Вам потрібна одновимірна версія крос-варіограми. В R пакети GSTAT і sgeostat , серед іншого, буде оцінювати крос-варіограмм. Не хвилюйтеся, що ваші дані одномірні; якщо програмне забезпечення не буде працювати з ними безпосередньо, просто введіть постійну другу координату: це зробить їх двомірними.z w(z(p),w(p))zw

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

O(nk)O(n2)k


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

ββ

@whuber, @BobC, я здогадуюсь про напівнавчальну здогадку на основі минулого досвіду, що стосується подібних проблем та проблем. Більшість підходів, які я бачив, обчислювально інтенсивні і не справляють враження. Одна спроба може бути через щось на зразок динамічного викривлення часу або те, що Ramsay і Silverman називають реєстрацією кривої кривої . Незрозуміло, чи було б якесь із них можливим для цього набору даних про розміри.
кардинал

Мені знадобиться трохи, щоб обернути мій мозок. Почну з прикладів згаданих вами пакетів R.
BobC

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