2016-03-08 16 views
1

У меня сложная задача решить. В настоящее время я работаю с очень высокочастотными данными временных рядов. Данные были измерены в миллисекундах/микросекундах. Они не равны друг другу.Агрегат/выборка Ультравысокочастотные временные ряды данных в Matlab?

отмечая, что

1 час = 60 минут = 3600 секунды.

1 секунда = 1000 миллисекунд = 1000000 микросекунд

Вот почему я говорю, мои данные были сверхвысокой частоты. Объект временных рядов в Matlab, насколько мне известно, поддерживает только данные второго уровня. Мне действительно нужно преобразовать мои временные ряды, такие как 10 миллисекундных данных или 100 миллисекундных данных.

Это означает, например, если я хочу, чтобы мои временные ряды в 10 миллисекундах, исходные данные имеют только точки данных на 5-м миллисекундах, 6-й миллисекунде и 12 миллисекундах.

Я возьму 6 миллисекунду как самую последнюю точку данных, рассматриваю ее как данные в 10 миллисекундах.

Несколько раз мне нужно суммировать интервал данных, но на данный момент это не очень важно.

я воспроизвожу некоторые данные в следующем:

TimeStamp= 
[66846720;67567616;67567617;67567618;67567619;67567620;67567621;67633152;... 
67633153;67633154;67633155;67633156;67633157;67633158;67633159;67633160;... 
67633161;67633162;482410496;495583232;495583233;807206912;1422721024;... 
1596325888;1766457344]; 
Value = [2094.75;2094.75;2094.75;2094.75;... 
2094.75;2094.75;2094.75;2094.75;2094.75;... 
2094.75 ;2094.75 ;2094.75;2094.75;2094.75;... 
2094.75 ;2094.75 ;2094.75;2094.75;2094.5;... 
2094.75 ;2094.75 ;2094.5 ;2094.5 ;2094.75;2094.5] 

TimeStamp измеряется в миллисекундах и в времени UTC

так, как я делаю это, чтобы создать серию m = 10 миллисекунд, 10,20,30,40 .....

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

Пожалуйста, размещать какие-либо предложения или хороший метод, ваш вид помощь будет хорошо оценили

Другие языки были бы хороши, если бы были существующие пакеты.

+0

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

+0

@SergeiRodionov Я хочу сделать это в Matlab как одна остановка, спасибо. Любая база данных вы порекомендовали? – GeekCat

+0

Нет конкретных рекомендаций для этого варианта использования, но есть список базы данных по wikipedia https://en.wikipedia.org/wiki/Time_series_database. Возможно, вам захочется проверить, какие из них предоставляют клиенту matlab, чтобы упростить интеграцию. –

ответ

1

В R вы можете использовать класс POSIXct для своей метки времени.

В ?DateTimeClasses мы читаем, что

Класс «POSIXct» представляет собой (подпись) количество секунд с начала 1970-х годов (в часовом поясе UTC) в виде числового вектора.

внимание также параметр:

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

И обратите внимание, что значение по умолчанию для значимых цифр 15. Как есть 10 цифр перед десятичной точкой, например, as.numeric(as.POSIXct(Sys.time())), что бы оставить 5 после десятичной точки, или 1e-5 секунд точности , что, вероятно, недостаточно, поэтому, возможно, используйте digits=18 или 20 и т. д. для некоторой подушки.

Чтобы объединить свои наблюдения с точностью до 1e-5 секунды (10 микросекунд) можно затем использовать ?round.POSIXt как в:

round(x, units = "secs", digits=5) 

где x вектор, так что вам не нужен цикл.

+0

Привет, @ C8H10N4O2, что вы упомянули в R превосходно, знаете ли вы аналогичные функции в Matlab? – GeekCat

+0

Извините @GeekCat, но нет, не использовали matlab в течение многих лет после школы – C8H10N4O2

+0

@GeekCat Вы можете использовать функцию posixtime в Matlab, чтобы представлять ваши временные ряды, используя posix. – Buzz

Смежные вопросы